w-data-html-minify 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * w-data-html-minify v1.0.4
2
+ * w-data-html-minify v1.0.6
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
6
- !function(Z,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l(require("html-minifier")):"function"==typeof define&&define.amd?define(["html-minifier"],l):(Z="undefined"!=typeof globalThis?globalThis:Z||self)["w-data-html-minify"]=l(Z["html-minifier"])}(this,(function(Z){"use strict";function l(Z){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(Z){return typeof Z}:function(Z){return Z&&"function"==typeof Symbol&&Z.constructor===Symbol&&Z!==Symbol.prototype?"symbol":typeof Z},l(Z)}function b(Z){var b=function(Z,b){if("object"!==l(Z)||null===Z)return Z;var i=Z[Symbol.toPrimitive];if(void 0!==i){var m=i.call(Z,b||"default");if("object"!==l(m))return m;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(Z)}(Z,"string");return"symbol"===l(b)?b:String(b)}function i(Z){return!(!function(Z){return"[object String]"===Object.prototype.toString.call(Z)}(Z)||""===Z)}function m(){return"undefined"!=typeof window&&void 0!==window.document}var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function c(Z){return Z&&Z.__esModule&&Object.prototype.hasOwnProperty.call(Z,"default")?Z.default:Z}function G(Z){if(Z.__esModule)return Z;var l=Z.default;if("function"==typeof l){var b=function Z(){if(this instanceof Z){var b=[null];return b.push.apply(b,arguments),new(Function.bind.apply(l,b))}return l.apply(this,arguments)};b.prototype=l.prototype}else b={};return Object.defineProperty(b,"__esModule",{value:!0}),Object.keys(Z).forEach((function(l){var i=Object.getOwnPropertyDescriptor(Z,l);Object.defineProperty(b,l,i.get?i:{enumerable:!0,get:function(){return Z[l]}})})),b}var X={exports:{}};var W,I={exports:{}},V=G(Object.freeze({__proto__:null,default:{}}));function u(){return W||(W=1,function(Z,l){var b;Z.exports=(b=b||function(Z,l){var b;if("undefined"!=typeof window&&window.crypto&&(b=window.crypto),"undefined"!=typeof self&&self.crypto&&(b=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(b=globalThis.crypto),!b&&"undefined"!=typeof window&&window.msCrypto&&(b=window.msCrypto),!b&&void 0!==d&&d.crypto&&(b=d.crypto),!b)try{b=V}catch(Z){}var i=function(){if(b){if("function"==typeof b.getRandomValues)try{return b.getRandomValues(new Uint32Array(1))[0]}catch(Z){}if("function"==typeof b.randomBytes)try{return b.randomBytes(4).readInt32LE()}catch(Z){}}throw new Error("Native crypto module could not be used to get secure random number.")},m=Object.create||function(){function Z(){}return function(l){var b;return Z.prototype=l,b=new Z,Z.prototype=null,b}}(),c={},G=c.lib={},X=G.Base={extend:function(Z){var l=m(this);return Z&&l.mixIn(Z),l.hasOwnProperty("init")&&this.init!==l.init||(l.init=function(){l.$super.init.apply(this,arguments)}),l.init.prototype=l,l.$super=this,l},create:function(){var Z=this.extend();return Z.init.apply(Z,arguments),Z},init:function(){},mixIn:function(Z){for(var l in Z)Z.hasOwnProperty(l)&&(this[l]=Z[l]);Z.hasOwnProperty("toString")&&(this.toString=Z.toString)},clone:function(){return this.init.prototype.extend(this)}},W=G.WordArray=X.extend({init:function(Z,b){Z=this.words=Z||[],this.sigBytes=b!=l?b:4*Z.length},toString:function(Z){return(Z||u).stringify(this)},concat:function(Z){var l=this.words,b=Z.words,i=this.sigBytes,m=Z.sigBytes;if(this.clamp(),i%4)for(var d=0;d<m;d++){var c=b[d>>>2]>>>24-d%4*8&255;l[i+d>>>2]|=c<<24-(i+d)%4*8}else for(var G=0;G<m;G+=4)l[i+G>>>2]=b[G>>>2];return this.sigBytes+=m,this},clamp:function(){var l=this.words,b=this.sigBytes;l[b>>>2]&=4294967295<<32-b%4*8,l.length=Z.ceil(b/4)},clone:function(){var Z=X.clone.call(this);return Z.words=this.words.slice(0),Z},random:function(Z){for(var l=[],b=0;b<Z;b+=4)l.push(i());return new W.init(l,Z)}}),I=c.enc={},u=I.Hex={stringify:function(Z){for(var l=Z.words,b=Z.sigBytes,i=[],m=0;m<b;m++){var d=l[m>>>2]>>>24-m%4*8&255;i.push((d>>>4).toString(16)),i.push((15&d).toString(16))}return i.join("")},parse:function(Z){for(var l=Z.length,b=[],i=0;i<l;i+=2)b[i>>>3]|=parseInt(Z.substr(i,2),16)<<24-i%8*4;return new W.init(b,l/2)}},L=I.Latin1={stringify:function(Z){for(var l=Z.words,b=Z.sigBytes,i=[],m=0;m<b;m++){var d=l[m>>>2]>>>24-m%4*8&255;i.push(String.fromCharCode(d))}return i.join("")},parse:function(Z){for(var l=Z.length,b=[],i=0;i<l;i++)b[i>>>2]|=(255&Z.charCodeAt(i))<<24-i%4*8;return new W.init(b,l)}},Y=I.Utf8={stringify:function(Z){try{return decodeURIComponent(escape(L.stringify(Z)))}catch(Z){throw new Error("Malformed UTF-8 data")}},parse:function(Z){return L.parse(unescape(encodeURIComponent(Z)))}},p=G.BufferedBlockAlgorithm=X.extend({reset:function(){this._data=new W.init,this._nDataBytes=0},_append:function(Z){"string"==typeof Z&&(Z=Y.parse(Z)),this._data.concat(Z),this._nDataBytes+=Z.sigBytes},_process:function(l){var b,i=this._data,m=i.words,d=i.sigBytes,c=this.blockSize,G=d/(4*c),X=(G=l?Z.ceil(G):Z.max((0|G)-this._minBufferSize,0))*c,I=Z.min(4*X,d);if(X){for(var V=0;V<X;V+=c)this._doProcessBlock(m,V);b=m.splice(0,X),i.sigBytes-=I}return new W.init(b,I)},clone:function(){var Z=X.clone.call(this);return Z._data=this._data.clone(),Z},_minBufferSize:0});G.Hasher=p.extend({cfg:X.extend(),init:function(Z){this.cfg=this.cfg.extend(Z),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(Z){return this._append(Z),this._process(),this},finalize:function(Z){return Z&&this._append(Z),this._doFinalize()},blockSize:16,_createHelper:function(Z){return function(l,b){return new Z.init(b).finalize(l)}},_createHmacHelper:function(Z){return function(l,b){return new x.HMAC.init(Z,b).finalize(l)}}});var x=c.algo={};return c}(Math),b)}(I)),I.exports}!function(Z,l){Z.exports=u().enc.Utf8}(X);var L=c(X.exports),Y={exports:{}};!function(Z,l){var b;Z.exports=(b=u(),function(){var Z=b,l=Z.lib.WordArray;function i(Z,b,i){for(var m=[],d=0,c=0;c<b;c++)if(c%4){var G=i[Z.charCodeAt(c-1)]<<c%4*2|i[Z.charCodeAt(c)]>>>6-c%4*2;m[d>>>2]|=G<<24-d%4*8,d++}return l.create(m,d)}Z.enc.Base64={stringify:function(Z){var l=Z.words,b=Z.sigBytes,i=this._map;Z.clamp();for(var m=[],d=0;d<b;d+=3)for(var c=(l[d>>>2]>>>24-d%4*8&255)<<16|(l[d+1>>>2]>>>24-(d+1)%4*8&255)<<8|l[d+2>>>2]>>>24-(d+2)%4*8&255,G=0;G<4&&d+.75*G<b;G++)m.push(i.charAt(c>>>6*(3-G)&63));var X=i.charAt(64);if(X)for(;m.length%4;)m.push(X);return m.join("")},parse:function(Z){var l=Z.length,b=this._map,m=this._reverseMap;if(!m){m=this._reverseMap=[];for(var d=0;d<b.length;d++)m[b.charCodeAt(d)]=d}var c=b.charAt(64);if(c){var G=Z.indexOf(c);-1!==G&&(l=G)}return i(Z,l,m)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),b.enc.Base64)}(Y);var p=c(Y.exports);function x(Z){let l=!1;if(i(Z))l=!isNaN(Number(Z));else if(function(Z){return"[object Number]"===Object.prototype.toString.call(Z)}(Z)){if(function(Z){return Z!=Z}(Z))return!1;l=!0}return l}function y(Z,l){return b=Z,"[object Object]"===Object.prototype.toString.call(b)&&(!(!i(l)&&!x(l))&&l in Z);var b}let h=function(){if(!m())return null;let Z="undefined"!=typeof self?self:m()?window:"undefined"!=typeof global?global:null;if(y(Z,"html-minifier"))return Z["html-minifier"];let l=Z.document.createElement("script");return l.innerHTML=function(Z){return i(Z)?p.parse(Z).toString(L):""}("CgovKiEKICogSFRNTE1pbmlmaWVyIHY0LjAuMCAoaHR0cHM6Ly9rYW5nYXguZ2l0aHViLmlvL2h0bWwtbWluaWZpZXIvKQogKiBDb3B5cmlnaHQgMjAxMC0yMDE5IEp1cml5ICJrYW5nYXgiIFpheXRzZXYKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwoKcmVxdWlyZT1mdW5jdGlvbiBvKGEscyx1KXtmdW5jdGlvbiBsKHQsZSl7aWYoIXNbdF0pe2lmKCFhW3RdKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZSYmbilyZXR1cm4gbih0LCEwKTtpZihjKXJldHVybiBjKHQsITApO3ZhciByPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyByLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHJ9dmFyIGk9c1t0XT17ZXhwb3J0czp7fX07YVt0XVswXS5jYWxsKGkuZXhwb3J0cyxmdW5jdGlvbihlKXtyZXR1cm4gbChhW3RdWzFdW2VdfHxlKX0saSxpLmV4cG9ydHMsbyxhLHMsdSl9cmV0dXJuIHNbdF0uZXhwb3J0c31mb3IodmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZT0wO2U8dS5sZW5ndGg7ZSsrKWwodVtlXSk7cmV0dXJuIGx9KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIDMqKG4rcikvNC1yfSxuLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWYoZSkscj1uWzBdLGk9blsxXSxvPW5ldyBjKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyoodCtuKS80LW59KDAscixpKSksYT0wLHM9MDxpP3ItNDpyLHU9MDt1PHM7dSs9NCl0PWxbZS5jaGFyQ29kZUF0KHUpXTw8MTh8bFtlLmNoYXJDb2RlQXQodSsxKV08PDEyfGxbZS5jaGFyQ29kZUF0KHUrMildPDw2fGxbZS5jaGFyQ29kZUF0KHUrMyldLG9bYSsrXT10Pj4xNiYyNTUsb1thKytdPXQ+PjgmMjU1LG9bYSsrXT0yNTUmdDsyPT09aSYmKHQ9bFtlLmNoYXJDb2RlQXQodSldPDwyfGxbZS5jaGFyQ29kZUF0KHUrMSldPj40LG9bYSsrXT0yNTUmdCk7MT09PWkmJih0PWxbZS5jaGFyQ29kZUF0KHUpXTw8MTB8bFtlLmNoYXJDb2RlQXQodSsxKV08PDR8bFtlLmNoYXJDb2RlQXQodSsyKV0+PjIsb1thKytdPXQ+PjgmMjU1LG9bYSsrXT0yNTUmdCk7cmV0dXJuIG99LG4uZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lLmxlbmd0aCxyPW4lMyxpPVtdLG89MCxhPW4tcjtvPGE7bys9MTYzODMpaS5wdXNoKHUoZSxvLGE8bysxNjM4Mz9hOm8rMTYzODMpKTsxPT1yPyh0PWVbbi0xXSxpLnB1c2goc1t0Pj4yXStzW3Q8PDQmNjNdKyI9PSIpKToyPT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0saS5wdXNoKHNbdD4+MTBdK3NbdD4+NCY2M10rc1t0PDwyJjYzXSsiPSIpKTtyZXR1cm4gaS5qb2luKCIiKX07Zm9yKHZhciBzPVtdLGw9W10sYz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxyPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixpPTAsbz1yLmxlbmd0aDtpPG87KytpKXNbaV09cltpXSxsW3IuY2hhckNvZGVBdChpKV09aTtmdW5jdGlvbiBmKGUpe3ZhciB0PWUubGVuZ3RoO2lmKDA8dCU0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBuPWUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09biYmKG49dCksW24sbj09PXQ/MDo0LW4lNF19ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHZhciByLGksbz1bXSxhPXQ7YTxuO2ErPTMpcj0oZVthXTw8MTYmMTY3MTE2ODApKyhlW2ErMV08PDgmNjUyODApKygyNTUmZVthKzJdKSxvLnB1c2goc1soaT1yKT4+MTgmNjNdK3NbaT4+MTImNjNdK3NbaT4+NiY2M10rc1s2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9bFsiLSIuY2hhckNvZGVBdCgwKV09NjIsbFsiXyIuY2hhckNvZGVBdCgwKV09NjN9LHt9XSwyOltmdW5jdGlvbihlLHQsbil7fSx7fV0sMzpbZnVuY3Rpb24oZSx0LG4pe2FyZ3VtZW50c1s0XVsyXVswXS5hcHBseShuLGFyZ3VtZW50cyl9LHtkdXA6Mn1dLDQ6W2Z1bmN0aW9uKGUsdCxVKXsoZnVuY3Rpb24oZil7InVzZSBzdHJpY3QiO3ZhciByPWUoImJhc2U2NC1qcyIpLG89ZSgiaWVlZTc1NCIpO1UuQnVmZmVyPWYsVS5TbG93QnVmZmVyPWZ1bmN0aW9uKGUpeytlIT1lJiYoZT0wKTtyZXR1cm4gZi5hbGxvYygrZSl9LFUuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG49MjE0NzQ4MzY0NztmdW5jdGlvbiBhKGUpe2lmKG48ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2UrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiB0Ll9fcHJvdG9fXz1mLnByb3RvdHlwZSx0fWZ1bmN0aW9uIGYoZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSlyZXR1cm4gaShlLHQsbik7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiB1KGUpfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dHx8KHQ9InV0ZjgiKTtpZighZi5pc0VuY29kaW5nKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdCk7dmFyIG49MHxwKGUsdCkscj1hKG4pLGk9ci53cml0ZShlLHQpO2khPT1uJiYocj1yLnNsaWNlKDAsaSkpO3JldHVybiByfShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gbChlKTtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgZSk7aWYoRihlLEFycmF5QnVmZmVyKXx8ZSYmRihlLmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtpZih0PDB8fGUuYnl0ZUxlbmd0aDx0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihlLmJ5dGVMZW5ndGg8dCsobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciByO3I9dm9pZCAwPT09dCYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheShlKTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUsdCk6bmV3IFVpbnQ4QXJyYXkoZSx0LG4pO3JldHVybiByLl9fcHJvdG9fXz1mLnByb3RvdHlwZSxyfShlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciByPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobnVsbCE9ciYmciE9PWUpcmV0dXJuIGYuZnJvbShyLHQsbik7dmFyIGk9ZnVuY3Rpb24oZSl7aWYoZi5pc0J1ZmZlcihlKSl7dmFyIHQ9MHxjKGUubGVuZ3RoKSxuPWEodCk7cmV0dXJuIDA9PT1uLmxlbmd0aHx8ZS5jb3B5KG4sMCwwLHQpLG59aWYodm9pZCAwIT09ZS5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiBlLmxlbmd0aHx8cShlLmxlbmd0aCk/YSgwKTpsKGUpO2lmKCJCdWZmZXIiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpcmV0dXJuIGwoZS5kYXRhKX0oZSk7aWYoaSlyZXR1cm4gaTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBmLmZyb20oZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIGUpfWZ1bmN0aW9uIHMoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcyhlKSxhKGU8MD8wOjB8YyhlKSl9ZnVuY3Rpb24gbChlKXtmb3IodmFyIHQ9ZS5sZW5ndGg8MD8wOjB8YyhlLmxlbmd0aCksbj1hKHQpLHI9MDtyPHQ7cis9MSluW3JdPTI1NSZlW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSl7aWYobjw9ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrbi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gcChlLHQpe2lmKGYuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8RihlLEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7dmFyIG49ZS5sZW5ndGgscj0yPGFyZ3VtZW50cy5sZW5ndGgmJiEwPT09YXJndW1lbnRzWzJdO2lmKCFyJiYwPT09bilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBCKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihlKS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiByPy0xOkIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gaChlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIGQoZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKToyMTQ3NDgzNjQ3PG4/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxxKG49K24pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWYuZnJvbSh0LHIpKSxmLmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6bShlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTptKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBtKGUsdCxuLHIsaSl7dmFyIG8sYT0xLHM9ZS5sZW5ndGgsdT10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoInVjczIiPT09KHI9U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09cnx8InV0ZjE2bGUiPT09cnx8InV0Zi0xNmxlIj09PXIpKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3MvPWE9Mix1Lz0yLG4vPTJ9ZnVuY3Rpb24gbChlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGM9LTE7Zm9yKG89bjtvPHM7bysrKWlmKGwoZSxvKT09PWwodCwtMT09PWM/MDpvLWMpKXtpZigtMT09PWMmJihjPW8pLG8tYysxPT09dSlyZXR1cm4gYyphfWVsc2UtMSE9PWMmJihvLT1vLWMpLGM9LTF9ZWxzZSBmb3IoczxuK3UmJihuPXMtdSksbz1uOzA8PW87by0tKXtmb3IodmFyIGY9ITAscD0wO3A8dTtwKyspaWYobChlLG8rcCkhPT1sKHQscCkpe2Y9ITE7YnJlYWt9aWYoZilyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBnKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj9pPChyPU51bWJlcihyKSkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtvLzI8ciYmKHI9by8yKTtmb3IodmFyIGE9MDthPHI7KythKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKHEocykpcmV0dXJuIGE7ZVtuK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gdihlLHQsbixyKXtyZXR1cm4gTChmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIGIoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP3IuZnJvbUJ5dGVBcnJheShlKTpyLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiB5KGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8sYSxzLHUsbD1lW2ldLGM9bnVsbCxmPTIzOTxsPzQ6MjIzPGw/MzoxOTE8bD8yOjE7aWYoaStmPD1uKXN3aXRjaChmKXtjYXNlIDE6bDwxMjgmJihjPWwpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJjEyNzwodT0oMzEmbCk8PDZ8NjMmbykmJihjPXUpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxhPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmMjA0NzwodT0oMTUmbCk8PDEyfCg2MyZvKTw8Nnw2MyZhKSYmKHU8NTUyOTZ8fDU3MzQzPHUpJiYoYz11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZzKSYmNjU1MzU8KHU9KDE1JmwpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKSYmdTwxMTE0MTEyJiYoYz11KX1udWxsPT09Yz8oYz02NTUzMyxmPTEpOjY1NTM1PGMmJihjLT02NTUzNixyLnB1c2goYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxyLnB1c2goYyksaSs9Zn1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9XylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIG49IiIscj0wO2Zvcig7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9XykpO3JldHVybiBufShyKX1VLmtNYXhMZW5ndGg9biwoZi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKX1jYXRjaChlKXtyZXR1cm4hMX19KCkpfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoZi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnNwZWNpZXMmJmZbU3ltYm9sLnNwZWNpZXNdPT09ZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxmLnBvb2xTaXplPTgxOTIsZi5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaShlLHQsbil9LGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5LGYuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHMoZSksZTw9MD9hKGUpOnZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2EoZSkuZmlsbCh0LG4pOmEoZSkuZmlsbCh0KTphKGUpfShlLHQsbil9LGYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSl9LGYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB1KGUpfSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09Zi5wcm90b3R5cGV9LGYuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKEYoZSxVaW50OEFycmF5KSYmKGU9Zi5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksRih0LFVpbnQ4QXJyYXkpJiYodD1mLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhZi5pc0J1ZmZlcihlKXx8IWYuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsaT0wLG89TWF0aC5taW4obixyKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtuPWVbaV0scj10W2ldO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0sZi5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGYuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3Iobj10PTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9Zi5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZihGKG8sVWludDhBcnJheSkmJihvPWYuZnJvbShvKSksIWYuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxmLmJ5dGVMZW5ndGg9cCxmLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsZi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWgodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCloKHRoaXMsdCx0KzMpLGgodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWgodGhpcyx0LHQrNyksaCh0aGlzLHQrMSx0KzYpLGgodGhpcyx0KzIsdCs1KSxoKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP3kodGhpcywwLGUpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIEEodGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHkodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4geCh0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxmLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIWYuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWYuY29tcGFyZSh0aGlzLGUpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD1VLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBlPXRoaXMudG9TdHJpbmcoImhleCIsMCx0KS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPnQmJihlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2UrIj4ifSxmLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRihlLFVpbnQ4QXJyYXkpJiYoZT1mLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoaTw9ciYmbjw9dClyZXR1cm4gMDtpZihpPD1yKXJldHVybi0xO2lmKG48PXQpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLGE9KG4+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihvLGEpLHU9dGhpcy5zbGljZShyLGkpLGw9ZS5zbGljZSh0LG4pLGM9MDtjPHM7KytjKWlmKHVbY10hPT1sW2NdKXtvPXVbY10sYT1sW2NdO2JyZWFrfXJldHVybiBvPGE/LTE6YTxvPzE6MH0sZi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGQodGhpcyxlLHQsbiwhMCl9LGYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZCh0aGlzLGUsdCxuLCExKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3Q+Pj49MCxpc0Zpbml0ZShuKT8obj4+Pj0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fGk8bikmJihuPWkpLDA8ZS5sZW5ndGgmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG8sYSxzLHUsbCxjLGYscCxoLGQ9ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBnKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHA9dCxoPW4sTChCKGUsKGY9dGhpcykubGVuZ3RoLXApLGYscCxoKTtjYXNlImFzY2lpIjpyZXR1cm4gdih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB2KHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdT10aGlzLGw9dCxjPW4sTChSKGUpLHUsbCxjKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGE9dCxzPW4sTChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKW49ZS5jaGFyQ29kZUF0KGEpLHI9bj4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KGUsKG89dGhpcykubGVuZ3RoLWEpLG8sYSxzKTtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBfPTQwOTY7ZnVuY3Rpb24gdyhlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiByfWZ1bmN0aW9uIEUoZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fHI8bikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1UKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIHgoZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBrKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYobjxlK3QpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBDKGUsdCxuLHIsaSxvKXtpZighZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoaTx0fHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTyhlLHQsbixyLGksbyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFMoZSx0LG4scixpKXtyZXR1cm4gdD0rdCxuPj4+PTAsaXx8TyhlLDAsbiw0KSxvLndyaXRlKGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIEQoZSx0LG4scixpKXtyZXR1cm4gdD0rdCxuPj4+PTAsaXx8TyhlLDAsbiw4KSxvLndyaXRlKGUsdCxuLHIsNTIsOCksbis4fWYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTpuPGUmJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOm48dCYmKHQ9biksdDxlJiYodD1lKTt2YXIgcj10aGlzLnN1YmFycmF5KGUsdCk7cmV0dXJuIHIuX19wcm90b19fPWYucHJvdG90eXBlLHJ9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTswPHQmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxmLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybihpKj0xMjgpPD1yJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LGk9MSxvPXRoaXNbZSstLXJdOzA8ciYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLXJdKmk7cmV0dXJuKGkqPTEyOCk8PW8mJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fGsoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8ayhlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0Pj4+PTAsbj4+Pj0wLHIpfHxDKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0Pj4+PTAsbj4+Pj0wLHIpfHxDKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOzA8PS0taSYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LGYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDEsMjU1LDApLHRoaXNbdF09MjU1JmUsdCsxfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEModGhpcyxlLHQsMiw2NTUzNSwwKSx0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSx0KzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUsdCs0fSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Qyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxhPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvLTFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrbn0sZi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Qyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLGE9MSxzPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTswPD0tLW8mJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K28rMV0mJihzPTEpLHRoaXNbdCtvXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtufSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDEsMTI3LC0xMjgpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEModGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksdGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUsdCsyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0LHQrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSx0KzR9LGYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyxlLHQsITAsbil9LGYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyxlLHQsITEsbil9LGYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEKHRoaXMsZSx0LCEwLG4pfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRCh0aGlzLGUsdCwhMSxuKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZighZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksMDxyJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGk9ci1uO2lmKHRoaXM9PT1lJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4odCxuLHIpO2Vsc2UgaWYodGhpcz09PWUmJm48dCYmdDxyKWZvcih2YXIgbz1pLTE7MDw9bzstLW8pZVtvK3RdPXRoaXNbbytuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLHIpLHQpO3JldHVybiBpfSxmLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIWYuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO2lmKDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1yJiZpPDEyOHx8ImxhdGluMSI9PT1yKSYmKGU9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIGE9Zi5pc0J1ZmZlcihlKT9lOmYuZnJvbShlLHIpLHM9YS5sZW5ndGg7aWYoMD09PXMpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK2UrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1hW28lc119cmV0dXJuIHRoaXN9O3ZhciB0PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gVChlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gQihlLHQpe3ZhciBuO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxpPW51bGwsbz1bXSxhPTA7YTxyOysrYSl7aWYoNTUyOTU8KG49ZS5jaGFyQ29kZUF0KGEpKSYmbjw1NzM0NCl7aWYoIWkpe2lmKDU2MzE5PG4pey0xPCh0LT0zKSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1yKXstMTwodC09MykmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApey0xPCh0LT0zKSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj02NTUzNisoaS01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBpJiYtMTwodC09MykmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gUihlKXtyZXR1cm4gci50b0J5dGVBcnJheShmdW5jdGlvbihlKXtpZigoZT0oZT1lLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKHQsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEwoZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmbnVsbCE9ZS5jb25zdHJ1Y3Rvci5uYW1lJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT10Lm5hbWV9ZnVuY3Rpb24gcShlKXtyZXR1cm4gZSE9ZX19KS5jYWxsKHRoaXMsZSgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjEsYnVmZmVyOjQsaWVlZTc1NDoxMDV9XSw1OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPXsxMDA6IkNvbnRpbnVlIiwxMDE6IlN3aXRjaGluZyBQcm90b2NvbHMiLDEwMjoiUHJvY2Vzc2luZyIsMjAwOiJPSyIsMjAxOiJDcmVhdGVkIiwyMDI6IkFjY2VwdGVkIiwyMDM6Ik5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIiwyMDQ6Ik5vIENvbnRlbnQiLDIwNToiUmVzZXQgQ29udGVudCIsMjA2OiJQYXJ0aWFsIENvbnRlbnQiLDIwNzoiTXVsdGktU3RhdHVzIiwyMDg6IkFscmVhZHkgUmVwb3J0ZWQiLDIyNjoiSU0gVXNlZCIsMzAwOiJNdWx0aXBsZSBDaG9pY2VzIiwzMDE6Ik1vdmVkIFBlcm1hbmVudGx5IiwzMDI6IkZvdW5kIiwzMDM6IlNlZSBPdGhlciIsMzA0OiJOb3QgTW9kaWZpZWQiLDMwNToiVXNlIFByb3h5IiwzMDc6IlRlbXBvcmFyeSBSZWRpcmVjdCIsMzA4OiJQZXJtYW5lbnQgUmVkaXJlY3QiLDQwMDoiQmFkIFJlcXVlc3QiLDQwMToiVW5hdXRob3JpemVkIiw0MDI6IlBheW1lbnQgUmVxdWlyZWQiLDQwMzoiRm9yYmlkZGVuIiw0MDQ6Ik5vdCBGb3VuZCIsNDA1OiJNZXRob2QgTm90IEFsbG93ZWQiLDQwNjoiTm90IEFjY2VwdGFibGUiLDQwNzoiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiLDQwODoiUmVxdWVzdCBUaW1lb3V0Iiw0MDk6IkNvbmZsaWN0Iiw0MTA6IkdvbmUiLDQxMToiTGVuZ3RoIFJlcXVpcmVkIiw0MTI6IlByZWNvbmRpdGlvbiBGYWlsZWQiLDQxMzoiUGF5bG9hZCBUb28gTGFyZ2UiLDQxNDoiVVJJIFRvbyBMb25nIiw0MTU6IlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiLDQxNjoiUmFuZ2UgTm90IFNhdGlzZmlhYmxlIiw0MTc6IkV4cGVjdGF0aW9uIEZhaWxlZCIsNDE4OiJJJ20gYSB0ZWFwb3QiLDQyMToiTWlzZGlyZWN0ZWQgUmVxdWVzdCIsNDIyOiJVbnByb2Nlc3NhYmxlIEVudGl0eSIsNDIzOiJMb2NrZWQiLDQyNDoiRmFpbGVkIERlcGVuZGVuY3kiLDQyNToiVW5vcmRlcmVkIENvbGxlY3Rpb24iLDQyNjoiVXBncmFkZSBSZXF1aXJlZCIsNDI4OiJQcmVjb25kaXRpb24gUmVxdWlyZWQiLDQyOToiVG9vIE1hbnkgUmVxdWVzdHMiLDQzMToiUmVxdWVzdCBIZWFkZXIgRmllbGRzIFRvbyBMYXJnZSIsNDUxOiJVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29ucyIsNTAwOiJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiLDUwMToiTm90IEltcGxlbWVudGVkIiw1MDI6IkJhZCBHYXRld2F5Iiw1MDM6IlNlcnZpY2UgVW5hdmFpbGFibGUiLDUwNDoiR2F0ZXdheSBUaW1lb3V0Iiw1MDU6IkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkIiw1MDY6IlZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzIiw1MDc6Ikluc3VmZmljaWVudCBTdG9yYWdlIiw1MDg6Ikxvb3AgRGV0ZWN0ZWQiLDUwOToiQmFuZHdpZHRoIExpbWl0IEV4Y2VlZGVkIiw1MTA6Ik5vdCBFeHRlbmRlZCIsNTExOiJOZXR3b3JrIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIn19LHt9XSw2OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWUoIi4vbGliL2NsZWFuIil9LHsiLi9saWIvY2xlYW4iOjd9XSw3OltmdW5jdGlvbihlLEUsdCl7KGZ1bmN0aW9uKHMpe3ZhciB1PWUoIi4vb3B0aW1pemVyL2xldmVsLTAvb3B0aW1pemUiKSxsPWUoIi4vb3B0aW1pemVyL2xldmVsLTEvb3B0aW1pemUiKSxjPWUoIi4vb3B0aW1pemVyL2xldmVsLTIvb3B0aW1pemUiKSxmPWUoIi4vb3B0aW1pemVyL3ZhbGlkYXRvciIpLHQ9ZSgiLi9vcHRpb25zL2NvbXBhdGliaWxpdHkiKSxuPWUoIi4vb3B0aW9ucy9mZXRjaCIpLHI9ZSgiLi9vcHRpb25zL2Zvcm1hdCIpLmZvcm1hdEZyb20saT1lKCIuL29wdGlvbnMvaW5saW5lIiksbz1lKCIuL29wdGlvbnMvaW5saW5lLXJlcXVlc3QiKSxhPWUoIi4vb3B0aW9ucy9pbmxpbmUtdGltZW91dCIpLHA9ZSgiLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLGg9ZSgiLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLm9wdGltaXphdGlvbkxldmVsRnJvbSxkPWUoIi4vb3B0aW9ucy9yZWJhc2UiKSxtPWUoIi4vb3B0aW9ucy9yZWJhc2UtdG8iKSxnPWUoIi4vcmVhZGVyL2lucHV0LXNvdXJjZS1tYXAtdHJhY2tlciIpLHY9ZSgiLi9yZWFkZXIvcmVhZC1zb3VyY2VzIiksYj1lKCIuL3dyaXRlci9zaW1wbGUiKSx5PWUoIi4vd3JpdGVyL3NvdXJjZS1tYXBzIiksXz1FLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLm9wdGlvbnM9e2NvbXBhdGliaWxpdHk6dChlLmNvbXBhdGliaWxpdHkpLGZldGNoOm4oZS5mZXRjaCksZm9ybWF0OnIoZS5mb3JtYXQpLGlubGluZTppKGUuaW5saW5lKSxpbmxpbmVSZXF1ZXN0Om8oZS5pbmxpbmVSZXF1ZXN0KSxpbmxpbmVUaW1lb3V0OmEoZS5pbmxpbmVUaW1lb3V0KSxsZXZlbDpoKGUubGV2ZWwpLHJlYmFzZTpkKGUucmViYXNlKSxyZWJhc2VUbzptKGUucmViYXNlVG8pLHJldHVyblByb21pc2U6ISFlLnJldHVyblByb21pc2Usc291cmNlTWFwOiEhZS5zb3VyY2VNYXAsc291cmNlTWFwSW5saW5lU291cmNlczohIWUuc291cmNlTWFwSW5saW5lU291cmNlc319O2Z1bmN0aW9uIHcoZSx0LG4scil7dmFyIGk9ImZ1bmN0aW9uIiE9dHlwZW9mIG4/bjpudWxsLG89ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOm51bGwsYT17c3RhdHM6e2VmZmljaWVuY3k6MCxtaW5pZmllZFNpemU6MCxvcmlnaW5hbFNpemU6MCxzdGFydGVkQXQ6RGF0ZS5ub3coKSx0aW1lU3BlbnQ6MH0sY2FjaGU6e3NwZWNpZmljaXR5Ont9fSxlcnJvcnM6W10saW5saW5lZFN0eWxlc2hlZXRzOltdLGlucHV0U291cmNlTWFwVHJhY2tlcjpnKCksbG9jYWxPbmx5OiFvLG9wdGlvbnM6dCxzb3VyY2U6bnVsbCxzb3VyY2VzQ29udGVudDp7fSx2YWxpZGF0b3I6Zih0LmNvbXBhdGliaWxpdHkpLHdhcm5pbmdzOltdfTtyZXR1cm4gaSYmYS5pbnB1dFNvdXJjZU1hcFRyYWNrZXIudHJhY2sodm9pZCAwLGkpLGZ1bmN0aW9uKGUpe3JldHVybiBlP2Z1bmN0aW9uKGUpe3JldHVybiBlKCl9OnMubmV4dFRpY2t9KGEubG9jYWxPbmx5KShmdW5jdGlvbigpe3JldHVybiB2KGUsYSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnN0YXRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49RGF0ZS5ub3coKS10LnN0YXRzLnN0YXJ0ZWRBdDtyZXR1cm4gZGVsZXRlIHQuc3RhdHMuc3RhcnRlZEF0LHQuc3RhdHMudGltZVNwZW50PW4sdC5zdGF0cy5lZmZpY2llbmN5PTEtZS5sZW5ndGgvdC5zdGF0cy5vcmlnaW5hbFNpemUsdC5zdGF0cy5taW5pZmllZFNpemU9ZS5sZW5ndGgsdC5zdGF0c30oZS5zdHlsZXMsdCksZS5lcnJvcnM9dC5lcnJvcnMsZS5pbmxpbmVkU3R5bGVzaGVldHM9dC5pbmxpbmVkU3R5bGVzaGVldHMsZS53YXJuaW5ncz10Lndhcm5pbmdzLGV9KChhLm9wdGlvbnMuc291cmNlTWFwP3k6YikoZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj11KGUsdCksbj1wLk9uZSBpbiB0Lm9wdGlvbnMubGV2ZWw/bChlLHQpOmUsbj1wLlR3byBpbiB0Lm9wdGlvbnMubGV2ZWw/YyhlLHQsITApOm59KGUsYSksYSksYSk7cmV0dXJuIG8/bygwPGEuZXJyb3JzLmxlbmd0aD9hLmVycm9yczpudWxsLHQpOnR9KX0pfV8ucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQudG87cmV0dXJuIGRlbGV0ZSB0LnRvLG5ldyBfKE9iamVjdC5hc3NpZ24oe3JldHVyblByb21pc2U6ITAscmViYXNlVG86bn0sdCkpLm1pbmlmeShlKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybntjc3M6ZS5zdHlsZXN9fSl9LF8ucHJvdG90eXBlLm1pbmlmeT1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiBpLnJldHVyblByb21pc2U/bmV3IFByb21pc2UoZnVuY3Rpb24obixyKXt3KGUsaSx0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/cihlKTpuKHQpfSl9KTp3KGUsaSx0LG4pfX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpKX0seyIuL29wdGltaXplci9sZXZlbC0wL29wdGltaXplIjo5LCIuL29wdGltaXplci9sZXZlbC0xL29wdGltaXplIjoxMCwiLi9vcHRpbWl6ZXIvbGV2ZWwtMi9vcHRpbWl6ZSI6MjksIi4vb3B0aW1pemVyL3ZhbGlkYXRvciI6NTcsIi4vb3B0aW9ucy9jb21wYXRpYmlsaXR5Ijo1OSwiLi9vcHRpb25zL2ZldGNoIjo2MCwiLi9vcHRpb25zL2Zvcm1hdCI6NjEsIi4vb3B0aW9ucy9pbmxpbmUiOjY0LCIuL29wdGlvbnMvaW5saW5lLXJlcXVlc3QiOjYyLCIuL29wdGlvbnMvaW5saW5lLXRpbWVvdXQiOjYzLCIuL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi9vcHRpb25zL3JlYmFzZSI6NjcsIi4vb3B0aW9ucy9yZWJhc2UtdG8iOjY2LCIuL3JlYWRlci9pbnB1dC1zb3VyY2UtbWFwLXRyYWNrZXIiOjcxLCIuL3JlYWRlci9yZWFkLXNvdXJjZXMiOjc3LCIuL3dyaXRlci9zaW1wbGUiOjk5LCIuL3dyaXRlci9zb3VyY2UtbWFwcyI6MTAwLF9wcm9jZXNzOjExMn1dLDg6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FTVEVSSVNLOiJhc3RlcmlzayIsQkFORzoiYmFuZyIsQkFDS1NMQVNIOiJiYWNrc2xhc2giLFVOREVSU0NPUkU6InVuZGVyc2NvcmUifX0se31dLDk6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL3Nob3J0ZW4taGV4IiksaT1lKCIuL3Nob3J0ZW4taHNsIiksbz1lKCIuL3Nob3J0ZW4tcmdiIiksbT1lKCIuL3NvcnQtc2VsZWN0b3JzIiksZz1lKCIuL3RpZHktcnVsZXMiKSx2PWUoIi4vdGlkeS1ibG9jayIpLGI9ZSgiLi90aWR5LWF0LXJ1bGUiKSwkPWUoIi4uL2hhY2siKSxLPWUoIi4uL3JlbW92ZS11bnVzZWQiKSxHPWUoIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIiksWT1lKCIuLi93cmFwLWZvci1vcHRpbWl6aW5nIikuYWxsLFc9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxRPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLFo9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpLEo9ZSgiLi4vLi4vdXRpbHMvZm9ybWF0LXBvc2l0aW9uIiksYT1lKCIuLi8uLi91dGlscy9zcGxpdCIpLFg9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMsZWU9Imlnbm9yZS1wcm9wZXJ0eSIseT0iQGNoYXJzZXQiLF89bmV3IFJlZ0V4cCgiXiIreSwiaSIpLHc9ZSgiLi4vLi4vb3B0aW9ucy9yb3VuZGluZy1wcmVjaXNpb24iKS5ERUZBVUxULHM9Lyg/Ol58XHN8XCgpKC0/XGQrKXB4Lyx0ZT0vXihcLT9bXGRcLl0rKShtP3MpJC8sdT0vWzAtOWEtZl0vaSxuZT0vXig/OlwtY2hyb21lXC18XC1bXHdcLV0rXHd8XHdbXHdcLV0rXHd8XC1cLVxTKykkLyxFPS9eQGltcG9ydC9pLHJlPS9eKCcuKid8Ii4qIikkLyxpZT0vXlsnIl1bYS16QS1aXVthLXpBLVpcZFwtX10rWyciXSQvLG9lPS9edXJsXCgvaSxhZT0vXi0tXFMrJC87ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGUmJiItIj09ZVsxXVswXSYmcGFyc2VGbG9hdChlWzFdKTwwfWZ1bmN0aW9uIHVlKGUsdCxuKXtyZXR1cm4tMT09PXQuaW5kZXhPZigiIyIpJiYtMT09dC5pbmRleE9mKCJyZ2IiKSYmLTE9PXQuaW5kZXhPZigiaHNsIil8fCh0PXQucmVwbGFjZSgvcmdiXCgoXC0/XGQrKSwoXC0/XGQrKSwoXC0/XGQrKVwpL2csZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG8odCxuLHIpfSkucmVwbGFjZSgvaHNsXCgoLT9cZCspLCgtP1xkKyklPywoLT9cZCspJT9cKS9nLGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBpKHQsbixyKX0pLnJlcGxhY2UoLyhefFtePSciXSkjKFswLTlhLWZdezZ9KS9naSxmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWlbcitlLmxlbmd0aF07cmV0dXJuIG8mJnUudGVzdChvKT9lOm5bMF09PW5bMV0mJm5bMl09PW5bM10mJm5bNF09PW5bNV0/KHQrIiMiK25bMF0rblsyXStuWzRdKS50b0xvd2VyQ2FzZSgpOih0KyIjIituKS50b0xvd2VyQ2FzZSgpfSkucmVwbGFjZSgvKF58W149JyJdKSMoWzAtOWEtZl17M30pL2dpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCsiIyIrbi50b0xvd2VyQ2FzZSgpfSkucmVwbGFjZSgvKHJnYnxyZ2JhfGhzbHxoc2xhKVwoKFteXCldKylcKS9nLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnNwbGl0KCIsIik7cmV0dXJuImhzbCI9PXQmJjM9PXIubGVuZ3RofHwiaHNsYSI9PXQmJjQ9PXIubGVuZ3RofHwicmdiIj09dCYmMz09ci5sZW5ndGgmJjA8bi5pbmRleE9mKCIlIil8fCJyZ2JhIj09dCYmND09ci5sZW5ndGgmJjA8bi5pbmRleE9mKCIlIik/KC0xPT1yWzFdLmluZGV4T2YoIiUiKSYmKHJbMV0rPSIlIiksLTE9PXJbMl0uaW5kZXhPZigiJSIpJiYoclsyXSs9IiUiKSx0KyIoIityLmpvaW4oIiwiKSsiKSIpOmV9KSxuLmNvbG9ycy5vcGFjaXR5JiYtMT09ZS5pbmRleE9mKCJiYWNrZ3JvdW5kIikmJih0PXQucmVwbGFjZSgvKD86cmdiYXxoc2xhKVwoMCwwJT8sMCU/LDBcKS9nLGZ1bmN0aW9uKGUpe3JldHVybi0xPGEodCwiLCIpLnBvcCgpLmluZGV4T2YoImdyYWRpZW50KCIpP2U6InRyYW5zcGFyZW50In0pKSkscih0KX1mdW5jdGlvbiBsZShlLHQsaSl7cmV0dXJuIHMudGVzdCh0KT90LnJlcGxhY2UocyxmdW5jdGlvbihlLHQpe3ZhciBuLHI9cGFyc2VJbnQodCk7cmV0dXJuIDA9PT1yP2U6KGkucHJvcGVydGllcy5zaG9ydGVyTGVuZ3RoVW5pdHMmJmkudW5pdHMucHQmJjMqciU0PT0wJiYobj0zKnIvNCsicHQiKSxpLnByb3BlcnRpZXMuc2hvcnRlckxlbmd0aFVuaXRzJiZpLnVuaXRzLnBjJiZyJTE2PT0wJiYobj1yLzE2KyJwYyIpLGkucHJvcGVydGllcy5zaG9ydGVyTGVuZ3RoVW5pdHMmJmkudW5pdHMuaW4mJnIlOTY9PTAmJihuPXIvOTYrImluIiksbiYmKG49ZS5zdWJzdHJpbmcoMCxlLmluZGV4T2YodCkpK24pLG4mJm4ubGVuZ3RoPGUubGVuZ3RoP246ZSl9KTp0fWZ1bmN0aW9uIGNlKGUsdCx1KXtyZXR1cm4gdS5lbmFibGVkJiYtMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSh1LmRlY2ltYWxQb2ludE1hdGNoZXIsIiQxJDIkMyIpLnJlcGxhY2UodS56ZXJvTWF0Y2hlcixmdW5jdGlvbihlLHQsbixyKXt2YXIgaT11LnVuaXRzW3JdLm11bHRpcGxpZXIsbz1wYXJzZUludCh0KSxhPWlzTmFOKG8pPzA6byxzPXBhcnNlRmxvYXQobik7cmV0dXJuIE1hdGgucm91bmQoKGErcykqaSkvaStyfSk6dH1mdW5jdGlvbiBmZShlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmLHAsaCxkLG0sZyx2LGIseSxfLHcsRSxBLHgsayxDLE8sUyxELFQsQixSLEwsRixxLFUsTSxOPW4ub3B0aW9ucyxQPU4ubGV2ZWxbVy5PbmVdLEk9WSh0LCEwKTtlOmZvcih2YXIgej0wLGo9SS5sZW5ndGg7ejxqO3orKylpZihpPShyPUlbel0pLm5hbWUsbmUudGVzdChpKXx8KHU9ci5hbGxbci5wb3NpdGlvbl0sbi53YXJuaW5ncy5wdXNoKCJJbnZhbGlkIHByb3BlcnR5IG5hbWUgJyIraSsiJyBhdCAiK0oodVsxXVsyXVswXSkrIi4gSWdub3JpbmcuIiksci51bnVzZWQ9ITApLDA9PT1yLnZhbHVlLmxlbmd0aCYmKHU9ci5hbGxbci5wb3NpdGlvbl0sbi53YXJuaW5ncy5wdXNoKCJFbXB0eSBwcm9wZXJ0eSAnIitpKyInIGF0ICIrSih1WzFdWzJdWzBdKSsiLiBJZ25vcmluZy4iKSxyLnVudXNlZD0hMCksci5oYWNrJiYoKHIuaGFja1swXT09JC5BU1RFUklTS3x8ci5oYWNrWzBdPT0kLlVOREVSU0NPUkUpJiYhTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuaWVQcmVmaXhIYWNrfHxyLmhhY2tbMF09PSQuQkFDS1NMQVNIJiYhTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuaWVTdWZmaXhIYWNrfHxyLmhhY2tbMF09PSQuQkFORyYmIU4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLmllQmFuZ0hhY2spJiYoci51bnVzZWQ9ITApLFAucmVtb3ZlTmVnYXRpdmVQYWRkaW5ncyYmMD09PWkuaW5kZXhPZigicGFkZGluZyIpJiYoc2Uoci52YWx1ZVswXSl8fHNlKHIudmFsdWVbMV0pfHxzZShyLnZhbHVlWzJdKXx8c2Uoci52YWx1ZVszXSkpJiYoci51bnVzZWQ9ITApLCFOLmNvbXBhdGliaWxpdHkucHJvcGVydGllcy5pZUZpbHRlcnMmJmhlKHIpJiYoci51bnVzZWQ9ITApLCFyLnVudXNlZClpZihyLmJsb2NrKWZlKGUsci52YWx1ZVswXVsxXSxuKTtlbHNlIGlmKCFhZS50ZXN0KGkpKXtmb3IodmFyIFY9MCxIPXIudmFsdWUubGVuZ3RoO1Y8SDtWKyspe2lmKG89ci52YWx1ZVtWXVswXSxhPXIudmFsdWVbVl1bMV0sTT1hLHM9b2UudGVzdChNKSxvPT1RLlBST1BFUlRZX0JMT0NLKXtyLnVudXNlZD0hMCxuLndhcm5pbmdzLnB1c2goIkludmFsaWQgdmFsdWUgdG9rZW4gYXQgIitKKGFbMF1bMV1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWlmKHMmJiFuLnZhbGlkYXRvci5pc1VybChhKSl7ci51bnVzZWQ9ITAsbi53YXJuaW5ncy5wdXNoKCJCcm9rZW4gVVJMICciK2ErIicgYXQgIitKKHIudmFsdWVbVl1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWlmKHM/KGE9UC5ub3JtYWxpemVVcmxzP2EucmVwbGFjZShvZSwidXJsKCIpLnJlcGxhY2UoL1xcP1xufFxcP1xyXG4vZywiIik6YSxhPU4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLnVybFF1b3Rlcz9hOiEvXnVybFwoWyciXS4rWyciXVwpJC8udGVzdChVPWEpfHwvXnVybFwoWyciXS4qW1wqXHNcKFwpJyJdLipbJyJdXCkkLy50ZXN0KFUpfHwvXnVybFwoWyciXWRhdGE6W147XSs7Y2hhcnNldC8udGVzdChVKT9VOlUucmVwbGFjZSgvWyInXS9nLCIiKSk6KHE9YSxyZS50ZXN0KHEpP2E9UC5yZW1vdmVRdW90ZXM/KEY9YSwiY29udGVudCI9PShMPWkpfHwtMTxMLmluZGV4T2YoImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzIil8fC0xPEwuaW5kZXhPZigiZm9udC1mZWF0dXJlLXNldHRpbmdzIil8fC0xPEwuaW5kZXhPZigiZ3JpZC0iKT9GOmllLnRlc3QoRik/Ri5zdWJzdHJpbmcoMSxGLmxlbmd0aC0xKTpGKTphOihhPWxlKDAsYT1jZSgwLGE9UC5yZW1vdmVXaGl0ZXNwYWNlPyhSPWEsLTE8aS5pbmRleE9mKCJmaWx0ZXIiKXx8LTE9PVIuaW5kZXhPZigiICIpfHwwPT09Ui5pbmRleE9mKCJleHByZXNzaW9uIik/UjotMTxSLmluZGV4T2YoWi5TSU5HTEVfUVVPVEUpfHwtMTxSLmluZGV4T2YoWi5ET1VCTEVfUVVPVEUpP1I6KC0xPChSPVIucmVwbGFjZSgvXHMrL2csIiAiKSkuaW5kZXhPZigiY2FsYyIpJiYoUj1SLnJlcGxhY2UoL1wpID9cLyA/L2csIikvICIpKSxSLnJlcGxhY2UoLyhcKDs/KVxzKy9nLCIkMSIpLnJlcGxhY2UoL1xzKyg7P1wpKS9nLCIkMSIpLnJlcGxhY2UoLywgL2csIiwiKSkpOmEsTi5wcmVjaXNpb24pLE4uY29tcGF0aWJpbGl0eSksYT1QLnJlcGxhY2VUaW1lVW5pdHM/KEI9YSx0ZS50ZXN0KEIpP0IucmVwbGFjZSh0ZSxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIm1zIj09bj9yPXBhcnNlSW50KHQpLzFlMysicyI6InMiPT1uJiYocj0xZTMqcGFyc2VGbG9hdCh0KSsibXMiKSxyLmxlbmd0aDxlLmxlbmd0aD9yOmV9KTpCKTphLGE9UC5yZXBsYWNlWmVyb1VuaXRzPy0xPT0oVD1hKS5pbmRleE9mKCIwIik/VDooLTE8VC5pbmRleE9mKCItIikmJihUPVQucmVwbGFjZSgvKFteXHdcZFwtXXxeKVwtMChbXlwuXXwkKS9nLCIkMTAkMiIpLnJlcGxhY2UoLyhbXlx3XGRcLV18XilcLTAoW15cLl18JCkvZywiJDEwJDIiKSksVC5yZXBsYWNlKC8oXnxccykwKyhbMS05XSkvZywiJDEkMiIpLnJlcGxhY2UoLyhefFxEKVwuMCsoXER8JCkvZywiJDEwJDIiKS5yZXBsYWNlKC8oXnxcRClcLjArKFxEfCQpL2csIiQxMCQyIikucmVwbGFjZSgvXC4oWzEtOV0qKTArKFxEfCQpL2csZnVuY3Rpb24oZSx0LG4pe3JldHVybigwPHQubGVuZ3RoPyIuIjoiIikrdCtufSkucmVwbGFjZSgvKF58XEQpMFwuKFxkKS9nLCIkMS4kMiIpKTphLE4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLnplcm9Vbml0cyYmKGE9LTE9PShEPWEpLmluZGV4T2YoIjBkZWciKT9EOkQucmVwbGFjZSgvXCgwZGVnXCkvZywiKDApIiksQz1pLE89YSxTPU4udW5pdHNSZWdleHAsYT0vXig/OlwtbW96XC1jYWxjfFwtd2Via2l0XC1jYWxjfGNhbGN8cmdifGhzbHxyZ2JhfGhzbGEpXCgvLnRlc3QoTyk/TzoiZmxleCI9PUN8fCItbXMtZmxleCI9PUN8fCItd2Via2l0LWZsZXgiPT1DfHwiZmxleC1iYXNpcyI9PUN8fCItd2Via2l0LWZsZXgtYmFzaXMiPT1DP086MDxPLmluZGV4T2YoIiUiKSYmKCJoZWlnaHQiPT1DfHwibWF4LWhlaWdodCI9PUN8fCJ3aWR0aCI9PUN8fCJtYXgtd2lkdGgiPT1DKT9POk8ucmVwbGFjZShTLCIkMTAkMiIpLnJlcGxhY2UoUywiJDEwJDIiKSksTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuY29sb3JzJiYoYT11ZShpLGEsTi5jb21wYXRpYmlsaXR5KSkpKSx3PWksRT1hLEE9ZSx4PVAudHJhbnNmb3JtLChhPXZvaWQgMD09PShrPXgodyxFLFgoQSkpKT9FOiExPT09az9lZTprKT09PWVlKXtyLnVudXNlZD0hMDtjb250aW51ZSBlfXIudmFsdWVbVl1bMV09YX1QLnJlcGxhY2VNdWx0aXBsZVplcm9zJiYoeT12b2lkIDAsND09KF89KGI9cikudmFsdWUpLmxlbmd0aCYmIjAiPT09X1swXVsxXSYmIjAiPT09X1sxXVsxXSYmIjAiPT09X1syXVsxXSYmIjAiPT09X1szXVsxXSYmKHk9LTE8Yi5uYW1lLmluZGV4T2YoImJveC1zaGFkb3ciKT8yOjEpLHkmJihiLnZhbHVlLnNwbGljZSh5KSxiLmRpcnR5PSEwKSksImJhY2tncm91bmQiPT1pJiZQLm9wdGltaXplQmFja2dyb3VuZD8odj12b2lkIDAsMT09KHY9ci52YWx1ZSkubGVuZ3RoJiYibm9uZSI9PXZbMF1bMV0mJih2WzBdWzFdPSIwIDAiKSwxPT12Lmxlbmd0aCYmInRyYW5zcGFyZW50Ij09dlswXVsxXSYmKHZbMF1bMV09IjAgMCIpKTowPT09aS5pbmRleE9mKCJib3JkZXIiKSYmMDxpLmluZGV4T2YoInJhZGl1cyIpJiZQLm9wdGltaXplQm9yZGVyUmFkaXVzPyhtPXZvaWQgMCwzPT0oZz0oZD1yKS52YWx1ZSkubGVuZ3RoJiYiLyI9PWdbMV1bMV0mJmdbMF1bMV09PWdbMl1bMV0/bT0xOjU9PWcubGVuZ3RoJiYiLyI9PWdbMl1bMV0mJmdbMF1bMV09PWdbM11bMV0mJmdbMV1bMV09PWdbNF1bMV0/bT0yOjc9PWcubGVuZ3RoJiYiLyI9PWdbM11bMV0mJmdbMF1bMV09PWdbNF1bMV0mJmdbMV1bMV09PWdbNV1bMV0mJmdbMl1bMV09PWdbNl1bMV0/bT0zOjk9PWcubGVuZ3RoJiYiLyI9PWdbNF1bMV0mJmdbMF1bMV09PWdbNV1bMV0mJmdbMV1bMV09PWdbNl1bMV0mJmdbMl1bMV09PWdbN11bMV0mJmdbM11bMV09PWdbOF1bMV0mJihtPTQpLG0mJihkLnZhbHVlLnNwbGljZShtKSxkLmRpcnR5PSEwKSk6ImZpbHRlciI9PWkmJlAub3B0aW1pemVGaWx0ZXImJk4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLmllRmlsdGVycz8oMT09KGg9cikudmFsdWUubGVuZ3RoJiYoaC52YWx1ZVswXVsxXT1oLnZhbHVlWzBdWzFdLnJlcGxhY2UoL3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtXC5NaWNyb3NvZnRcLihBbHBoYXxDaHJvbWEpKFxXKS8sZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0LnRvTG93ZXJDYXNlKCkrbn0pKSxoLnZhbHVlWzBdWzFdPWgudmFsdWVbMF1bMV0ucmVwbGFjZSgvLChcUykvZywiLCAkMSIpLnJlcGxhY2UoLyA/PSA/L2csIj0iKSk6ImZvbnQtd2VpZ2h0Ij09aSYmUC5vcHRpbWl6ZUZvbnRXZWlnaHQ/KHA9dm9pZChmPTApLCJub3JtYWwiPT0ocD0oYz1yKS52YWx1ZVtmXVsxXSk/cD0iNDAwIjoiYm9sZCI9PXAmJihwPSI3MDAiKSxjLnZhbHVlW2ZdWzFdPXApOiJvdXRsaW5lIj09aSYmUC5vcHRpbWl6ZU91dGxpbmUmJihsPXZvaWQgMCwxPT0obD1yLnZhbHVlKS5sZW5ndGgmJiJub25lIj09bFswXVsxXSYmKGxbMF1bMV09IjAiKSl9RyhJKSxLKEkpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKShuPWVbcl0pWzBdPT1RLkNPTU1FTlQmJihwZShuLHQpLDA9PT1uWzFdLmxlbmd0aCYmKGUuc3BsaWNlKHIsMSksci0tKSl9KHQsTil9ZnVuY3Rpb24gcGUoZSx0KXtlWzFdWzJdPT1aLkVYQ0xBTUFUSU9OJiYoImFsbCI9PXQubGV2ZWxbVy5PbmVdLnNwZWNpYWxDb21tZW50c3x8dC5jb21tZW50c0tlcHQ8dC5sZXZlbFtXLk9uZV0uc3BlY2lhbENvbW1lbnRzKT90LmNvbW1lbnRzS2VwdCsrOmVbMV09W119ZnVuY3Rpb24gaGUoZSl7dmFyIHQ7cmV0dXJuKCJmaWx0ZXIiPT1lLm5hbWV8fCItbXMtZmlsdGVyIj09ZS5uYW1lKSYmKC0xPCh0PWUudmFsdWVbMF1bMV0pLmluZGV4T2YoInByb2dpZCIpfHwwPT09dC5pbmRleE9mKCJhbHBoYSIpfHwwPT09dC5pbmRleE9mKCJjaHJvbWEiKSl9dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpPW4ub3B0aW9ucyxvPWkubGV2ZWxbVy5PbmVdLGE9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5pZTdIYWNrLHM9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5hZGphY2VudFNwYWNlLHU9aS5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxsPWkuZm9ybWF0LGM9ITEsZj0hMTtpLnVuaXRzUmVnZXhwPWkudW5pdHNSZWdleHB8fGZ1bmN0aW9uKHQpe3ZhciBuPVsicHgiLCJlbSIsImV4IiwiY20iLCJtbSIsImluIiwicHQiLCJwYyIsIiUiXTtyZXR1cm5bImNoIiwicmVtIiwidmgiLCJ2bSIsInZtYXgiLCJ2bWluIiwidnciXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuY29tcGF0aWJpbGl0eS51bml0c1tlXSYmbi5wdXNoKGUpfSksbmV3IFJlZ0V4cCgiKF58XFxzfFxcKHwsKTAoPzoiK24uam9pbigifCIpKyIpKFxcV3wkKSIsImciKX0oaSksaS5wcmVjaXNpb249aS5wcmVjaXNpb258fGZ1bmN0aW9uKGUpe3ZhciB0LG4scj17bWF0Y2hlcjpudWxsLHVuaXRzOnt9fSxpPVtdO2Zvcih0IGluIGUpKG49ZVt0XSkhPXcmJihyLnVuaXRzW3RdPXt9LHIudW5pdHNbdF0udmFsdWU9bixyLnVuaXRzW3RdLm11bHRpcGxpZXI9TWF0aC5wb3coMTAsbiksaS5wdXNoKHQpKTtyZXR1cm4gMDxpLmxlbmd0aCYmKHIuZW5hYmxlZD0hMCxyLmRlY2ltYWxQb2ludE1hdGNoZXI9bmV3IFJlZ0V4cCgiKFxcZClcXC4oJHwiK2kuam9pbigifCIpKyIpKCR8VykiLCJnIiksci56ZXJvTWF0Y2hlcj1uZXcgUmVnRXhwKCIoXFxkKikoXFwuXFxkKykoIitpLmpvaW4oInwiKSsiKSIsImciKSkscn0oby5yb3VuZGluZ1ByZWNpc2lvbiksaS5jb21tZW50c0tlcHQ9aS5jb21tZW50c0tlcHR8fDA7Zm9yKHZhciBwPTAsaD10Lmxlbmd0aDtwPGg7cCsrKXt2YXIgZD10W3BdO3N3aXRjaChkWzBdKXtjYXNlIFEuQVRfUlVMRTpkWzFdPShyPWQsRS50ZXN0KHJbMV0pJiZmPyIiOmRbMV0pLGRbMV09by50aWR5QXRSdWxlcz9iKGRbMV0pOmRbMV0sYz0hMDticmVhaztjYXNlIFEuQVRfUlVMRV9CTE9DSzpmZShkWzFdLGRbMl0sbiksZj0hMDticmVhaztjYXNlIFEuTkVTVEVEX0JMT0NLOmRbMV09by50aWR5QmxvY2tTY29wZXM/dihkWzFdLHUpOmRbMV0sZShkWzJdLG4pLGY9ITA7YnJlYWs7Y2FzZSBRLkNPTU1FTlQ6cGUoZCxpKTticmVhaztjYXNlIFEuUlVMRTpkWzFdPW8udGlkeVNlbGVjdG9ycz9nKGRbMV0sIWEscyxsLG4ud2FybmluZ3MpOmRbMV0sZFsxXT0xPGRbMV0ubGVuZ3RoP20oZFsxXSxvLnNlbGVjdG9yc1NvcnRpbmdNZXRob2QpOmRbMV0sZmUoZFsxXSxkWzJdLG4pLGY9ITB9KGRbMF09PVEuQ09NTUVOVCYmMD09PWRbMV0ubGVuZ3RofHxvLnJlbW92ZUVtcHR5JiYoMD09PWRbMV0ubGVuZ3RofHxkWzJdJiYwPT09ZFsyXS5sZW5ndGgpKSYmKHQuc3BsaWNlKHAsMSkscC0tLGgtLSl9cmV0dXJuIG8uY2xlYW51cENoYXJzZXRzJiZjJiZmdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl7dmFyIGk9ZVtuXTtpWzBdPT1RLkFUX1JVTEUmJl8udGVzdChpWzFdKSYmKHR8fC0xPT1pWzFdLmluZGV4T2YoeSk/KGUuc3BsaWNlKG4sMSksbi0tLHItLSk6KHQ9ITAsZS5zcGxpY2UobiwxKSxlLnVuc2hpZnQoW1EuQVRfUlVMRSxpWzFdLnJlcGxhY2UoXyx5KV0pKSl9fSh0KSx0fX0seyIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCI6NjUsIi4uLy4uL29wdGlvbnMvcm91bmRpbmctcHJlY2lzaW9uIjo2OCwiLi4vLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiI6ODcsIi4uLy4uL3V0aWxzL3NwbGl0Ijo5NiwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vaGFjayI6OCwiLi4vcmVtb3ZlLXVudXNlZCI6NTUsIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4vc2hvcnRlbi1oZXgiOjExLCIuL3Nob3J0ZW4taHNsIjoxMiwiLi9zaG9ydGVuLXJnYiI6MTMsIi4vc29ydC1zZWxlY3RvcnMiOjE0LCIuL3RpZHktYXQtcnVsZSI6MTUsIi4vdGlkeS1ibG9jayI6MTYsIi4vdGlkeS1ydWxlcyI6MTd9XSwxMTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPXthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzBmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmMGYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwZjAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmYwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LGk9e30sbz17fTtmb3IodmFyIGEgaW4gcil7dmFyIHM9clthXTthLmxlbmd0aDxzLmxlbmd0aD9vW3NdPWE6aVthXT1zfXZhciB1PW5ldyBSZWdFeHAoIihefCB8LHxcXCkpKCIrT2JqZWN0LmtleXMoaSkuam9pbigifCIpKyIpKCB8LHxcXCl8JCkiLCJpZyIpLGw9bmV3IFJlZ0V4cCgiKCIrT2JqZWN0LmtleXMobykuam9pbigifCIpKyIpKFteYS1mMC05XXwkKSIsImlnIik7ZnVuY3Rpb24gYyhlLHQsbixyKXtyZXR1cm4gdCtpW24udG9Mb3dlckNhc2UoKV0rcn1mdW5jdGlvbiBmKGUsdCxuKXtyZXR1cm4gb1t0LnRvTG93ZXJDYXNlKCldK259dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PS0xPGUuaW5kZXhPZigiIyIpLG49ZS5yZXBsYWNlKHUsYyk7cmV0dXJuIG4hPWUmJihuPW4ucmVwbGFjZSh1LGMpKSx0P24ucmVwbGFjZShsLGYpOm59fSx7fV0sMTI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiB1KGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksMTxuJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvO2lmKChlJT0zNjApPDAmJihlKz0zNjApLGU9fn5lLzM2MCx0PDA/dD0wOjEwMDx0JiYodD0xMDApLG48MD9uPTA6MTAwPG4mJihuPTEwMCksbj1+fm4vMTAwLDA9PSh0PX5+dC8xMDApKXI9aT1vPW47ZWxzZXt2YXIgYT1uPC41P24qKDErdCk6bit0LW4qdCxzPTIqbi1hO3I9dShzLGEsZSsxLzMpLGk9dShzLGEsZSksbz11KHMsYSxlLTEvMyl9cmV0dXJuW35+KDI1NSpyKSx+figyNTUqaSksfn4oMjU1Km8pXX0oZSx0LG4pLGk9clswXS50b1N0cmluZygxNiksbz1yWzFdLnRvU3RyaW5nKDE2KSxhPXJbMl0udG9TdHJpbmcoMTYpO3JldHVybiIjIisoMT09aS5sZW5ndGg/IjAiOiIiKStpKygxPT1vLmxlbmd0aD8iMCI6IiIpK28rKDE9PWEubGVuZ3RoPyIwIjoiIikrYX19LHt9XSwxMzpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIiMiKygiMDAwMDAiKyhNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLDI1NSkpPDwxNnxNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KHQpLDI1NSkpPDw4fE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQobiksMjU1KSkpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfX0se31dLDE0OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vLi4vdXRpbHMvbmF0dXJhbC1jb21wYXJlIik7ZnVuY3Rpb24gaShlLHQpe3JldHVybiByKGVbMV0sdFsxXSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlWzFdPnRbMV0/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJuYXR1cmFsIjpyZXR1cm4gZS5zb3J0KGkpO2Nhc2Uic3RhbmRhcmQiOnJldHVybiBlLnNvcnQobyk7Y2FzZSJub25lIjpjYXNlITE6cmV0dXJuIGV9fX0seyIuLi8uLi91dGlscy9uYXR1cmFsLWNvbXBhcmUiOjk0fV0sMTU6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXHMrL2csIiAiKS5yZXBsYWNlKC91cmxcKFxzKy9nLCJ1cmwoIikucmVwbGFjZSgvXHMrXCkvZywiKSIpLnRyaW0oKX19LHt9XSwxNjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBpPS9eQG1lZGlhXFcvO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5sZW5ndGgtMTswPD1yO3ItLSluPSF0JiZpLnRlc3QoZVtyXVsxXSksZVtyXVsxXT1lW3JdWzFdLnJlcGxhY2UoL1xufFxyXG4vZywiICIpLnJlcGxhY2UoL1xzKy9nLCIgIikucmVwbGFjZSgvKCx8OnxcKCkgL2csIiQxIikucmVwbGFjZSgvIFwpL2csIikiKS5yZXBsYWNlKC8nKFthLXpBLVpdW2EtekEtWlxkXC1fXSspJy8sIiQxIikucmVwbGFjZSgvIihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIvLCIkMSIpLnJlcGxhY2Uobj8vXCkgL2c6bnVsbCwiKSIpO3JldHVybiBlfX0se31dLDE3OltmdW5jdGlvbihlLHQsbil7dmFyIHc9ZSgiLi4vLi4vb3B0aW9ucy9mb3JtYXQiKS5TcGFjZXMsRT1lKCIuLi8uLi90b2tlbml6ZXIvbWFya2VyIiksaD1lKCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iKSxBPS9bXHMiJ11baUldXHMqXF0vLHg9LyhbXGRcd10pKFtpSV0pXF0vZyxkPS89IihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIoW2lJXSkvZyxtPS89IihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIoXHN8XF0pL2csZz0vXig/Oig/OjwhLS18LS0+KVxzKikrLyx2PS89JyhbYS16QS1aXVthLXpBLVpcZFwtX10rKScoW2lJXSkvZyxiPS89JyhbYS16QS1aXVthLXpBLVpcZFwtX10rKScoXHN8XF0pL2csaz0vWz5cK35dLyxDPS9ccy8scz0iPCI7ZnVuY3Rpb24geShlKXt2YXIgdCxuLHIsaSxvPSExLGE9ITE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2lmKG49ZVtyXSx0KTtlbHNlIGlmKG49PUUuU0lOR0xFX1FVT1RFfHxuPT1FLkRPVUJMRV9RVU9URSlhPSFhO2Vsc2V7aWYoIShhfHxuIT1FLkNMT1NFX0NVUkxZX0JSQUNLRVQmJm4hPUUuRVhDTEFNQVRJT04mJm4hPXMmJm4hPUUuU0VNSUNPTE9OKSl7bz0hMDticmVha31pZighYSYmMD09PXImJmsudGVzdChuKSl7bz0hMDticmVha319dD1uPT1FLkJBQ0tfU0xBU0h9cmV0dXJuIG99ZnVuY3Rpb24gXyhlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGwsYyxmLHAsaCxkLG09W10sZz0wLHY9ITEsYj0hMSx5PUEudGVzdChlKSxfPXQmJnQuc3BhY2VzW3cuQXJvdW5kU2VsZWN0b3JSZWxhdGlvbl07Zm9yKGg9MCxkPWUubGVuZ3RoO2g8ZDtoKyspe2lmKHI9KG49ZVtoXSk9PUUuTkVXX0xJTkVfTklYLGk9bj09RS5ORVdfTElORV9OSVgmJmVbaC0xXT09RS5DQVJSSUFHRV9SRVRVUk4scz11fHxsLGY9IWMmJiFvJiYwPT09ZyYmay50ZXN0KG4pLHA9Qy50ZXN0KG4pLGEmJnMmJmkpbS5wb3AoKSxtLnBvcCgpO2Vsc2UgaWYobyYmcyYmciltLnBvcCgpO2Vsc2UgaWYobyltLnB1c2gobik7ZWxzZSBpZihuIT1FLk9QRU5fU1FVQVJFX0JSQUNLRVR8fHMpaWYobiE9RS5DTE9TRV9TUVVBUkVfQlJBQ0tFVHx8cylpZihuIT1FLk9QRU5fUk9VTkRfQlJBQ0tFVHx8cylpZihuIT1FLkNMT1NFX1JPVU5EX0JSQUNLRVR8fHMpaWYobiE9RS5TSU5HTEVfUVVPVEV8fHMpaWYobiE9RS5ET1VCTEVfUVVPVEV8fHMpaWYobj09RS5TSU5HTEVfUVVPVEUmJnMpbS5wdXNoKG4pLHU9ITE7ZWxzZSBpZihuPT1FLkRPVUJMRV9RVU9URSYmcyltLnB1c2gobiksbD0hMTtlbHNle2lmKHAmJnYmJiFfKWNvbnRpbnVlOyFwJiZ2JiZfPyhtLnB1c2goRS5TUEFDRSksbS5wdXNoKG4pKTpwJiYoY3x8MDxnKSYmIXN8fHAmJmImJiFzfHwoaXx8cikmJihjfHwwPGcpJiZzfHwoZiYmYiYmIV8/KG0ucG9wKCksbS5wdXNoKG4pKTpmJiYhYiYmXz8obS5wdXNoKEUuU1BBQ0UpLG0ucHVzaChuKSk6cD9tLnB1c2goRS5TUEFDRSk6bS5wdXNoKG4pKX1lbHNlIG0ucHVzaChuKSxsPSEwO2Vsc2UgbS5wdXNoKG4pLHU9ITA7ZWxzZSBtLnB1c2gobiksZy0tO2Vsc2UgbS5wdXNoKG4pLGcrKztlbHNlIG0ucHVzaChuKSxjPSExO2Vsc2UgbS5wdXNoKG4pLGM9ITA7YT1vLG89bj09RS5CQUNLX1NMQVNILHY9ZixiPXB9cmV0dXJuIHk/bS5qb2luKCIiKS5yZXBsYWNlKHgsIiQxICQyXSIpOm0uam9pbigiIil9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPVtdO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gaS5wdXNoKCJIVE1MIGNvbW1lbnQgJyIrdCsiJyBhdCAiK2goZVsyXVswXSkrIi4gUmVtb3ZpbmcuIiksIiJ9Zm9yKHZhciBsPTAsYz1lLmxlbmd0aDtsPGM7bCsrKXt2YXIgZj1lW2xdLHA9ZlsxXTt5KHA9cC5yZXBsYWNlKGcsdS5iaW5kKG51bGwsZikpKT9pLnB1c2goIkludmFsaWQgc2VsZWN0b3IgJyIrZlsxXSsiJyBhdCAiK2goZlsyXVswXSkrIi4gSWdub3JpbmcuIik6KHA9XyhwLHIpLHA9LTE9PShvPXApLmluZGV4T2YoIiciKSYmLTE9PW8uaW5kZXhPZignIicpP286by5yZXBsYWNlKHYsIj0kMSAkMiIpLnJlcGxhY2UoYiwiPSQxJDIiKS5yZXBsYWNlKGQsIj0kMSAkMiIpLnJlcGxhY2UobSwiPSQxJDIiKSxuJiYwPHAuaW5kZXhPZigibmF2IikmJihwPXAucmVwbGFjZSgvXCtuYXYoXFN8JCkvLCIrIG5hdiQxIikpLHQmJi0xPHAuaW5kZXhPZigiKitodG1sICIpfHx0JiYtMTxwLmluZGV4T2YoIio6Zmlyc3QtY2hpbGQraHRtbCAiKXx8KC0xPHAuaW5kZXhPZigiKiIpJiYocD1wLnJlcGxhY2UoL1wqKFs6I1wuXFtdKS9nLCIkMSIpLnJlcGxhY2UoL14oXDpmaXJzdFwtY2hpbGQpP1wraHRtbC8sIiokMStodG1sIikpLC0xPHMuaW5kZXhPZihwKXx8KGZbMV09cCxzLnB1c2gocCksYS5wdXNoKGYpKSkpfXJldHVybiAxPT1hLmxlbmd0aCYmMD09PWFbMF1bMV0ubGVuZ3RoJiYoaS5wdXNoKCJFbXB0eSBzZWxlY3RvciAnIithWzBdWzFdKyInIGF0ICIraChhWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKSxhPVtdKSxhfX0seyIuLi8uLi9vcHRpb25zL2Zvcm1hdCI6NjEsIi4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3fV0sMTg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgeD1lKCIuL2ludmFsaWQtcHJvcGVydHktZXJyb3IiKSxzPWUoIi4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUsbT1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSxBPWUoIi4uLy4uL3Rva2VuaXplci9tYXJrZXIiKSxrPWUoIi4uLy4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiIpO2Z1bmN0aW9uIEMoZSl7dmFyIHQsbjtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZigiaW5oZXJpdCI9PWVbdF1bMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTyhlLHQsbil7dmFyIHI9bltlXTtyZXR1cm4gci5kb3VibGVWYWx1ZXMmJjI9PXIuZGVmYXVsdFZhbHVlLmxlbmd0aD9zKFttLlBST1BFUlRZLFttLlBST1BFUlRZX05BTUUsZV0sW20uUFJPUEVSVFlfVkFMVUUsci5kZWZhdWx0VmFsdWVbMF1dLFttLlBST1BFUlRZX1ZBTFVFLHIuZGVmYXVsdFZhbHVlWzFdXV0pOnIuZG91YmxlVmFsdWVzJiYxPT1yLmRlZmF1bHRWYWx1ZS5sZW5ndGg/cyhbbS5QUk9QRVJUWSxbbS5QUk9QRVJUWV9OQU1FLGVdLFttLlBST1BFUlRZX1ZBTFVFLHIuZGVmYXVsdFZhbHVlWzBdXV0pOnMoW20uUFJPUEVSVFksW20uUFJPUEVSVFlfTkFNRSxlXSxbbS5QUk9QRVJUWV9WQUxVRSxyLmRlZmF1bHRWYWx1ZV1dKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49dFtlLm5hbWVdLmNvbXBvbmVudHMscj1bXSxpPWUudmFsdWU7aWYoaS5sZW5ndGg8MSlyZXR1cm5bXTtpLmxlbmd0aDwyJiYoaVsxXT1pWzBdLnNsaWNlKDApKSxpLmxlbmd0aDwzJiYoaVsyXT1pWzBdLnNsaWNlKDApKSxpLmxlbmd0aDw0JiYoaVszXT1pWzFdLnNsaWNlKDApKTtmb3IodmFyIG89bi5sZW5ndGgtMTswPD1vO28tLSl7dmFyIGE9cyhbbS5QUk9QRVJUWSxbbS5QUk9QRVJUWV9OQU1FLG5bb11dXSk7YS52YWx1ZT1baVtvXV0sci51bnNoaWZ0KGEpfXJldHVybiByfWZ1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgcixpLG8sYT10W2UubmFtZV0scz1bTyhhLmNvbXBvbmVudHNbMF0sMCx0KSxPKGEuY29tcG9uZW50c1sxXSwwLHQpLE8oYS5jb21wb25lbnRzWzJdLDAsdCldLHU9MDt1PDM7dSsrKXt2YXIgbD1zW3VdOzA8bC5uYW1lLmluZGV4T2YoImNvbG9yIik/cj1sOjA8bC5uYW1lLmluZGV4T2YoInN0eWxlIik/aT1sOm89bH1pZigxPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdfHwzPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdJiYiaW5oZXJpdCI9PWUudmFsdWVbMV1bMV0mJiJpbmhlcml0Ij09ZS52YWx1ZVsyXVsxXSlyZXR1cm4gci52YWx1ZT1pLnZhbHVlPW8udmFsdWU9W2UudmFsdWVbMF1dLHM7dmFyIGMsZixwPWUudmFsdWUuc2xpY2UoMCk7cmV0dXJuIDA8cC5sZW5ndGgmJihjPTE8KGY9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbmhlcml0IiE9ZVsxXSYmKHQuaXNXaWR0aChlWzFdKXx8dC5pc1VuaXQoZVsxXSkmJiF0LmlzRHluYW1pY1VuaXQoZVsxXSkpJiYhdC5pc1N0eWxlS2V5d29yZChlWzFdKSYmIXQuaXNDb2xvckZ1bmN0aW9uKGVbMV0pfX0obikpKS5sZW5ndGgmJigibm9uZSI9PWZbMF1bMV18fCJhdXRvIj09ZlswXVsxXSk/ZlsxXTpmWzBdKSYmKG8udmFsdWU9W2NdLHAuc3BsaWNlKHAuaW5kZXhPZihjKSwxKSksMDxwLmxlbmd0aCYmKGM9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbmhlcml0IiE9ZVsxXSYmdC5pc1N0eWxlS2V5d29yZChlWzFdKSYmIXQuaXNDb2xvckZ1bmN0aW9uKGVbMV0pfX0obikpWzBdKSYmKGkudmFsdWU9W2NdLHAuc3BsaWNlKHAuaW5kZXhPZihjKSwxKSksMDxwLmxlbmd0aCYmKGM9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnZlcnQiPT1lWzFdfHx0LmlzQ29sb3IoZVsxXSl8fHQuaXNQcmVmaXhlZChlWzFdKX19KG4pKVswXSkmJihyLnZhbHVlPVtjXSxwLnNwbGljZShwLmluZGV4T2YoYyksMSkpLHN9dC5leHBvcnRzPXthbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPU8oZS5uYW1lKyItZHVyYXRpb24iLDAsdCkscz1PKGUubmFtZSsiLXRpbWluZy1mdW5jdGlvbiIsMCx0KSx1PU8oZS5uYW1lKyItZGVsYXkiLDAsdCksbD1PKGUubmFtZSsiLWl0ZXJhdGlvbi1jb3VudCIsMCx0KSxjPU8oZS5uYW1lKyItZGlyZWN0aW9uIiwwLHQpLGY9TyhlLm5hbWUrIi1maWxsLW1vZGUiLDAsdCkscD1PKGUubmFtZSsiLXBsYXktc3RhdGUiLDAsdCksaD1PKGUubmFtZSsiLW5hbWUiLDAsdCksZD1bYSxzLHUsbCxjLGYscCxoXSxtPWUudmFsdWUsZz0hMSx2PSExLGI9ITEseT0hMSxfPSExLHc9ITEsRT0hMSxBPSExO2lmKDE9PWUudmFsdWUubGVuZ3RoJiYiaW5oZXJpdCI9PWUudmFsdWVbMF1bMV0pcmV0dXJuIGEudmFsdWU9cy52YWx1ZT11LnZhbHVlPWwudmFsdWU9Yy52YWx1ZT1mLnZhbHVlPXAudmFsdWU9aC52YWx1ZT1lLnZhbHVlLGQ7aWYoMTxtLmxlbmd0aCYmQyhtKSl0aHJvdyBuZXcgeCgiSW52YWxpZCBhbmltYXRpb24gdmFsdWVzIGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoaT0wLG89bS5sZW5ndGg7aTxvO2krKylpZihyPW1baV0sbi5pc1RpbWUoclsxXSkmJiFnKWEudmFsdWU9W3JdLGc9ITA7ZWxzZSBpZihuLmlzVGltZShyWzFdKSYmIWIpdS52YWx1ZT1bcl0sYj0hMDtlbHNlIGlmKCFuLmlzR2xvYmFsKHJbMV0pJiYhbi5pc1RpbWluZ0Z1bmN0aW9uKHJbMV0pfHx2KWlmKCFuLmlzQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRLZXl3b3JkKHJbMV0pJiYhbi5pc1Bvc2l0aXZlTnVtYmVyKHJbMV0pfHx5KWlmKG4uaXNBbmltYXRpb25EaXJlY3Rpb25LZXl3b3JkKHJbMV0pJiYhXyljLnZhbHVlPVtyXSxfPSEwO2Vsc2UgaWYobi5pc0FuaW1hdGlvbkZpbGxNb2RlS2V5d29yZChyWzFdKSYmIXcpZi52YWx1ZT1bcl0sdz0hMDtlbHNlIGlmKG4uaXNBbmltYXRpb25QbGF5U3RhdGVLZXl3b3JkKHJbMV0pJiYhRSlwLnZhbHVlPVtyXSxFPSEwO2Vsc2V7aWYoIW4uaXNBbmltYXRpb25OYW1lS2V5d29yZChyWzFdKSYmIW4uaXNJZGVudGlmaWVyKHJbMV0pfHxBKXRocm93IG5ldyB4KCJJbnZhbGlkIGFuaW1hdGlvbiB2YWx1ZSBhdCAiK2soclsyXVswXSkrIi4gSWdub3JpbmcuIik7aC52YWx1ZT1bcl0sQT0hMH1lbHNlIGwudmFsdWU9W3JdLHk9ITA7ZWxzZSBzLnZhbHVlPVtyXSx2PSEwO3JldHVybiBkfSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PKCJiYWNrZ3JvdW5kLWltYWdlIiwwLHQpLGk9TygiYmFja2dyb3VuZC1wb3NpdGlvbiIsMCx0KSxvPU8oImJhY2tncm91bmQtc2l6ZSIsMCx0KSxhPU8oImJhY2tncm91bmQtcmVwZWF0IiwwLHQpLHM9TygiYmFja2dyb3VuZC1hdHRhY2htZW50IiwwLHQpLHU9TygiYmFja2dyb3VuZC1vcmlnaW4iLDAsdCksbD1PKCJiYWNrZ3JvdW5kLWNsaXAiLDAsdCksYz1PKCJiYWNrZ3JvdW5kLWNvbG9yIiwwLHQpLGY9W3IsaSxvLGEscyx1LGwsY10scD1lLnZhbHVlLGg9ITEsZD0hMSxtPSExLGc9ITEsdj0hMTtpZigxPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdKXJldHVybiBjLnZhbHVlPXIudmFsdWU9YS52YWx1ZT1pLnZhbHVlPW8udmFsdWU9dS52YWx1ZT1sLnZhbHVlPWUudmFsdWUsZjtpZigxPT1lLnZhbHVlLmxlbmd0aCYmIjAgMCI9PWUudmFsdWVbMF1bMV0pcmV0dXJuIGY7Zm9yKHZhciBiPXAubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciB5PXBbYl07aWYobi5pc0JhY2tncm91bmRBdHRhY2htZW50S2V5d29yZCh5WzFdKSlzLnZhbHVlPVt5XSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRDbGlwS2V5d29yZCh5WzFdKXx8bi5pc0JhY2tncm91bmRPcmlnaW5LZXl3b3JkKHlbMV0pKWQ/KHUudmFsdWU9W3ldLG09ITApOihsLnZhbHVlPVt5XSxkPSEwKSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRSZXBlYXRLZXl3b3JkKHlbMV0pKWc/YS52YWx1ZS51bnNoaWZ0KHkpOihhLnZhbHVlPVt5XSxnPSEwKSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRQb3NpdGlvbktleXdvcmQoeVsxXSl8fG4uaXNCYWNrZ3JvdW5kU2l6ZUtleXdvcmQoeVsxXSl8fG4uaXNVbml0KHlbMV0pfHxuLmlzRHluYW1pY1VuaXQoeVsxXSkpe2lmKDA8Yil7dmFyIF89cFtiLTFdO19bMV09PUEuRk9SV0FSRF9TTEFTSD9vLnZhbHVlPVt5XToxPGImJnBbYi0yXVsxXT09QS5GT1JXQVJEX1NMQVNIPyhvLnZhbHVlPVtfLHldLGItPTIpOihofHwoaS52YWx1ZT1bXSksaS52YWx1ZS51bnNoaWZ0KHkpLGg9ITApfWVsc2UgaHx8KGkudmFsdWU9W10pLGkudmFsdWUudW5zaGlmdCh5KSxoPSEwO3Y9ITB9ZWxzZSBjLnZhbHVlWzBdWzFdIT10W2MubmFtZV0uZGVmYXVsdFZhbHVlJiYibm9uZSIhPWMudmFsdWVbMF1bMV18fCFuLmlzQ29sb3IoeVsxXSkmJiFuLmlzUHJlZml4ZWQoeVsxXSk/KG4uaXNVcmwoeVsxXSl8fG4uaXNGdW5jdGlvbih5WzFdKSkmJihyLnZhbHVlPVt5XSx2PSEwKTooYy52YWx1ZT1beV0sdj0hMCl9aWYoZCYmIW0mJih1LnZhbHVlPWwudmFsdWUuc2xpY2UoMCkpLCF2KXRocm93IG5ldyB4KCJJbnZhbGlkIGJhY2tncm91bmQgdmFsdWUgYXQgIitrKHBbMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3JldHVybiBmfSxib3JkZXI6cixib3JkZXJSYWRpdXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS52YWx1ZSxyPS0xLGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspaWYobltpXVsxXT09QS5GT1JXQVJEX1NMQVNIKXtyPWk7YnJlYWt9aWYoMD09PXJ8fHI9PT1uLmxlbmd0aC0xKXRocm93IG5ldyB4KCJJbnZhbGlkIGJvcmRlci1yYWRpdXMgdmFsdWUgYXQgIitrKG5bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3ZhciBhPU8oZS5uYW1lLDAsdCk7YS52YWx1ZT0tMTxyP24uc2xpY2UoMCxyKTpuLnNsaWNlKDApLGEuY29tcG9uZW50cz1sKGEsdCk7dmFyIHM9TyhlLm5hbWUsMCx0KTtzLnZhbHVlPS0xPHI/bi5zbGljZShyKzEpOm4uc2xpY2UoMCkscy5jb21wb25lbnRzPWwocyx0KTtmb3IodmFyIHU9MDt1PDQ7dSsrKWEuY29tcG9uZW50c1t1XS5tdWx0aXBsZXg9ITAsYS5jb21wb25lbnRzW3VdLnZhbHVlPWEuY29tcG9uZW50c1t1XS52YWx1ZS5jb25jYXQocy5jb21wb25lbnRzW3VdLnZhbHVlKTtyZXR1cm4gYS5jb21wb25lbnRzfSxmb250OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPU8oImZvbnQtc3R5bGUiLDAsdCksdT1PKCJmb250LXZhcmlhbnQiLDAsdCksbD1PKCJmb250LXdlaWdodCIsMCx0KSxjPU8oImZvbnQtc3RyZXRjaCIsMCx0KSxmPU8oImZvbnQtc2l6ZSIsMCx0KSxwPU8oImxpbmUtaGVpZ2h0IiwwLHQpLGg9TygiZm9udC1mYW1pbHkiLDAsdCksZD1bcyx1LGwsYyxmLHAsaF0sbT1lLnZhbHVlLGc9MCx2PSExLGI9ITEseT0hMSxfPSExLHc9ITEsRT0hMTtpZighbVtnXSl0aHJvdyBuZXcgeCgiTWlzc2luZyBmb250IHZhbHVlcyBhdCAiK2soZS5hbGxbZS5wb3NpdGlvbl1bMV1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2lmKDE9PW0ubGVuZ3RoJiYiaW5oZXJpdCI9PW1bMF1bMV0pcmV0dXJuIHMudmFsdWU9dS52YWx1ZT1sLnZhbHVlPWMudmFsdWU9Zi52YWx1ZT1wLnZhbHVlPWgudmFsdWU9bSxkO2lmKDE9PW0ubGVuZ3RoJiYobi5pc0ZvbnRLZXl3b3JkKG1bMF1bMV0pfHxuLmlzR2xvYmFsKG1bMF1bMV0pfHxuLmlzUHJlZml4ZWQobVswXVsxXSkpKXJldHVybiBtWzBdWzFdPUEuSU5URVJOQUwrbVswXVsxXSxzLnZhbHVlPXUudmFsdWU9bC52YWx1ZT1jLnZhbHVlPWYudmFsdWU9cC52YWx1ZT1oLnZhbHVlPW0sZDtpZihtLmxlbmd0aDwyfHwhZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspaWYobj1lW3JdLHQuaXNGb250U2l6ZUtleXdvcmQoblsxXSl8fHQuaXNVbml0KG5bMV0pJiYhdC5pc0R5bmFtaWNVbml0KG5bMV0pfHx0LmlzRnVuY3Rpb24oblsxXSkpcmV0dXJuITA7cmV0dXJuITF9KG0sbil8fCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylpZihuPWVbcl0sdC5pc0lkZW50aWZpZXIoblsxXSkpcmV0dXJuITA7cmV0dXJuITF9KG0sbikpdGhyb3cgbmV3IHgoIkludmFsaWQgZm9udCB2YWx1ZXMgYXQgIitrKGUuYWxsW2UucG9zaXRpb25dWzFdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtpZigxPG0ubGVuZ3RoJiZDKG0pKXRocm93IG5ldyB4KCJJbnZhbGlkIGZvbnQgdmFsdWVzIGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoO2c8NDspe2lmKHI9bi5pc0ZvbnRTdHJldGNoS2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxpPW4uaXNGb250U3R5bGVLZXl3b3JkKG1bZ11bMV0pfHxuLmlzR2xvYmFsKG1bZ11bMV0pLG89bi5pc0ZvbnRWYXJpYW50S2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxhPW4uaXNGb250V2VpZ2h0S2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxpJiYhYilzLnZhbHVlPVttW2ddXSxiPSEwO2Vsc2UgaWYobyYmIXkpdS52YWx1ZT1bbVtnXV0seT0hMDtlbHNlIGlmKGEmJiFfKWwudmFsdWU9W21bZ11dLF89ITA7ZWxzZXtpZighcnx8dil7aWYoaSYmYnx8byYmeXx8YSYmX3x8ciYmdil0aHJvdyBuZXcgeCgiSW52YWxpZCBmb250IHN0eWxlIC8gdmFyaWFudCAvIHdlaWdodCAvIHN0cmV0Y2ggdmFsdWUgYXQgIitrKG1bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWMudmFsdWU9W21bZ11dLHY9ITB9ZysrfWlmKCEobi5pc0ZvbnRTaXplS2V5d29yZChtW2ddWzFdKXx8bi5pc1VuaXQobVtnXVsxXSkmJiFuLmlzRHluYW1pY1VuaXQobVtnXVsxXSkpKXRocm93IG5ldyB4KCJNaXNzaW5nIGZvbnQgc2l6ZSBhdCAiK2sobVswXVsyXVswXSkrIi4gSWdub3JpbmcuIik7aWYoZi52YWx1ZT1bbVtnXV0sdz0hMCwhbVsrK2ddKXRocm93IG5ldyB4KCJNaXNzaW5nIGZvbnQgZmFtaWx5IGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IodyYmbVtnXSYmbVtnXVsxXT09QS5GT1JXQVJEX1NMQVNIJiZtW2crMV0mJihuLmlzTGluZUhlaWdodEtleXdvcmQobVtnKzFdWzFdKXx8bi5pc1VuaXQobVtnKzFdWzFdKXx8bi5pc051bWJlcihtW2crMV1bMV0pKSYmKHAudmFsdWU9W21bZysxXV0sZysrLGcrKyksaC52YWx1ZT1bXTttW2ddOylFPW1bZ11bMV0hPUEuQ09NTUEmJihFP2gudmFsdWVbaC52YWx1ZS5sZW5ndGgtMV1bMV0rPUEuU1BBQ0UrbVtnXVsxXTpoLnZhbHVlLnB1c2gobVtnXSksITApLGcrKztpZigwPT09aC52YWx1ZS5sZW5ndGgpdGhyb3cgbmV3IHgoIk1pc3NpbmcgZm9udCBmYW1pbHkgYXQgIitrKG1bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3JldHVybiBkfSxmb3VyVmFsdWVzOmwsbGlzdFN0eWxlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PKCJsaXN0LXN0eWxlLXR5cGUiLDAsdCksaT1PKCJsaXN0LXN0eWxlLXBvc2l0aW9uIiwwLHQpLG89TygibGlzdC1zdHlsZS1pbWFnZSIsMCx0KSxhPVtyLGksb107aWYoMT09ZS52YWx1ZS5sZW5ndGgmJiJpbmhlcml0Ij09ZS52YWx1ZVswXVsxXSlyZXR1cm4gci52YWx1ZT1pLnZhbHVlPW8udmFsdWU9W2UudmFsdWVbMF1dLGE7dmFyIHM9ZS52YWx1ZS5zbGljZSgwKSx1PXMubGVuZ3RoLGw9MDtmb3IobD0wLHU9cy5sZW5ndGg7bDx1O2wrKylpZihuLmlzVXJsKHNbbF1bMV0pfHwiMCI9PXNbbF1bMV0pe28udmFsdWU9W3NbbF1dLHMuc3BsaWNlKGwsMSk7YnJlYWt9Zm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKyspaWYobi5pc0xpc3RTdHlsZVBvc2l0aW9uS2V5d29yZChzW2xdWzFdKSl7aS52YWx1ZT1bc1tsXV0scy5zcGxpY2UobCwxKTticmVha31yZXR1cm4gMDxzLmxlbmd0aCYmKG4uaXNMaXN0U3R5bGVUeXBlS2V5d29yZChzWzBdWzFdKXx8bi5pc0lkZW50aWZpZXIoc1swXVsxXSkpJiYoci52YWx1ZT1bc1swXV0pLGF9LG11bHRpcGxleDpmdW5jdGlvbihkKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9W10sdT1lLnZhbHVlO2ZvcihyPTAsbz11Lmxlbmd0aDtyPG87cisrKSIsIj09dVtyXVsxXSYmcy5wdXNoKHIpO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gZChlLHQsbik7dmFyIGw9W107Zm9yKHI9MCxvPXMubGVuZ3RoO3I8PW87cisrKXt2YXIgYz0wPT09cj8wOnNbci0xXSsxLGY9cjxvP3Nbcl06dS5sZW5ndGgscD1PKGUubmFtZSwwLHQpO3AudmFsdWU9dS5zbGljZShjLGYpLGwucHVzaChkKHAsdCxuKSl9dmFyIGg9bFswXTtmb3Iocj0wLG89aC5sZW5ndGg7cjxvO3IrKylmb3IoaFtyXS5tdWx0aXBsZXg9ITAsaT0xLGE9bC5sZW5ndGg7aTxhO2krKyloW3JdLnZhbHVlLnB1c2goW20uUFJPUEVSVFlfVkFMVUUsQS5DT01NQV0pLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGhbcl0udmFsdWUsbFtpXVtyXS52YWx1ZSk7cmV0dXJuIGh9fSxvdXRsaW5lOnIsdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9TyhlLm5hbWUrIi1wcm9wZXJ0eSIsMCx0KSxzPU8oZS5uYW1lKyItZHVyYXRpb24iLDAsdCksdT1PKGUubmFtZSsiLXRpbWluZy1mdW5jdGlvbiIsMCx0KSxsPU8oZS5uYW1lKyItZGVsYXkiLDAsdCksYz1bYSxzLHUsbF0sZj1lLnZhbHVlLHA9ITEsaD0hMSxkPSExLG09ITE7aWYoMT09ZS52YWx1ZS5sZW5ndGgmJiJpbmhlcml0Ij09ZS52YWx1ZVswXVsxXSlyZXR1cm4gYS52YWx1ZT1zLnZhbHVlPXUudmFsdWU9bC52YWx1ZT1lLnZhbHVlLGM7aWYoMTxmLmxlbmd0aCYmQyhmKSl0aHJvdyBuZXcgeCgiSW52YWxpZCBhbmltYXRpb24gdmFsdWVzIGF0ICIrayhmWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoaT0wLG89Zi5sZW5ndGg7aTxvO2krKylpZihyPWZbaV0sbi5pc1RpbWUoclsxXSkmJiFwKXMudmFsdWU9W3JdLHA9ITA7ZWxzZSBpZihuLmlzVGltZShyWzFdKSYmIWgpbC52YWx1ZT1bcl0saD0hMDtlbHNlIGlmKCFuLmlzR2xvYmFsKHJbMV0pJiYhbi5pc1RpbWluZ0Z1bmN0aW9uKHJbMV0pfHxtKXtpZighbi5pc0lkZW50aWZpZXIoclsxXSl8fGQpdGhyb3cgbmV3IHgoIkludmFsaWQgYW5pbWF0aW9uIHZhbHVlIGF0ICIrayhyWzJdWzBdKSsiLiBJZ25vcmluZy4iKTthLnZhbHVlPVtyXSxkPSEwfWVsc2UgdS52YWx1ZT1bcl0sbT0hMDtyZXR1cm4gY319fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3LCIuLi93cmFwLWZvci1vcHRpbWl6aW5nIjo1OCwiLi9pbnZhbGlkLXByb3BlcnR5LWVycm9yIjoyM31dLDE5OltmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSgiLi9wcm9wZXJ0aWVzL3VuZGVyc3RhbmRhYmxlIik7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiEoIWkoZSx0LG4sMCwhMCkmJiFlLmlzS2V5d29yZChyKShuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHxlLmlzS2V5d29yZChyKShuKSl9fWZ1bmN0aW9uIG8ocil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzS2V5d29yZChyKShuKXx8ZS5pc0dsb2JhbChuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHwoZS5pc0tleXdvcmQocikobil8fGUuaXNHbG9iYWwobikpKX19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuISFmdW5jdGlvbihlLHQsbil7cmV0dXJuISghZS5pc0Z1bmN0aW9uKHQpfHwhZS5pc0Z1bmN0aW9uKG4pKSYmdC5zdWJzdHJpbmcoMCx0LmluZGV4T2YoIigiKSk9PT1uLnN1YnN0cmluZygwLG4uaW5kZXhPZigiKCIpKX0oZSx0LG4pfHx0PT09bn1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc1VuaXQobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8IShlLmlzVW5pdCh0KSYmIWUuaXNVbml0KG4pKSYmKCEhZS5pc1VuaXQobil8fCFlLmlzVW5pdCh0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX1mdW5jdGlvbiB1KGUpe3ZhciByPW8oZSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcyhlLHQsbil8fHIoZSx0LG4pfX10LmV4cG9ydHM9e2dlbmVyaWM6e2NvbG9yOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc0NvbG9yKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuY29sb3JPcGFjaXR5JiYoZS5pc1JnYkNvbG9yKHQpfHxlLmlzSHNsQ29sb3IodCkpKSYmISghZS5jb2xvck9wYWNpdHkmJihlLmlzUmdiQ29sb3Iobil8fGUuaXNIc2xDb2xvcihuKSkpJiYoISghZS5pc0NvbG9yKHQpfHwhZS5pc0NvbG9yKG4pKXx8YShlLHQsbikpKX0sY29tcG9uZW50czpmdW5jdGlvbihpKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGlbcl0oZSx0LG4pfX0saW1hZ2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEoIWkoZSx0LG4sMCwhMCkmJiFlLmlzSW1hZ2UobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ISFlLmlzSW1hZ2Uobil8fCFlLmlzSW1hZ2UodCkmJmEoZSx0LG4pKX0scHJvcGVydHlOYW1lOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc0lkZW50aWZpZXIobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc0lkZW50aWZpZXIobikpfSx0aW1lOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc1RpbWUobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8IShlLmlzVGltZSh0KSYmIWUuaXNUaW1lKG4pKSYmKCEhZS5pc1RpbWUobil8fCFlLmlzVGltZSh0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX0sdGltaW5nRnVuY3Rpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNUaW1pbmdGdW5jdGlvbihuKXx8ZS5pc0dsb2JhbChuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHxlLmlzVGltaW5nRnVuY3Rpb24obil8fGUuaXNHbG9iYWwobikpfSx1bml0OnMsdW5pdE9yTnVtYmVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzVW5pdChuKXx8ZS5pc051bWJlcihuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHwhKChlLmlzVW5pdCh0KXx8ZS5pc051bWJlcih0KSkmJiFlLmlzVW5pdChuKSYmIWUuaXNOdW1iZXIobikpJiYoISghZS5pc1VuaXQobikmJiFlLmlzTnVtYmVyKG4pKXx8IWUuaXNVbml0KHQpJiYhZS5pc051bWJlcih0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX19LHByb3BlcnR5OnthbmltYXRpb25EaXJlY3Rpb246bygiYW5pbWF0aW9uLWRpcmVjdGlvbiIpLGFuaW1hdGlvbkZpbGxNb2RlOnIoImFuaW1hdGlvbi1maWxsLW1vZGUiKSxhbmltYXRpb25JdGVyYXRpb25Db3VudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuISEoaShlLHQsbiwwLCEwKXx8ZS5pc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50S2V5d29yZChuKXx8ZS5pc1Bvc2l0aXZlTnVtYmVyKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fGUuaXNBbmltYXRpb25JdGVyYXRpb25Db3VudEtleXdvcmQobil8fGUuaXNQb3NpdGl2ZU51bWJlcihuKSl9LGFuaW1hdGlvbk5hbWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNBbmltYXRpb25OYW1lS2V5d29yZChuKXx8ZS5pc0lkZW50aWZpZXIobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc0FuaW1hdGlvbk5hbWVLZXl3b3JkKG4pfHxlLmlzSWRlbnRpZmllcihuKSl9LGFuaW1hdGlvblBsYXlTdGF0ZTpvKCJhbmltYXRpb24tcGxheS1zdGF0ZSIpLGJhY2tncm91bmRBdHRhY2htZW50OnIoImJhY2tncm91bmQtYXR0YWNobWVudCIpLGJhY2tncm91bmRDbGlwOm8oImJhY2tncm91bmQtY2xpcCIpLGJhY2tncm91bmRPcmlnaW46cigiYmFja2dyb3VuZC1vcmlnaW4iKSxiYWNrZ3JvdW5kUG9zaXRpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNCYWNrZ3JvdW5kUG9zaXRpb25LZXl3b3JkKG4pfHxlLmlzR2xvYmFsKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuaXNCYWNrZ3JvdW5kUG9zaXRpb25LZXl3b3JkKG4pJiYhZS5pc0dsb2JhbChuKSl8fHMoZSx0LG4pKX0sYmFja2dyb3VuZFJlcGVhdDpyKCJiYWNrZ3JvdW5kLXJlcGVhdCIpLGJhY2tncm91bmRTaXplOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzQmFja2dyb3VuZFNpemVLZXl3b3JkKG4pfHxlLmlzR2xvYmFsKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuaXNCYWNrZ3JvdW5kU2l6ZUtleXdvcmQobikmJiFlLmlzR2xvYmFsKG4pKXx8cyhlLHQsbikpfSxib3R0b206dSgiYm90dG9tIiksYm9yZGVyQ29sbGFwc2U6cigiYm9yZGVyLWNvbGxhcHNlIiksYm9yZGVyU3R5bGU6bygiKi1zdHlsZSIpLGNsZWFyOm8oImNsZWFyIiksY3Vyc29yOm8oImN1cnNvciIpLGRpc3BsYXk6bygiZGlzcGxheSIpLGZsb2F0Om8oImZsb2F0IiksbGVmdDp1KCJsZWZ0IiksZm9udEZhbWlseTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGkoZSx0LG4sMCwhMCl9LGZvbnRTdHJldGNoOm8oImZvbnQtc3RyZXRjaCIpLGZvbnRTdHlsZTpvKCJmb250LXN0eWxlIiksZm9udFZhcmlhbnQ6bygiZm9udC12YXJpYW50IiksZm9udFdlaWdodDpvKCJmb250LXdlaWdodCIpLGxpc3RTdHlsZVR5cGU6bygibGlzdC1zdHlsZS10eXBlIiksbGlzdFN0eWxlUG9zaXRpb246bygibGlzdC1zdHlsZS1wb3NpdGlvbiIpLG91dGxpbmVTdHlsZTpvKCIqLXN0eWxlIiksb3ZlcmZsb3c6bygib3ZlcmZsb3ciKSxwb3NpdGlvbjpvKCJwb3NpdGlvbiIpLHJpZ2h0OnUoInJpZ2h0IiksdGV4dEFsaWduOm8oInRleHQtYWxpZ24iKSx0ZXh0RGVjb3JhdGlvbjpvKCJ0ZXh0LWRlY29yYXRpb24iKSx0ZXh0T3ZlcmZsb3c6bygidGV4dC1vdmVyZmxvdyIpLHRleHRTaGFkb3c6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNVbml0KG4pfHxlLmlzQ29sb3Iobil8fGUuaXNHbG9iYWwobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc1VuaXQobil8fGUuaXNDb2xvcihuKXx8ZS5pc0dsb2JhbChuKSl9LHRvcDp1KCJ0b3AiKSx0cmFuc2Zvcm06YSx2ZXJ0aWNhbEFsaWduOnUoInZlcnRpY2FsLWFsaWduIiksdmlzaWJpbGl0eTpvKCJ2aXNpYmlsaXR5Iiksd2hpdGVTcGFjZTpvKCJ3aGl0ZS1zcGFjZSIpLHpJbmRleDpmdW5jdGlvbihlLHQsbil7cmV0dXJuISghaShlLHQsbiwwLCEwKSYmIWUuaXNaSW5kZXgobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc1pJbmRleChuKSl9fX19LHsiLi9wcm9wZXJ0aWVzL3VuZGVyc3RhbmRhYmxlIjo0MH1dLDIwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vd3JhcC1mb3Itb3B0aW1pemluZyIpLnNpbmdsZSxpPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9cihbaS5QUk9QRVJUWSxbaS5QUk9QRVJUWV9OQU1FLGUubmFtZV1dKTtyZXR1cm4gdC5pbXBvcnRhbnQ9ZS5pbXBvcnRhbnQsdC5oYWNrPWUuaGFjayx0LnVudXNlZD0hMSx0fXQuZXhwb3J0cz17ZGVlcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9byhlKSxuPWUuY29tcG9uZW50cy5sZW5ndGgtMTswPD1uO24tLSl7dmFyIHI9byhlLmNvbXBvbmVudHNbbl0pO3IudmFsdWU9ZS5jb21wb25lbnRzW25dLnZhbHVlLnNsaWNlKDApLHQuY29tcG9uZW50cy51bnNoaWZ0KHIpfXJldHVybiB0LmRpcnR5PSEwLHQudmFsdWU9ZS52YWx1ZS5zbGljZSgwKSx0fSxzaGFsbG93Om99fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3dyYXAtZm9yLW9wdGltaXppbmciOjU4fV0sMjE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL2JyZWFrLXVwIiksaT1lKCIuL2Nhbi1vdmVycmlkZSIpLG89ZSgiLi9yZXN0b3JlIiksYT1lKCIuLi8uLi91dGlscy9vdmVycmlkZSIpLHM9e2FuaW1hdGlvbjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy50aW1lLGkuZ2VuZXJpYy50aW1pbmdGdW5jdGlvbixpLmdlbmVyaWMudGltZSxpLnByb3BlcnR5LmFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LGkucHJvcGVydHkuYW5pbWF0aW9uRGlyZWN0aW9uLGkucHJvcGVydHkuYW5pbWF0aW9uRmlsbE1vZGUsaS5wcm9wZXJ0eS5hbmltYXRpb25QbGF5U3RhdGUsaS5wcm9wZXJ0eS5hbmltYXRpb25OYW1lXSksY29tcG9uZW50czpbImFuaW1hdGlvbi1kdXJhdGlvbiIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJhbmltYXRpb24tZGVsYXkiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiIsImFuaW1hdGlvbi1maWxsLW1vZGUiLCJhbmltYXRpb24tcGxheS1zdGF0ZSIsImFuaW1hdGlvbi1uYW1lIl0sYnJlYWtVcDpyLm11bHRpcGxleChyLmFuaW1hdGlvbiksZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8ud2l0aG91dERlZmF1bHRzKSxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24tZGVsYXkiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltZSxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1kaXJlY3Rpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbkRpcmVjdGlvbixjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToibm9ybWFsIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24tZHVyYXRpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltZSxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixrZWVwVW5sZXNzRGVmYXVsdDoiYW5pbWF0aW9uLWRlbGF5Iix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1maWxsLW1vZGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbkZpbGxNb2RlLGNvbXBvbmVudE9mOlsiYW5pbWF0aW9uIl0sZGVmYXVsdFZhbHVlOiJub25lIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5hbmltYXRpb25JdGVyYXRpb25Db3VudCxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMSIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwiYW5pbWF0aW9uLW5hbWUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbk5hbWUsY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6Im5vbmUiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1wbGF5LXN0YXRlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5hbmltYXRpb25QbGF5U3RhdGUsY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6InJ1bm5pbmciLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltaW5nRnVuY3Rpb24sY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6ImVhc2UiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sYmFja2dyb3VuZDp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy5pbWFnZSxpLnByb3BlcnR5LmJhY2tncm91bmRQb3NpdGlvbixpLnByb3BlcnR5LmJhY2tncm91bmRTaXplLGkucHJvcGVydHkuYmFja2dyb3VuZFJlcGVhdCxpLnByb3BlcnR5LmJhY2tncm91bmRBdHRhY2htZW50LGkucHJvcGVydHkuYmFja2dyb3VuZE9yaWdpbixpLnByb3BlcnR5LmJhY2tncm91bmRDbGlwLGkuZ2VuZXJpYy5jb2xvcl0pLGNvbXBvbmVudHM6WyJiYWNrZ3JvdW5kLWltYWdlIiwiYmFja2dyb3VuZC1wb3NpdGlvbiIsImJhY2tncm91bmQtc2l6ZSIsImJhY2tncm91bmQtcmVwZWF0IiwiYmFja2dyb3VuZC1hdHRhY2htZW50IiwiYmFja2dyb3VuZC1vcmlnaW4iLCJiYWNrZ3JvdW5kLWNsaXAiLCJiYWNrZ3JvdW5kLWNvbG9yIl0sYnJlYWtVcDpyLm11bHRpcGxleChyLmJhY2tncm91bmQpLGRlZmF1bHRWYWx1ZToiMCAwIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8uYmFja2dyb3VuZCksc2hvcnRlc3RWYWx1ZToiMCIsc2hvcnRoYW5kOiEwfSwiYmFja2dyb3VuZC1hdHRhY2htZW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kQXR0YWNobWVudCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6InNjcm9sbCIsaW50b011bHRpcGxleE1vZGU6InJlYWwifSwiYmFja2dyb3VuZC1jbGlwIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kQ2xpcCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6ImJvcmRlci1ib3giLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiJib3JkZXItYm94In0sImJhY2tncm91bmQtY29sb3IiOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29sb3IsY29tcG9uZW50T2Y6WyJiYWNrZ3JvdW5kIl0sZGVmYXVsdFZhbHVlOiJ0cmFuc3BhcmVudCIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLG11bHRpcGxleExhc3RPbmx5OiEwLG5vbk1lcmdlYWJsZVZhbHVlOiJub25lIixzaG9ydGVzdFZhbHVlOiJyZWQifSwiYmFja2dyb3VuZC1pbWFnZSI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5pbWFnZSxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6Im5vbmUiLGludG9NdWx0aXBsZXhNb2RlOiJkZWZhdWx0In0sImJhY2tncm91bmQtb3JpZ2luIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kT3JpZ2luLGNvbXBvbmVudE9mOlsiYmFja2dyb3VuZCJdLGRlZmF1bHRWYWx1ZToicGFkZGluZy1ib3giLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiJib3JkZXItYm94In0sImJhY2tncm91bmQtcG9zaXRpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmJhY2tncm91bmRQb3NpdGlvbixjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyIwIiwiMCJdLGRvdWJsZVZhbHVlczohMCxpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJiYWNrZ3JvdW5kLXJlcGVhdCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYmFja2dyb3VuZFJlcGVhdCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyJyZXBlYXQiXSxkb3VibGVWYWx1ZXM6ITAsaW50b011bHRpcGxleE1vZGU6InJlYWwifSwiYmFja2dyb3VuZC1zaXplIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kU2l6ZSxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyJhdXRvIl0sZG91YmxlVmFsdWVzOiEwLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiIwIDAifSxib3R0b206e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm90dG9tLGRlZmF1bHRWYWx1ZToiYXV0byJ9LGJvcmRlcjp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLXdpZHRoIiwiYm9yZGVyLXN0eWxlIiwiYm9yZGVyLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixvdmVycmlkZXNTaG9ydGhhbmRzOlsiYm9yZGVyLWJvdHRvbSIsImJvcmRlci1sZWZ0IiwiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXRvcCJdLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsc2hvcnRoYW5kOiEwLHNob3J0aGFuZENvbXBvbmVudHM6ITB9LCJib3JkZXItYm90dG9tIjp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1ib3R0b20tc3R5bGUiLCJib3JkZXItYm90dG9tLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ud2l0aG91dERlZmF1bHRzLHNob3J0aGFuZDohMH0sImJvcmRlci1ib3R0b20tY29sb3IiOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29sb3IsY29tcG9uZW50T2Y6WyJib3JkZXItYm90dG9tIiwiYm9yZGVyLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbImJvcmRlci1yYWRpdXMiXSxkZWZhdWx0VmFsdWU6IjAiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iXX0sImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItcmFkaXVzIl0sZGVmYXVsdFZhbHVlOiIwIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIl19LCJib3JkZXItYm90dG9tLXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxjb21wb25lbnRPZjpbImJvcmRlci1ib3R0b20iLCJib3JkZXItc3R5bGUiXSxkZWZhdWx0VmFsdWU6Im5vbmUifSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLWJvdHRvbSIsImJvcmRlci13aWR0aCJdLGRlZmF1bHRWYWx1ZToibWVkaXVtIixvcHBvc2l0ZVRvOiJib3JkZXItdG9wLXdpZHRoIixzaG9ydGVzdFZhbHVlOiIwIn0sImJvcmRlci1jb2xsYXBzZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm9yZGVyQ29sbGFwc2UsZGVmYXVsdFZhbHVlOiJzZXBhcmF0ZSJ9LCJib3JkZXItY29sb3IiOnticmVha1VwOnIuZm91clZhbHVlcyxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLmNvbG9yLGkuZ2VuZXJpYy5jb2xvcixpLmdlbmVyaWMuY29sb3IsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50T2Y6WyJib3JkZXIiXSxjb21wb25lbnRzOlsiYm9yZGVyLXRvcC1jb2xvciIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItbGVmdC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRlc3RWYWx1ZToicmVkIixzaG9ydGhhbmQ6ITB9LCJib3JkZXItbGVmdCI6e2JyZWFrVXA6ci5ib3JkZXIsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50czpbImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLWxlZnQtc3R5bGUiLCJib3JkZXItbGVmdC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLndpdGhvdXREZWZhdWx0cyxzaG9ydGhhbmQ6ITB9LCJib3JkZXItbGVmdC1jb2xvciI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixjb21wb25lbnRPZjpbImJvcmRlci1jb2xvciIsImJvcmRlci1sZWZ0Il0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1sZWZ0LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxjb21wb25lbnRPZjpbImJvcmRlci1sZWZ0IiwiYm9yZGVyLXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1sZWZ0LXdpZHRoIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItbGVmdCIsImJvcmRlci13aWR0aCJdLGRlZmF1bHRWYWx1ZToibWVkaXVtIixvcHBvc2l0ZVRvOiJib3JkZXItcmlnaHQtd2lkdGgiLHNob3J0ZXN0VmFsdWU6IjAifSwiYm9yZGVyLXJhZGl1cyI6e2JyZWFrVXA6ci5ib3JkZXJSYWRpdXMsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0XSksY29tcG9uZW50czpbImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyJdLGRlZmF1bHRWYWx1ZToiMCIscmVzdG9yZTpvLmJvcmRlclJhZGl1cyxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSJdfSwiYm9yZGVyLXJpZ2h0Ijp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLXJpZ2h0LXN0eWxlIiwiYm9yZGVyLXJpZ2h0LWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ud2l0aG91dERlZmF1bHRzLHNob3J0aGFuZDohMH0sImJvcmRlci1yaWdodC1jb2xvciI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixjb21wb25lbnRPZjpbImJvcmRlci1jb2xvciIsImJvcmRlci1yaWdodCJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJib3JkZXItcmlnaHQtc3R5bGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmJvcmRlclN0eWxlLGNvbXBvbmVudE9mOlsiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1yaWdodC13aWR0aCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXdpZHRoIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLG9wcG9zaXRlVG86ImJvcmRlci1sZWZ0LXdpZHRoIixzaG9ydGVzdFZhbHVlOiIwIn0sImJvcmRlci1zdHlsZSI6e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLnByb3BlcnR5LmJvcmRlclN0eWxlLGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLnByb3BlcnR5LmJvcmRlclN0eWxlXSksY29tcG9uZW50T2Y6WyJib3JkZXIiXSxjb21wb25lbnRzOlsiYm9yZGVyLXRvcC1zdHlsZSIsImJvcmRlci1yaWdodC1zdHlsZSIsImJvcmRlci1ib3R0b20tc3R5bGUiLCJib3JkZXItbGVmdC1zdHlsZSJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRoYW5kOiEwfSwiYm9yZGVyLXRvcCI6e2JyZWFrVXA6ci5ib3JkZXIsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50czpbImJvcmRlci10b3Atd2lkdGgiLCJib3JkZXItdG9wLXN0eWxlIiwiYm9yZGVyLXRvcC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLndpdGhvdXREZWZhdWx0cyxzaG9ydGhhbmQ6ITB9LCJib3JkZXItdG9wLWNvbG9yIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbG9yLGNvbXBvbmVudE9mOlsiYm9yZGVyLWNvbG9yIiwiYm9yZGVyLXRvcCJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItcmFkaXVzIl0sZGVmYXVsdFZhbHVlOiIwIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIl19LCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLXJhZGl1cyJdLGRlZmF1bHRWYWx1ZToiMCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSJdfSwiYm9yZGVyLXRvcC1zdHlsZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm9yZGVyU3R5bGUsY29tcG9uZW50T2Y6WyJib3JkZXItc3R5bGUiLCJib3JkZXItdG9wIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci10b3Atd2lkdGgiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbImJvcmRlci10b3AiLCJib3JkZXItd2lkdGgiXSxkZWZhdWx0VmFsdWU6Im1lZGl1bSIsb3Bwb3NpdGVUbzoiYm9yZGVyLWJvdHRvbS13aWR0aCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJib3JkZXItd2lkdGgiOnticmVha1VwOnIuZm91clZhbHVlcyxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXRdKSxjb21wb25lbnRPZjpbImJvcmRlciJdLGNvbXBvbmVudHM6WyJib3JkZXItdG9wLXdpZHRoIiwiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1sZWZ0LXdpZHRoIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHJlc3RvcmU6by5mb3VyVmFsdWVzLHNob3J0ZXN0VmFsdWU6IjAiLHNob3J0aGFuZDohMH0sY2xlYXI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuY2xlYXIsZGVmYXVsdFZhbHVlOiJub25lIn0sY29sb3I6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixkZWZhdWx0VmFsdWU6InRyYW5zcGFyZW50IixzaG9ydGVzdFZhbHVlOiJyZWQifSxjdXJzb3I6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuY3Vyc29yLGRlZmF1bHRWYWx1ZToiYXV0byJ9LGRpc3BsYXk6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZGlzcGxheX0sZmxvYXQ6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZmxvYXQsZGVmYXVsdFZhbHVlOiJub25lIn0sZm9udDp7YnJlYWtVcDpyLmZvbnQsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kucHJvcGVydHkuZm9udFN0eWxlLGkucHJvcGVydHkuZm9udFZhcmlhbnQsaS5wcm9wZXJ0eS5mb250V2VpZ2h0LGkucHJvcGVydHkuZm9udFN0cmV0Y2gsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5mb250RmFtaWx5XSksY29tcG9uZW50czpbImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc2l6ZSIsImxpbmUtaGVpZ2h0IiwiZm9udC1mYW1pbHkiXSxyZXN0b3JlOm8uZm9udCxzaG9ydGhhbmQ6ITB9LCJmb250LWZhbWlseSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZm9udEZhbWlseSxkZWZhdWx0VmFsdWU6InVzZXJ8YWdlbnR8c3BlY2lmaWMifSwiZm9udC1zaXplIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHNob3J0ZXN0VmFsdWU6IjAifSwiZm9udC1zdHJldGNoIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250U3RyZXRjaCxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LCJmb250LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250U3R5bGUsZGVmYXVsdFZhbHVlOiJub3JtYWwifSwiZm9udC12YXJpYW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250VmFyaWFudCxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LCJmb250LXdlaWdodCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZm9udFdlaWdodCxkZWZhdWx0VmFsdWU6Im5vcm1hbCIsc2hvcnRlc3RWYWx1ZToiNDAwIn0saGVpZ2h0OntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxkZWZhdWx0VmFsdWU6ImF1dG8iLHNob3J0ZXN0VmFsdWU6IjAifSxsZWZ0OntjYW5PdmVycmlkZTppLnByb3BlcnR5LmxlZnQsZGVmYXVsdFZhbHVlOiJhdXRvIn0sImxpbmUtaGVpZ2h0Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXRPck51bWJlcixkZWZhdWx0VmFsdWU6Im5vcm1hbCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJsaXN0LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kucHJvcGVydHkubGlzdFN0eWxlVHlwZSxpLnByb3BlcnR5Lmxpc3RTdHlsZVBvc2l0aW9uLGkucHJvcGVydHkubGlzdFN0eWxlSW1hZ2VdKSxjb21wb25lbnRzOlsibGlzdC1zdHlsZS10eXBlIiwibGlzdC1zdHlsZS1wb3NpdGlvbiIsImxpc3Qtc3R5bGUtaW1hZ2UiXSxicmVha1VwOnIubGlzdFN0eWxlLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsZGVmYXVsdFZhbHVlOiJvdXRzaWRlIixzaG9ydGVzdFZhbHVlOiJub25lIixzaG9ydGhhbmQ6ITB9LCJsaXN0LXN0eWxlLWltYWdlIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmltYWdlLGNvbXBvbmVudE9mOlsibGlzdC1zdHlsZSJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJsaXN0LXN0eWxlLXBvc2l0aW9uIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5saXN0U3R5bGVQb3NpdGlvbixjb21wb25lbnRPZjpbImxpc3Qtc3R5bGUiXSxkZWZhdWx0VmFsdWU6Im91dHNpZGUiLHNob3J0ZXN0VmFsdWU6Imluc2lkZSJ9LCJsaXN0LXN0eWxlLXR5cGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5Lmxpc3RTdHlsZVR5cGUsY29tcG9uZW50T2Y6WyJsaXN0LXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJkZWNpbWFsfGRpc2MiLHNob3J0ZXN0VmFsdWU6Im5vbmUifSxtYXJnaW46e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdF0pLGNvbXBvbmVudHM6WyJtYXJnaW4tdG9wIiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0Il0sZGVmYXVsdFZhbHVlOiIwIixyZXN0b3JlOm8uZm91clZhbHVlcyxzaG9ydGhhbmQ6ITB9LCJtYXJnaW4tYm90dG9tIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJtYXJnaW4iXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86Im1hcmdpbi10b3AifSwibWFyZ2luLWxlZnQiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbIm1hcmdpbiJdLGRlZmF1bHRWYWx1ZToiMCIsb3Bwb3NpdGVUbzoibWFyZ2luLXJpZ2h0In0sIm1hcmdpbi1yaWdodCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsibWFyZ2luIl0sZGVmYXVsdFZhbHVlOiIwIixvcHBvc2l0ZVRvOiJtYXJnaW4tbGVmdCJ9LCJtYXJnaW4tdG9wIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJtYXJnaW4iXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86Im1hcmdpbi1ib3R0b20ifSxvdXRsaW5lOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLmNvbG9yLGkucHJvcGVydHkub3V0bGluZVN0eWxlLGkuZ2VuZXJpYy51bml0XSksY29tcG9uZW50czpbIm91dGxpbmUtY29sb3IiLCJvdXRsaW5lLXN0eWxlIiwib3V0bGluZS13aWR0aCJdLGJyZWFrVXA6ci5vdXRsaW5lLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsZGVmYXVsdFZhbHVlOiIwIixzaG9ydGhhbmQ6ITB9LCJvdXRsaW5lLWNvbG9yIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbG9yLGNvbXBvbmVudE9mOlsib3V0bGluZSJdLGRlZmF1bHRWYWx1ZToiaW52ZXJ0IixzaG9ydGVzdFZhbHVlOiJyZWQifSwib3V0bGluZS1zdHlsZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkub3V0bGluZVN0eWxlLGNvbXBvbmVudE9mOlsib3V0bGluZSJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJvdXRsaW5lLXdpZHRoIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJvdXRsaW5lIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHNob3J0ZXN0VmFsdWU6IjAifSxvdmVyZmxvdzp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5vdmVyZmxvdyxkZWZhdWx0VmFsdWU6InZpc2libGUifSwib3ZlcmZsb3cteCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkub3ZlcmZsb3csZGVmYXVsdFZhbHVlOiJ2aXNpYmxlIn0sIm92ZXJmbG93LXkiOntjYW5PdmVycmlkZTppLnByb3BlcnR5Lm92ZXJmbG93LGRlZmF1bHRWYWx1ZToidmlzaWJsZSJ9LHBhZGRpbmc6e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdF0pLGNvbXBvbmVudHM6WyJwYWRkaW5nLXRvcCIsInBhZGRpbmctcmlnaHQiLCJwYWRkaW5nLWJvdHRvbSIsInBhZGRpbmctbGVmdCJdLGRlZmF1bHRWYWx1ZToiMCIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRoYW5kOiEwfSwicGFkZGluZy1ib3R0b20iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbInBhZGRpbmciXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86InBhZGRpbmctdG9wIn0sInBhZGRpbmctbGVmdCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsicGFkZGluZyJdLGRlZmF1bHRWYWx1ZToiMCIsb3Bwb3NpdGVUbzoicGFkZGluZy1yaWdodCJ9LCJwYWRkaW5nLXJpZ2h0Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJwYWRkaW5nIl0sZGVmYXVsdFZhbHVlOiIwIixvcHBvc2l0ZVRvOiJwYWRkaW5nLWxlZnQifSwicGFkZGluZy10b3AiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbInBhZGRpbmciXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86InBhZGRpbmctYm90dG9tIn0scG9zaXRpb246e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkucG9zaXRpb24sZGVmYXVsdFZhbHVlOiJzdGF0aWMifSxyaWdodDp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5yaWdodCxkZWZhdWx0VmFsdWU6ImF1dG8ifSwidGV4dC1hbGlnbiI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkudGV4dEFsaWduLGRlZmF1bHRWYWx1ZToibGVmdHxyaWdodCJ9LCJ0ZXh0LWRlY29yYXRpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LnRleHREZWNvcmF0aW9uLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJ0ZXh0LW92ZXJmbG93Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50ZXh0T3ZlcmZsb3csZGVmYXVsdFZhbHVlOiJub25lIn0sInRleHQtc2hhZG93Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50ZXh0U2hhZG93LGRlZmF1bHRWYWx1ZToibm9uZSJ9LHRvcDp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50b3AsZGVmYXVsdFZhbHVlOiJhdXRvIn0sdHJhbnNmb3JtOntjYW5PdmVycmlkZTppLnByb3BlcnR5LnRyYW5zZm9ybSx2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW1zLSIsIi13ZWJraXQtIl19LHRyYW5zaXRpb246e2JyZWFrVXA6ci5tdWx0aXBsZXgoci50cmFuc2l0aW9uKSxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5wcm9wZXJ0eS50cmFuc2l0aW9uUHJvcGVydHksaS5nZW5lcmljLnRpbWUsaS5nZW5lcmljLnRpbWluZ0Z1bmN0aW9uLGkuZ2VuZXJpYy50aW1lXSksY29tcG9uZW50czpbInRyYW5zaXRpb24tcHJvcGVydHkiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLCJ0cmFuc2l0aW9uLWRlbGF5Il0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8ud2l0aG91dERlZmF1bHRzKSxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJ0cmFuc2l0aW9uLWRlbGF5Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnRpbWUsY29tcG9uZW50T2Y6WyJ0cmFuc2l0aW9uIl0sZGVmYXVsdFZhbHVlOiIwcyIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwidHJhbnNpdGlvbi1kdXJhdGlvbiI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy50aW1lLGNvbXBvbmVudE9mOlsidHJhbnNpdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sInRyYW5zaXRpb24tcHJvcGVydHkiOntjYW5PdmVycmlkZTppLmdlbmVyaWMucHJvcGVydHlOYW1lLGNvbXBvbmVudE9mOlsidHJhbnNpdGlvbiJdLGRlZmF1bHRWYWx1ZToiYWxsIixpbnRvTXVsdGlwbGV4TW9kZToicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyVmFsdWU6Il8iLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltaW5nRnVuY3Rpb24sY29tcG9uZW50T2Y6WyJ0cmFuc2l0aW9uIl0sZGVmYXVsdFZhbHVlOiJlYXNlIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJ2ZXJ0aWNhbC1hbGlnbiI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkudmVydGljYWxBbGlnbixkZWZhdWx0VmFsdWU6ImJhc2VsaW5lIn0sdmlzaWJpbGl0eTp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS52aXNpYmlsaXR5LGRlZmF1bHRWYWx1ZToidmlzaWJsZSJ9LCJ3aGl0ZS1zcGFjZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkud2hpdGVTcGFjZSxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LHdpZHRoOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxkZWZhdWx0VmFsdWU6ImF1dG8iLHNob3J0ZXN0VmFsdWU6IjAifSwiei1pbmRleCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuekluZGV4LGRlZmF1bHRWYWx1ZToiYXV0byJ9fTtmdW5jdGlvbiB1KGUsdCl7dmFyIG49YShzW2VdLHt9KTtyZXR1cm4iY29tcG9uZW50T2YiaW4gbiYmKG4uY29tcG9uZW50T2Y9bi5jb21wb25lbnRPZi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQrZX0pKSwiY29tcG9uZW50cyJpbiBuJiYobi5jb21wb25lbnRzPW4uY29tcG9uZW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQrZX0pKSwia2VlcFVubGVzc0RlZmF1bHQiaW4gbiYmKG4ua2VlcFVubGVzc0RlZmF1bHQ9dCtuLmtlZXBVbmxlc3NEZWZhdWx0KSxufXZhciBsPXt9O2Zvcih2YXIgYyBpbiBzKXt2YXIgZj1zW2NdO2lmKCJ2ZW5kb3JQcmVmaXhlcyJpbiBmKXtmb3IodmFyIHA9MDtwPGYudmVuZG9yUHJlZml4ZXMubGVuZ3RoO3ArKyl7dmFyIGg9Zi52ZW5kb3JQcmVmaXhlc1twXSxkPXUoYyxoKTtkZWxldGUgZC52ZW5kb3JQcmVmaXhlcyxsW2grY109ZH1kZWxldGUgZi52ZW5kb3JQcmVmaXhlc319dC5leHBvcnRzPWEocyxsKX0seyIuLi8uLi91dGlscy9vdmVycmlkZSI6OTUsIi4vYnJlYWstdXAiOjE4LCIuL2Nhbi1vdmVycmlkZSI6MTksIi4vcmVzdG9yZSI6NDl9XSwyMjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBjPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGY9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMscD1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS52YWx1ZTt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXt2YXIgbixyLGksbyxhLHMsdT1bXTtpZih0WzBdPT1jLlJVTEUpZm9yKG49IS9bXC5cKz5+XS8udGVzdChmKHRbMV0pKSxhPTAscz10WzJdLmxlbmd0aDthPHM7YSsrKShyPXRbMl1bYV0pWzBdPT1jLlBST1BFUlRZJiYwIT09KGk9clsxXVsxXSkubGVuZ3RoJiYwIT09aS5pbmRleE9mKCItLSIpJiYobz1wKHIsYSksdS5wdXNoKFtpLG8sKGw9aSwibGlzdC1zdHlsZSI9PWw/bDowPGwuaW5kZXhPZigiLXJhZGl1cyIpPyJib3JkZXItcmFkaXVzIjoiYm9yZGVyLWNvbGxhcHNlIj09bHx8ImJvcmRlci1zcGFjaW5nIj09bHx8ImJvcmRlci1pbWFnZSI9PWw/bDowPT09bC5pbmRleE9mKCJib3JkZXItIikmJi9eYm9yZGVyXC1cdytcLVx3KyQvLnRlc3QobCk/bC5tYXRjaCgvYm9yZGVyXC1cdysvKVswXTowPT09bC5pbmRleE9mKCJib3JkZXItIikmJi9eYm9yZGVyXC1cdyskLy50ZXN0KGwpPyJib3JkZXIiOjA9PT1sLmluZGV4T2YoInRleHQtIik/bDoiLWNocm9tZS0iPT1sP2w6bC5yZXBsYWNlKC9eXC1cdytcLS8sIiIpLm1hdGNoKC8oW2EtekEtWl0rKS8pWzBdLnRvTG93ZXJDYXNlKCkpLHRbMl1bYV0saSsiOiIrbyx0WzFdLG5dKSk7ZWxzZSBpZih0WzBdPT1jLk5FU1RFRF9CTE9DSylmb3IoYT0wLHM9dFsyXS5sZW5ndGg7YTxzO2ErKyl1PXUuY29uY2F0KGUodFsyXVthXSkpO3ZhciBsO3JldHVybiB1fX0seyIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3RoaXMubmFtZT0iSW52YWxpZFByb3BlcnR5RXJyb3IiLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9KHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cix0LmV4cG9ydHM9cn0se31dLDI0OltmdW5jdGlvbihlLHQsbil7dmFyIGg9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpLHA9ZSgiLi4vLi4vdXRpbHMvc3BsaXQiKSxkPS9cL2RlZXBcLy8sbT0vXjo6LyxnPSI6bm90Iix2PVsiOmRpciIsIjpsYW5nIiwiOm5vdCIsIjpudGgtY2hpbGQiLCI6bnRoLWxhc3QtY2hpbGQiLCI6bnRoLWxhc3Qtb2YtdHlwZSIsIjpudGgtb2YtdHlwZSJdLGI9L1s+XCt+XS8seT1bIjphZnRlciIsIjpiZWZvcmUiLCI6Zmlyc3QtbGV0dGVyIiwiOmZpcnN0LWxpbmUiLCI6bGFuZyJdLF89WyI6OmFmdGVyIiwiOjpiZWZvcmUiLCI6OmZpcnN0LWxldHRlciIsIjo6Zmlyc3QtbGluZSJdLHc9e0RPVUJMRV9RVU9URToiZG91YmxlLXF1b3RlIixTSU5HTEVfUVVPVEU6InNpbmdsZS1xdW90ZSIsUk9PVDoicm9vdCJ9O2Z1bmN0aW9uIEUoZSl7dmFyIHQsbixyLGksbyxhLHM9W10sdT1bXSxsPXcuUk9PVCxjPTAsZj0hMSxwPSExO2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXQ9ZVtvXSxpPSFyJiZiLnRlc3QodCksbj1sPT13LkRPVUJMRV9RVU9URXx8bD09dy5TSU5HTEVfUVVPVEUscj91LnB1c2godCk6dD09aC5ET1VCTEVfUVVPVEUmJmw9PXcuUk9PVD8odS5wdXNoKHQpLGw9dy5ET1VCTEVfUVVPVEUpOnQ9PWguRE9VQkxFX1FVT1RFJiZsPT13LkRPVUJMRV9RVU9URT8odS5wdXNoKHQpLGw9dy5ST09UKTp0PT1oLlNJTkdMRV9RVU9URSYmbD09dy5ST09UPyh1LnB1c2godCksbD13LlNJTkdMRV9RVU9URSk6dD09aC5TSU5HTEVfUVVPVEUmJmw9PXcuU0lOR0xFX1FVT1RFPyh1LnB1c2godCksbD13LlJPT1QpOm4/dS5wdXNoKHQpOnQ9PWguT1BFTl9ST1VORF9CUkFDS0VUPyh1LnB1c2godCksYysrKTp0PT1oLkNMT1NFX1JPVU5EX0JSQUNLRVQmJjE9PWMmJmY/KHUucHVzaCh0KSxzLnB1c2godS5qb2luKCIiKSksYy0tLGY9ISh1PVtdKSk6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUPyh1LnB1c2godCksYy0tKTp0PT1oLkNPTE9OJiYwPT09YyYmZiYmIXA/KHMucHVzaCh1LmpvaW4oIiIpKSwodT1bXSkucHVzaCh0KSk6dCE9aC5DT0xPTnx8MCE9PWN8fHA/dD09aC5TUEFDRSYmMD09PWMmJmY/KHMucHVzaCh1LmpvaW4oIiIpKSxmPSEodT1bXSkpOmkmJjA9PT1jJiZmPyhzLnB1c2godS5qb2luKCIiKSksZj0hKHU9W10pKTp1LnB1c2godCk6KCh1PVtdKS5wdXNoKHQpLGY9ITApLHI9dD09aC5CQUNLX1NMQVNILHA9dD09aC5DT0xPTjtyZXR1cm4gMDx1Lmxlbmd0aCYmZiYmcy5wdXNoKHUuam9pbigiIikpLHN9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGY9cChlLGguQ09NTUEpO2ZvcihvPTAsYT1mLmxlbmd0aDtvPGE7bysrKWlmKDA9PT0oaT1mW29dKS5sZW5ndGh8fChjPWksZC50ZXN0KGMpKXx8LTE8aS5pbmRleE9mKGguQ09MT04pJiYodT1FKHM9aSksbD1yLCEoZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhO2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWlmKHI9ZVtvXSxpPS0xPHIuaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCk/ci5zdWJzdHJpbmcoMCxyLmluZGV4T2YoaC5PUEVOX1JPVU5EX0JSQUNLRVQpKTpyLC0xPT09dC5pbmRleE9mKGkpJiYtMT09PW4uaW5kZXhPZihpKSlyZXR1cm4hMTtyZXR1cm4hMH0odSx0LG4pJiZmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspe2lmKHQ9ZVtvXSxyPXQuaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCksbj0oaT0tMTxyKT90LnN1YnN0cmluZygwLHIpOnQsaSYmLTE9PXYuaW5kZXhPZihuKSlyZXR1cm4hMTtpZighaSYmLTE8di5pbmRleE9mKG4pKXJldHVybiExfXJldHVybiEwfSh1KSYmKHUubGVuZ3RoPDJ8fCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGwsYz0wO2Zvcih1PTAsbD10Lmxlbmd0aDt1PGwmJihuPXRbdV0saT10W3UrMV0pO3UrKylpZihyPWUuaW5kZXhPZihuLGMpLG89ZS5pbmRleE9mKG4scisxKSxjPW8scituLmxlbmd0aD09byYmKGE9LTE8bi5pbmRleE9mKGguT1BFTl9ST1VORF9CUkFDS0VUKT9uLnN1YnN0cmluZygwLG4uaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCkpOm4scz0tMTxpLmluZGV4T2YoaC5PUEVOX1JPVU5EX0JSQUNLRVQpP2kuc3Vic3RyaW5nKDAsaS5pbmRleE9mKGguT1BFTl9ST1VORF9CUkFDS0VUKSk6aSxhIT1nfHxzIT1nKSlyZXR1cm4hMDtyZXR1cm4hMX0ocyx1KSkmJih1Lmxlbmd0aDwyfHxsJiZmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvPTA7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYodD1lW25dLGk9dCxtLnRlc3QoaSk/bys9LTE8Xy5pbmRleE9mKHQpPzE6MDpvKz0tMTx5LmluZGV4T2YodCk/MTowLDE8bylyZXR1cm4hMTtyZXR1cm4hMH0odSkpKSkpcmV0dXJuITE7cmV0dXJuITB9fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi91dGlscy9zcGxpdCI6OTZ9XSwyNTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBoPWUoIi4vaXMtbWVyZ2VhYmxlIiksZD1lKCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiKSxtPWUoIi4uL2xldmVsLTEvc29ydC1zZWxlY3RvcnMiKSxnPWUoIi4uL2xldmVsLTEvdGlkeS1ydWxlcyIpLHY9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxiPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHkseT1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxfPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bbnVsbCxbXSxbXV0scj10Lm9wdGlvbnMsaT1yLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLmFkamFjZW50U3BhY2Usbz1yLmxldmVsW3YuT25lXS5zZWxlY3RvcnNTb3J0aW5nTWV0aG9kLGE9ci5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLHM9ci5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyx1PXIuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubWVyZ2VMaW1pdCxsPXIuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPWVbY107cFswXT09Xy5SVUxFP25bMF09PV8uUlVMRSYmeShwWzFdKT09eShuWzFdKT8oQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoblsyXSxwWzJdKSxkKG5bMl0sITAsITAsdCkscFsyXT1bXSk6blswXT09Xy5SVUxFJiZiKHBbMl0pPT1iKG5bMl0pJiZoKHkocFsxXSksYSxzLGwpJiZoKHkoblsxXSksYSxzLGwpJiZuWzFdLmxlbmd0aDx1PyhuWzFdPWcoblsxXS5jb25jYXQocFsxXSksITEsaSwhMSx0Lndhcm5pbmdzKSxuWzFdPTE8bi5sZW5ndGg/bShuWzFdLG8pOm5bMV0scFsyXT1bXSk6bj1wOm49W251bGwsW10sW11dfX19LHsiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiOjY1LCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuLi9sZXZlbC0xL3NvcnQtc2VsZWN0b3JzIjoxNCwiLi4vbGV2ZWwtMS90aWR5LXJ1bGVzIjoxNywiLi9pcy1tZXJnZWFibGUiOjI0LCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2fV0sMjY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgQz1lKCIuL3Jlb3JkZXJhYmxlIikuY2FuUmVvcmRlcixmPWUoIi4vcmVvcmRlcmFibGUiKS5jYW5SZW9yZGVyU2luZ2xlLE89ZSgiLi9leHRyYWN0LXByb3BlcnRpZXMiKSxwPWUoIi4vcnVsZXMtb3ZlcmxhcCIpLFM9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMsRD1lKCIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLFQ9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24gQihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYztmb3Iocz0wLHU9ZS5sZW5ndGg7czx1O3MrKylmb3IoaT0ocj1lW3NdKVs1XSxsPTAsYz10Lmxlbmd0aDtsPGM7bCsrKWlmKGE9KG89dFtsXSlbNV0scChpLGEsITApJiYhZihyLG8sbikpcmV0dXJuITE7cmV0dXJuITB9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQub3B0aW9ucy5sZXZlbFtELlR3b10ubWVyZ2VTZW1hbnRpY2FsbHkscj10LmNhY2hlLnNwZWNpZmljaXR5LGk9e30sbz1bXSxhPWUubGVuZ3RoLTE7MDw9YTthLS0pe3ZhciBzPWVbYV07aWYoc1swXT09VC5ORVNURURfQkxPQ0spe3ZhciB1PVMoc1sxXSksbD1pW3VdO2x8fChsPVtdLGlbdV09bCksbC5wdXNoKGEpfX1mb3IodmFyIGMgaW4gaSl7dmFyIGY9aVtjXTtlOmZvcih2YXIgcD1mLmxlbmd0aC0xOzA8cDtwLS0pe3ZhciBoPWZbcF0sZD1lW2hdLG09ZltwLTFdLGc9ZVttXTt0OmZvcih2YXIgdj0xOy0xPD12O3YtPTIpe2Zvcih2YXIgYj0xPT12LHk9Yj9oKzE6bS0xLF89Yj9tOmgsdz1iPzE6LTEsRT1iP2Q6ZyxBPWI/ZzpkLHg9TyhFKTt5IT1fOyl7dmFyIGs9TyhlW3ldKTtpZih5Kz13LCEobiYmQih4LGsscil8fEMoeCxrLHIpKSljb250aW51ZSB0fUFbMl09Yj9FWzJdLmNvbmNhdChBWzJdKTpBWzJdLmNvbmNhdChFWzJdKSxFWzJdPVtdLG8ucHVzaChBKTtjb250aW51ZSBlfX19cmV0dXJuIG99fSx7Ii4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9leHRyYWN0LXByb3BlcnRpZXMiOjIyLCIuL3Jlb3JkZXJhYmxlIjo0NywiLi9ydWxlcy1vdmVybGFwIjo1MX1dLDI3OltmdW5jdGlvbihlLHQsbil7dmFyIGc9ZSgiLi9pcy1tZXJnZWFibGUiKSx2PWUoIi4uL2xldmVsLTEvc29ydC1zZWxlY3RvcnMiKSxiPWUoIi4uL2xldmVsLTEvdGlkeS1ydWxlcyIpLHk9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxfPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHksdz1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxFPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUucmVwbGFjZSgvLS1bXiAsPlwrfjpdKy9nLCIiKX1mdW5jdGlvbiBBKGUsdCl7dmFyIG49YSh3KGVbMV0pKTtmb3IodmFyIHIgaW4gdCl7dmFyIGk9dFtyXSxvPWEodyhpWzFdKSk7KC0xPG8uaW5kZXhPZihuKXx8LTE8bi5pbmRleE9mKG8pKSYmZGVsZXRlIHRbcl19fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9dC5vcHRpb25zLG89aS5sZXZlbFt5LlR3b10ubWVyZ2VTZW1hbnRpY2FsbHksYT1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLmFkamFjZW50U3BhY2Uscz1pLmxldmVsW3kuT25lXS5zZWxlY3RvcnNTb3J0aW5nTWV0aG9kLHU9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLGw9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyxjPWkuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGY9e30scD1lLmxlbmd0aC0xOzA8PXA7cC0tKXt2YXIgaD1lW3BdO2lmKGhbMF09PUUuUlVMRSl7MDxoWzJdLmxlbmd0aCYmIW8mJihyPXcoaFsxXSksL1wufFwqfCA6Ly50ZXN0KHIpKSYmKGY9e30pLDA8aFsyXS5sZW5ndGgmJm8mJihuPXZvaWQgMCwtMTwobj13KGhbMV0pKS5pbmRleE9mKCJfXyIpfHwtMTxuLmluZGV4T2YoIi0tIikpJiZBKGgsZik7dmFyIGQ9XyhoWzJdKSxtPWZbZF07bSYmZyh3KGhbMV0pLHUsbCxjKSYmZyh3KG1bMV0pLHUsbCxjKSYmKDA8aFsyXS5sZW5ndGg/KGhbMV09YihtWzFdLmNvbmNhdChoWzFdKSwhMSxhLCExLHQud2FybmluZ3MpLGhbMV09MTxoWzFdLmxlbmd0aD92KGhbMV0scyk6aFsxXSk6aFsxXT1tWzFdLmNvbmNhdChoWzFdKSxtWzJdPVtdLGZbZF09bnVsbCksZltfKGhbMl0pXT1ofX19fSx7Ii4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vbGV2ZWwtMS9zb3J0LXNlbGVjdG9ycyI6MTQsIi4uL2xldmVsLTEvdGlkeS1ydWxlcyI6MTcsIi4vaXMtbWVyZ2VhYmxlIjoyNH1dLDI4OltmdW5jdGlvbihlLHQsbil7dmFyIEE9ZSgiLi9yZW9yZGVyYWJsZSIpLmNhblJlb3JkZXIseD1lKCIuL2V4dHJhY3QtcHJvcGVydGllcyIpLGs9ZSgiLi9wcm9wZXJ0aWVzL29wdGltaXplIiksQz1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxPPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dC5jYWNoZS5zcGVjaWZpY2l0eSxpPXt9LG89W107Zm9yKG49ZS5sZW5ndGgtMTswPD1uO24tLSlpZihlW25dWzBdPT1PLlJVTEUmJjAhPT1lW25dWzJdLmxlbmd0aCl7dmFyIGE9QyhlW25dWzFdKTtpW2FdPVtuXS5jb25jYXQoaVthXXx8W10pLDI9PWlbYV0ubGVuZ3RoJiZvLnB1c2goYSl9Zm9yKG49by5sZW5ndGgtMTswPD1uO24tLSl7dmFyIHM9aVtvW25dXTtlOmZvcih2YXIgdT1zLmxlbmd0aC0xOzA8dTt1LS0pe3ZhciBsPXNbdS0xXSxjPWVbbF0sZj1zW3VdLHA9ZVtmXTt0OmZvcih2YXIgaD0xOy0xPD1oO2gtPTIpe2Zvcih2YXIgZD0xPT1oLG09ZD9sKzE6Zi0xLGc9ZD9mOmwsdj1kPzE6LTEsYj1kP2M6cCx5PWQ/cDpjLF89eChiKTttIT1nOyl7dmFyIHc9eChlW21dKTttKz12O3ZhciBFPWQ/QShfLHcscik6QSh3LF8scik7aWYoIUUmJiFkKWNvbnRpbnVlIGU7aWYoIUUmJmQpY29udGludWUgdH1kPyhBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShiWzJdLHlbMl0pLHlbMl09YlsyXSk6QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoeVsyXSxiWzJdKSxrKHlbMl0sITAsITAsdCksYlsyXT1bXX19fX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9leHRyYWN0LXByb3BlcnRpZXMiOjIyLCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2LCIuL3Jlb3JkZXJhYmxlIjo0N31dLDI5OltmdW5jdGlvbihlLHQsbil7dmFyIGE9ZSgiLi9tZXJnZS1hZGphY2VudCIpLHM9ZSgiLi9tZXJnZS1tZWRpYS1xdWVyaWVzIiksdT1lKCIuL21lcmdlLW5vbi1hZGphY2VudC1ieS1ib2R5IiksbD1lKCIuL21lcmdlLW5vbi1hZGphY2VudC1ieS1zZWxlY3RvciIpLGM9ZSgiLi9yZWR1Y2Utbm9uLWFkamFjZW50IiksZj1lKCIuL3JlbW92ZS1kdXBsaWNhdGUtZm9udC1hdC1ydWxlcyIpLHA9ZSgiLi9yZW1vdmUtZHVwbGljYXRlLW1lZGlhLXF1ZXJpZXMiKSxoPWUoIi4vcmVtb3ZlLWR1cGxpY2F0ZXMiKSxkPWUoIi4vcmVtb3ZlLXVudXNlZC1hdC1ydWxlcyIpLG09ZSgiLi9yZXN0cnVjdHVyZSIpLGc9ZSgiLi9wcm9wZXJ0aWVzL29wdGltaXplIiksdj1lKCIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLGI9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24geShlLHQsbil7dmFyIHIsaSxvPXQub3B0aW9ucy5sZXZlbFt2LlR3b107aWYoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspe3ZhciBpPWVbbl07aWYoaVswXT09Yi5ORVNURURfQkxPQ0spe3ZhciBvPS9AKC1tb3otfC1vLXwtd2Via2l0LSk/a2V5ZnJhbWVzLy50ZXN0KGlbMV1bMF1bMV0pO3koaVsyXSx0LCFvKX19fShlLHQpLGZ1bmN0aW9uIGUodCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspe3ZhciBvPXRbcl07c3dpdGNoKG9bMF0pe2Nhc2UgYi5SVUxFOmcob1syXSwhMCwhMCxuKTticmVhaztjYXNlIGIuTkVTVEVEX0JMT0NLOmUob1syXSxuKX19fShlLHQpLG8ucmVtb3ZlRHVwbGljYXRlUnVsZXMmJmgoZSx0KSxvLm1lcmdlQWRqYWNlbnRSdWxlcyYmYShlLHQpLG8ucmVkdWNlTm9uQWRqYWNlbnRSdWxlcyYmYyhlLHQpLG8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiYiYm9keSIhPW8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiZsKGUsdCksby5tZXJnZU5vbkFkamFjZW50UnVsZXMmJiJzZWxlY3RvciIhPW8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiZ1KGUsdCksby5yZXN0cnVjdHVyZVJ1bGVzJiZvLm1lcmdlQWRqYWNlbnRSdWxlcyYmbiYmKG0oZSx0KSxhKGUsdCkpLG8ucmVzdHJ1Y3R1cmVSdWxlcyYmIW8ubWVyZ2VBZGphY2VudFJ1bGVzJiZuJiZtKGUsdCksby5yZW1vdmVEdXBsaWNhdGVGb250UnVsZXMmJmYoZSx0KSxvLnJlbW92ZUR1cGxpY2F0ZU1lZGlhQmxvY2tzJiZwKGUsdCksby5yZW1vdmVVbnVzZWRBdFJ1bGVzJiZkKGUsdCksby5tZXJnZU1lZGlhKWZvcihpPShyPXMoZSx0KSkubGVuZ3RoLTE7MDw9aTtpLS0peShyW2ldWzJdLHQsITEpO3JldHVybiBvLnJlbW92ZUVtcHR5JiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dFtuXSxvPSExO3N3aXRjaChpWzBdKXtjYXNlIGIuUlVMRTpvPTA9PT1pWzFdLmxlbmd0aHx8MD09PWlbMl0ubGVuZ3RoO2JyZWFrO2Nhc2UgYi5ORVNURURfQkxPQ0s6ZShpWzJdKSxvPTA9PT1pWzJdLmxlbmd0aDticmVhaztjYXNlIGIuQVRfUlVMRTpvPTA9PT1pWzFdLmxlbmd0aDticmVhaztjYXNlIGIuQVRfUlVMRV9CTE9DSzpvPTA9PT1pWzJdLmxlbmd0aH1vJiYodC5zcGxpY2UobiwxKSxuLS0sci0tKX19KGUpLGV9dC5leHBvcnRzPXl9LHsiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiOjY1LCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuL21lcmdlLWFkamFjZW50IjoyNSwiLi9tZXJnZS1tZWRpYS1xdWVyaWVzIjoyNiwiLi9tZXJnZS1ub24tYWRqYWNlbnQtYnktYm9keSI6MjcsIi4vbWVyZ2Utbm9uLWFkamFjZW50LWJ5LXNlbGVjdG9yIjoyOCwiLi9wcm9wZXJ0aWVzL29wdGltaXplIjozNiwiLi9yZWR1Y2Utbm9uLWFkamFjZW50Ijo0MiwiLi9yZW1vdmUtZHVwbGljYXRlLWZvbnQtYXQtcnVsZXMiOjQzLCIuL3JlbW92ZS1kdXBsaWNhdGUtbWVkaWEtcXVlcmllcyI6NDQsIi4vcmVtb3ZlLWR1cGxpY2F0ZXMiOjQ1LCIuL3JlbW92ZS11bnVzZWQtYXQtcnVsZXMiOjQ2LCIuL3Jlc3RydWN0dXJlIjo1MH1dLDMwOltmdW5jdGlvbihlLHQsbil7dmFyIGM9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL21hcmtlciIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dC52YWx1ZS5sZW5ndGgscz1uLnZhbHVlLmxlbmd0aCx1PU1hdGgubWF4KGEscyksbD1NYXRoLm1pbihhLHMpLTE7Zm9yKG89MDtvPHU7bysrKWlmKHI9dC52YWx1ZVtvXSYmdC52YWx1ZVtvXVsxXXx8cixpPW4udmFsdWVbb10mJm4udmFsdWVbb11bMV18fGksciE9Yy5DT01NQSYmaSE9Yy5DT01NQSYmIWUocixpLG8sbzw9bCkpcmV0dXJuITE7cmV0dXJuITB9fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuLi9jb21wYWN0YWJsZSIpO2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZS5jb21wb25lbnRzLmZpbHRlcih0KVswXX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubmFtZT09PWUubmFtZX19KHQpO3JldHVybiBzKGUsbil8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG87aWYoYVtlLm5hbWVdLnNob3J0aGFuZENvbXBvbmVudHMpZm9yKGk9MCxvPWUuY29tcG9uZW50cy5sZW5ndGg7aTxvO2krKylpZihuPWUuY29tcG9uZW50c1tpXSxyPXMobix0KSlyZXR1cm4gcn0oZSxuKX19LHsiLi4vY29tcGFjdGFibGUiOjIxfV0sMzI6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUudmFsdWUubGVuZ3RoLTE7MDw9dDt0LS0paWYoImluaGVyaXQiPT1lLnZhbHVlW3RdWzFdKXJldHVybiEwO3JldHVybiExfX0se31dLDMzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vY29tcGFjdGFibGUiKTtmdW5jdGlvbiBpKGUsdCl7dmFyIG49cltlLm5hbWVdO3JldHVybiJjb21wb25lbnRzImluIG4mJi0xPG4uY29tcG9uZW50cy5pbmRleE9mKHQubmFtZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaShlLHQpfHwhbiYmISFyW2UubmFtZV0uc2hvcnRoYW5kQ29tcG9uZW50cyYmZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb21wb25lbnRzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSx0KX0pfShlLHQpfX0seyIuLi9jb21wYWN0YWJsZSI6MjF9XSwzNDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuImZvbnQiIT1lLm5hbWV8fC0xPT1lLnZhbHVlWzBdWzFdLmluZGV4T2Yoci5JTlRFUk5BTCl9fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sMzU6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuL2V2ZXJ5LXZhbHVlcy1wYWlyIiksdj1lKCIuL2hhcy1pbmhlcml0IiksYj1lKCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiKSx5PWUoIi4uL2NvbXBhY3RhYmxlIiksXz1lKCIuLi9jbG9uZSIpLmRlZXAsdz1lKCIuLi9yZXN0b3JlLXdpdGgtY29tcG9uZW50cyIpLEU9ZSgiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciKSxBPWUoIi4uLy4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUseD1lKCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ib2R5LGs9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24gZihlLHQsbixyKXt2YXIgaSxvLGEscz1lW3RdO2ZvcihpIGluIG4pdm9pZCAwIT09cyYmaT09cy5uYW1lfHwobz15W2ldLGE9bltpXSxzJiZ1KG4saSxzKT9kZWxldGUgbltpXTpvLmNvbXBvbmVudHMubGVuZ3RoPk9iamVjdC5rZXlzKGEpLmxlbmd0aHx8bChhKXx8cChhLGkscikmJmgoYSkmJihkKGEpP20oZSxhLGkscik6ZyhlLGEsaSxyKSkpfWZ1bmN0aW9uIHUoZSx0LG4pe3ZhciByLGk9eVt0XSxvPXlbbi5uYW1lXTtpZigib3ZlcnJpZGVzU2hvcnRoYW5kcyJpbiBpJiYtMTxpLm92ZXJyaWRlc1Nob3J0aGFuZHMuaW5kZXhPZihuLm5hbWUpKXJldHVybiEwO2lmKG8mJiJjb21wb25lbnRPZiJpbiBvKWZvcihyIGluIGVbdF0paWYoLTE8by5jb21wb25lbnRPZi5pbmRleE9mKHIpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwoZSl7dmFyIHQsbjtmb3IobiBpbiBlKXtpZih2b2lkIDAhPT10JiZlW25dLmltcG9ydGFudCE9dClyZXR1cm4hMDt0PWVbbl0uaW1wb3J0YW50fXJldHVybiExfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByLGksbyxhLHM9eVt0XSx1PVtrLlBST1BFUlRZLFtrLlBST1BFUlRZX05BTUUsdF0sW2suUFJPUEVSVFlfVkFMVUUscy5kZWZhdWx0VmFsdWVdXSxsPUEodSk7Zm9yKGIoW2xdLG4sW10pLG89MCxhPXMuY29tcG9uZW50cy5sZW5ndGg7bzxhO28rKylpZihyPWVbcy5jb21wb25lbnRzW29dXSxpPXlbci5uYW1lXS5jYW5PdmVycmlkZSwhYyhpLmJpbmQobnVsbCxuKSxsLmNvbXBvbmVudHNbb10scikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaChlKXt2YXIgdCxuLHIsaSxvPW51bGw7Zm9yKG4gaW4gZSlpZihyPWVbbl0sInJlc3RvcmUiaW4oaT15W25dKSl7aWYoRShbci5hbGxbci5wb3NpdGlvbl1dLHcpLHQ9aS5yZXN0b3JlKHIseSkubGVuZ3RoLG51bGwhPT1vJiZ0IT09bylyZXR1cm4hMTtvPXR9cmV0dXJuITB9ZnVuY3Rpb24gZChlKXt2YXIgdCxuLHI9bnVsbDtmb3IodCBpbiBlKXtpZihuPXYoZVt0XSksbnVsbCE9PXImJnIhPT1uKXJldHVybiEwO3I9bn1yZXR1cm4hMX1mdW5jdGlvbiBtKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsPVtdLGM9e30sZj17fSxwPXlbdF0saD1bay5QUk9QRVJUWSxbay5QUk9QRVJUWV9OQU1FLHRdLFtrLlBST1BFUlRZX1ZBTFVFLHAuZGVmYXVsdFZhbHVlXV0sZD1BKGgpO2ZvcihiKFtkXSxuLFtdKSxzPTAsdT1wLmNvbXBvbmVudHMubGVuZ3RoO3M8dTtzKyspcj1lW3AuY29tcG9uZW50c1tzXV0sdihyKT8oaT1yLmFsbFtyLnBvc2l0aW9uXS5zbGljZSgwLDIpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGksci52YWx1ZSksbC5wdXNoKGkpLChvPV8ocikpLnZhbHVlPUMoZSxvLm5hbWUpLGQuY29tcG9uZW50c1tzXT1vLGNbci5uYW1lXT1fKHIpKTooKG89XyhyKSkuYWxsPXIuYWxsLGQuY29tcG9uZW50c1tzXT1vLGZbci5uYW1lXT1yKTtyZXR1cm4gYT1PKGYsMSksaFsxXS5wdXNoKGEpLEUoW2RdLHcpLGg9aC5zbGljZSgwLDIpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZC52YWx1ZSksbC51bnNoaWZ0KGgpLFtsLGQsY119KHQsbixyKSxsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1bXSxjPXt9LGY9e30scD15W3RdLGg9W2suUFJPUEVSVFksW2suUFJPUEVSVFlfTkFNRSx0XSxbay5QUk9QRVJUWV9WQUxVRSwiaW5oZXJpdCJdXSxkPUEoaCk7Zm9yKGIoW2RdLG4sW10pLHM9MCx1PXAuY29tcG9uZW50cy5sZW5ndGg7czx1O3MrKylyPWVbcC5jb21wb25lbnRzW3NdXSx2KHIpP2Nbci5uYW1lXT1yOihpPXIuYWxsW3IucG9zaXRpb25dLnNsaWNlKDAsMiksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxyLnZhbHVlKSxsLnB1c2goaSksZltyLm5hbWVdPV8ocikpO3JldHVybiBvPU8oYywxKSxoWzFdLnB1c2gobyksYT1PKGMsMiksaFsyXS5wdXNoKGEpLGwudW5zaGlmdChoKSxbbCxkLGZdfSh0LG4sciksYz11WzBdLGY9bFswXSxwPXgoYykubGVuZ3RoPHgoZikubGVuZ3RoLGg9cD9jOmYsZD1wP3VbMV06bFsxXSxtPXA/dVsyXTpsWzJdLGc9dFtPYmplY3Qua2V5cyh0KVswXV0uYWxsO2ZvcihpIGluIGQucG9zaXRpb249Zy5sZW5ndGgsZC5zaG9ydGhhbmQ9ITAsZC5kaXJ0eT0hMCxkLmFsbD1nLGQuYWxsLnB1c2goaFswXSksZS5wdXNoKGQpLHQpKG89dFtpXSkudW51c2VkPSEwLG8ubmFtZSBpbiBtJiYoYT1tW28ubmFtZV0scz1TKGgsaSksYS5wb3NpdGlvbj1nLmxlbmd0aCxhLmFsbD1nLGEuYWxsLnB1c2gocyksZS5wdXNoKGEpKX1mdW5jdGlvbiBDKGUsdCl7dmFyIG49eVt0XTtyZXR1cm4ib3Bwb3NpdGVUbyJpbiBuP2Vbbi5vcHBvc2l0ZVRvXS52YWx1ZTpbW2suUFJPUEVSVFlfVkFMVUUsbi5kZWZhdWx0VmFsdWVdXX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4scixpLG8sYT1bXTtmb3IobyBpbiBlKWk9KHI9KG49ZVtvXSkuYWxsW24ucG9zaXRpb25dKVt0XVtyW3RdLmxlbmd0aC0xXSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhLGkpO3JldHVybiBhLnNvcnQocyl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWVbMF0scj10WzBdLGk9ZVsxXSxvPXRbMV07cmV0dXJuIG48cj8tMTpuPT09ciYmaTxvPy0xOjF9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXVsxXVsxXT09dClyZXR1cm4gZVtuXX1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBpLG8sYSxzPXlbbl0sdT1bay5QUk9QRVJUWSxbay5QUk9QRVJUWV9OQU1FLG5dLFtrLlBST1BFUlRZX1ZBTFVFLHMuZGVmYXVsdFZhbHVlXV0sbD1BKHUpO2wuc2hvcnRoYW5kPSEwLGwuZGlydHk9ITAsYihbbF0scixbXSk7Zm9yKHZhciBjPTAsZj1zLmNvbXBvbmVudHMubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPXRbcy5jb21wb25lbnRzW2NdXTtsLmNvbXBvbmVudHNbY109XyhwKSxsLmltcG9ydGFudD1wLmltcG9ydGFudCxhPXAuYWxsfWZvcih2YXIgaCBpbiB0KXRbaF0udW51c2VkPSEwO2k9Tyh0LDEpLHVbMV0ucHVzaChpKSxvPU8odCwyKSx1WzJdLnB1c2gobyksbC5wb3NpdGlvbj1hLmxlbmd0aCxsLmFsbD1hLGwuYWxsLnB1c2godSksZS5wdXNoKGwpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw9e307aWYoIShlLmxlbmd0aDwzKSl7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspaWYoaT1lW29dLG49eVtpLm5hbWVdLCFpLnVudXNlZCYmIWkuaGFjayYmIWkuYmxvY2smJihmKGUsbyxsLHQpLG4mJm4uY29tcG9uZW50T2YpKWZvcihzPTAsdT1uLmNvbXBvbmVudE9mLmxlbmd0aDtzPHU7cysrKWxbcj1uLmNvbXBvbmVudE9mW3NdXT1sW3JdfHx7fSxsW3JdW2kubmFtZV09aTtmKGUsbyxsLHQpfX19LHsiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciOjU2LCIuLi8uLi93cmFwLWZvci1vcHRpbWl6aW5nIjo1OCwiLi4vY2xvbmUiOjIwLCIuLi9jb21wYWN0YWJsZSI6MjEsIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIjo0OCwiLi9ldmVyeS12YWx1ZXMtcGFpciI6MzAsIi4vaGFzLWluaGVyaXQiOjMyLCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiOjM5fV0sMzY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuL21lcmdlLWludG8tc2hvcnRoYW5kcyIpLGY9ZSgiLi9vdmVycmlkZS1wcm9wZXJ0aWVzIikscD1lKCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiKSxoPWUoIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIiksZD1lKCIuLi8uLi93cmFwLWZvci1vcHRpbWl6aW5nIikuYWxsLG09ZSgiLi4vLi4vcmVtb3ZlLXVudXNlZCIpLGc9ZSgiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciKSx2PWUoIi4uLy4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIikuT3B0aW1pemF0aW9uTGV2ZWw7dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIsaSl7dmFyIG8sYSxzLHU9aS5vcHRpb25zLmxldmVsW3YuVHdvXSxsPWQodCwhMSx1LnNraXBQcm9wZXJ0aWVzKTtmb3IocChsLGkudmFsaWRhdG9yLGkud2FybmluZ3MpLGE9MCxzPWwubGVuZ3RoO2E8czthKyspKG89bFthXSkuYmxvY2smJmUoby52YWx1ZVswXVsxXSxuLHIsaSk7ciYmdS5tZXJnZUludG9TaG9ydGhhbmRzJiZjKGwsaS52YWxpZGF0b3IpLG4mJnUub3ZlcnJpZGVQcm9wZXJ0aWVzJiZmKGwscixpLm9wdGlvbnMuY29tcGF0aWJpbGl0eSxpLnZhbGlkYXRvciksZyhsLGgpLG0obCl9fSx7Ii4uLy4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vcmVtb3ZlLXVudXNlZCI6NTUsIi4uLy4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIjo0OCwiLi9tZXJnZS1pbnRvLXNob3J0aGFuZHMiOjM1LCIuL292ZXJyaWRlLXByb3BlcnRpZXMiOjM3LCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiOjM5fV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgeT1lKCIuL2hhcy1pbmhlcml0IiksXz1lKCIuL2V2ZXJ5LXZhbHVlcy1wYWlyIiksdz1lKCIuL2ZpbmQtY29tcG9uZW50LWluIiksRT1lKCIuL2lzLWNvbXBvbmVudC1vZiIpLEE9ZSgiLi9pcy1tZXJnZWFibGUtc2hvcnRoYW5kIikseD1lKCIuL292ZXJyaWRlcy1ub24tY29tcG9uZW50LXNob3J0aGFuZCIpLGs9ZSgiLi92ZW5kb3ItcHJlZml4ZXMiKS5zYW1lLEM9ZSgiLi4vY29tcGFjdGFibGUiKSx1PWUoIi4uL2Nsb25lIikuZGVlcCxsPWUoIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIikscz1lKCIuLi9jbG9uZSIpLnNoYWxsb3csYz1lKCIuLi8uLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyIpLGY9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIikscD1lKCIuLi8uLi8uLi90b2tlbml6ZXIvbWFya2VyIikscj1lKCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiKS5wcm9wZXJ0eTtmdW5jdGlvbiBPKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmNvbXBvbmVudHMubGVuZ3RoO24rKyl7dmFyIHI9ZS5jb21wb25lbnRzW25dLGk9Q1tyLm5hbWVdLG89aSYmaS5jYW5PdmVycmlkZXx8by5zYW1lVmFsdWUsYT1zKHIpO2lmKGEudmFsdWU9W1tmLlBST1BFUlRZX1ZBTFVFLGkuZGVmYXVsdFZhbHVlXV0sIV8oby5iaW5kKG51bGwsdCksYSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCl7dC51bnVzZWQ9ITAsVCh0LEIoZSkpLGUudmFsdWU9dC52YWx1ZX1mdW5jdGlvbiBkKGUsdCl7dC51bnVzZWQ9ITAsZS5tdWx0aXBsZXg9ITAsZS52YWx1ZT10LnZhbHVlfWZ1bmN0aW9uIFMoZSx0KXt0Lm11bHRpcGxleD9kKGUsdCk6ZS5tdWx0aXBsZXg/aChlLHQpOmZ1bmN0aW9uKGUsdCl7dC51bnVzZWQ9ITAsZS52YWx1ZT10LnZhbHVlfShlLHQpfWZ1bmN0aW9uIEQoZSx0KXt0LnVudXNlZD0hMDtmb3IodmFyIG49MCxyPWUuY29tcG9uZW50cy5sZW5ndGg7bjxyO24rKylTKGUuY29tcG9uZW50c1tuXSx0LmNvbXBvbmVudHNbbl0sZS5tdWx0aXBsZXgpfWZ1bmN0aW9uIFQoZSx0KXtlLm11bHRpcGxleD0hMCxDW2UubmFtZV0uc2hvcnRoYW5kP2Z1bmN0aW9uKGUsdCl7dmFyIG4scixpO2ZvcihyPTAsaT1lLmNvbXBvbmVudHMubGVuZ3RoO3I8aTtyKyspKG49ZS5jb21wb25lbnRzW3JdKS5tdWx0aXBsZXh8fG8obix0KX0oZSx0KTpvKGUsdCl9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbixyPUNbZS5uYW1lXSxpPSJyZWFsIj09ci5pbnRvTXVsdGlwbGV4TW9kZSxvPSJyZWFsIj09ci5pbnRvTXVsdGlwbGV4TW9kZT9lLnZhbHVlLnNsaWNlKDApOiJwbGFjZWhvbGRlciI9PXIuaW50b011bHRpcGxleE1vZGU/ci5wbGFjZWhvbGRlclZhbHVlOnIuZGVmYXVsdFZhbHVlLGE9QihlKSxzPW8ubGVuZ3RoO2E8dDthKyspaWYoZS52YWx1ZS5wdXNoKFtmLlBST1BFUlRZX1ZBTFVFLHAuQ09NTUFdKSxBcnJheS5pc0FycmF5KG8pKWZvcihuPTA7bjxzO24rKyllLnZhbHVlLnB1c2goaT9vW25dOltmLlBST1BFUlRZX1ZBTFVFLG9bbl1dKTtlbHNlIGUudmFsdWUucHVzaChpP286W2YuUFJPUEVSVFlfVkFMVUUsb10pfWZ1bmN0aW9uIEIoZSl7Zm9yKHZhciB0PTAsbj0wLHI9ZS52YWx1ZS5sZW5ndGg7bjxyO24rKyllLnZhbHVlW25dWzFdPT1wLkNPTU1BJiZ0Kys7cmV0dXJuIHQrMX1mdW5jdGlvbiBtKGUpe3ZhciB0PVtmLlBST1BFUlRZLFtmLlBST1BFUlRZX05BTUUsZS5uYW1lXV0uY29uY2F0KGUudmFsdWUpO3JldHVybiByKFt0XSwwKS5sZW5ndGh9ZnVuY3Rpb24gUihlLHQsbil7Zm9yKHZhciByPTAsaT10OzA8PWkmJihlW2ldLm5hbWUhPW58fGVbaV0udW51c2VkfHxyKyssISgxPHIpKTtpLS0pO3JldHVybiAxPHJ9ZnVuY3Rpb24gTChlLHQpe2Zvcih2YXIgbj0wLHI9ZS5jb21wb25lbnRzLmxlbmd0aDtuPHI7bisrKWlmKCFGKHQuaXNVcmwsZS5jb21wb25lbnRzW25dKSYmRih0LmlzRnVuY3Rpb24sZS5jb21wb25lbnRzW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBGKGUsdCl7Zm9yKHZhciBuPTAscj10LnZhbHVlLmxlbmd0aDtuPHI7bisrKWlmKHQudmFsdWVbbl1bMV0hPXAuQ09NTUEmJmUodC52YWx1ZVtuXVsxXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcShlLHQpe2lmKCFlLm11bHRpcGxleCYmIXQubXVsdGlwbGV4fHxlLm11bHRpcGxleCYmdC5tdWx0aXBsZXgpcmV0dXJuITE7dmFyIG4scj1lLm11bHRpcGxleD9lOnQsaT1lLm11bHRpcGxleD90OmUsbz11KHIpO2MoW29dLGwpO3ZhciBhPXUoaSk7YyhbYV0sbCk7dmFyIHM9bShvKSsxK20oYSk7cmV0dXJuIGUubXVsdGlwbGV4P2gobj13KG8sYSksYSk6KG49dyhhLG8pLFQoYSxCKG8pKSxkKG4sbykpLGMoW2FdLGwpLHM8PW0oYSl9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZS5uYW1lIGluIEN9ZnVuY3Rpb24gTShlLHQpe3JldHVybiFlLm11bHRpcGxleCYmKCJiYWNrZ3JvdW5kIj09ZS5uYW1lfHwiYmFja2dyb3VuZC1pbWFnZSI9PWUubmFtZSkmJnQubXVsdGlwbGV4JiYoImJhY2tncm91bmQiPT10Lm5hbWV8fCJiYWNrZ3JvdW5kLWltYWdlIj09dC5uYW1lKSYmZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAscj1bXSxpPWUubGVuZ3RoO248aTtuKyspe3ZhciBvPWVbbl07b1sxXT09cC5DT01NQT8odC5wdXNoKHIpLHI9W10pOnIucHVzaChvKX1yZXR1cm4gdC5wdXNoKHIpLHR9KGUpLG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoMT09dFtuXS5sZW5ndGgmJiJub25lIj09dFtuXVswXVsxXSlyZXR1cm4hMDtyZXR1cm4hMX0odC52YWx1ZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGYscCxoLGQ7ZTpmb3IocD1lLmxlbmd0aC0xOzA8PXA7cC0tKWlmKFUobz1lW3BdKSYmIW8uYmxvY2spe2k9Q1tvLm5hbWVdLmNhbk92ZXJyaWRlO3Q6Zm9yKGg9cC0xOzA8PWg7aC0tKWlmKFUoYT1lW2hdKSYmIWEuYmxvY2smJiFhLnVudXNlZCYmIW8udW51c2VkJiYoIWEuaGFja3x8by5oYWNrfHxvLmltcG9ydGFudCkmJihhLmhhY2t8fGEuaW1wb3J0YW50fHwhby5oYWNrKSYmKGEuaW1wb3J0YW50IT1vLmltcG9ydGFudHx8YS5oYWNrWzBdPT1vLmhhY2tbMF0pJiYhKGEuaW1wb3J0YW50PT1vLmltcG9ydGFudCYmKGEuaGFja1swXSE9by5oYWNrWzBdfHxhLmhhY2tbMV0mJmEuaGFja1sxXSE9by5oYWNrWzFdKXx8eShvKXx8TShhLG8pKSlpZihvLnNob3J0aGFuZCYmRShvLGEpKXtpZighby5pbXBvcnRhbnQmJmEuaW1wb3J0YW50KWNvbnRpbnVlO2lmKCFrKFthXSxvLmNvbXBvbmVudHMpKWNvbnRpbnVlO2lmKCFGKHIuaXNGdW5jdGlvbixhKSYmTChvLHIpKWNvbnRpbnVlO2lmKCFBKG8pKXthLnVudXNlZD0hMDtjb250aW51ZX1zPXcobyxhKSxpPUNbYS5uYW1lXS5jYW5PdmVycmlkZSxfKGkuYmluZChudWxsLHIpLGEscykmJihhLnVudXNlZD0hMCl9ZWxzZSBpZihvLnNob3J0aGFuZCYmeChvLGEpKXtpZighby5pbXBvcnRhbnQmJmEuaW1wb3J0YW50KWNvbnRpbnVlO2lmKCFrKFthXSxvLmNvbXBvbmVudHMpKWNvbnRpbnVlO2lmKCFGKHIuaXNGdW5jdGlvbixhKSYmTChvLHIpKWNvbnRpbnVlO2ZvcihkPSh1PWEuc2hvcnRoYW5kP2EuY29tcG9uZW50czpbYV0pLmxlbmd0aC0xOzA8PWQ7ZC0tKWlmKGw9dVtkXSxjPXcobyxsKSxpPUNbbC5uYW1lXS5jYW5PdmVycmlkZSwhXyhpLmJpbmQobnVsbCxyKSxhLGMpKWNvbnRpbnVlIHQ7YS51bnVzZWQ9ITB9ZWxzZSBpZih0JiZhLnNob3J0aGFuZCYmIW8uc2hvcnRoYW5kJiZFKGEsbywhMCkpe2lmKG8uaW1wb3J0YW50JiYhYS5pbXBvcnRhbnQpY29udGludWU7aWYoIW8uaW1wb3J0YW50JiZhLmltcG9ydGFudCl7by51bnVzZWQ9ITA7Y29udGludWV9aWYoUihlLHAtMSxhLm5hbWUpKWNvbnRpbnVlO2lmKEwoYSxyKSljb250aW51ZTtpZighQShhKSljb250aW51ZTtpZihzPXcoYSxvKSxfKGkuYmluZChudWxsLHIpLHMsbykpe3ZhciBtPSFuLnByb3BlcnRpZXMuYmFja2dyb3VuZENsaXBNZXJnaW5nJiYtMTxzLm5hbWUuaW5kZXhPZigiYmFja2dyb3VuZC1jbGlwIil8fCFuLnByb3BlcnRpZXMuYmFja2dyb3VuZE9yaWdpbk1lcmdpbmcmJi0xPHMubmFtZS5pbmRleE9mKCJiYWNrZ3JvdW5kLW9yaWdpbiIpfHwhbi5wcm9wZXJ0aWVzLmJhY2tncm91bmRTaXplTWVyZ2luZyYmLTE8cy5uYW1lLmluZGV4T2YoImJhY2tncm91bmQtc2l6ZSIpLGc9Q1tvLm5hbWVdLm5vbk1lcmdlYWJsZVZhbHVlPT09by52YWx1ZVswXVsxXTtpZihtfHxnKWNvbnRpbnVlO2lmKCFuLnByb3BlcnRpZXMubWVyZ2luZyYmTyhhLHIpKWNvbnRpbnVlO2lmKHMudmFsdWVbMF1bMV0hPW8udmFsdWVbMF1bMV0mJih5KGEpfHx5KG8pKSljb250aW51ZTtpZihxKGEsbykpY29udGludWU7IWEubXVsdGlwbGV4JiZvLm11bHRpcGxleCYmVChhLEIobykpLFMocyxvKSxhLmRpcnR5PSEwfX1lbHNlIGlmKHQmJmEuc2hvcnRoYW5kJiZvLnNob3J0aGFuZCYmYS5uYW1lPT1vLm5hbWUpe2lmKCFhLm11bHRpcGxleCYmby5tdWx0aXBsZXgpY29udGludWU7aWYoIW8uaW1wb3J0YW50JiZhLmltcG9ydGFudCl7by51bnVzZWQ9ITA7Y29udGludWUgZX1pZihvLmltcG9ydGFudCYmIWEuaW1wb3J0YW50KXthLnVudXNlZD0hMDtjb250aW51ZX1pZighQShvKSl7YS51bnVzZWQ9ITA7Y29udGludWV9Zm9yKGQ9YS5jb21wb25lbnRzLmxlbmd0aC0xOzA8PWQ7ZC0tKXt2YXIgdj1hLmNvbXBvbmVudHNbZF0sYj1vLmNvbXBvbmVudHNbZF07aWYoaT1DW3YubmFtZV0uY2FuT3ZlcnJpZGUsIV8oaS5iaW5kKG51bGwsciksdixiKSljb250aW51ZSBlfUQoYSxvKSxhLmRpcnR5PSEwfWVsc2UgaWYodCYmYS5zaG9ydGhhbmQmJm8uc2hvcnRoYW5kJiZFKGEsbykpe2lmKCFhLmltcG9ydGFudCYmby5pbXBvcnRhbnQpY29udGludWU7aWYocz13KGEsbyksaT1DW28ubmFtZV0uY2FuT3ZlcnJpZGUsIV8oaS5iaW5kKG51bGwscikscyxvKSljb250aW51ZTtpZihhLmltcG9ydGFudCYmIW8uaW1wb3J0YW50KXtvLnVudXNlZD0hMDtjb250aW51ZX1pZigxPENbby5uYW1lXS5yZXN0b3JlKG8sQykubGVuZ3RoKWNvbnRpbnVlO1Mocz13KGEsbyksbyksby5kaXJ0eT0hMH1lbHNlIGlmKGEubmFtZT09by5uYW1lKXtpZihmPSEwLG8uc2hvcnRoYW5kKWZvcihkPW8uY29tcG9uZW50cy5sZW5ndGgtMTswPD1kJiZmO2QtLSlsPWEuY29tcG9uZW50c1tkXSxjPW8uY29tcG9uZW50c1tkXSxpPUNbYy5uYW1lXS5jYW5PdmVycmlkZSxmPWYmJl8oaS5iaW5kKG51bGwsciksbCxjKTtlbHNlIGk9Q1tvLm5hbWVdLmNhbk92ZXJyaWRlLGY9XyhpLmJpbmQobnVsbCxyKSxhLG8pO2lmKGEuaW1wb3J0YW50JiYhby5pbXBvcnRhbnQmJmYpe28udW51c2VkPSEwO2NvbnRpbnVlfWlmKCFhLmltcG9ydGFudCYmby5pbXBvcnRhbnQmJmYpe2EudW51c2VkPSEwO2NvbnRpbnVlfWlmKCFmKWNvbnRpbnVlO2EudW51c2VkPSEwfX19fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuLi8uLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyI6NTYsIi4uL2Nsb25lIjoyMCwiLi4vY29tcGFjdGFibGUiOjIxLCIuLi9yZXN0b3JlLXdpdGgtY29tcG9uZW50cyI6NDgsIi4vZXZlcnktdmFsdWVzLXBhaXIiOjMwLCIuL2ZpbmQtY29tcG9uZW50LWluIjozMSwiLi9oYXMtaW5oZXJpdCI6MzIsIi4vaXMtY29tcG9uZW50LW9mIjozMywiLi9pcy1tZXJnZWFibGUtc2hvcnRoYW5kIjozNCwiLi9vdmVycmlkZXMtbm9uLWNvbXBvbmVudC1zaG9ydGhhbmQiOjM4LCIuL3ZlbmRvci1wcmVmaXhlcyI6NDF9XSwzODpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2NvbXBhY3RhYmxlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZSBpbiByJiYib3ZlcnJpZGVzU2hvcnRoYW5kcyJpbiByW2UubmFtZV0mJi0xPHJbZS5uYW1lXS5vdmVycmlkZXNTaG9ydGhhbmRzLmluZGV4T2YodC5uYW1lKX19LHsiLi4vY29tcGFjdGFibGUiOjIxfV0sMzk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbD1lKCIuLi9jb21wYWN0YWJsZSIpLGM9ZSgiLi4vaW52YWxpZC1wcm9wZXJ0eS1lcnJvciIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGksbyxhPWUubGVuZ3RoLTE7MDw9YTthLS0pe3ZhciBzPWVbYV0sdT1sW3MubmFtZV07aWYodSYmdS5zaG9ydGhhbmQpe3Muc2hvcnRoYW5kPSEwLHMuZGlydHk9ITA7dHJ5e2lmKHMuY29tcG9uZW50cz11LmJyZWFrVXAocyxsLHQpLHUuc2hvcnRoYW5kQ29tcG9uZW50cylmb3IoaT0wLG89cy5jb21wb25lbnRzLmxlbmd0aDtpPG87aSsrKShyPXMuY29tcG9uZW50c1tpXSkuY29tcG9uZW50cz1sW3IubmFtZV0uYnJlYWtVcChyLGwsdCl9Y2F0Y2goZSl7aWYoIShlIGluc3RhbmNlb2YgYykpdGhyb3cgZTtzLmNvbXBvbmVudHM9W10sbi5wdXNoKGUubWVzc2FnZSl9MDxzLmNvbXBvbmVudHMubGVuZ3RoP3MubXVsdGlwbGV4PXMuY29tcG9uZW50c1swXS5tdWx0aXBsZXg6cy51bnVzZWQ9ITB9fX19LHsiLi4vY29tcGFjdGFibGUiOjIxLCIuLi9pbnZhbGlkLXByb3BlcnR5LWVycm9yIjoyM31dLDQwOltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi92ZW5kb3ItcHJlZml4ZXMiKS5zYW1lO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiEoIW8odCxuKXx8aSYmZS5pc1ZhcmlhYmxlKHQpIT09ZS5pc1ZhcmlhYmxlKG4pKX19LHsiLi92ZW5kb3ItcHJlZml4ZXMiOjQxfV0sNDE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vKD86XnxcVykoXC1cdytcLSkvZztmdW5jdGlvbiBpKGUpe2Zvcih2YXIgdCxuPVtdO251bGwhPT0odD1yLmV4ZWMoZSkpOyktMT09bi5pbmRleE9mKHRbMF0pJiZuLnB1c2godFswXSk7cmV0dXJuIG59dC5leHBvcnRzPXt1bmlxdWU6aSxzYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSkuc29ydCgpLmpvaW4oIiwiKT09aSh0KS5zb3J0KCkuam9pbigiLCIpfX19LHt9XSw0MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBfPWUoIi4vaXMtbWVyZ2VhYmxlIiksZz1lKCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiKSx2PWUoIi4uLy4uL3V0aWxzL2Nsb25lLWFycmF5IiksYj1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSx3PWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHkseT1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcztmdW5jdGlvbiBFKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKFtlW25dWzFdXSk7cmV0dXJuIHR9ZnVuY3Rpb24gQShlLHQsbixyLGkpe2Zvcih2YXIgbz1bXSxhPVtdLHM9W10sdT10Lmxlbmd0aC0xOzA8PXU7dS0tKWlmKCFuLmZpbHRlck91dCh1LG8pKXt2YXIgbD10W3VdLndoZXJlLGM9ZVtsXSxmPXYoY1syXSk7bz1vLmNvbmNhdChmKSxhLnB1c2goZikscy5wdXNoKGwpfWcobywhMCwhMSxpKTtmb3IodmFyIHA9cy5sZW5ndGgsaD1vLmxlbmd0aC0xLGQ9cC0xOzA8PWQ7KWlmKCgwPT09ZHx8b1toXSYmLTE8YVtkXS5pbmRleE9mKG9baF0pKSYmLTE8aCloLS07ZWxzZXt2YXIgbT1vLnNwbGljZShoKzEpO24uY2FsbGJhY2soZVtzW2RdXSxtLHAsZCksZC0tfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5vcHRpb25zLHI9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLGk9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyxvPW4uY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGE9e30scz1bXSx1PWUubGVuZ3RoLTE7MDw9dTt1LS0pe3ZhciBsPWVbdV07aWYobFswXT09Yi5SVUxFJiYwIT09bFsyXS5sZW5ndGgpZm9yKHZhciBjPXkobFsxXSksZj0xPGxbMV0ubGVuZ3RoJiZfKGMscixpLG8pLHA9RShsWzFdKSxoPWY/W2NdLmNvbmNhdChwKTpbY10sZD0wLG09aC5sZW5ndGg7ZDxtO2QrKyl7dmFyIGc9aFtkXTthW2ddP3MucHVzaChnKTphW2ddPVtdLGFbZ10ucHVzaCh7d2hlcmU6dSxsaXN0OnAsaXNQYXJ0aWFsOmYmJjA8ZCxpc0NvbXBsZXg6ZiYmMD09PWR9KX19IWZ1bmN0aW9uKGUsdCxuLHIsaSl7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBjW2VdLmlzUGFydGlhbCYmMD09PXQubGVuZ3RofWZ1bmN0aW9uIGEoZSx0LG4scil7Y1tuLXItMV0uaXNQYXJ0aWFsfHwoZVsyXT10KX1mb3IodmFyIHM9MCx1PXQubGVuZ3RoO3M8dTtzKyspe3ZhciBsPXRbc10sYz1uW2xdO0EoZSxjLHtmaWx0ZXJPdXQ6byxjYWxsYmFjazphfSwwLGkpfX0oZSxzLGEsMCx0KSxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1uLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0NsYXNzZXMsbz1uLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzLGE9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tdWx0aXBsZVBzZXVkb01lcmdpbmcscz17fTtmdW5jdGlvbiB1KGUpe3JldHVybiBzLmRhdGFbZV0ud2hlcmU8cy5pbnRvUG9zaXRpb259ZnVuY3Rpb24gbChlLHQsbixyKXswPT09ciYmcy5yZWR1Y2VkQm9kaWVzLnB1c2godCl9ZTpmb3IodmFyIGMgaW4gdCl7dmFyIGY9dFtjXTtpZihmWzBdLmlzQ29tcGxleCl7dmFyIHA9ZltmLmxlbmd0aC0xXS53aGVyZSxoPWVbcF0sZD1bXSxtPV8oYyxpLG8sYSk/ZlswXS5saXN0OltjXTtzLmludG9Qb3NpdGlvbj1wLHMucmVkdWNlZEJvZGllcz1kO2Zvcih2YXIgZz0wLHY9bS5sZW5ndGg7Zzx2O2crKyl7dmFyIGI9bVtnXSx5PXRbYl07aWYoeS5sZW5ndGg8Miljb250aW51ZSBlO2lmKHMuZGF0YT15LEEoZSx5LHtmaWx0ZXJPdXQ6dSxjYWxsYmFjazpsfSwwLHIpLHcoZFtkLmxlbmd0aC0xXSkhPXcoZFswXSkpY29udGludWUgZX1oWzJdPWRbMF19fX0oZSxhLG4sdCl9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3V0aWxzL2Nsb25lLWFycmF5Ijo4NiwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9pcy1tZXJnZWFibGUiOjI0LCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSxzPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmFsbDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz1bXTtmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKykodD1lW3JdKVswXSE9YS5BVF9SVUxFX0JMT0NLJiYiQGZvbnQtZmFjZSIhPXRbMV1bMF1bMV18fChuPXMoW3RdKSwtMTxvLmluZGV4T2Yobik/dFsyXT1bXTpvLnB1c2gobikpfX0seyIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4fV0sNDQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcz1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSx1PWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmFsbCxsPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLnJ1bGVzO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9e307Zm9yKGk9MCxvPWUubGVuZ3RoO2k8bztpKyspKG49ZVtpXSlbMF09PXMuTkVTVEVEX0JMT0NLJiYoKHQ9YVtyPWwoblsxXSkrIiUiK3UoblsyXSldKSYmKHRbMl09W10pLGFbcl09bil9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3dyaXRlci9vbmUtdGltZSI6OTh9XSw0NTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBjPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGY9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikuYm9keSxwPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLnJ1bGVzO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbz17fSxhPVtdLHM9MCx1PWUubGVuZ3RoO3M8dTtzKyspKG49ZVtzXSlbMF09PWMuUlVMRSYmKG9bdD1wKG5bMV0pXSYmMT09b1t0XS5sZW5ndGg/YS5wdXNoKHQpOm9bdF09b1t0XXx8W10sb1t0XS5wdXNoKHMpKTtmb3Iocz0wLHU9YS5sZW5ndGg7czx1O3MrKyl7aT1bXTtmb3IodmFyIGw9b1t0PWFbc11dLmxlbmd0aC0xOzA8PWw7bC0tKW49ZVtvW3RdW2xdXSxyPWYoblsyXSksLTE8aS5pbmRleE9mKHIpP25bMl09W106aS5wdXNoKHIpfX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OH1dLDQ2OltmdW5jdGlvbihlLHQsbil7dmFyIGY9ZSgiLi9wcm9wZXJ0aWVzL3BvcHVsYXRlLWNvbXBvbmVudHMiKSxwPWUoIi4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUsaD1lKCIuLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyIpLGM9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIiksZD0vXihcLW1velwtfFwtb1wtfFwtd2Via2l0XC0pP2FuaW1hdGlvbi1uYW1lJC8sbT0vXihcLW1velwtfFwtb1wtfFwtd2Via2l0XC0pP2FuaW1hdGlvbiQvLHI9L15AKFwtbW96XC18XC1vXC18XC13ZWJraXRcLSk/a2V5ZnJhbWVzIC8saT0vXHN7MCwzMX0haW1wb3J0YW50JC8sbz0vXihbJyJdPykoLiopXDEkLztmdW5jdGlvbiBnKGUpe3JldHVybiBlLnJlcGxhY2UobywiJDIiKS5yZXBsYWNlKGksIiIpfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXt9O2ZvcihzPTAsdT1lLmxlbmd0aDtzPHU7cysrKXQoZVtzXSxsKTtpZigwIT09T2JqZWN0LmtleXMobCkubGVuZ3RoKWZvcihpIGluIGZ1bmN0aW9uIGUodCxuLHIsaSl7dmFyIG89bihyKTt2YXIgYSxzO2ZvcihhPTAscz10Lmxlbmd0aDthPHM7YSsrKXN3aXRjaCh0W2FdWzBdKXtjYXNlIGMuUlVMRTpvKHRbYV0saSk7YnJlYWs7Y2FzZSBjLk5FU1RFRF9CTE9DSzplKHRbYV1bMl0sbixyLGkpfX0oZSxuLGwsciksbClmb3Iocz0wLHU9KG89bFtpXSkubGVuZ3RoO3M8dTtzKyspKGE9b1tzXSlbYVswXT09Yy5BVF9SVUxFPzE6Ml09W119ZnVuY3Rpb24gcyhlLHQpe3ZhciBuO2VbMF09PWMuQVRfUlVMRV9CTE9DSyYmMD09PWVbMV1bMF1bMV0uaW5kZXhPZigiQGNvdW50ZXItc3R5bGUiKSYmKHRbbj1lWzFdWzBdWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbztmb3IoaT0wLG89ZVsyXS5sZW5ndGg7aTxvO2krKykibGlzdC1zdHlsZSI9PShuPWVbMl1baV0pWzFdWzFdJiYocj1wKG4pLGYoW3JdLHQudmFsaWRhdG9yLHQud2FybmluZ3MpLHIuY29tcG9uZW50c1swXS52YWx1ZVswXVsxXWluIGEmJmRlbGV0ZSBhW25bMl1bMV1dLGgoW3JdKSksImxpc3Qtc3R5bGUtdHlwZSI9PW5bMV1bMV0mJm5bMl1bMV1pbiBhJiZkZWxldGUgYVtuWzJdWzFdXX19ZnVuY3Rpb24gbChlLHQpe3ZhciBuLHIsaSxvO2lmKGVbMF09PWMuQVRfUlVMRV9CTE9DSyYmIkBmb250LWZhY2UiPT1lWzFdWzBdWzFdKWZvcihpPTAsbz1lWzJdLmxlbmd0aDtpPG87aSsrKWlmKCJmb250LWZhbWlseSI9PShuPWVbMl1baV0pWzFdWzFdKXt0W3I9ZyhuWzJdWzFdLnRvTG93ZXJDYXNlKCkpXT10W3JdfHxbXSx0W3JdLnB1c2goZSk7YnJlYWt9fWZ1bmN0aW9uIHYoYyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbDtmb3IoYT0wLHM9ZVsyXS5sZW5ndGg7YTxzO2ErKyl7aWYoImZvbnQiPT0obj1lWzJdW2FdKVsxXVsxXSl7Zm9yKHI9cChuKSxmKFtyXSx0LnZhbGlkYXRvcix0Lndhcm5pbmdzKSx1PTAsbD0oaT1yLmNvbXBvbmVudHNbNl0pLnZhbHVlLmxlbmd0aDt1PGw7dSsrKShvPWcoaS52YWx1ZVt1XVsxXS50b0xvd2VyQ2FzZSgpKSlpbiBjJiZkZWxldGUgY1tvXTtoKFtyXSl9aWYoImZvbnQtZmFtaWx5Ij09blsxXVsxXSlmb3IodT0yLGw9bi5sZW5ndGg7dTxsO3UrKykobz1nKG5bdV1bMV0udG9Mb3dlckNhc2UoKSkpaW4gYyYmZGVsZXRlIGNbb119fX1mdW5jdGlvbiBiKGUsdCl7dmFyIG47ZVswXT09Yy5ORVNURURfQkxPQ0smJnIudGVzdChlWzFdWzBdWzFdKSYmKHRbbj1lWzFdWzBdWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24geShsKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdTtmb3Iobz0wLGE9ZVsyXS5sZW5ndGg7bzxhO28rKyl7aWYobj1lWzJdW29dLG0udGVzdChuWzFdWzFdKSl7Zm9yKHI9cChuKSxmKFtyXSx0LnZhbGlkYXRvcix0Lndhcm5pbmdzKSxzPTAsdT0oaT1yLmNvbXBvbmVudHNbN10pLnZhbHVlLmxlbmd0aDtzPHU7cysrKWkudmFsdWVbc11bMV1pbiBsJiZkZWxldGUgbFtpLnZhbHVlW3NdWzFdXTtoKFtyXSl9aWYoZC50ZXN0KG5bMV1bMV0pKWZvcihzPTIsdT1uLmxlbmd0aDtzPHU7cysrKW5bc11bMV1pbiBsJiZkZWxldGUgbFtuW3NdWzFdXX19fWZ1bmN0aW9uIF8oZSx0KXt2YXIgbjtlWzBdPT1jLkFUX1JVTEUmJjA9PT1lWzFdLmluZGV4T2YoIkBuYW1lc3BhY2UiKSYmKHRbbj1lWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24gdyhzKXt2YXIgdT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKHMpLmpvaW4oIlxcfHwiKSsiXFx8IiwiZyIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE7Zm9yKHI9MCxpPWVbMV0ubGVuZ3RoO3I8aTtyKyspZm9yKG89MCxhPSh0PWVbMV1bcl1bMV0ubWF0Y2godSkpLmxlbmd0aDtvPGE7bysrKShuPXRbb10uc3Vic3RyaW5nKDAsdFtvXS5sZW5ndGgtMSkpaW4gcyYmZGVsZXRlIHNbbl19fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2EoZSxzLHUsdCksYShlLGwsdix0KSxhKGUsYix5LHQpLGEoZSxfLHcsdCl9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4vcHJvcGVydGllcy9wb3B1bGF0ZS1jb21wb25lbnRzIjozOX1dLDQ3OltmdW5jdGlvbihlLHQsbil7dmFyIGg9ZSgiLi9ydWxlcy1vdmVybGFwIiksZD1lKCIuL3NwZWNpZmljaXRpZXMtb3ZlcmxhcCIpLG09L2FsaWduXC1pdGVtc3xib3hcLWFsaWdufGJveFwtcGFja3xmbGV4fGp1c3RpZnkvLGc9L15ib3JkZXJcLSh0b3B8cmlnaHR8Ym90dG9tfGxlZnR8Y29sb3J8c3R5bGV8d2lkdGh8cmFkaXVzKS87ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9ZVswXSxpPWVbMV0sbz1lWzJdLGE9ZVs1XSxzPWVbNl0sdT10WzBdLGw9dFsxXSxjPXRbMl0sZj10WzVdLHA9dFs2XTtyZXR1cm4hKCJmb250Ij09ciYmImxpbmUtaGVpZ2h0Ij09dXx8ImZvbnQiPT11JiYibGluZS1oZWlnaHQiPT1yKSYmKCghbS50ZXN0KHIpfHwhbS50ZXN0KHUpKSYmKCEobz09YyYmYihyKT09Yih1KSYmdihyKV52KHUpKSYmKCgiYm9yZGVyIiE9b3x8IWcudGVzdChjKXx8ISgiYm9yZGVyIj09cnx8cj09Y3x8aSE9bCYmeShyLHUpKSkmJigoImJvcmRlciIhPWN8fCFnLnRlc3Qobyl8fCEoImJvcmRlciI9PXV8fHU9PW98fGkhPWwmJnkocix1KSkpJiYoKCJib3JkZXIiIT1vfHwiYm9yZGVyIiE9Y3x8cj09dXx8IShfKHIpJiZ3KHUpfHx3KHIpJiZfKHUpKSkmJihvIT1jfHwoIShyIT11fHxvIT1jfHxpIT1sJiYhZnVuY3Rpb24oZSx0KXtyZXR1cm4gdihlKSYmdih0KSYmZS5zcGxpdCgiLSIpWzFdIT10LnNwbGl0KCItIilbMl19KGksbCkpfHwociE9dSYmbz09YyYmciE9byYmdSE9Y3x8KHIhPXUmJm89PWMmJmk9PWx8fCghKCFwfHwhc3x8RShvKXx8RShjKXx8aChmLGEsITEpKXx8IWQoYSxmLG4pKSkpKSkpKSkpKX1mdW5jdGlvbiB2KGUpe3JldHVybi9eXC0oPzptb3p8d2Via2l0fG1zfG8pXC0vLnRlc3QoZSl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXC0oPzptb3p8d2Via2l0fG1zfG8pXC0vLCIiKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGUuc3BsaXQoIi0iKS5wb3AoKT09dC5zcGxpdCgiLSIpLnBvcCgpfWZ1bmN0aW9uIF8oZSl7cmV0dXJuImJvcmRlci10b3AiPT1lfHwiYm9yZGVyLXJpZ2h0Ij09ZXx8ImJvcmRlci1ib3R0b20iPT1lfHwiYm9yZGVyLWxlZnQiPT1lfWZ1bmN0aW9uIHcoZSl7cmV0dXJuImJvcmRlci1jb2xvciI9PWV8fCJib3JkZXItc3R5bGUiPT1lfHwiYm9yZGVyLXdpZHRoIj09ZX1mdW5jdGlvbiBFKGUpe3JldHVybiJmb250Ij09ZXx8ImxpbmUtaGVpZ2h0Ij09ZXx8Imxpc3Qtc3R5bGUiPT1lfXQuZXhwb3J0cz17Y2FuUmVvcmRlcjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXQubGVuZ3RoLTE7MDw9cjtyLS0pZm9yKHZhciBpPWUubGVuZ3RoLTE7MDw9aTtpLS0paWYoIW8oZVtpXSx0W3JdLG4pKXJldHVybiExO3JldHVybiEwfSxjYW5SZW9yZGVyU2luZ2xlOm99fSx7Ii4vcnVsZXMtb3ZlcmxhcCI6NTEsIi4vc3BlY2lmaWNpdGllcy1vdmVybGFwIjo1Mn1dLDQ4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9jb21wYWN0YWJsZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2UubmFtZV07cmV0dXJuIHQmJnQuc2hvcnRoYW5kP3QucmVzdG9yZShlLHIpOmUudmFsdWV9fSx7Ii4vY29tcGFjdGFibGUiOjIxfV0sNDk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgZz1lKCIuL2Nsb25lIikuc2hhbGxvdyx2PWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGI9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpO2Z1bmN0aW9uIHkoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXt2YXIgcj1lW3RdWzFdO2lmKCJpbmhlcml0IiE9ciYmciE9Yi5DT01NQSYmciE9Yi5GT1JXQVJEX1NMQVNIKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5jb21wb25lbnRzLG49dFswXS52YWx1ZVswXSxyPXRbMV0udmFsdWVbMF0saT10WzJdLnZhbHVlWzBdLG89dFszXS52YWx1ZVswXTtyZXR1cm4gblsxXT09clsxXSYmblsxXT09aVsxXSYmblsxXT09b1sxXT9bbl06blsxXT09aVsxXSYmclsxXT09b1sxXT9bbixyXTpyWzFdPT1vWzFdP1tuLHIsaV06W24scixpLG9dfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByLGksbztmb3IoaT0wLG89ZS5sZW5ndGg7aTxvO2krKylpZigocj1lW2ldKS5uYW1lPT1uJiZyLnZhbHVlWzBdWzFdPT10W25dLmRlZmF1bHRWYWx1ZSlyZXR1cm4hMDtyZXR1cm4hMX10LmV4cG9ydHM9e2JhY2tncm91bmQ6ZnVuY3Rpb24oZSxuLHQpe3ZhciByLGksbz1lLmNvbXBvbmVudHMsYT1bXTtmdW5jdGlvbiBzKGUpe0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsZS52YWx1ZSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1uW2UubmFtZV07cmV0dXJuIHQuZG91YmxlVmFsdWVzJiYxPT10LmRlZmF1bHRWYWx1ZS5sZW5ndGg/ZS52YWx1ZVswXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0mJighZS52YWx1ZVsxXXx8ZS52YWx1ZVsxXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0pOnQuZG91YmxlVmFsdWVzJiYxIT10LmRlZmF1bHRWYWx1ZS5sZW5ndGg/ZS52YWx1ZVswXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0mJihlLnZhbHVlWzFdP2UudmFsdWVbMV1bMV06ZS52YWx1ZVswXVsxXSk9PXQuZGVmYXVsdFZhbHVlWzFdOmUudmFsdWVbMF1bMV09PXQuZGVmYXVsdFZhbHVlfWZvcih2YXIgbD1vLmxlbmd0aC0xOzA8PWw7bC0tKXt2YXIgYz1vW2xdLGY9dShjKTtpZigiYmFja2dyb3VuZC1jbGlwIj09Yy5uYW1lKXt2YXIgcD1vW2wtMV0saD11KHApO2k9IShyPWMudmFsdWVbMF1bMV09PXAudmFsdWVbMF1bMV0pJiYoaCYmIWZ8fCFoJiYhZnx8IWgmJmYmJmMudmFsdWVbMF1bMV0hPXAudmFsdWVbMF1bMV0pLHI/cyhwKTppJiYocyhjKSxzKHApKSxsLS19ZWxzZSBpZigiYmFja2dyb3VuZC1zaXplIj09Yy5uYW1lKXt2YXIgZD1vW2wtMV0sbT11KGQpO2k9IShyPSFtJiZmKSYmKG0mJiFmfHwhbSYmIWYpLHI/cyhkKTppPyhzKGMpLGEudW5zaGlmdChbdi5QUk9QRVJUWV9WQUxVRSxiLkZPUldBUkRfU0xBU0hdKSxzKGQpKToxPT1kLnZhbHVlLmxlbmd0aCYmcyhkKSxsLS19ZWxzZXtpZihmfHxuW2MubmFtZV0ubXVsdGlwbGV4TGFzdE9ubHkmJiF0KWNvbnRpbnVlO3MoYyl9fXJldHVybiAwPT09YS5sZW5ndGgmJjE9PWUudmFsdWUubGVuZ3RoJiYiMCI9PWUudmFsdWVbMF1bMV0mJmEucHVzaChlLnZhbHVlWzBdKSwwPT09YS5sZW5ndGgmJmEucHVzaChbdi5QUk9QRVJUWV9WQUxVRSxuW2UubmFtZV0uZGVmYXVsdFZhbHVlXSkseShhKT9bYVswXV06YX0sYm9yZGVyUmFkaXVzOmZ1bmN0aW9uKGUsdCl7aWYoZS5tdWx0aXBsZXgpe2Zvcih2YXIgbj1nKGUpLHI9ZyhlKSxpPTA7aTw0O2krKyl7dmFyIG89ZS5jb21wb25lbnRzW2ldLGE9ZyhlKTthLnZhbHVlPVtvLnZhbHVlWzBdXSxuLmNvbXBvbmVudHMucHVzaChhKTt2YXIgcz1nKGUpO3MudmFsdWU9W28udmFsdWVbMV18fG8udmFsdWVbMF1dLHIuY29tcG9uZW50cy5wdXNoKHMpfXZhciB1PWMobiksbD1jKHIpO3JldHVybiB1Lmxlbmd0aCE9bC5sZW5ndGh8fHVbMF1bMV0hPWxbMF1bMV18fDE8dS5sZW5ndGgmJnVbMV1bMV0hPWxbMV1bMV18fDI8dS5sZW5ndGgmJnVbMl1bMV0hPWxbMl1bMV18fDM8dS5sZW5ndGgmJnVbM11bMV0hPWxbM11bMV0/dS5jb25jYXQoW1t2LlBST1BFUlRZX1ZBTFVFLGIuRk9SV0FSRF9TTEFTSF1dKS5jb25jYXQobCk6dX1yZXR1cm4gYyhlKX0sZm9udDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZS5jb21wb25lbnRzLGk9W10sbz0wLGE9MDtpZigwPT09ZS52YWx1ZVswXVsxXS5pbmRleE9mKGIuSU5URVJOQUwpKXJldHVybiBlLnZhbHVlWzBdWzFdPWUudmFsdWVbMF1bMV0uc3Vic3RyaW5nKGIuSU5URVJOQUwubGVuZ3RoKSxlLnZhbHVlO2Zvcig7bzw0Oykobj1yW29dKS52YWx1ZVswXVsxXSE9dFtuLm5hbWVdLmRlZmF1bHRWYWx1ZSYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxuLnZhbHVlKSxvKys7Zm9yKEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscltvXS52YWx1ZSksclsrK29dLnZhbHVlWzBdWzFdIT10W3Jbb10ubmFtZV0uZGVmYXVsdFZhbHVlJiYoQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxbW3YuUFJPUEVSVFlfVkFMVUUsYi5GT1JXQVJEX1NMQVNIXV0pLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscltvXS52YWx1ZSkpLG8rKztyW29dLnZhbHVlW2FdOylpLnB1c2gocltvXS52YWx1ZVthXSkscltvXS52YWx1ZVthKzFdJiZpLnB1c2goW3YuUFJPUEVSVFlfVkFMVUUsYi5DT01NQV0pLGErKztyZXR1cm4geShpKT9baVswXV06aX0sZm91clZhbHVlczpjLG11bHRpcGxleDpmdW5jdGlvbihtKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighZS5tdWx0aXBsZXgpcmV0dXJuIG0oZSx0LCEwKTt2YXIgbixyLGk9MCxvPVtdLGE9e307Zm9yKG49MCxyPWUuY29tcG9uZW50c1swXS52YWx1ZS5sZW5ndGg7bjxyO24rKyllLmNvbXBvbmVudHNbMF0udmFsdWVbbl1bMV09PWIuQ09NTUEmJmkrKztmb3Iobj0wO248PWk7bisrKXtmb3IodmFyIHM9ZyhlKSx1PTAsbD1lLmNvbXBvbmVudHMubGVuZ3RoO3U8bDt1Kyspe3ZhciBjPWUuY29tcG9uZW50c1t1XSxmPWcoYyk7cy5jb21wb25lbnRzLnB1c2goZik7Zm9yKHZhciBwPWFbZi5uYW1lXXx8MCxoPWMudmFsdWUubGVuZ3RoO3A8aDtwKyspe2lmKGMudmFsdWVbcF1bMV09PWIuQ09NTUEpe2FbZi5uYW1lXT1wKzE7YnJlYWt9Zi52YWx1ZS5wdXNoKGMudmFsdWVbcF0pfX12YXIgZD1tKHMsdCxuPT1pKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvLGQpLG48aSYmby5wdXNoKFt2LlBST1BFUlRZX1ZBTFVFLGIuQ09NTUFdKX1yZXR1cm4gb319LHdpdGhvdXREZWZhdWx0czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmNvbXBvbmVudHMscj1bXSxpPW4ubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBvPW5baV0sYT10W28ubmFtZV07KG8udmFsdWVbMF1bMV0hPWEuZGVmYXVsdFZhbHVlfHwia2VlcFVubGVzc0RlZmF1bHQiaW4gYSYmIXMobix0LGEua2VlcFVubGVzc0RlZmF1bHQpKSYmci51bnNoaWZ0KG8udmFsdWVbMF0pfXJldHVybiAwPT09ci5sZW5ndGgmJnIucHVzaChbdi5QUk9QRVJUWV9WQUxVRSx0W2UubmFtZV0uZGVmYXVsdFZhbHVlXSkseShyKT9bclswXV06cn19fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuL2Nsb25lIjoyMH1dLDUwOltmdW5jdGlvbihlLHQsbil7dmFyIEs9ZSgiLi9yZW9yZGVyYWJsZSIpLmNhblJlb3JkZXJTaW5nbGUsRz1lKCIuL2V4dHJhY3QtcHJvcGVydGllcyIpLFk9ZSgiLi9pcy1tZXJnZWFibGUiKSxXPWUoIi4vdGlkeS1ydWxlLWR1cGxpY2F0ZXMiKSxRPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLFo9ZSgiLi4vLi4vdXRpbHMvY2xvbmUtYXJyYXkiKSxKPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHksWD1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcztmdW5jdGlvbiBlZShlLHQpe3JldHVybiB0PGU/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZyxlKXt2YXIgdCxuLHIsaT1lLm9wdGlvbnMsbz1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0NsYXNzZXMsYT1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzLHM9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZUxpbWl0LHU9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tdWx0aXBsZVBzZXVkb01lcmdpbmcsbD1lLmNhY2hlLnNwZWNpZmljaXR5LHA9e30sYz1bXSxoPXt9LGY9W10sZD0yLG09IiUiO2Z1bmN0aW9uIHYoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LnB1c2goWChlW25dWzFdKSk7cmV0dXJuIHQuam9pbihtKX0odCk7cmV0dXJuIGhbbl09aFtuXXx8W10saFtuXS5wdXNoKFtlLHRdKSxufWZ1bmN0aW9uIGIoZSl7dmFyIHQsbj1lLnNwbGl0KG0pLHI9W107Zm9yKHZhciBpIGluIGgpe3ZhciBvPWkuc3BsaXQobSk7Zm9yKHQ9by5sZW5ndGgtMTswPD10O3QtLSlpZigtMTxuLmluZGV4T2Yob1t0XSkpe3IucHVzaChpKTticmVha319Zm9yKHQ9ci5sZW5ndGgtMTswPD10O3QtLSlkZWxldGUgaFtyW3RdXX1mdW5jdGlvbiB5KGUpe2Zvcih2YXIgdD1bXSxuPVtdLHI9ZS5sZW5ndGgtMTswPD1yO3ItLSlZKFgoZVtyXVsxXSksbyxhLHUpJiYobi51bnNoaWZ0KGVbcl0pLDA8ZVtyXVsyXS5sZW5ndGgmJi0xPT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKSk7cmV0dXJuIDE8dC5sZW5ndGg/bjpbXX1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dFswXSxyPXRbMV0saT10WzRdLG89bi5sZW5ndGgrci5sZW5ndGgrMSxhPVtdLHM9W10sdT15KHBbaV0pO2lmKCEodS5sZW5ndGg8Mikpe3ZhciBsPUUodSxvLDEpLGM9bFswXTtpZigwPGNbMV0pcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi5sZW5ndGgtMTswPD1yO3ItLSl7dmFyIGk9dih0LG5bcl1bMF0pO2lmKDE8aFtpXS5sZW5ndGgmJkMoZSxoW2ldKSl7YihpKTticmVha319fShlLHQsbCk7Zm9yKHZhciBmPWNbMF0ubGVuZ3RoLTE7MDw9ZjtmLS0pYT1jWzBdW2ZdWzFdLmNvbmNhdChhKSxzLnVuc2hpZnQoY1swXVtmXSk7eChlLFt0XSxhPVcoYSkscyl9fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gZVsxXT50WzFdPzE6ZVsxXT09dFsxXT8wOi0xfWZ1bmN0aW9uIEUoZSx0LG4pe3JldHVybiBmdW5jdGlvbiBlKHQsbixyLGkpe3ZhciBvPVtbdCxBKHQsbixyKV1dO2lmKDI8dC5sZW5ndGgmJjA8aSlmb3IodmFyIGE9dC5sZW5ndGgtMTswPD1hO2EtLSl7dmFyIHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwKTtzLnNwbGljZShhLDEpLG89by5jb25jYXQoZShzLG4scixpLTEpKX1yZXR1cm4gb30oZSx0LG4sZC0xKS5zb3J0KHcpfWZ1bmN0aW9uIEEoZSx0LG4pe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGgtMTswPD1pO2ktLSlyKz1lW2ldWzJdLmxlbmd0aD5uP1goZVtpXVsxXSkubGVuZ3RoOi0xO3JldHVybiByLShlLmxlbmd0aC0xKSp0KzF9ZnVuY3Rpb24geChlLHQsbixyKXt2YXIgaSxvLGEscyx1PVtdO2ZvcihpPXIubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBsPXJbaV07Zm9yKG89bFsyXS5sZW5ndGgtMTswPD1vO28tLSl7dmFyIGM9bFsyXVtvXTtmb3IoYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7dmFyIGY9dFthXSxwPWNbMV1bMV0saD1mWzBdLGQ9Zls0XTtpZihwPT1oJiZKKFtjXSk9PWQpe2xbMl0uc3BsaWNlKG8sMSk7YnJlYWt9fX19Zm9yKGk9dC5sZW5ndGgtMTswPD1pO2ktLSl1LnVuc2hpZnQodFtpXVszXSk7dmFyIG09W1EuUlVMRSxuLHVdO2cuc3BsaWNlKGUsMCxtKX1mdW5jdGlvbiBrKGUsdCl7dmFyIG49dFs0XSxyPXBbbl07ciYmMTxyLmxlbmd0aCYmKGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPVtdLG89W10sYT10WzRdLHM9eShwW2FdKTtpZighKHMubGVuZ3RoPDIpKXtlOmZvcih2YXIgdSBpbiBwKXt2YXIgbD1wW3VdO2ZvcihuPXMubGVuZ3RoLTE7MDw9bjtuLS0paWYoLTE9PWwuaW5kZXhPZihzW25dKSljb250aW51ZSBlO2kucHVzaCh1KX1pZihpLmxlbmd0aDwyKXJldHVybiExO2ZvcihuPWkubGVuZ3RoLTE7MDw9bjtuLS0pZm9yKHI9Yy5sZW5ndGgtMTswPD1yO3ItLSlpZihjW3JdWzRdPT1pW25dKXtvLnVuc2hpZnQoW2Nbcl0sc10pO2JyZWFrfXJldHVybiBDKGUsbyl9fShlLHQpfHxfKGUsdCkpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIG4scj0wLGk9W10sbz10Lmxlbmd0aC0xOzA8PW87by0tKXIrPShuPXRbb11bMF0pWzRdLmxlbmd0aCsoMDxvPzE6MCksaS5wdXNoKG4pO3ZhciBhPUUodFswXVsxXSxyLGkubGVuZ3RoKVswXTtpZigwPGFbMV0pcmV0dXJuITE7dmFyIHM9W10sdT1bXTtmb3Iobz1hWzBdLmxlbmd0aC0xOzA8PW87by0tKXM9YVswXVtvXVsxXS5jb25jYXQocyksdS51bnNoaWZ0KGFbMF1bb10pO2Zvcih4KGUsaSxzPVcocyksdSksbz1pLmxlbmd0aC0xOzA8PW87by0tKXtuPWlbb107dmFyIGw9Yy5pbmRleE9mKG4pO2RlbGV0ZSBwW25bNF1dLC0xPGwmJi0xPT1mLmluZGV4T2YobCkmJmYucHVzaChsKX1yZXR1cm4hMH1mdW5jdGlvbiBPKGUsdCxuKXtpZihlWzBdIT10WzBdKXJldHVybiExO3ZhciByPXRbNF0saT1wW3JdO3JldHVybiBpJiYtMTxpLmluZGV4T2Yobil9Zm9yKHZhciBTPWcubGVuZ3RoLTE7MDw9UztTLS0pe3ZhciBELFQsQixSLEwsRj1nW1NdO2lmKEZbMF09PVEuUlVMRSlEPSEwO2Vsc2V7aWYoRlswXSE9US5ORVNURURfQkxPQ0spY29udGludWU7RD0hMX12YXIgcT1jLmxlbmd0aCxVPUcoRik7Zj1bXTt2YXIgTT1bXTtmb3IoVD1VLmxlbmd0aC0xOzA8PVQ7VC0tKWZvcihCPVQtMTswPD1CO0ItLSlpZighSyhVW1RdLFVbQl0sbCkpe00ucHVzaChUKTticmVha31mb3IoVD1VLmxlbmd0aC0xOzA8PVQ7VC0tKXt2YXIgTj1VW1RdLFA9ITE7Zm9yKEI9MDtCPHE7QisrKXt2YXIgST1jW0JdOy0xPT1mLmluZGV4T2YoQikmJighSyhOLEksbCkmJiFPKE4sSSxGKXx8cFtJWzRdXSYmcFtJWzRdXS5sZW5ndGg9PT1zKSYmKGsoUysxLEkpLC0xPT1mLmluZGV4T2YoQikmJihmLnB1c2goQiksZGVsZXRlIHBbSVs0XV0pKSxQfHwoUD1OWzBdPT1JWzBdJiZOWzFdPT1JWzFdKSYmKEw9Qil9aWYoRCYmISgtMTxNLmluZGV4T2YoVCkpKXt2YXIgej1OWzRdO1AmJmNbTF1bNV0ubGVuZ3RoK05bNV0ubGVuZ3RoPnM/KGsoUysxLGNbTF0pLGMuc3BsaWNlKEwsMSkscFt6XT1bRl0sUD0hMSk6KHBbel09cFt6XXx8W10scFt6XS5wdXNoKEYpKSxQP2NbTF09KHQ9Y1tMXSxuPU4scj12b2lkIDAsKHI9Wih0KSlbNV09cls1XS5jb25jYXQobls1XSkscik6Yy5wdXNoKE4pfX1mb3IoVD0wLFI9KGY9Zi5zb3J0KGVlKSkubGVuZ3RoO1Q8UjtUKyspe3ZhciBqPWZbVF0tVDtjLnNwbGljZShqLDEpfX1mb3IodmFyIFY9Z1swXSYmZ1swXVswXT09US5BVF9SVUxFJiYwPT09Z1swXVsxXS5pbmRleE9mKCJAY2hhcnNldCIpPzE6MDtWPGcubGVuZ3RoLTE7VisrKXt2YXIgSD1nW1ZdWzBdPT09US5BVF9SVUxFJiYwPT09Z1tWXVsxXS5pbmRleE9mKCJAaW1wb3J0IiksJD1nW1ZdWzBdPT09US5DT01NRU5UO2lmKCFIJiYhJClicmVha31mb3IoUz0wO1M8Yy5sZW5ndGg7UysrKWsoVixjW1NdKX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vdXRpbHMvY2xvbmUtYXJyYXkiOjg2LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuL2V4dHJhY3QtcHJvcGVydGllcyI6MjIsIi4vaXMtbWVyZ2VhYmxlIjoyNCwiLi9yZW9yZGVyYWJsZSI6NDcsIi4vdGlkeS1ydWxlLWR1cGxpY2F0ZXMiOjU0fV0sNTE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXC1cLS4rJC87ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5yZXBsYWNlKHIsIiIpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1O2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWZvcihyPWVbb11bMV0scz0wLHU9dC5sZW5ndGg7czx1O3MrKyl7aWYocj09KGk9dFtzXVsxXSkpcmV0dXJuITA7aWYobiYmbChyKT09bChpKSlyZXR1cm4hMH1yZXR1cm4hMX19LHt9XSw1MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vc3BlY2lmaWNpdHkiKTtmdW5jdGlvbiBsKGUsdCl7dmFyIG47cmV0dXJuIGUgaW4gdHx8KHRbZV09bj1yKGUpKSxufHx0W2VdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1O2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWZvcihyPWwoZVtvXVsxXSxuKSxzPTAsdT10Lmxlbmd0aDtzPHU7cysrKWlmKGk9bCh0W3NdWzFdLG4pLHJbMF09PT1pWzBdJiZyWzFdPT09aVsxXSYmclsyXT09PWlbMl0pcmV0dXJuITA7cmV0dXJuITF9fSx7Ii4vc3BlY2lmaWNpdHkiOjUzfV0sNTM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgaD1lKCIuLi8uLi90b2tlbml6ZXIvbWFya2VyIiksZD0iLiIsbT0iIyIsZz0iOiIsdj0vW2EtekEtWl0vLGI9Ijpub3QoIix5PS9bXHMsXCg+flwrXS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHUsbD1bMCwwLDBdLGM9MCxmPSExLHA9ITE7Zm9yKGE9MCxzPWUubGVuZ3RoO2E8czthKyspe2lmKHQ9ZVthXSxuKTtlbHNlIGlmKHQhPWguU0lOR0xFX1FVT1RFfHxpfHxyKWlmKHQ9PWguU0lOR0xFX1FVT1RFJiYhaSYmcilyPSExO2Vsc2UgaWYodCE9aC5ET1VCTEVfUVVPVEV8fGl8fHIpaWYodD09aC5ET1VCTEVfUVVPVEUmJmkmJiFyKWk9ITE7ZWxzZXtpZihyfHxpKWNvbnRpbnVlOzA8YyYmIWZ8fCh0PT1oLk9QRU5fUk9VTkRfQlJBQ0tFVD9jKys6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUJiYxPT1jPyhjLS0sZj0hMSk6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUP2MtLTp0PT1tP2xbMF0rKzp0PT1kfHx0PT1oLk9QRU5fU1FVQVJFX0JSQUNLRVQ/bFsxXSsrOnQhPWd8fHB8fCh1PWEsZS5pbmRleE9mKGIsdSk9PT11KT90PT1nP2Y9ITA6KDA9PT1hfHxvKSYmdi50ZXN0KHQpJiZsWzJdKys6KGxbMV0rKyxmPSExKSl9ZWxzZSBpPSEwO2Vsc2Ugcj0hMDtuPXQ9PWguQkFDS19TTEFTSCxwPXQ9PWcsbz0hbiYmeS50ZXN0KHQpfXJldHVybiBsfX0seyIuLi8uLi90b2tlbml6ZXIvbWFya2VyIjo4M31dLDU0OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBlWzFdPnRbMV0/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49W10scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZVtyXTstMT09bi5pbmRleE9mKG9bMV0pJiYobi5wdXNoKG9bMV0pLHQucHVzaChvKSl9cmV0dXJuIHQuc29ydChhKX19LHt9XSw1NTpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgtMTswPD10O3QtLSl7dmFyIG49ZVt0XTtuLnVudXNlZCYmbi5hbGwuc3BsaWNlKG4ucG9zaXRpb24sMSl9fX0se31dLDU2OltmdW5jdGlvbihlLHQsbil7dmFyIHU9ZSgiLi9oYWNrIiksbD1lKCIuLi90b2tlbml6ZXIvbWFya2VyIiksYz0iKiIsZj0iXFwiLHA9IiFpbXBvcnRhbnQiLGg9Il8iLGQ9IiFpZSI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtmb3Iobz1lLmxlbmd0aC0xOzA8PW87by0tKShuPWVbb10pLnVudXNlZHx8KG4uZGlydHl8fG4uaW1wb3J0YW50fHxuLmhhY2spJiYodD8ocj10KG4pLG4udmFsdWU9cik6cj1uLnZhbHVlLG4uaW1wb3J0YW50JiYoKGE9bikudmFsdWVbYS52YWx1ZS5sZW5ndGgtMV1bMV0rPXApLG4uaGFjayYmKHM9bixzLmhhY2tbMF09PXUuVU5ERVJTQ09SRT9zLm5hbWU9aCtzLm5hbWU6cy5oYWNrWzBdPT11LkFTVEVSSVNLP3MubmFtZT1jK3MubmFtZTpzLmhhY2tbMF09PXUuQkFDS1NMQVNIP3MudmFsdWVbcy52YWx1ZS5sZW5ndGgtMV1bMV0rPWYrcy5oYWNrWzFdOnMuaGFja1swXT09dS5CQU5HJiYocy52YWx1ZVtzLnZhbHVlLmxlbmd0aC0xXVsxXSs9bC5TUEFDRStkKSksImFsbCJpbiBuJiYoKGk9bi5hbGxbbi5wb3NpdGlvbl0pWzFdWzFdPW4ubmFtZSxpLnNwbGljZSgyLGkubGVuZ3RoLTEpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscikpKTt2YXIgc319LHsiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4vaGFjayI6OH1dLDU3OltmdW5jdGlvbihlLHQsbil7dmFyIHI9InZhclxcKFxcLVxcLVteXFwpXStcXCkiLGk9bmV3IFJlZ0V4cCgiXihcXC1tb3pcXC18XFwtd2Via2l0XFwtKT9jYWxjXFwoW15cXCldK1xcKSQiLCJpIiksYT0vWzAtOV0vLG89bmV3IFJlZ0V4cCgiXih2YXJcXChcXC1cXC1bXlxcKV0rXFwpfFtBLVpdKyhcXC18W0EtWl18WzAtOV0pK1xcKC4qP1xcKXxcXC0oXFwtfFtBLVpdfFswLTldKStcXCguKj9cXCkpJCIsImkiKSxzPS9eaHNsXChcc3swLDMxfVtcLVwuXT9cZCtcc3swLDMxfSxcc3swLDMxfVwuP1xkKyVcc3swLDMxfSxcc3swLDMxfVwuP1xkKyVcc3swLDMxfVwpfGhzbGFcKFxzezAsMzF9W1wtXC5dP1xkK1xzezAsMzF9LFxzezAsMzF9XC4/XGQrJVxzezAsMzF9LFxzezAsMzF9XC4/XGQrJVxzezAsMzF9LFxzezAsMzF9XC4/XGQrXHN7MCwzMX1cKSQvLHU9L14oXC1bYS16MC05X11bYS16MC05XC1fXSp8W2Etel1bYS16MC05XC1fXSopJC9pLGw9L15bYS16XSskL2ksYz0vXi0oW2EtejAtOV18LSkqJC9pLGY9L15yZ2JcKFxzezAsMzF9W1xkXXsxLDN9XHN7MCwzMX0sXHN7MCwzMX1bXGRdezEsM31cc3swLDMxfSxcc3swLDMxfVtcZF17MSwzfVxzezAsMzF9XCl8cmdiYVwoXHN7MCwzMX1bXGRdezEsM31cc3swLDMxfSxcc3swLDMxfVtcZF17MSwzfVxzezAsMzF9LFxzezAsMzF9W1xkXXsxLDN9XHN7MCwzMX0sXHN7MCwzMX1bXC5cZF0rXHN7MCwzMX1cKSQvLHA9L14oY3ViaWNcLWJlemllcnxzdGVwcylcKFteXCldK1wpJC8saD1bIm1zIiwicyJdLGQ9L151cmxcKFtcc1xTXStcKSQvaSxtPW5ldyBSZWdFeHAoIl4iK3IrIiQiLCJpIiksZz0vXiNbMC05YS1mXXs4fSQvaSx2PS9eI1swLTlhLWZdezR9JC9pLGI9L14jWzAtOWEtZl17Nn0kL2kseT0vXiNbMC05YS1mXXszfSQvaSxfPSIuIix3PSItIixFPSIrIixBPXsiXiI6WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il0sIiotc3R5bGUiOlsiYXV0byIsImRhc2hlZCIsImRvdHRlZCIsImRvdWJsZSIsImdyb292ZSIsImhpZGRlbiIsImluc2V0Iiwibm9uZSIsIm91dHNldCIsInJpZGdlIiwic29saWQiXSwiKi10aW1pbmctZnVuY3Rpb24iOlsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLWluLW91dCIsImVhc2Utb3V0IiwibGluZWFyIiwic3RlcC1lbmQiLCJzdGVwLXN0YXJ0Il0sImFuaW1hdGlvbi1kaXJlY3Rpb24iOlsiYWx0ZXJuYXRlIiwiYWx0ZXJuYXRlLXJldmVyc2UiLCJub3JtYWwiLCJyZXZlcnNlIl0sImFuaW1hdGlvbi1maWxsLW1vZGUiOlsiYmFja3dhcmRzIiwiYm90aCIsImZvcndhcmRzIiwibm9uZSJdLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IjpbImluZmluaXRlIl0sImFuaW1hdGlvbi1uYW1lIjpbIm5vbmUiXSwiYW5pbWF0aW9uLXBsYXktc3RhdGUiOlsicGF1c2VkIiwicnVubmluZyJdLCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOlsiZml4ZWQiLCJpbmhlcml0IiwibG9jYWwiLCJzY3JvbGwiXSwiYmFja2dyb3VuZC1jbGlwIjpbImJvcmRlci1ib3giLCJjb250ZW50LWJveCIsImluaGVyaXQiLCJwYWRkaW5nLWJveCIsInRleHQiXSwiYmFja2dyb3VuZC1vcmlnaW4iOlsiYm9yZGVyLWJveCIsImNvbnRlbnQtYm94IiwiaW5oZXJpdCIsInBhZGRpbmctYm94Il0sImJhY2tncm91bmQtcG9zaXRpb24iOlsiYm90dG9tIiwiY2VudGVyIiwibGVmdCIsInJpZ2h0IiwidG9wIl0sImJhY2tncm91bmQtcmVwZWF0IjpbIm5vLXJlcGVhdCIsImluaGVyaXQiLCJyZXBlYXQiLCJyZXBlYXQteCIsInJlcGVhdC15Iiwicm91bmQiLCJzcGFjZSJdLCJiYWNrZ3JvdW5kLXNpemUiOlsiYXV0byIsImNvdmVyIiwiY29udGFpbiJdLCJib3JkZXItY29sbGFwc2UiOlsiY29sbGFwc2UiLCJpbmhlcml0Iiwic2VwYXJhdGUiXSxib3R0b206WyJhdXRvIl0sY2xlYXI6WyJib3RoIiwibGVmdCIsIm5vbmUiLCJyaWdodCJdLGNvbG9yOlsidHJhbnNwYXJlbnQiXSxjdXJzb3I6WyJhbGwtc2Nyb2xsIiwiYXV0byIsImNvbC1yZXNpemUiLCJjcm9zc2hhaXIiLCJkZWZhdWx0IiwiZS1yZXNpemUiLCJoZWxwIiwibW92ZSIsIm4tcmVzaXplIiwibmUtcmVzaXplIiwibm8tZHJvcCIsIm5vdC1hbGxvd2VkIiwibnctcmVzaXplIiwicG9pbnRlciIsInByb2dyZXNzIiwicm93LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIiwic3ctcmVzaXplIiwidGV4dCIsInZlcnRpY2FsLXRleHQiLCJ3LXJlc2l6ZSIsIndhaXQiXSxkaXNwbGF5OlsiYmxvY2siLCJpbmxpbmUiLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUtdGFibGUiLCJsaXN0LWl0ZW0iLCJub25lIiwidGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdyIsInRhYmxlLXJvdy1ncm91cCJdLGZsb2F0OlsibGVmdCIsIm5vbmUiLCJyaWdodCJdLGxlZnQ6WyJhdXRvIl0sZm9udDpbImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiLCJ1bnNldCJdLCJmb250LXNpemUiOlsibGFyZ2UiLCJsYXJnZXIiLCJtZWRpdW0iLCJzbWFsbCIsInNtYWxsZXIiLCJ4LWxhcmdlIiwieC1zbWFsbCIsInh4LWxhcmdlIiwieHgtc21hbGwiXSwiZm9udC1zdHJldGNoIjpbImNvbmRlbnNlZCIsImV4cGFuZGVkIiwiZXh0cmEtY29uZGVuc2VkIiwiZXh0cmEtZXhwYW5kZWQiLCJub3JtYWwiLCJzZW1pLWNvbmRlbnNlZCIsInNlbWktZXhwYW5kZWQiLCJ1bHRyYS1jb25kZW5zZWQiLCJ1bHRyYS1leHBhbmRlZCJdLCJmb250LXN0eWxlIjpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXSwiZm9udC12YXJpYW50IjpbIm5vcm1hbCIsInNtYWxsLWNhcHMiXSwiZm9udC13ZWlnaHQiOlsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCJub3JtYWwiXSwibGluZS1oZWlnaHQiOlsibm9ybWFsIl0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlsiaW5zaWRlIiwib3V0c2lkZSJdLCJsaXN0LXN0eWxlLXR5cGUiOlsiYXJtZW5pYW4iLCJjaXJjbGUiLCJkZWNpbWFsIiwiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCJkaXNjIiwiZGVjaW1hbHxkaXNjIiwiZ2VvcmdpYW4iLCJsb3dlci1hbHBoYSIsImxvd2VyLWdyZWVrIiwibG93ZXItbGF0aW4iLCJsb3dlci1yb21hbiIsIm5vbmUiLCJzcXVhcmUiLCJ1cHBlci1hbHBoYSIsInVwcGVyLWxhdGluIiwidXBwZXItcm9tYW4iXSxvdmVyZmxvdzpbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiLCJ2aXNpYmxlIl0scG9zaXRpb246WyJhYnNvbHV0ZSIsImZpeGVkIiwicmVsYXRpdmUiLCJzdGF0aWMiXSxyaWdodDpbImF1dG8iXSwidGV4dC1hbGlnbiI6WyJjZW50ZXIiLCJqdXN0aWZ5IiwibGVmdCIsImxlZnR8cmlnaHQiLCJyaWdodCJdLCJ0ZXh0LWRlY29yYXRpb24iOlsibGluZS10aHJvdWdoIiwibm9uZSIsIm92ZXJsaW5lIiwidW5kZXJsaW5lIl0sInRleHQtb3ZlcmZsb3ciOlsiY2xpcCIsImVsbGlwc2lzIl0sdG9wOlsiYXV0byJdLCJ2ZXJ0aWNhbC1hbGlnbiI6WyJiYXNlbGluZSIsImJvdHRvbSIsIm1pZGRsZSIsInN1YiIsInN1cGVyIiwidGV4dC1ib3R0b20iLCJ0ZXh0LXRvcCIsInRvcCJdLHZpc2liaWxpdHk6WyJjb2xsYXBzZSIsImhpZGRlbiIsInZpc2libGUiXSwid2hpdGUtc3BhY2UiOlsibm9ybWFsIiwibm93cmFwIiwicHJlIl0sd2lkdGg6WyJpbmhlcml0IiwiaW5pdGlhbCIsIm1lZGl1bSIsInRoaWNrIiwidGhpbiJdfSx4PVsiJSIsImNoIiwiY20iLCJlbSIsImV4IiwiaW4iLCJtbSIsInBjIiwicHQiLCJweCIsInJlbSIsInZoIiwidm0iLCJ2bWF4Iiwidm1pbiIsInZ3Il07ZnVuY3Rpb24gayhlKXtyZXR1cm4iYXV0byIhPWUmJihSKCJjb2xvciIpKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4geS50ZXN0KGUpfHx2LnRlc3QoZSl8fGIudGVzdChlKXx8Zy50ZXN0KGUpfShlKXx8QyhlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGwudGVzdChlKX0oZSkpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIEYoZSl8fEQoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gaS50ZXN0KGUpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIG8udGVzdChlKX1mdW5jdGlvbiBEKGUpe3JldHVybiBzLnRlc3QoZSl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gdS50ZXN0KGUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIm5vbmUiPT1lfHwiaW5oZXJpdCI9PWV8fFAoZSl9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTE8QVt0XS5pbmRleE9mKGUpfX1mdW5jdGlvbiBMKGUpe3JldHVybiB6KGUpPT1lLmxlbmd0aH1mdW5jdGlvbiBGKGUpe3JldHVybiBmLnRlc3QoZSl9ZnVuY3Rpb24gcShlKXtyZXR1cm4gYy50ZXN0KGUpfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIEwoZSkmJjA8PXBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4gbS50ZXN0KGUpfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9eihlKTtyZXR1cm4gdD09ZS5sZW5ndGgmJjA9PT1wYXJzZUludChlKXx8LTE8dCYmLTE8aC5pbmRleE9mKGUuc2xpY2UodCsxKSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gZC50ZXN0KGUpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuImF1dG8iPT1lfHxMKGUpfHxSKCJeIikoZSl9ZnVuY3Rpb24geihlKXt2YXIgdCxuLHIsaT0hMSxvPSExO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKHQ9ZVtuXSwwIT09bnx8dCE9RSYmdCE9dyl7aWYoMDxuJiZvJiYodD09RXx8dD09dykpcmV0dXJuIG4tMTtpZih0IT1ffHxpKXtpZih0PT1fJiZpKXJldHVybiBuLTE7aWYoYS50ZXN0KHQpKWNvbnRpbnVlO3JldHVybiBuLTF9aT0hMH1lbHNlIG89ITA7cmV0dXJuIG59dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXguc2xpY2UoMCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEoZSBpbiB0LnVuaXRzKXx8ITA9PT10LnVuaXRzW2VdfSk7cmV0dXJue2NvbG9yT3BhY2l0eTp0LmNvbG9ycy5vcGFjaXR5LGlzQW5pbWF0aW9uRGlyZWN0aW9uS2V5d29yZDpSKCJhbmltYXRpb24tZGlyZWN0aW9uIiksaXNBbmltYXRpb25GaWxsTW9kZUtleXdvcmQ6UigiYW5pbWF0aW9uLWZpbGwtbW9kZSIpLGlzQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRLZXl3b3JkOlIoImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiKSxpc0FuaW1hdGlvbk5hbWVLZXl3b3JkOlIoImFuaW1hdGlvbi1uYW1lIiksaXNBbmltYXRpb25QbGF5U3RhdGVLZXl3b3JkOlIoImFuaW1hdGlvbi1wbGF5LXN0YXRlIiksaXNUaW1pbmdGdW5jdGlvbjpmdW5jdGlvbigpe3ZhciB0PVIoIiotdGltaW5nLWZ1bmN0aW9uIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfHxwLnRlc3QoZSl9fSgpLGlzQmFja2dyb3VuZEF0dGFjaG1lbnRLZXl3b3JkOlIoImJhY2tncm91bmQtYXR0YWNobWVudCIpLGlzQmFja2dyb3VuZENsaXBLZXl3b3JkOlIoImJhY2tncm91bmQtY2xpcCIpLGlzQmFja2dyb3VuZE9yaWdpbktleXdvcmQ6UigiYmFja2dyb3VuZC1vcmlnaW4iKSxpc0JhY2tncm91bmRQb3NpdGlvbktleXdvcmQ6UigiYmFja2dyb3VuZC1wb3NpdGlvbiIpLGlzQmFja2dyb3VuZFJlcGVhdEtleXdvcmQ6UigiYmFja2dyb3VuZC1yZXBlYXQiKSxpc0JhY2tncm91bmRTaXplS2V5d29yZDpSKCJiYWNrZ3JvdW5kLXNpemUiKSxpc0NvbG9yOmssaXNDb2xvckZ1bmN0aW9uOkMsaXNEeW5hbWljVW5pdDpPLGlzRm9udEtleXdvcmQ6UigiZm9udCIpLGlzRm9udFNpemVLZXl3b3JkOlIoImZvbnQtc2l6ZSIpLGlzRm9udFN0cmV0Y2hLZXl3b3JkOlIoImZvbnQtc3RyZXRjaCIpLGlzRm9udFN0eWxlS2V5d29yZDpSKCJmb250LXN0eWxlIiksaXNGb250VmFyaWFudEtleXdvcmQ6UigiZm9udC12YXJpYW50IiksaXNGb250V2VpZ2h0S2V5d29yZDpSKCJmb250LXdlaWdodCIpLGlzRnVuY3Rpb246Uyxpc0dsb2JhbDpSKCJeIiksaXNIc2xDb2xvcjpELGlzSWRlbnRpZmllcjpULGlzSW1hZ2U6Qixpc0tleXdvcmQ6Uixpc0xpbmVIZWlnaHRLZXl3b3JkOlIoImxpbmUtaGVpZ2h0IiksaXNMaXN0U3R5bGVQb3NpdGlvbktleXdvcmQ6UigibGlzdC1zdHlsZS1wb3NpdGlvbiIpLGlzTGlzdFN0eWxlVHlwZUtleXdvcmQ6UigibGlzdC1zdHlsZS10eXBlIiksaXNOdW1iZXI6TCxpc1ByZWZpeGVkOnEsaXNQb3NpdGl2ZU51bWJlcjpVLGlzUmdiQ29sb3I6Rixpc1N0eWxlS2V5d29yZDpSKCIqLXN0eWxlIiksaXNUaW1lOk4saXNVbml0OmZ1bmN0aW9uKGUsdCl7dmFyIG49eih0KTtyZXR1cm4gbj09dC5sZW5ndGgmJjA9PT1wYXJzZUludCh0KXx8LTE8biYmLTE8ZS5pbmRleE9mKHQuc2xpY2UobisxKSl8fCJhdXRvIj09dHx8ImluaGVyaXQiPT10fS5iaW5kKG51bGwsZSksaXNVcmw6UCxpc1ZhcmlhYmxlOk0saXNXaWR0aDpSKCJ3aWR0aCIpLGlzWkluZGV4Okl9fX0se31dLDU4OltmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSgiLi9oYWNrIiksbz1lKCIuLi90b2tlbml6ZXIvbWFya2VyIikscz1lKCIuLi90b2tlbml6ZXIvdG9rZW4iKSxhPXtBU1RFUklTSzoiKiIsQkFDS1NMQVNIOiJcXCIsQkFORzoiISIsQkFOR19TVUZGSVhfUEFUVEVSTjovIVx3KyQvLElNUE9SVEFOVF9UT0tFTjoiIWltcG9ydGFudCIsSU1QT1JUQU5UX1RPS0VOX1BBVFRFUk46bmV3IFJlZ0V4cCgiIWltcG9ydGFudCQiLCJpIiksSU1QT1JUQU5UX1dPUkQ6ImltcG9ydGFudCIsSU1QT1JUQU5UX1dPUkRfUEFUVEVSTjpuZXcgUmVnRXhwKCJpbXBvcnRhbnQkIiwiaSIpLFNVRkZJWF9CQU5HX1BBVFRFUk46LyEkLyxVTkRFUlNDT1JFOiJfIixWQVJJQUJMRV9SRUZFUkVOQ0VfUEFUVEVSTjovdmFyXCgtLS4rXCkkL307ZnVuY3Rpb24gdShlKXt2YXIgdCxuLHIsaTtmb3IodD0yLG49ZS5sZW5ndGg7dDxuO3QrKylpZigocj1lW3RdKVswXT09cy5QUk9QRVJUWV9WQUxVRSYmKGk9clsxXSxhLlZBUklBQkxFX1JFRkVSRU5DRV9QQVRURVJOLnRlc3QoaSkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8MylyZXR1cm4hMTt2YXIgdD1lW2UubGVuZ3RoLTFdO3JldHVybiEhYS5JTVBPUlRBTlRfVE9LRU5fUEFUVEVSTi50ZXN0KHRbMV0pfHwhKCFhLklNUE9SVEFOVF9XT1JEX1BBVFRFUk4udGVzdCh0WzFdKXx8IWEuU1VGRklYX0JBTkdfUEFUVEVSTi50ZXN0KGVbZS5sZW5ndGgtMl1bMV0pKX0oZSk7dCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZVtlLmxlbmd0aC0xXSxuPWVbZS5sZW5ndGgtMl07YS5JTVBPUlRBTlRfVE9LRU5fUEFUVEVSTi50ZXN0KHRbMV0pP3RbMV09dFsxXS5yZXBsYWNlKGEuSU1QT1JUQU5UX1RPS0VOX1BBVFRFUk4sIiIpOih0WzFdPXRbMV0ucmVwbGFjZShhLklNUE9SVEFOVF9XT1JEX1BBVFRFUk4sIiIpLG5bMV09blsxXS5yZXBsYWNlKGEuU1VGRklYX0JBTkdfUEFUVEVSTiwiIikpLDA9PT10WzFdLmxlbmd0aCYmZS5wb3AoKSwwPT09blsxXS5sZW5ndGgmJmUucG9wKCl9KGUpO3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PSExLG49ZVsxXVsxXSxyPWVbZS5sZW5ndGgtMV07cmV0dXJuIG5bMF09PWEuVU5ERVJTQ09SRT90PVtpLlVOREVSU0NPUkVdOm5bMF09PWEuQVNURVJJU0s/dD1baS5BU1RFUklTS106clsxXVswXSE9YS5CQU5HfHxyWzFdLm1hdGNoKGEuSU1QT1JUQU5UX1dPUkRfUEFUVEVSTik/MDxyWzFdLmluZGV4T2YoYS5CQU5HKSYmIXJbMV0ubWF0Y2goYS5JTVBPUlRBTlRfV09SRF9QQVRURVJOKSYmYS5CQU5HX1NVRkZJWF9QQVRURVJOLnRlc3QoclsxXSk/dD1baS5CQU5HXTowPHJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCkmJnJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCk9PXJbMV0ubGVuZ3RoLWEuQkFDS1NMQVNILmxlbmd0aC0xP3Q9W2kuQkFDS1NMQVNILHJbMV0uc3Vic3RyaW5nKHJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCkrMSldOjA9PT1yWzFdLmluZGV4T2YoYS5CQUNLU0xBU0gpJiYyPT1yWzFdLmxlbmd0aCYmKHQ9W2kuQkFDS1NMQVNILHJbMV0uc3Vic3RyaW5nKDEpXSk6dD1baS5CQU5HXSx0fShlKTtyZXR1cm4gblswXT09aS5BU1RFUklTS3x8blswXT09aS5VTkRFUlNDT1JFP2Z1bmN0aW9uKGUpe2VbMV1bMV09ZVsxXVsxXS5zdWJzdHJpbmcoMSl9KGUpOm5bMF0hPWkuQkFDS1NMQVNIJiZuWzBdIT1pLkJBTkd8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuWzFdPW5bMV0uc3Vic3RyaW5nKDAsblsxXS5pbmRleE9mKHRbMF09PWkuQkFDS1NMQVNIP2EuQkFDS1NMQVNIOmEuQkFORykpLnRyaW0oKSwwPT09blsxXS5sZW5ndGgmJmUucG9wKCl9KGUsbikse2Jsb2NrOmVbMl0mJmVbMl1bMF09PXMuUFJPUEVSVFlfQkxPQ0ssY29tcG9uZW50czpbXSxkaXJ0eTohMSxoYWNrOm4saW1wb3J0YW50OnQsbmFtZTplWzFdWzFdLG11bHRpcGxleDozPGUubGVuZ3RoJiZmdW5jdGlvbihlKXt2YXIgdCxuLHI7Zm9yKG49MyxyPWUubGVuZ3RoO248cjtuKyspaWYoKHQ9ZVtuXSlbMF09PXMuUFJPUEVSVFlfVkFMVUUmJih0WzFdPT1vLkNPTU1BfHx0WzFdPT1vLkZPUldBUkRfU0xBU0gpKXJldHVybiEwO3JldHVybiExfShlKSxwb3NpdGlvbjowLHNob3J0aGFuZDohMSx1bnVzZWQ6ITEsdmFsdWU6ZS5zbGljZSgyKX19dC5leHBvcnRzPXthbGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtdO2ZvcihvPWUubGVuZ3RoLTE7MDw9bztvLS0pKGk9ZVtvXSlbMF09PXMuUFJPUEVSVFkmJighdCYmdShpKXx8biYmLTE8bi5pbmRleE9mKGlbMV1bMV0pfHwoKHI9bChpKSkuYWxsPWUsci5wb3NpdGlvbj1vLGEudW5zaGlmdChyKSkpO3JldHVybiBhfSxzaW5nbGU6bH19LHsiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4vaGFjayI6OH1dLDU5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9eyIqIjp7Y29sb3JzOntvcGFjaXR5OiEwfSxwcm9wZXJ0aWVzOntiYWNrZ3JvdW5kQ2xpcE1lcmdpbmc6ITAsYmFja2dyb3VuZE9yaWdpbk1lcmdpbmc6ITAsYmFja2dyb3VuZFNpemVNZXJnaW5nOiEwLGNvbG9yczohMCxpZUJhbmdIYWNrOiExLGllRmlsdGVyczohMSxpZVByZWZpeEhhY2s6ITEsaWVTdWZmaXhIYWNrOiExLG1lcmdpbmc6ITAsc2hvcnRlckxlbmd0aFVuaXRzOiExLHNwYWNlQWZ0ZXJDbG9zaW5nQnJhY2U6ITAsdXJsUXVvdGVzOiExLHplcm9Vbml0czohMH0sc2VsZWN0b3JzOnthZGphY2VudFNwYWNlOiExLGllN0hhY2s6ITEsbWVyZ2VhYmxlUHNldWRvQ2xhc3NlczpbIjphY3RpdmUiLCI6YWZ0ZXIiLCI6YmVmb3JlIiwiOmVtcHR5IiwiOmNoZWNrZWQiLCI6ZGlzYWJsZWQiLCI6ZW1wdHkiLCI6ZW5hYmxlZCIsIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6Zmlyc3QtbGluZSIsIjpmaXJzdC1vZi10eXBlIiwiOmZvY3VzIiwiOmhvdmVyIiwiOmxhbmciLCI6bGFzdC1jaGlsZCIsIjpsYXN0LW9mLXR5cGUiLCI6bGluayIsIjpub3QiLCI6bnRoLWNoaWxkIiwiOm50aC1sYXN0LWNoaWxkIiwiOm50aC1sYXN0LW9mLXR5cGUiLCI6bnRoLW9mLXR5cGUiLCI6b25seS1jaGlsZCIsIjpvbmx5LW9mLXR5cGUiLCI6cm9vdCIsIjp0YXJnZXQiLCI6dmlzaXRlZCJdLG1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzOlsiOjphZnRlciIsIjo6YmVmb3JlIiwiOjpmaXJzdC1sZXR0ZXIiLCI6OmZpcnN0LWxpbmUiXSxtZXJnZUxpbWl0OjgxOTEsbXVsdGlwbGVQc2V1ZG9NZXJnaW5nOiEwfSx1bml0czp7Y2g6ITAsaW46ITAscGM6ITAscHQ6ITAscmVtOiEwLHZoOiEwLHZtOiEwLHZtYXg6ITAsdm1pbjohMCx2dzohMH19fTtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07Im9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpP3Rbbl09biBpbiB0P3Rbbl06cjp0W25dPWkocix0W25dfHx7fSl9cmV0dXJuIHR9ci5pZTExPXJbIioiXSxyLmllMTA9clsiKiJdLHIuaWU5PWkoclsiKiJdLHtwcm9wZXJ0aWVzOntpZUZpbHRlcnM6ITAsaWVTdWZmaXhIYWNrOiEwfX0pLHIuaWU4PWkoci5pZTkse2NvbG9yczp7b3BhY2l0eTohMX0scHJvcGVydGllczp7YmFja2dyb3VuZENsaXBNZXJnaW5nOiExLGJhY2tncm91bmRPcmlnaW5NZXJnaW5nOiExLGJhY2tncm91bmRTaXplTWVyZ2luZzohMSxpZVByZWZpeEhhY2s6ITAsbWVyZ2luZzohMX0sc2VsZWN0b3JzOnttZXJnZWFibGVQc2V1ZG9DbGFzc2VzOlsiOmFmdGVyIiwiOmJlZm9yZSIsIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6Zm9jdXMiLCI6aG92ZXIiLCI6dmlzaXRlZCJdLG1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzOltdfSx1bml0czp7Y2g6ITEscmVtOiExLHZoOiExLHZtOiExLHZtYXg6ITEsdm1pbjohMSx2dzohMX19KSxyLmllNz1pKHIuaWU4LHtwcm9wZXJ0aWVzOntpZUJhbmdIYWNrOiEwfSxzZWxlY3RvcnM6e2llN0hhY2s6ITAsbWVyZ2VhYmxlUHNldWRvQ2xhc3NlczpbIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6aG92ZXIiLCI6dmlzaXRlZCJdfX0pLHQuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShyWyIqIl0sZnVuY3Rpb24obyl7aWYoIm9iamVjdCI9PXR5cGVvZiBvKXJldHVybiBvO2lmKCEvWyxcK1wtXS8udGVzdChvKSlyZXR1cm4gcltvXXx8clsiKiJdO3ZhciBlPW8uc3BsaXQoIiwiKSx0PWVbMF1pbiByP3JbZS5zaGlmdCgpXTpyWyIqIl07cmV0dXJuIG89e30sZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSIrIj09ZVswXSxuPWUuc3Vic3RyaW5nKDEpLnNwbGl0KCIuIikscj1uWzBdLGk9blsxXTtvW3JdPW9bcl18fHt9LG9bcl1baV09dH0pLGkodCxvKX0oZSkpfX0se31dLDYwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vcmVhZGVyL2xvYWQtcmVtb3RlLXJlc291cmNlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxyfX0seyIuLi9yZWFkZXIvbG9hZC1yZW1vdGUtcmVzb3VyY2UiOjc0fV0sNjE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJvcyIpLkVPTCxpPWUoIi4uL3V0aWxzL292ZXJyaWRlIiksbz17QWZ0ZXJBdFJ1bGU6ImFmdGVyQXRSdWxlIixBZnRlckJsb2NrQmVnaW5zOiJhZnRlckJsb2NrQmVnaW5zIixBZnRlckJsb2NrRW5kczoiYWZ0ZXJCbG9ja0VuZHMiLEFmdGVyQ29tbWVudDoiYWZ0ZXJDb21tZW50IixBZnRlclByb3BlcnR5OiJhZnRlclByb3BlcnR5IixBZnRlclJ1bGVCZWdpbnM6ImFmdGVyUnVsZUJlZ2lucyIsQWZ0ZXJSdWxlRW5kczoiYWZ0ZXJSdWxlRW5kcyIsQmVmb3JlQmxvY2tFbmRzOiJiZWZvcmVCbG9ja0VuZHMiLEJldHdlZW5TZWxlY3RvcnM6ImJldHdlZW5TZWxlY3RvcnMifSxhPXtDYXJyaWFnZVJldHVybkxpbmVGZWVkOiJcclxuIixMaW5lRmVlZDoiXG4iLFN5c3RlbTpyfSxzPXtTcGFjZToiICIsVGFiOiJcdCJ9LHU9e0Fyb3VuZFNlbGVjdG9yUmVsYXRpb246ImFyb3VuZFNlbGVjdG9yUmVsYXRpb24iLEJlZm9yZUJsb2NrQmVnaW5zOiJiZWZvcmVCbG9ja0JlZ2lucyIsQmVmb3JlVmFsdWU6ImJlZm9yZVZhbHVlIn0sbD17YnJlYWtzOmIoITEpLGJyZWFrV2l0aDphLlN5c3RlbSxpbmRlbnRCeTowLGluZGVudFdpdGg6cy5TcGFjZSxzcGFjZXM6eSghMSksd3JhcEF0OiExLHNlbWljb2xvbkFmdGVyTGFzdFByb3BlcnR5OiExfSxjPSI7IixmPSI6IixwPSIsIixoPSI9IixkPSJmYWxzZSIsbT0ib2ZmIixnPSJ0cnVlIix2PSJvbiI7ZnVuY3Rpb24gYihlKXt2YXIgdD17fTtyZXR1cm4gdFtvLkFmdGVyQXRSdWxlXT1lLHRbby5BZnRlckJsb2NrQmVnaW5zXT1lLHRbby5BZnRlckJsb2NrRW5kc109ZSx0W28uQWZ0ZXJDb21tZW50XT1lLHRbby5BZnRlclByb3BlcnR5XT1lLHRbby5BZnRlclJ1bGVCZWdpbnNdPWUsdFtvLkFmdGVyUnVsZUVuZHNdPWUsdFtvLkJlZm9yZUJsb2NrRW5kc109ZSx0W28uQmV0d2VlblNlbGVjdG9yc109ZSx0fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9e307cmV0dXJuIHRbdS5Bcm91bmRTZWxlY3RvclJlbGF0aW9uXT1lLHRbdS5CZWZvcmVCbG9ja0JlZ2luc109ZSx0W3UuQmVmb3JlVmFsdWVdPWUsdH1mdW5jdGlvbiBfKGUpe3N3aXRjaChlKXtjYXNlIndpbmRvd3MiOmNhc2UiY3JsZiI6Y2FzZSBhLkNhcnJpYWdlUmV0dXJuTGluZUZlZWQ6cmV0dXJuIGEuQ2FycmlhZ2VSZXR1cm5MaW5lRmVlZDtjYXNlInVuaXgiOmNhc2UibGYiOmNhc2UgYS5MaW5lRmVlZDpyZXR1cm4gYS5MaW5lRmVlZDtkZWZhdWx0OnJldHVybiByfX1mdW5jdGlvbiB3KGUpe3N3aXRjaChlKXtjYXNlInNwYWNlIjpyZXR1cm4gcy5TcGFjZTtjYXNlInRhYiI6cmV0dXJuIHMuVGFiO2RlZmF1bHQ6cmV0dXJuIGV9fXQuZXhwb3J0cz17QnJlYWtzOm8sU3BhY2VzOnUsZm9ybWF0RnJvbTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmITEhPT1lJiYoIm9iamVjdCI9PXR5cGVvZiBlJiYiYnJlYWtXaXRoImluIGUmJihlPWkoZSx7YnJlYWtXaXRoOl8oZS5icmVha1dpdGgpfSkpLCJvYmplY3QiPT10eXBlb2YgZSYmImluZGVudEJ5ImluIGUmJihlPWkoZSx7aW5kZW50Qnk6cGFyc2VJbnQoZS5pbmRlbnRCeSl9KSksIm9iamVjdCI9PXR5cGVvZiBlJiYiaW5kZW50V2l0aCJpbiBlJiYoZT1pKGUse2luZGVudFdpdGg6dyhlLmluZGVudFdpdGgpfSkpLCJvYmplY3QiPT10eXBlb2YgZT9pKGwsZSk6Im9iamVjdCI9PXR5cGVvZiBlP2kobCxlKToic3RyaW5nIj09dHlwZW9mIGUmJiJiZWF1dGlmeSI9PWU/aShsLHticmVha3M6YighMCksaW5kZW50Qnk6MixzcGFjZXM6eSghMCl9KToic3RyaW5nIj09dHlwZW9mIGUmJiJrZWVwLWJyZWFrcyI9PWU/aShsLHticmVha3M6e2FmdGVyQXRSdWxlOiEwLGFmdGVyQmxvY2tCZWdpbnM6ITAsYWZ0ZXJCbG9ja0VuZHM6ITAsYWZ0ZXJDb21tZW50OiEwLGFmdGVyUnVsZUVuZHM6ITAsYmVmb3JlQmxvY2tFbmRzOiEwfX0pOiJzdHJpbmciPT10eXBlb2YgZT9pKGwsZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoYykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdChmKSxyPW5bMF0saT1uWzFdO3JldHVybiJicmVha3MiPT1yfHwic3BhY2VzIj09cj9lW3JdPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KHApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BsaXQoaCkscj1uWzBdLGk9blsxXTtyZXR1cm4gZVtyXT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBkOmNhc2UgbTpyZXR1cm4hMTtjYXNlIGc6Y2FzZSB2OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuIGV9fShpKSxlfSx7fSl9KGkpOiJpbmRlbnRCeSI9PXJ8fCJ3cmFwQXQiPT1yP2Vbcl09cGFyc2VJbnQoaSk6ImluZGVudFdpdGgiPT1yP2Vbcl09dyhpKToiYnJlYWtXaXRoIj09ciYmKGVbcl09XyhpKSksZX0se30pfShlKSk6bCl9fX0seyIuLi91dGlscy9vdmVycmlkZSI6OTUsb3M6MTA5fV0sNjI6W2Z1bmN0aW9uKGUsaSx0KXsoZnVuY3Rpb24odCl7dmFyIG49ZSgidXJsIikscj1lKCIuLi91dGlscy9vdmVycmlkZSIpO2kuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihmdW5jdGlvbihlKXtyZXR1cm4gZT97aG9zdG5hbWU6bi5wYXJzZShlKS5ob3N0bmFtZSxwb3J0OnBhcnNlSW50KG4ucGFyc2UoZSkucG9ydCl9Ont9fSh0LmVudi5IVFRQX1BST1hZfHx0LmVudi5odHRwX3Byb3h5KSxlfHx7fSl9fSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIikpfSx7Ii4uL3V0aWxzL292ZXJyaWRlIjo5NSxfcHJvY2VzczoxMTIsdXJsOjE2Mn1dLDYzOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfHw1ZTN9fSx7fV0sNjQ6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTohMT09PWU/WyJub25lIl06dm9pZCAwPT09ZT9bImxvY2FsIl06ZS5zcGxpdCgiLCIpfX0se31dLDY1OltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi9yb3VuZGluZy1wcmVjaXNpb24iKS5yb3VuZGluZ1ByZWNpc2lvbkZyb20sYT1lKCIuLi91dGlscy9vdmVycmlkZSIpLHM9e1plcm86IjAiLE9uZToiMSIsVHdvOiIyIn0sdT17fTt1W3MuWmVyb109e30sdVtzLk9uZV09e2NsZWFudXBDaGFyc2V0czohMCxub3JtYWxpemVVcmxzOiEwLG9wdGltaXplQmFja2dyb3VuZDohMCxvcHRpbWl6ZUJvcmRlclJhZGl1czohMCxvcHRpbWl6ZUZpbHRlcjohMCxvcHRpbWl6ZUZvbnRXZWlnaHQ6ITAsb3B0aW1pemVPdXRsaW5lOiEwLHJlbW92ZUVtcHR5OiEwLHJlbW92ZU5lZ2F0aXZlUGFkZGluZ3M6ITAscmVtb3ZlUXVvdGVzOiEwLHJlbW92ZVdoaXRlc3BhY2U6ITAscmVwbGFjZU11bHRpcGxlWmVyb3M6ITAscmVwbGFjZVRpbWVVbml0czohMCxyZXBsYWNlWmVyb1VuaXRzOiEwLHJvdW5kaW5nUHJlY2lzaW9uOm8odm9pZCAwKSxzZWxlY3RvcnNTb3J0aW5nTWV0aG9kOiJzdGFuZGFyZCIsc3BlY2lhbENvbW1lbnRzOiJhbGwiLHRpZHlBdFJ1bGVzOiEwLHRpZHlCbG9ja1Njb3BlczohMCx0aWR5U2VsZWN0b3JzOiEwLHRyYW5zZm9ybTpmdW5jdGlvbigpe319LHVbcy5Ud29dPXttZXJnZUFkamFjZW50UnVsZXM6ITAsbWVyZ2VJbnRvU2hvcnRoYW5kczohMCxtZXJnZU1lZGlhOiEwLG1lcmdlTm9uQWRqYWNlbnRSdWxlczohMCxtZXJnZVNlbWFudGljYWxseTohMSxvdmVycmlkZVByb3BlcnRpZXM6ITAscmVtb3ZlRW1wdHk6ITAscmVkdWNlTm9uQWRqYWNlbnRSdWxlczohMCxyZW1vdmVEdXBsaWNhdGVGb250UnVsZXM6ITAscmVtb3ZlRHVwbGljYXRlTWVkaWFCbG9ja3M6ITAscmVtb3ZlRHVwbGljYXRlUnVsZXM6ITAscmVtb3ZlVW51c2VkQXRSdWxlczohMSxyZXN0cnVjdHVyZVJ1bGVzOiExLHNraXBQcm9wZXJ0aWVzOltdfTt2YXIgbD0iKiIsYz0iYWxsIixyPSJmYWxzZSIsaT0ib2ZmIixmPSJ0cnVlIixwPSJvbiIsaD0iOyIsZD0iOiI7ZnVuY3Rpb24gbShlLHQpe3ZhciBuLHI9YSh1W2VdLHt9KTtmb3IobiBpbiByKSJib29sZWFuIj09dHlwZW9mIHJbbl0mJihyW25dPXQpO3JldHVybiByfWZ1bmN0aW9uIGcoZSl7c3dpdGNoKGUpe2Nhc2UgcjpjYXNlIGk6cmV0dXJuITE7Y2FzZSBmOmNhc2UgcDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiB2KGUsbyl7cmV0dXJuIGUuc3BsaXQoaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdChkKSxyPW5bMF0saT1nKG5bMV0pO3JldHVybiBsPT1yfHxjPT1yP2U9YShlLG0obyxpKSk6ZVtyXT1pLGV9LHt9KX10LmV4cG9ydHM9e09wdGltaXphdGlvbkxldmVsOnMsb3B0aW1pemF0aW9uTGV2ZWxGcm9tOmZ1bmN0aW9uKGUpe3ZhciB0PWEodSx7fSksbj1zLlplcm8scj1zLk9uZSxpPXMuVHdvO3JldHVybiB2b2lkIDA9PT1lP2RlbGV0ZSB0W2ldOigic3RyaW5nIj09dHlwZW9mIGUmJihlPXBhcnNlSW50KGUpKSwibnVtYmVyIj09dHlwZW9mIGUmJmU9PT1wYXJzZUludChpKXx8KCJudW1iZXIiPT10eXBlb2YgZSYmZT09PXBhcnNlSW50KHIpP2RlbGV0ZSB0W2ldOiJudW1iZXIiPT10eXBlb2YgZSYmZT09PXBhcnNlSW50KG4pPyhkZWxldGUgdFtpXSxkZWxldGUgdFtyXSk6KCJvYmplY3QiPT10eXBlb2YgZSYmKGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWEoZSx7fSk7Zm9yKG49MDtuPD0yO24rKykodD0iIituKWluIHImJih2b2lkIDA9PT1yW3RdfHwhMT09PXJbdF0pJiZkZWxldGUgclt0XSx0IGluIHImJiEwPT09clt0XSYmKHJbdF09e30pLHQgaW4gciYmInN0cmluZyI9PXR5cGVvZiByW3RdJiYoclt0XT12KHJbdF0sdCkpO3JldHVybiByfShlKSksciBpbiBlJiYicm91bmRpbmdQcmVjaXNpb24iaW4gZVtyXSYmKGVbcl0ucm91bmRpbmdQcmVjaXNpb249byhlW3JdLnJvdW5kaW5nUHJlY2lzaW9uKSksaSBpbiBlJiYic2tpcFByb3BlcnRpZXMiaW4gZVtpXSYmInN0cmluZyI9PXR5cGVvZiBlW2ldLnNraXBQcm9wZXJ0aWVzJiYoZVtpXS5za2lwUHJvcGVydGllcz1lW2ldLnNraXBQcm9wZXJ0aWVzLnNwbGl0KCIsIikpLChuIGluIGV8fHIgaW4gZXx8aSBpbiBlKSYmKHRbbl09YSh0W25dLGVbbl0pKSxyIGluIGUmJmwgaW4gZVtyXSYmKHRbcl09YSh0W3JdLG0ocixnKGVbcl1bbF0pKSksZGVsZXRlIGVbcl1bbF0pLHIgaW4gZSYmYyBpbiBlW3JdJiYodFtyXT1hKHRbcl0sbShyLGcoZVtyXVtjXSkpKSxkZWxldGUgZVtyXVtjXSksciBpbiBlfHxpIGluIGU/dFtyXT1hKHRbcl0sZVtyXSk6ZGVsZXRlIHRbcl0saSBpbiBlJiZsIGluIGVbaV0mJih0W2ldPWEodFtpXSxtKGksZyhlW2ldW2xdKSkpLGRlbGV0ZSBlW2ldW2xdKSxpIGluIGUmJmMgaW4gZVtpXSYmKHRbaV09YSh0W2ldLG0oaSxnKGVbaV1bY10pKSksZGVsZXRlIGVbaV1bY10pLGkgaW4gZT90W2ldPWEodFtpXSxlW2ldKTpkZWxldGUgdFtpXSkpKSx0fX19LHsiLi4vdXRpbHMvb3ZlcnJpZGUiOjk1LCIuL3JvdW5kaW5nLXByZWNpc2lvbiI6Njh9XSw2NjpbZnVuY3Rpb24oZSxyLHQpeyhmdW5jdGlvbih0KXt2YXIgbj1lKCJwYXRoIik7ci5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlP24ucmVzb2x2ZShlKTp0LmN3ZCgpfX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjExMixwYXRoOjExMH1dLDY3OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwhIWV9fSx7fV0sNjg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbz1lKCIuLi91dGlscy9vdmVycmlkZSIpLHI9L15cZCskLyxhPVsiKiIsImFsbCJdLHM9Im9mZiIsaT0iLCIsdT0iPSI7ZnVuY3Rpb24gbChlKXtyZXR1cm57Y2g6ZSxjbTplLGVtOmUsZXg6ZSxpbjplLG1tOmUscGM6ZSxwdDplLHB4OmUscTplLHJlbTplLHZoOmUsdm1heDplLHZtaW46ZSx2dzplLCIlIjplfX10LmV4cG9ydHM9e0RFRkFVTFQ6cyxyb3VuZGluZ1ByZWNpc2lvbkZyb206ZnVuY3Rpb24oZSl7cmV0dXJuIG8obChzKSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT97fToiYm9vbGVhbiI9PXR5cGVvZiBlP3t9OiJudW1iZXIiPT10eXBlb2YgZSYmLTE9PWU/bChzKToibnVtYmVyIj09dHlwZW9mIGU/bChlKToic3RyaW5nIj09dHlwZW9mIGUmJnIudGVzdChlKT9sKHBhcnNlSW50KGUpKToic3RyaW5nIiE9dHlwZW9mIGV8fGUhPXM/Im9iamVjdCIhPXR5cGVvZiBlP2Uuc3BsaXQoaSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdCh1KSxyPW5bMF0saT1wYXJzZUludChuWzFdKTtyZXR1cm4oaXNOYU4oaSl8fC0xPT1pKSYmKGk9cyksLTE8YS5pbmRleE9mKHIpP2U9byhlLGwoaSkpOmVbcl09aSxlfSx7fSk6ZTpsKHMpfShlKSl9fX0seyIuLi91dGlscy9vdmVycmlkZSI6OTV9XSw2OTpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihzLHUpe3ZhciBsPWUoImZzIiksYz1lKCJwYXRoIiksZj1lKCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiKSxwPWUoIi4vbWF0Y2gtZGF0YS11cmkiKSxoPWUoIi4vcmViYXNlLWxvY2FsLW1hcCIpLGQ9ZSgiLi9yZWJhc2UtcmVtb3RlLW1hcCIpLGE9ZSgiLi4vdG9rZW5pemVyL3Rva2VuIiksbT1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxnPWUoIi4uL3V0aWxzL2lzLWRhdGEtdXJpLXJlc291cmNlIiksdj1lKCIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiKSxiPS9eXC9cKiMgc291cmNlTWFwcGluZ1VSTD0oXFMrKSBcKlwvJC87ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaT1bXSxvPXkoZS5zb3VyY2VUb2tlbnNbMF0pO2ZvcihyPWUuc291cmNlVG9rZW5zLmxlbmd0aDtlLmluZGV4PHI7ZS5pbmRleCsrKWlmKCh0PXkobj1lLnNvdXJjZVRva2Vuc1tlLmluZGV4XSkpIT1vJiYoaT1bXSxvPXQpLGkucHVzaChuKSxlLnByb2Nlc3NlZFRva2Vucy5wdXNoKG4pLG5bMF09PWEuQ09NTUVOVCYmYi50ZXN0KG5bMV0pKXJldHVybiBfKG5bMV0sdCxpLGUpO3JldHVybiBlLmNhbGxiYWNrKGUucHJvY2Vzc2VkVG9rZW5zKX1mdW5jdGlvbiB5KGUpe3JldHVybihlWzBdPT1hLkFUX1JVTEV8fGVbMF09PWEuQ09NTUVOVD9lWzJdWzBdOmVbMV1bMF1bMl1bMF0pWzJdfWZ1bmN0aW9uIF8oZSx0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1iLmV4ZWMoZSlbMV07cmV0dXJuIGcoYSk/KGk9ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKSxuPXRbMl0/dFsyXS5zcGxpdCgvWz07XS8pWzJdOiJ1cy1hc2NpaSIscj10WzNdP3RbM10uc3BsaXQoIjsiKVsxXToidXRmOCIsaT0idXRmOCI9PXI/cy51bmVzY2FwZSh0WzRdKTp0WzRdLG89bmV3IHUoaSxyKTtyZXR1cm4gby5jaGFyc2V0PW4sSlNPTi5wYXJzZShvLnRvU3RyaW5nKCkpfShhKSxuKGkpKTp2KGEpP2Z1bmN0aW9uKG4scixpKXt2YXIgZT1mKG4sITAsci5pbmxpbmUpLHQ9IW0obik7e2lmKHIubG9jYWxPbmx5KXJldHVybiByLndhcm5pbmdzLnB1c2goJ0Nhbm5vdCBmZXRjaCByZW1vdGUgcmVzb3VyY2UgZnJvbSAiJytuKyciIGFzIG5vIGNhbGxiYWNrIGdpdmVuLicpLGkobnVsbCk7aWYodClyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggIicrbisnIiBhcyBubyBwcm90b2NvbCBnaXZlbi4nKSxpKG51bGwpO2lmKCFlKXJldHVybiByLndhcm5pbmdzLnB1c2goJ0Nhbm5vdCBmZXRjaCAiJytuKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLGkobnVsbCl9ci5mZXRjaChuLHIuaW5saW5lUmVxdWVzdCxyLmlubGluZVRpbWVvdXQsZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiByLndhcm5pbmdzLnB1c2goJ01pc3Npbmcgc291cmNlIG1hcCBhdCAiJytuKyciIC0gJytlKSxpKG51bGwpO2kodCl9KX0oYSx0LGZ1bmN0aW9uKGUpe3ZhciB0O2U/KHQ9SlNPTi5wYXJzZShlKSxvPWQodCxhKSxuKG8pKTpuKG51bGwpfSk6KHI9Yy5yZXNvbHZlKHQucmViYXNlVG8sYSksKGk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWYoZSwhMSx0LmlubGluZSk7e2lmKCFsLmV4aXN0c1N5bmMoZSl8fCFsLnN0YXRTeW5jKGUpLmlzRmlsZSgpKXJldHVybiB0Lndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIHNvdXJjZSBtYXAgYXQgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpLG51bGw7aWYoIXIpcmV0dXJuIHQud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK2UrJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQuJyksbnVsbH1yZXR1cm4gbj1sLnJlYWRGaWxlU3luYyhlLCJ1dGYtOCIpLEpTT04ucGFyc2Uobil9KHIsdCkpPyhvPWgoaSxyLHQucmViYXNlVG8pLG4obykpOm4obnVsbCkpfShlLHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihyLmlucHV0U291cmNlTWFwVHJhY2tlci50cmFjayh0LGUpLGZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2YXIgaSxvO2ZvcihpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXN3aXRjaCgocj10W2ldKVswXSl7Y2FzZSBhLkFUX1JVTEU6dyhyLG4pO2JyZWFrO2Nhc2UgYS5BVF9SVUxFX0JMT0NLOmUoclsxXSxuKSxlKHJbMl0sbik7YnJlYWs7Y2FzZSBhLkFUX1JVTEVfQkxPQ0tfU0NPUEU6dyhyLG4pO2JyZWFrO2Nhc2UgYS5ORVNURURfQkxPQ0s6ZShyWzFdLG4pLGUoclsyXSxuKTticmVhaztjYXNlIGEuTkVTVEVEX0JMT0NLX1NDT1BFOmNhc2UgYS5DT01NRU5UOncocixuKTticmVhaztjYXNlIGEuUFJPUEVSVFk6ZShyLG4pO2JyZWFrO2Nhc2UgYS5QUk9QRVJUWV9CTE9DSzplKHJbMV0sbik7YnJlYWs7Y2FzZSBhLlBST1BFUlRZX05BTUU6Y2FzZSBhLlBST1BFUlRZX1ZBTFVFOncocixuKTticmVhaztjYXNlIGEuUlVMRTplKHJbMV0sbiksZShyWzJdLG4pO2JyZWFrO2Nhc2UgYS5SVUxFX1NDT1BFOncocixuKX1yZXR1cm4gdH0obixyLmlucHV0U291cmNlTWFwVHJhY2tlcikpLHIuaW5kZXgrKyxpKHIpfSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuLHIsaT1lWzFdLG89ZVsyXSxhPVtdO2ZvcihuPTAscj1vLmxlbmd0aDtuPHI7bisrKWEucHVzaCh0Lm9yaWdpbmFsUG9zaXRpb25Gb3Iob1tuXSxpLmxlbmd0aCkpO2VbMl09YX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtjYWxsYmFjazpuLGZldGNoOnQub3B0aW9ucy5mZXRjaCxpbmRleDowLGlubGluZTp0Lm9wdGlvbnMuaW5saW5lLGlubGluZVJlcXVlc3Q6dC5vcHRpb25zLmlubGluZVJlcXVlc3QsaW5saW5lVGltZW91dDp0Lm9wdGlvbnMuaW5saW5lVGltZW91dCxpbnB1dFNvdXJjZU1hcFRyYWNrZXI6dC5pbnB1dFNvdXJjZU1hcFRyYWNrZXIsbG9jYWxPbmx5OnQubG9jYWxPbmx5LHByb2Nlc3NlZFRva2VuczpbXSxyZWJhc2VUbzp0Lm9wdGlvbnMucmViYXNlVG8sc291cmNlVG9rZW5zOmUsd2FybmluZ3M6dC53YXJuaW5nc307cmV0dXJuIHQub3B0aW9ucy5zb3VyY2VNYXAmJjA8ZS5sZW5ndGg/aShyKTpuKGUpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LGUoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vdXRpbHMvaGFzLXByb3RvY29sIjo4OCwiLi4vdXRpbHMvaXMtZGF0YS11cmktcmVzb3VyY2UiOjg5LCIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiOjkzLCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiOjcyLCIuL21hdGNoLWRhdGEtdXJpIjo3NSwiLi9yZWJhc2UtbG9jYWwtbWFwIjo3OCwiLi9yZWJhc2UtcmVtb3RlLW1hcCI6NzksYnVmZmVyOjQsZnM6MyxwYXRoOjExMH1dLDcwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vdXRpbHMvc3BsaXQiKSxpPS9eXCgvLG89L1wpJC8sYT0vXkBpbXBvcnQvaSxzPS9bJyJdXHMqLyx1PS9ccypbJyJdLyxsPS9edXJsXChccyovaSxjPS9ccypcKS9pO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiB0PWUucmVwbGFjZShhLCIiKS50cmltKCkucmVwbGFjZShsLCIoIikucmVwbGFjZShjLCIpIikucmVwbGFjZShzLCIiKS5yZXBsYWNlKHUsIiIpLFsobj1yKHQsIiAiKSlbMF0ucmVwbGFjZShpLCIiKS5yZXBsYWNlKG8sIiIpLG4uc2xpY2UoMSkuam9pbigiICIpXX19LHsiLi4vdXRpbHMvc3BsaXQiOjk2fV0sNzE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJzb3VyY2UtbWFwIikuU291cmNlTWFwQ29uc3VtZXI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJue2FsbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0uYmluZChudWxsLGUpLGlzVHJhY2tpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbiBlfS5iaW5kKG51bGwsZSksb3JpZ2luYWxQb3NpdGlvbkZvcjpmdW5jdGlvbiBlKHQsbixyLGkpe2Zvcih2YXIgbyxhLHM9blswXSx1PW5bMV0sbD1uWzJdLGM9e2xpbmU6cyxjb2x1bW46dStyfTshbyYmYy5jb2x1bW4+dTspYy5jb2x1bW4tLSxvPXRbbF0ub3JpZ2luYWxQb3NpdGlvbkZvcihjKTtyZXR1cm4hb3x8by5jb2x1bW48MD9uOm51bGw9PT1vLmxpbmUmJjE8cyYmMDxpP2UodCxbcy0xLHUsbF0scixpLTEpOm51bGwhPT1vLmxpbmU/WyhhPW8pLmxpbmUsYS5jb2x1bW4sYS5zb3VyY2VdOm59LmJpbmQobnVsbCxlKSx0cmFjazpmdW5jdGlvbihlLHQsbil7ZVt0XT1uZXcgcihuKX0uYmluZChudWxsLGUpfX19LHsic291cmNlLW1hcCI6MTU1fV0sNzI6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgZj1lKCJwYXRoIikscD1lKCJ1cmwiKSxyPWUoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpLGg9ZSgiLi4vdXRpbHMvaGFzLXByb3RvY29sIiksZD0iaHR0cDoiO2Z1bmN0aW9uIG0oZSl7cmV0dXJuIHIoZSl8fHAucGFyc2UoZCsiLy8iK2UpLmhvc3Q9PWV9dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjPSFuO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4hMTtmb3IobiYmIWgodCkmJih0PWQrdCksaT1uP3AucGFyc2UodCkuaG9zdDp0LG89bj90OmYucmVzb2x2ZSh0KSxsPTA7bDxyLmxlbmd0aDtsKyspcz0iISI9PShhPXJbbF0pWzBdLHU9YS5zdWJzdHJpbmcoMSksYz1zJiZuJiZtKHUpP2MmJiFlKHQsITAsW3VdKTohc3x8bnx8bSh1KT9zP2MmJiEwOiJhbGwiPT1hfHwobiYmImxvY2FsIj09YT9jfHwhMTohKCFufHwicmVtb3RlIiE9YSl8fCEoIW4mJiJyZW1vdGUiPT1hKSYmKCFuJiYibG9jYWwiPT1hfHxhPT09aXx8YT09PXR8fCEoIW58fDAhPT1vLmluZGV4T2YoYSkpfHwhbiYmMD09PW8uaW5kZXhPZihmLnJlc29sdmUoYSkpfHxuIT1tKHUpJiZjJiYhMCkpOmMmJiFlKHQsITEsW3VdKTtyZXR1cm4gY319LHsiLi4vdXRpbHMvaGFzLXByb3RvY29sIjo4OCwiLi4vdXRpbHMvaXMtcmVtb3RlLXJlc291cmNlIjo5MyxwYXRoOjExMCx1cmw6MTYyfV0sNzM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1lKCJmcyIpLG89ZSgicGF0aCIpLGE9ZSgiLi9pcy1hbGxvd2VkLXJlc291cmNlIikscz1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxyPWUoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpO2Z1bmN0aW9uIHUoZSl7dmFyIHQsbixyLGk9T2JqZWN0LmtleXMoZS51cmlUb1NvdXJjZSk7Zm9yKHI9aS5sZW5ndGg7ZS5pbmRleDxyO2UuaW5kZXgrKyl7aWYodD1pW2UuaW5kZXhdLCEobj1lLnVyaVRvU291cmNlW3RdKSlyZXR1cm4gbCh0LGUpO2Uuc291cmNlc0NvbnRlbnRbdF09bn1yZXR1cm4gZS5jYWxsYmFjaygpfWZ1bmN0aW9uIGwodCxuKXt2YXIgZTtyZXR1cm4gcih0KT9mdW5jdGlvbihuLHIsaSl7dmFyIGU9YShuLCEwLHIuaW5saW5lKSx0PSFzKG4pO3tpZihyLmxvY2FsT25seSlyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggcmVtb3RlIHJlc291cmNlIGZyb20gIicrbisnIiBhcyBubyBjYWxsYmFjayBnaXZlbi4nKSxpKG51bGwpO2lmKHQpcmV0dXJuIHIud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK24rJyIgYXMgbm8gcHJvdG9jb2wgZ2l2ZW4uJyksaShudWxsKTtpZighZSlyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggIicrbisnIiBhcyByZXNvdXJjZSBpcyBub3QgYWxsb3dlZC4nKSxpKG51bGwpfXIuZmV0Y2gobixyLmlubGluZVJlcXVlc3Qsci5pbmxpbmVUaW1lb3V0LGZ1bmN0aW9uKGUsdCl7ZSYmci53YXJuaW5ncy5wdXNoKCdNaXNzaW5nIG9yaWdpbmFsIHNvdXJjZSBhdCAiJytuKyciIC0gJytlKSxpKHQpfSl9KHQsbixmdW5jdGlvbihlKXtyZXR1cm4gbi5pbmRleCsrLG4uc291cmNlc0NvbnRlbnRbdF09ZSx1KG4pfSk6KGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hKGUsITEsdC5pbmxpbmUpLHI9by5yZXNvbHZlKHQucmViYXNlVG8sZSk7e2lmKCFpLmV4aXN0c1N5bmMocil8fCFpLnN0YXRTeW5jKHIpLmlzRmlsZSgpKXJldHVybiB0Lndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIHNvdXJjZSBtYXAgYXQgIicrcisnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpLG51bGw7aWYoIW4pcmV0dXJuIHQud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK3IrJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQuJyksbnVsbH1yZXR1cm4gaS5yZWFkRmlsZVN5bmMociwidXRmOCIpfSh0LG4pLG4uaW5kZXgrKyxuLnNvdXJjZXNDb250ZW50W3RdPWUsdShuKSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e2NhbGxiYWNrOnQsZmV0Y2g6ZS5vcHRpb25zLmZldGNoLGluZGV4OjAsaW5saW5lOmUub3B0aW9ucy5pbmxpbmUsaW5saW5lUmVxdWVzdDplLm9wdGlvbnMuaW5saW5lUmVxdWVzdCxpbmxpbmVUaW1lb3V0OmUub3B0aW9ucy5pbmxpbmVUaW1lb3V0LGxvY2FsT25seTplLmxvY2FsT25seSxyZWJhc2VUbzplLm9wdGlvbnMucmViYXNlVG8sc291cmNlc0NvbnRlbnQ6ZS5zb3VyY2VzQ29udGVudCx1cmlUb1NvdXJjZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9e307Zm9yKHIgaW4gZSlmb3IodD1lW3JdLGk9MCxvPXQuc291cmNlcy5sZW5ndGg7aTxvO2krKyluPXQuc291cmNlc1tpXSxyPXQuc291cmNlQ29udGVudEZvcihuLCEwKSxhW25dPXI7cmV0dXJuIGF9KGUuaW5wdXRTb3VyY2VNYXBUcmFja2VyLmFsbCgpKSx3YXJuaW5nczplLndhcm5pbmdzfTtyZXR1cm4gZS5vcHRpb25zLnNvdXJjZU1hcCYmZS5vcHRpb25zLnNvdXJjZU1hcElubGluZVNvdXJjZXM/dShuKTp0KCl9fSx7Ii4uL3V0aWxzL2hhcy1wcm90b2NvbCI6ODgsIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSI6OTMsIi4vaXMtYWxsb3dlZC1yZXNvdXJjZSI6NzIsZnM6MyxwYXRoOjExMH1dLDc0OltmdW5jdGlvbihlLHQsbil7dmFyIHU9ZSgiaHR0cCIpLGw9ZSgiaHR0cHMiKSxjPWUoInVybCIpLGY9ZSgiLi4vdXRpbHMvaXMtaHR0cC1yZXNvdXJjZSIpLHA9ZSgiLi4vdXRpbHMvaXMtaHR0cHMtcmVzb3VyY2UiKSxoPWUoIi4uL3V0aWxzL292ZXJyaWRlIiksZD0iaHR0cDoiO3QuZXhwb3J0cz1mdW5jdGlvbiBuKHIsaSxvLGEpe3ZhciBlLHQ9aS5wcm90b2NvbHx8aS5ob3N0bmFtZSxzPSExO2U9aChjLnBhcnNlKHIpLGl8fHt9KSx2b2lkIDAhPT1pLmhvc3RuYW1lJiYoZS5wcm90b2NvbD1pLnByb3RvY29sfHxkLGUucGF0aD1lLmhyZWYpLCh0JiYhcCh0KXx8ZihyKT91LmdldDpsLmdldCkoZSxmdW5jdGlvbihlKXt2YXIgdD1bXTtpZighcyl7aWYoZS5zdGF0dXNDb2RlPDIwMHx8Mzk5PGUuc3RhdHVzQ29kZSlyZXR1cm4gYShlLnN0YXR1c0NvZGUsbnVsbCk7aWYoMjk5PGUuc3RhdHVzQ29kZSlyZXR1cm4gbihjLnJlc29sdmUocixlLmhlYWRlcnMubG9jYXRpb24pLGksbyxhKTtlLm9uKCJkYXRhIixmdW5jdGlvbihlKXt0LnB1c2goZS50b1N0cmluZygpKX0pLGUub24oImVuZCIsZnVuY3Rpb24oKXt2YXIgZT10LmpvaW4oIiIpO2EobnVsbCxlKX0pfX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oZSl7c3x8KHM9ITAsYShlLm1lc3NhZ2UsbnVsbCkpfSkub24oInRpbWVvdXQiLGZ1bmN0aW9uKCl7c3x8KHM9ITAsYSgidGltZW91dCIsbnVsbCkpfSkuc2V0VGltZW91dChvKX19LHsiLi4vdXRpbHMvaXMtaHR0cC1yZXNvdXJjZSI6OTAsIi4uL3V0aWxzL2lzLWh0dHBzLXJlc291cmNlIjo5MSwiLi4vdXRpbHMvb3ZlcnJpZGUiOjk1LGh0dHA6MTU2LGh0dHBzOjEwNCx1cmw6MTYyfV0sNzU6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmRhdGE6KFxTKj8pPyg7Y2hhcnNldD1bXjtdKyk/KDtbXixdKz8pPywoLispLzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZXhlYyhlKX19LHt9XSw3NjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPS9cXC9nO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHIsIi8iKX19LHt9XSw3NzpbZnVuY3Rpb24oZSxTLHQpeyhmdW5jdGlvbihyLGMpe3ZhciBmPWUoImZzIikscD1lKCJwYXRoIiksaT1lKCIuL2FwcGx5LXNvdXJjZS1tYXBzIiksaD1lKCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiKSxkPWUoIi4vaXMtYWxsb3dlZC1yZXNvdXJjZSIpLG89ZSgiLi9sb2FkLW9yaWdpbmFsLXNvdXJjZXMiKSxtPWUoIi4vbm9ybWFsaXplLXBhdGgiKSxhPWUoIi4vcmViYXNlIiksZz1lKCIuL3JlYmFzZS1sb2NhbC1tYXAiKSx2PWUoIi4vcmViYXNlLXJlbW90ZS1tYXAiKSx0PWUoIi4vcmVzdG9yZS1pbXBvcnQiKSxzPWUoIi4uL3Rva2VuaXplci90b2tlbml6ZSIpLGI9ZSgiLi4vdG9rZW5pemVyL3Rva2VuIiksbj1lKCIuLi90b2tlbml6ZXIvbWFya2VyIikseT1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxfPWUoIi4uL3V0aWxzL2lzLWltcG9ydCIpLHc9ZSgiLi4vdXRpbHMvaXMtcmVtb3RlLXJlc291cmNlIiksRT0idXJpOnVua25vd24iO2Z1bmN0aW9uIHUoZSx0LG4pe3JldHVybiB0LnNvdXJjZT12b2lkIDAsdC5zb3VyY2VzQ29udGVudFt2b2lkIDBdPWUsdC5zdGF0cy5vcmlnaW5hbFNpemUrPWUubGVuZ3RoLGsoZSx0LHtpbmxpbmU6dC5vcHRpb25zLmlubGluZX0sbil9ZnVuY3Rpb24gbChlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYztmb3IociBpbiBlKW89ZVtyXSxpPUEociksbi5wdXNoKHgoaSkpLHQuc291cmNlc0NvbnRlbnRbaV09by5zdHlsZXMsby5zb3VyY2VNYXAmJihhPW8uc291cmNlTWFwLHM9aSx1PXQsdm9pZCAwLGw9InN0cmluZyI9PXR5cGVvZiBhP0pTT04ucGFyc2UoYSk6YSxjPXcocyk/dihsLHMpOmcobCxzfHxFLHUub3B0aW9ucy5yZWJhc2VUbyksdS5pbnB1dFNvdXJjZU1hcFRyYWNrZXIudHJhY2socyxjKSk7cmV0dXJuIG59ZnVuY3Rpb24gQShlKXt2YXIgdCxuLHI9cC5yZXNvbHZlKCIiKTtyZXR1cm4gdyhlKT9lOih0PXAuaXNBYnNvbHV0ZShlKT9lOnAucmVzb2x2ZShlKSxuPXAucmVsYXRpdmUocix0KSxtKG4pKX1mdW5jdGlvbiB4KGUpe3JldHVybiB0KCJ1cmwoIitlKyIpIiwiIikrbi5TRU1JQ09MT059ZnVuY3Rpb24gayhlLHQsbixyKXt2YXIgaSxvPXt9O3JldHVybiB0LnNvdXJjZT93KHQuc291cmNlKT8oby5mcm9tQmFzZT10LnNvdXJjZSxvLnRvQmFzZT10LnNvdXJjZSk6KHAuaXNBYnNvbHV0ZSh0LnNvdXJjZSk/by5mcm9tQmFzZT1wLmRpcm5hbWUodC5zb3VyY2UpOm8uZnJvbUJhc2U9cC5kaXJuYW1lKHAucmVzb2x2ZSh0LnNvdXJjZSkpLG8udG9CYXNlPXQub3B0aW9ucy5yZWJhc2VUbyk6KG8uZnJvbUJhc2U9cC5yZXNvbHZlKCIiKSxvLnRvQmFzZT10Lm9wdGlvbnMucmViYXNlVG8pLGk9cyhlLHQpLGk9YShpLHQub3B0aW9ucy5yZWJhc2UsdC52YWxpZGF0b3IsbyksZnVuY3Rpb24oZSl7cmV0dXJuISgxPT1lLmxlbmd0aCYmIm5vbmUiPT1lWzBdKX0obi5pbmxpbmUpP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDKHthZnRlckNvbnRlbnQ6ITEsY2FsbGJhY2s6cixlcnJvcnM6dC5lcnJvcnMsZXh0ZXJuYWxDb250ZXh0OnQsZmV0Y2g6dC5vcHRpb25zLmZldGNoLGlubGluZWRTdHlsZXNoZWV0czpuLmlubGluZWRTdHlsZXNoZWV0c3x8dC5pbmxpbmVkU3R5bGVzaGVldHMsaW5saW5lOm4uaW5saW5lLGlubGluZVJlcXVlc3Q6dC5vcHRpb25zLmlubGluZVJlcXVlc3QsaW5saW5lVGltZW91dDp0Lm9wdGlvbnMuaW5saW5lVGltZW91dCxpc1JlbW90ZTpuLmlzUmVtb3RlfHwhMSxsb2NhbE9ubHk6dC5sb2NhbE9ubHksb3V0cHV0VG9rZW5zOltdLHJlYmFzZVRvOnQub3B0aW9ucy5yZWJhc2VUbyxzb3VyY2VUb2tlbnM6ZSx3YXJuaW5nczp0Lndhcm5pbmdzfSl9KGksdCxuLHIpOnIoaSl9ZnVuY3Rpb24gQyhlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGw7Zm9yKG49MCxyPWUuc291cmNlVG9rZW5zLmxlbmd0aDtuPHI7bisrKXtpZigodD1lLnNvdXJjZVRva2Vuc1tuXSlbMF09PWIuQVRfUlVMRSYmXyh0WzFdKSlyZXR1cm4gZS5zb3VyY2VUb2tlbnMuc3BsaWNlKDAsbiksbz1lLHZvaWQgMCxhPWgoKGk9dClbMV0pLHM9YVswXSx1PWFbMV0sbD1pWzJdLHcocyk/ZnVuY3Rpb24obixyLGksbyl7dmFyIGU9ZChuLCEwLG8uaW5saW5lKSxhPW4sdD1uIGluIG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50LHM9IXkobik7e2lmKC0xPG8uaW5saW5lZFN0eWxlc2hlZXRzLmluZGV4T2YobikpcmV0dXJuIG8ud2FybmluZ3MucHVzaCgnSWdub3JpbmcgcmVtb3RlIEBpbXBvcnQgb2YgIicrbisnIiBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLicpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoby5sb2NhbE9ubHkmJm8uYWZ0ZXJDb250ZW50KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gY2FsbGJhY2sgZ2l2ZW4gYW5kIGFmdGVyIG90aGVyIGNvbnRlbnQuJyksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKTtpZihzKXJldHVybiBvLndhcm5pbmdzLnB1c2goJ1NraXBwaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gcHJvdG9jb2wgZ2l2ZW4uJyksby5vdXRwdXRUb2tlbnM9by5vdXRwdXRUb2tlbnMuY29uY2F0KG8uc291cmNlVG9rZW5zLnNsaWNlKDAsMSkpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoby5sb2NhbE9ubHkmJiF0KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ1NraXBwaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gY2FsbGJhY2sgZ2l2ZW4uJyksby5vdXRwdXRUb2tlbnM9by5vdXRwdXRUb2tlbnMuY29uY2F0KG8uc291cmNlVG9rZW5zLnNsaWNlKDAsMSkpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoIWUmJm8uYWZ0ZXJDb250ZW50KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQgYW5kIGFmdGVyIG90aGVyIGNvbnRlbnQuJyksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKTtpZighZSlyZXR1cm4gby53YXJuaW5ncy5wdXNoKCdTa2lwcGluZyByZW1vdGUgQGltcG9ydCBvZiAiJytuKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLG8ub3V0cHV0VG9rZW5zPW8ub3V0cHV0VG9rZW5zLmNvbmNhdChvLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKSxvLnNvdXJjZVRva2Vucz1vLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKG8pfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZT8oby5lcnJvcnMucHVzaCgnQnJva2VuIEBpbXBvcnQgZGVjbGFyYXRpb24gb2YgIicrbisnIiAtICcrZSksYy5uZXh0VGljayhmdW5jdGlvbigpe28ub3V0cHV0VG9rZW5zPW8ub3V0cHV0VG9rZW5zLmNvbmNhdChvLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKSxvLnNvdXJjZVRva2Vucz1vLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKG8pfSkpOihvLmlubGluZT1vLmV4dGVybmFsQ29udGV4dC5vcHRpb25zLmlubGluZSxvLmlzUmVtb3RlPSEwLG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZT1hLG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50W25dPXQsby5leHRlcm5hbENvbnRleHQuc3RhdHMub3JpZ2luYWxTaXplKz10Lmxlbmd0aCxrKHQsby5leHRlcm5hbENvbnRleHQsbyxmdW5jdGlvbihlKXtyZXR1cm4gZT1PKGUscixpKSxvLm91dHB1dFRva2Vucz1vLm91dHB1dFRva2Vucy5jb25jYXQoZSksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKX0pKX1yZXR1cm4gby5pbmxpbmVkU3R5bGVzaGVldHMucHVzaChuKSx0P3UobnVsbCxvLmV4dGVybmFsQ29udGV4dC5zb3VyY2VzQ29udGVudFtuXSk6by5mZXRjaChuLG8uaW5saW5lUmVxdWVzdCxvLmlubGluZVRpbWVvdXQsdSl9KHMsdSxsLG8pOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89cC5yZXNvbHZlKCIiKSxhPXAuaXNBYnNvbHV0ZShlKT9wLnJlc29sdmUobywiLyI9PWVbMF0/ZS5zdWJzdHJpbmcoMSk6ZSk6cC5yZXNvbHZlKHIucmViYXNlVG8sZSkscz1wLnJlbGF0aXZlKG8sYSksdT1kKGUsITEsci5pbmxpbmUpLGw9bShzKSxjPWwgaW4gci5leHRlcm5hbENvbnRleHQuc291cmNlc0NvbnRlbnQ7aWYoLTE8ci5pbmxpbmVkU3R5bGVzaGVldHMuaW5kZXhPZihhKSlyLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLicpO2Vsc2UgaWYoY3x8Zi5leGlzdHNTeW5jKGEpJiZmLnN0YXRTeW5jKGEpLmlzRmlsZSgpKWlmKCF1JiZyLmFmdGVyQ29udGVudClyLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBub3QgYWxsb3dlZCBhbmQgYWZ0ZXIgb3RoZXIgY29udGVudC4nKTtlbHNlIGlmKHIuYWZ0ZXJDb250ZW50KXIud2FybmluZ3MucHVzaCgnSWdub3JpbmcgbG9jYWwgQGltcG9ydCBvZiAiJytlKyciIGFzIGFmdGVyIG90aGVyIGNvbnRlbnQuJyk7ZWxzZXtpZih1KXJldHVybiBpPWM/ci5leHRlcm5hbENvbnRleHQuc291cmNlc0NvbnRlbnRbbF06Zi5yZWFkRmlsZVN5bmMoYSwidXRmLTgiKSxyLmlubGluZWRTdHlsZXNoZWV0cy5wdXNoKGEpLHIuaW5saW5lPXIuZXh0ZXJuYWxDb250ZXh0Lm9wdGlvbnMuaW5saW5lLHIuZXh0ZXJuYWxDb250ZXh0LnNvdXJjZT1sLHIuZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50W2xdPWksci5leHRlcm5hbENvbnRleHQuc3RhdHMub3JpZ2luYWxTaXplKz1pLmxlbmd0aCxrKGksci5leHRlcm5hbENvbnRleHQscixmdW5jdGlvbihlKXtyZXR1cm4gZT1PKGUsdCxuKSxyLm91dHB1dFRva2Vucz1yLm91dHB1dFRva2Vucy5jb25jYXQoZSksci5zb3VyY2VUb2tlbnM9ci5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhyKX0pO3Iud2FybmluZ3MucHVzaCgnU2tpcHBpbmcgbG9jYWwgQGltcG9ydCBvZiAiJytlKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLHIub3V0cHV0VG9rZW5zPXIub3V0cHV0VG9rZW5zLmNvbmNhdChyLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKX1lbHNlIHIuZXJyb3JzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpO3JldHVybiByLnNvdXJjZVRva2Vucz1yLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKHIpfShzLHUsbCxvKTt0WzBdPT1iLkFUX1JVTEV8fHRbMF09PWIuQ09NTUVOVD9lLm91dHB1dFRva2Vucy5wdXNoKHQpOihlLm91dHB1dFRva2Vucy5wdXNoKHQpLGUuYWZ0ZXJDb250ZW50PSEwKX1yZXR1cm4gZS5zb3VyY2VUb2tlbnM9W10sZS5jYWxsYmFjayhlLm91dHB1dFRva2Vucyl9ZnVuY3Rpb24gTyhlLHQsbil7cmV0dXJuIHQ/W1tiLk5FU1RFRF9CTE9DSyxbW2IuTkVTVEVEX0JMT0NLX1NDT1BFLCJAbWVkaWEgIit0LG5dXSxlXV06ZX1TLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3UoZSx0LG4pOnIuaXNCdWZmZXIoZSk/dShlLnRvU3RyaW5nKCksdCxuKTpBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKGUsbix0KXtyZXR1cm4gayhlLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQpe3JldHVybiB0LnB1c2goeChBKGUpKSksdH0odCxlKTpsKHQsbixlKX0sW10pLmpvaW4oIiIpLG4se2lubGluZTpbImFsbCJdfSx0KX0oZSx0LG4pOiJvYmplY3QiPT10eXBlb2YgZT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGsobChlLHQsW10pLmpvaW4oIiIpLHQse2lubGluZTpbImFsbCJdfSxuKX0oZSx0LG4pOnZvaWQgMH0oZSx0LGZ1bmN0aW9uKGUpe3JldHVybiBpKGUsdCxmdW5jdGlvbigpe3JldHVybiBvKHQsZnVuY3Rpb24oKXtyZXR1cm4gbihlKX0pfSl9KX19KS5jYWxsKHRoaXMse2lzQnVmZmVyOmUoIi4uLy4uLy4uL2lzLWJ1ZmZlci9pbmRleC5qcyIpfSxlKCJfcHJvY2VzcyIpKX0seyIuLi8uLi8uLi9pcy1idWZmZXIvaW5kZXguanMiOjEwNywiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3Rva2VuaXplci90b2tlbml6ZSI6ODUsIi4uL3V0aWxzL2hhcy1wcm90b2NvbCI6ODgsIi4uL3V0aWxzL2lzLWltcG9ydCI6OTIsIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSI6OTMsIi4vYXBwbHktc291cmNlLW1hcHMiOjY5LCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiOjcwLCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiOjcyLCIuL2xvYWQtb3JpZ2luYWwtc291cmNlcyI6NzMsIi4vbm9ybWFsaXplLXBhdGgiOjc2LCIuL3JlYmFzZSI6ODAsIi4vcmViYXNlLWxvY2FsLW1hcCI6NzgsIi4vcmViYXNlLXJlbW90ZS1tYXAiOjc5LCIuL3Jlc3RvcmUtaW1wb3J0Ijo4MSxfcHJvY2VzczoxMTIsZnM6MyxwYXRoOjExMH1dLDc4OltmdW5jdGlvbihlLHQsbil7dmFyIGE9ZSgicGF0aCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHI9YS5yZXNvbHZlKCIiKSxpPWEucmVzb2x2ZShyLHQpLG89YS5kaXJuYW1lKGkpO3JldHVybiBlLnNvdXJjZXM9ZS5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5yZWxhdGl2ZShuLGEucmVzb2x2ZShvLGUpKX0pLGV9fSx7cGF0aDoxMTB9XSw3OTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoInBhdGgiKSxpPWUoInVybCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZGlybmFtZSh0KTtyZXR1cm4gZS5zb3VyY2VzPWUuc291cmNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkucmVzb2x2ZShuLGUpfSksZX19LHtwYXRoOjExMCx1cmw6MTYyfV0sODA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiKSxzPWUoIi4vcmVzdG9yZS1pbXBvcnQiKSxjPWUoIi4vcmV3cml0ZS11cmwiKSxmPWUoIi4uL3Rva2VuaXplci90b2tlbiIpLHU9ZSgiLi4vdXRpbHMvaXMtaW1wb3J0IikscD0vXlwvXCojIHNvdXJjZU1hcHBpbmdVUkw9KFxTKykgXCpcLyQvO2Z1bmN0aW9uIGgoZSx0LG4pe2lmKHUoZVsxXSkpe3ZhciByPWEoZVsxXSksaT1jKHJbMF0sbiksbz1yWzFdO2VbMV09cyhpLG8pfX1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcixpLG8sYSxzLHU7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspZm9yKHM9Mix1PShyPWVbb10pLmxlbmd0aDtzPHU7cysrKWk9cltzXVsxXSx0LmlzVXJsKGkpJiYocltzXVsxXT1jKGksbikpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdD9mdW5jdGlvbiBlKHQsbixyKXt2YXIgaSxvLGEscyx1LGw7Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspc3dpdGNoKChpPXRbb10pWzBdKXtjYXNlIGYuQVRfUlVMRTpoKGksMCxyKTticmVhaztjYXNlIGYuQVRfUlVMRV9CTE9DSzpkKGlbMl0sbixyKTticmVhaztjYXNlIGYuQ09NTUVOVDpzPWksdT1yLGw9dm9pZCAwLChsPXAuZXhlYyhzWzFdKSkmJi0xPT09bFsxXS5pbmRleE9mKCJkYXRhOiIpJiYoc1sxXT1zWzFdLnJlcGxhY2UobFsxXSxjKGxbMV0sdSwhMCkpKTticmVhaztjYXNlIGYuTkVTVEVEX0JMT0NLOmUoaVsyXSxuLHIpO2JyZWFrO2Nhc2UgZi5SVUxFOmQoaVsyXSxuLHIpfXJldHVybiB0fShlLG4scik6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbztmb3IoaT0wLG89ZS5sZW5ndGg7aTxvO2krKylzd2l0Y2goKHI9ZVtpXSlbMF0pe2Nhc2UgZi5BVF9SVUxFOmgociwwLG4pfXJldHVybiBlfShlLDAscil9fSx7Ii4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3V0aWxzL2lzLWltcG9ydCI6OTIsIi4vZXh0cmFjdC1pbXBvcnQtdXJsLWFuZC1tZWRpYSI6NzAsIi4vcmVzdG9yZS1pbXBvcnQiOjgxLCIuL3Jld3JpdGUtdXJsIjo4Mn1dLDgxOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCJAaW1wb3J0ICIrZSsiICIrdCkudHJpbSgpfX0se31dLDgyOltmdW5jdGlvbihnLHYsZSl7KGZ1bmN0aW9uKGUpe3ZhciBuPWcoInBhdGgiKSxyPWcoInVybCIpLGE9JyInLHM9IiciLHU9L15bIiddLyxsPS9bIiddJC8sdD0vW1woXCldLyxjPS9edXJsXCgvaSxmPS9cKSQvLGk9L1xzLyxvPSJ3aW4zMiI9PWUucGxhdGZvcm07ZnVuY3Rpb24gcChlLHQpe3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBuLmlzQWJzb2x1dGUoZSl9KGUpJiYhaCh0LnRvQmFzZSk/ZTpoKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iIyI9PWVbMF19KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4vXlx3KzpcdysvLnRlc3QoZSl9KGUpP2U6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmluZGV4T2YoImRhdGE6Iil9KGUpPyInIitlKyInIjpoKHQudG9CYXNlKT9yLnJlc29sdmUodC50b0Jhc2UsZSk6dC5hYnNvbHV0ZT9kKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmVzb2x2ZShuLmpvaW4odC5mcm9tQmFzZXx8IiIsZSkpLnJlcGxhY2UodC50b0Jhc2UsIiIpfShlLHQpKTpkKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmVsYXRpdmUodC50b0Jhc2Usbi5qb2luKHQuZnJvbUJhc2V8fCIiLGUpKX0oZSx0KSk6ZX1mdW5jdGlvbiBoKGUpe3JldHVybi9eW146XSs/OlwvXC8vLnRlc3QoZSl8fDA9PT1lLmluZGV4T2YoIi8vIil9ZnVuY3Rpb24gZChlKXtyZXR1cm4gbz9lLnJlcGxhY2UoL1xcL2csIi8iKTplfWZ1bmN0aW9uIG0oZSl7cmV0dXJuLTE8ZS5pbmRleE9mKHMpP2E6LTE8ZS5pbmRleE9mKGEpP3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGVzdChlKX0oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoZSl9KGUpP3M6IiJ9di5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnJlcGxhY2UoYywiIikucmVwbGFjZShmLCIiKS50cmltKCksaT1yLnJlcGxhY2UodSwiIikucmVwbGFjZShsLCIiKS50cmltKCksbz1yWzBdPT1zfHxyWzBdPT1hP3JbMF06bShpKTtyZXR1cm4gbj9wKGksdCk6InVybCgiK28rcChpLHQpK28rIikifX0pLmNhbGwodGhpcyxnKCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjExMixwYXRoOjExMCx1cmw6MTYyfV0sODM6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FTVEVSSVNLOiIqIixBVDoiQCIsQkFDS19TTEFTSDoiXFwiLENBUlJJQUdFX1JFVFVSTjoiXHIiLENMT1NFX0NVUkxZX0JSQUNLRVQ6In0iLENMT1NFX1JPVU5EX0JSQUNLRVQ6IikiLENMT1NFX1NRVUFSRV9CUkFDS0VUOiJdIixDT0xPTjoiOiIsQ09NTUE6IiwiLERPVUJMRV9RVU9URTonIicsRVhDTEFNQVRJT046IiEiLEZPUldBUkRfU0xBU0g6Ii8iLElOVEVSTkFMOiItY2xlYW4tY3NzLSIsTkVXX0xJTkVfTklYOiJcbiIsT1BFTl9DVVJMWV9CUkFDS0VUOiJ7IixPUEVOX1JPVU5EX0JSQUNLRVQ6IigiLE9QRU5fU1FVQVJFX0JSQUNLRVQ6IlsiLFNFTUlDT0xPTjoiOyIsU0lOR0xFX1FVT1RFOiInIixTUEFDRToiICIsVEFCOiJcdCIsVU5ERVJTQ09SRToiXyJ9fSx7fV0sODQ6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FUX1JVTEU6ImF0LXJ1bGUiLEFUX1JVTEVfQkxPQ0s6ImF0LXJ1bGUtYmxvY2siLEFUX1JVTEVfQkxPQ0tfU0NPUEU6ImF0LXJ1bGUtYmxvY2stc2NvcGUiLENPTU1FTlQ6ImNvbW1lbnQiLE5FU1RFRF9CTE9DSzoibmVzdGVkLWJsb2NrIixORVNURURfQkxPQ0tfU0NPUEU6Im5lc3RlZC1ibG9jay1zY29wZSIsUFJPUEVSVFk6InByb3BlcnR5IixQUk9QRVJUWV9CTE9DSzoicHJvcGVydHktYmxvY2siLFBST1BFUlRZX05BTUU6InByb3BlcnR5LW5hbWUiLFBST1BFUlRZX1ZBTFVFOiJwcm9wZXJ0eS12YWx1ZSIsUkFXOiJyYXciLFJVTEU6InJ1bGUiLFJVTEVfU0NPUEU6InJ1bGUtc2NvcGUifX0se31dLDg1OltmdW5jdGlvbihlLHQsbil7dmFyIHo9ZSgiLi9tYXJrZXIiKSxqPWUoIi4vdG9rZW4iKSxWPWUoIi4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiIpLEg9e0JMT0NLOiJibG9jayIsQ09NTUVOVDoiY29tbWVudCIsRE9VQkxFX1FVT1RFOiJkb3VibGUtcXVvdGUiLFJVTEU6InJ1bGUiLFNJTkdMRV9RVU9URToic2luZ2xlLXF1b3RlIn0scj1bIkBjaGFyc2V0IiwiQGltcG9ydCJdLGk9WyJALW1vei1kb2N1bWVudCIsIkBkb2N1bWVudCIsIkAtbW96LWtleWZyYW1lcyIsIkAtbXMta2V5ZnJhbWVzIiwiQC1vLWtleWZyYW1lcyIsIkAtd2Via2l0LWtleWZyYW1lcyIsIkBrZXlmcmFtZXMiLCJAbWVkaWEiLCJAc3VwcG9ydHMiXSwkPS9cL1wqIGNsZWFuXC1jc3MgaWdub3JlOmVuZCBcKlwvJC8sSz0vXlwvXCogY2xlYW5cLWNzcyBpZ25vcmU6c3RhcnQgXCpcLy8sRz1bIkBib3R0b20tY2VudGVyIiwiQGJvdHRvbS1sZWZ0IiwiQGJvdHRvbS1sZWZ0LWNvcm5lciIsIkBib3R0b20tcmlnaHQiLCJAYm90dG9tLXJpZ2h0LWNvcm5lciIsIkBsZWZ0LWJvdHRvbSIsIkBsZWZ0LW1pZGRsZSIsIkBsZWZ0LXRvcCIsIkByaWdodC1ib3R0b20iLCJAcmlnaHQtbWlkZGxlIiwiQHJpZ2h0LXRvcCIsIkB0b3AtY2VudGVyIiwiQHRvcC1sZWZ0IiwiQHRvcC1sZWZ0LWNvcm5lciIsIkB0b3AtcmlnaHQiLCJAdG9wLXJpZ2h0LWNvcm5lciJdLFk9WyJAZm9vdG5vdGUiLCJAZm9vdG5vdGVzIiwiQGxlZnQiLCJAcGFnZS1mbG9hdC1ib3R0b20iLCJAcGFnZS1mbG9hdC10b3AiLCJAcmlnaHQiXSxXPS9eXFtcc3swLDMxfVxkK1xzezAsMzF9XF0kLyxvPS9bXHNcKF0vLFE9L1tcc3xcfV0qJC87ZnVuY3Rpb24gWihlLHQsbixyKXt2YXIgaT1lWzJdO3JldHVybiBuLmlucHV0U291cmNlTWFwVHJhY2tlci5pc1RyYWNraW5nKGkpP24uaW5wdXRTb3VyY2VNYXBUcmFja2VyLm9yaWdpbmFsUG9zaXRpb25Gb3IoZSx0Lmxlbmd0aCxyKTplfWZ1bmN0aW9uIEooZSl7dmFyIHQ9ZVswXT09ei5BVHx8ZVswXT09ei5VTkRFUlNDT1JFLG49ZS5qb2luKCIiKS5zcGxpdChvKVswXTtyZXR1cm4gdCYmLTE8aS5pbmRleE9mKG4pP2ouTkVTVEVEX0JMT0NLOnQmJi0xPHIuaW5kZXhPZihuKT9qLkFUX1JVTEU6dD9qLkFUX1JVTEVfQkxPQ0s6ai5SVUxFfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGU9PWouUlVMRT9qLlJVTEVfU0NPUEU6ZT09ai5ORVNURURfQkxPQ0s/ai5ORVNURURfQkxPQ0tfU0NPUEU6ZT09ai5BVF9SVUxFX0JMT0NLP2ouQVRfUlVMRV9CTE9DS19TQ09QRTp2b2lkIDB9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmLHAsaCxkLG0sZyx2LGIseSxfLHcsRSxBLHgsaz1bXSxDPWssTz1bXSxTPVtdLEQ9ci5sZXZlbCxUPVtdLEI9W10sUj1bXSxMPTAsRj0hMSxxPSExLFU9ITEsTT0hMSxOPSExLFA9ci5wb3NpdGlvbjtQLmluZGV4PHQubGVuZ3RoO1AuaW5kZXgrKyl7dmFyIEk9dFtQLmluZGV4XTtpZihmPUQ9PUguU0lOR0xFX1FVT1RFfHxEPT1ILkRPVUJMRV9RVU9URSxwPUk9PXouU1BBQ0V8fEk9PXouVEFCLGg9ST09ei5ORVdfTElORV9OSVgsZD1JPT16Lk5FV19MSU5FX05JWCYmdFtQLmluZGV4LTFdPT16LkNBUlJJQUdFX1JFVFVSTixtPUk9PXouQ0FSUklBR0VfUkVUVVJOJiZ0W1AuaW5kZXgrMV0mJnRbUC5pbmRleCsxXSE9ei5ORVdfTElORV9OSVgsZz0hcSYmRCE9SC5DT01NRU5UJiYhZiYmST09ei5BU1RFUklTSyYmdFtQLmluZGV4LTFdPT16LkZPUldBUkRfU0xBU0gsYj0hRiYmIWYmJkk9PXouRk9SV0FSRF9TTEFTSCYmdFtQLmluZGV4LTFdPT16LkFTVEVSSVNLLHY9RD09SC5DT01NRU5UJiZiLEw9TWF0aC5tYXgoTCwwKSx1PTA9PT1CLmxlbmd0aD9bUC5saW5lLFAuY29sdW1uLFAuc291cmNlXTp1LHkpQi5wdXNoKEkpO2Vsc2UgaWYodnx8RCE9SC5DT01NRU5UKWlmKGd8fHZ8fCFVKWlmKGcmJihEPT1ILkJMT0NLfHxEPT1ILlJVTEUpJiYxPEIubGVuZ3RoKVMucHVzaCh1KSxCLnB1c2goSSksUi5wdXNoKEIuc2xpY2UoMCxCLmxlbmd0aC0yKSksQj1CLnNsaWNlKEIubGVuZ3RoLTIpLHU9W1AubGluZSxQLmNvbHVtbi0xLFAuc291cmNlXSxULnB1c2goRCksRD1ILkNPTU1FTlQ7ZWxzZSBpZihnKVQucHVzaChEKSxEPUguQ09NTUVOVCxCLnB1c2goSSk7ZWxzZSBpZih2JiYoeD1CLEsudGVzdCh4LmpvaW4oIiIpK3ouRk9SV0FSRF9TTEFTSCkpKWw9Qi5qb2luKCIiKS50cmltKCkrSSxvPVtqLkNPTU1FTlQsbCxbWih1LGwsbildXSxDLnB1c2gobyksVT0hMCx1PVMucG9wKCl8fG51bGwsQj1SLnBvcCgpfHxbXTtlbHNlIGlmKHYmJihBPUIsJC50ZXN0KEEuam9pbigiIikrei5GT1JXQVJEX1NMQVNIKSkpbD1CLmpvaW4oIiIpK0ksXz1sLmxhc3RJbmRleE9mKHouRk9SV0FSRF9TTEFTSCt6LkFTVEVSSVNLKSxjPWwuc3Vic3RyaW5nKDAsXyksbz1bai5SQVcsYyxbWih1LGMsbildXSxDLnB1c2gobyksYz1sLnN1YnN0cmluZyhfKSx1PVtQLmxpbmUsUC5jb2x1bW4tYy5sZW5ndGgrMSxQLnNvdXJjZV0sbz1bai5DT01NRU5ULGMsW1oodSxjLG4pXV0sQy5wdXNoKG8pLFU9ITEsRD1ULnBvcCgpLHU9Uy5wb3AoKXx8bnVsbCxCPVIucG9wKCl8fFtdO2Vsc2UgaWYodilsPUIuam9pbigiIikudHJpbSgpK0ksbz1bai5DT01NRU5ULGwsW1oodSxsLG4pXV0sQy5wdXNoKG8pLEQ9VC5wb3AoKSx1PVMucG9wKCl8fG51bGwsQj1SLnBvcCgpfHxbXTtlbHNlIGlmKGImJnRbUC5pbmRleCsxXSE9ei5BU1RFUklTSyluLndhcm5pbmdzLnB1c2goIlVuZXhwZWN0ZWQgJyovJyBhdCAiK1YoW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV0pKyIuIiksQj1bXTtlbHNlIGlmKEkhPXouU0lOR0xFX1FVT1RFfHxmKWlmKEk9PXouU0lOR0xFX1FVT1RFJiZEPT1ILlNJTkdMRV9RVU9URSlEPVQucG9wKCksQi5wdXNoKEkpO2Vsc2UgaWYoSSE9ei5ET1VCTEVfUVVPVEV8fGYpaWYoST09ei5ET1VCTEVfUVVPVEUmJkQ9PUguRE9VQkxFX1FVT1RFKUQ9VC5wb3AoKSxCLnB1c2goSSk7ZWxzZSBpZighZyYmIXYmJkkhPXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmSSE9ei5PUEVOX1JPVU5EX0JSQUNLRVQmJkQhPUguQ09NTUVOVCYmIWYmJjA8TClCLnB1c2goSSk7ZWxzZSBpZihJIT16Lk9QRU5fUk9VTkRfQlJBQ0tFVHx8Znx8RD09SC5DT01NRU5UfHxNKWlmKEkhPXouQ0xPU0VfUk9VTkRfQlJBQ0tFVHx8Znx8RD09SC5DT01NRU5UfHxNKWlmKEk9PXouU0VNSUNPTE9OJiZEPT1ILkJMT0NLJiZCWzBdPT16LkFUKWw9Qi5qb2luKCIiKS50cmltKCksay5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksQj1bXTtlbHNlIGlmKEk9PXouQ09NTUEmJkQ9PUguQkxPQ0smJmEpbD1CLmpvaW4oIiIpLnRyaW0oKSxhWzFdLnB1c2goW1goYVswXSksbCxbWih1LGwsbixhWzFdLmxlbmd0aCldXSksQj1bXTtlbHNlIGlmKEk9PXouQ09NTUEmJkQ9PUguQkxPQ0smJkooQik9PWouQVRfUlVMRSlCLnB1c2goSSk7ZWxzZSBpZihJPT16LkNPTU1BJiZEPT1ILkJMT0NLKWE9W0ooQiksW10sW11dLGw9Qi5qb2luKCIiKS50cmltKCksYVsxXS5wdXNoKFtYKGFbMF0pLGwsW1oodSxsLG4sMCldXSksQj1bXTtlbHNlIGlmKEk9PXouT1BFTl9DVVJMWV9CUkFDS0VUJiZEPT1ILkJMT0NLJiZhJiZhWzBdPT1qLk5FU1RFRF9CTE9DSylsPUIuam9pbigiIikudHJpbSgpLGFbMV0ucHVzaChbai5ORVNURURfQkxPQ0tfU0NPUEUsbCxbWih1LGwsbildXSksay5wdXNoKGEpLFQucHVzaChEKSxQLmNvbHVtbisrLFAuaW5kZXgrKyxCPVtdLGFbMl09ZSh0LG4sciwhMCksYT1udWxsO2Vsc2UgaWYoST09ei5PUEVOX0NVUkxZX0JSQUNLRVQmJkQ9PUguQkxPQ0smJkooQik9PWouTkVTVEVEX0JMT0NLKWw9Qi5qb2luKCIiKS50cmltKCksKGE9YXx8W2ouTkVTVEVEX0JMT0NLLFtdLFtdXSlbMV0ucHVzaChbai5ORVNURURfQkxPQ0tfU0NPUEUsbCxbWih1LGwsbildXSksay5wdXNoKGEpLFQucHVzaChEKSxQLmNvbHVtbisrLFAuaW5kZXgrKyxCPVtdLGFbMl09ZSh0LG4sciwhMCksYT1udWxsO2Vsc2UgaWYoST09ei5PUEVOX0NVUkxZX0JSQUNLRVQmJkQ9PUguQkxPQ0spbD1CLmpvaW4oIiIpLnRyaW0oKSwoYT1hfHxbSihCKSxbXSxbXV0pWzFdLnB1c2goW1goYVswXSksbCxbWih1LGwsbixhWzFdLmxlbmd0aCldXSksQz1hWzJdLGsucHVzaChhKSxULnB1c2goRCksRD1ILlJVTEUsQj1bXTtlbHNlIGlmKEk9PXouT1BFTl9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJk0pTy5wdXNoKGEpLGE9W2ouUFJPUEVSVFlfQkxPQ0ssW11dLHMucHVzaChhKSxDPWFbMV0sVC5wdXNoKEQpLEQ9SC5SVUxFLE09ITE7ZWxzZSBpZihJPT16Lk9QRU5fQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiYoRT1CLmpvaW4oIiIpLnRyaW0oKSwtMTxHLmluZGV4T2YoRSl8fC0xPFkuaW5kZXhPZihFKSkpbD1CLmpvaW4oIiIpLnRyaW0oKSxPLnB1c2goYSksKGE9W2ouQVRfUlVMRV9CTE9DSyxbXSxbXV0pWzFdLnB1c2goW2ouQVRfUlVMRV9CTE9DS19TQ09QRSxsLFtaKHUsbCxuKV1dKSxDLnB1c2goYSksQz1hWzJdLFQucHVzaChEKSxEPUguUlVMRSxCPVtdO2Vsc2UgaWYoSSE9ei5DT0xPTnx8RCE9SC5SVUxFfHxNKWlmKEk9PXouU0VNSUNPTE9OJiZEPT1ILlJVTEUmJnMmJjA8Ty5sZW5ndGgmJjA8Qi5sZW5ndGgmJkJbMF09PXouQVQpbD1CLmpvaW4oIiIpLnRyaW0oKSxhWzFdLnB1c2goW2ouQVRfUlVMRSxsLFtaKHUsbCxuKV1dKSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmcyYmMDxCLmxlbmd0aClsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzPW51bGwsTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmcyYmMD09PUIubGVuZ3RoKXM9bnVsbCxNPSExO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmMDxCLmxlbmd0aCYmQlswXT09ei5BVClsPUIuam9pbigiIiksQy5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmTilOPSExLEI9W107ZWxzZSBpZihJPT16LlNFTUlDT0xPTiYmRD09SC5SVUxFJiYwPT09Qi5sZW5ndGgpO2Vsc2UgaWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJnMmJk0mJjA8Qi5sZW5ndGgmJjA8Ty5sZW5ndGgpbD1CLmpvaW4oIiIpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzPW51bGwsYT1PLnBvcCgpLEM9YVsyXSxEPVQucG9wKCksTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJnMmJjA8Qi5sZW5ndGgmJkJbMF09PXouQVQmJjA8Ty5sZW5ndGgpbD1CLmpvaW4oIiIpLGFbMV0ucHVzaChbai5BVF9SVUxFLGwsW1oodSxsLG4pXV0pLHM9bnVsbCxhPU8ucG9wKCksQz1hWzJdLEQ9VC5wb3AoKSxNPSExLEI9W107ZWxzZSBpZihJPT16LkNMT1NFX0NVUkxZX0JSQUNLRVQmJkQ9PUguUlVMRSYmcyYmMDxPLmxlbmd0aClzPW51bGwsYT1PLnBvcCgpLEM9YVsyXSxEPVQucG9wKCksTT0hMTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiZzJiYwPEIubGVuZ3RoKWw9Qi5qb2luKCIiKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSkscz1udWxsLGE9Ty5wb3AoKSxDPWssRD1ULnBvcCgpLE09ITEsQj1bXTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiYwPEIubGVuZ3RoJiZCWzBdPT16LkFUKWE9cz1udWxsLGw9Qi5qb2luKCIiKS50cmltKCksQy5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksQz1rLEQ9VC5wb3AoKSxNPSExLEI9W107ZWxzZSBpZihJPT16LkNMT1NFX0NVUkxZX0JSQUNLRVQmJkQ9PUguUlVMRSYmVFtULmxlbmd0aC0xXT09SC5SVUxFKXM9bnVsbCxhPU8ucG9wKCksQz1hWzJdLEQ9VC5wb3AoKSxOPSEoTT0hMSksQj1bXTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFKWE9cz1udWxsLEM9ayxEPVQucG9wKCksTT0hMTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5CTE9DSyYmIWkmJlAuaW5kZXg8PXQubGVuZ3RoLTEpbi53YXJuaW5ncy5wdXNoKCJVbmV4cGVjdGVkICd9JyBhdCAiK1YoW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV0pKyIuIiksQi5wdXNoKEkpO2Vsc2V7aWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILkJMT0NLKWJyZWFrO0k9PXouT1BFTl9ST1VORF9CUkFDS0VUJiZEPT1ILlJVTEUmJk0/KEIucHVzaChJKSxMKyspOkk9PXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmRD09SC5SVUxFJiZNJiYxPT1MPyhCLnB1c2goSSksbD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksTC0tLEI9W10pOkk9PXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmRD09SC5SVUxFJiZNPyhCLnB1c2goSSksTC0tKTpJPT16LkZPUldBUkRfU0xBU0gmJnRbUC5pbmRleCsxXSE9ei5BU1RFUklTSyYmRD09SC5SVUxFJiZNJiYwPEIubGVuZ3RoPyhsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsSSxbW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV1dXSksQj1bXSk6ST09ei5GT1JXQVJEX1NMQVNIJiZ0W1AuaW5kZXgrMV0hPXouQVNURVJJU0smJkQ9PUguUlVMRSYmTT8ocy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ09NTUEmJkQ9PUguUlVMRSYmTSYmMDxCLmxlbmd0aD8obD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSkscy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ09NTUEmJkQ9PUguUlVMRSYmTT8ocy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ0xPU0VfU1FVQVJFX0JSQUNLRVQmJnMmJjE8cy5sZW5ndGgmJjA8Qi5sZW5ndGgmJih3PUIsVy50ZXN0KHcuam9pbigiIikrei5DTE9TRV9TUVVBUkVfQlJBQ0tFVCkpPyhCLnB1c2goSSksbD1CLmpvaW4oIiIpLnRyaW0oKSxzW3MubGVuZ3RoLTFdWzFdKz1sLEI9W10pOihwfHxoJiYhZCkmJkQ9PUguUlVMRSYmTSYmcyYmMDxCLmxlbmd0aD8obD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksQj1bXSk6ZCYmRD09SC5SVUxFJiZNJiZzJiYxPEIubGVuZ3RoPyhsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxCPVtdKTpkJiZEPT1ILlJVTEUmJk0/Qj1bXToxPT1CLmxlbmd0aCYmZD9CLnBvcCgpOigwPEIubGVuZ3RofHwhcCYmIWgmJiFkJiYhbSkmJkIucHVzaChJKX1lbHNlIGw9Qi5qb2luKCIiKS50cmltKCkscz1bai5QUk9QRVJUWSxbai5QUk9QRVJUWV9OQU1FLGwsW1oodSxsLG4pXV1dLEMucHVzaChzKSxNPSEwLEI9W107ZWxzZSBCLnB1c2goSSksTC0tO2Vsc2UgQi5wdXNoKEkpLEwrKztlbHNlIFQucHVzaChEKSxEPUguRE9VQkxFX1FVT1RFLEIucHVzaChJKTtlbHNlIFQucHVzaChEKSxEPUguU0lOR0xFX1FVT1RFLEIucHVzaChJKTtlbHNlIEIucHVzaChJKTtlbHNlIEIucHVzaChJKTt5PSF5JiZJPT16LkJBQ0tfU0xBU0gsRj1nLHE9dixQLmxpbmU9ZHx8aHx8bT9QLmxpbmUrMTpQLmxpbmUsUC5jb2x1bW49ZHx8aHx8bT8wOlAuY29sdW1uKzF9cmV0dXJuIE0mJm4ud2FybmluZ3MucHVzaCgiTWlzc2luZyAnfScgYXQgIitWKFtQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdKSsiLiIpLE0mJjA8Qi5sZW5ndGgmJihsPUIuam9pbigiIikucmVwbGFjZShRLCIiKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksQj1bXSksMDxCLmxlbmd0aCYmbi53YXJuaW5ncy5wdXNoKCJJbnZhbGlkIGNoYXJhY3RlcihzKSAnIitCLmpvaW4oIiIpKyInIGF0ICIrVih1KSsiLiBJZ25vcmluZy4iKSxrfShlLHQse2xldmVsOkguQkxPQ0sscG9zaXRpb246e3NvdXJjZTp0LnNvdXJjZXx8dm9pZCAwLGxpbmU6MSxjb2x1bW46MCxpbmRleDowfX0sITEpfX0seyIuLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3LCIuL21hcmtlciI6ODMsIi4vdG9rZW4iOjg0fV0sODY6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXtmb3IodmFyIG49dC5zbGljZSgwKSxyPTAsaT1uLmxlbmd0aDtyPGk7cisrKUFycmF5LmlzQXJyYXkobltyXSkmJihuW3JdPWUobltyXSkpO3JldHVybiBufX0se31dLDg3OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9ZVsyXTtyZXR1cm4gcj9yKyI6Iit0KyI6IituOnQrIjoiK259fSx7fV0sODg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXlwvXC8vO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hci50ZXN0KGUpfX0se31dLDg5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9L15kYXRhOihcUyo/KT8oO2NoYXJzZXQ9W147XSspPyg7W14sXSs/KT8sKC4rKS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmh0dHA6XC9cLy87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmh0dHBzOlwvXC8vO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gci50ZXN0KGUpfX0se31dLDkyOltmdW5jdGlvbihlLHQsbil7dmFyIHI9L15AaW1wb3J0L2k7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXihcdys6XC9cL3xcL1wvKS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgdT0vKFswLTldKykvO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIiIrcGFyc2VJbnQoZSk9PWU/cGFyc2VJbnQoZSk6ZX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPSgiIitlKS5zcGxpdCh1KS5tYXAobCkscz0oIiIrdCkuc3BsaXQodSkubWFwKGwpO2ZvcihpPTAsbz1NYXRoLm1pbihhLmxlbmd0aCxzLmxlbmd0aCk7aTxvO2krKylpZigobj1hW2ldKSE9KHI9c1tpXSkpcmV0dXJuIHI8bj8xOi0xO3JldHVybiBhLmxlbmd0aD5zLmxlbmd0aD8xOmEubGVuZ3RoPT1zLmxlbmd0aD8wOi0xfX0se31dLDk1OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpLG8sYT17fTtmb3IociBpbiB0KW89dFtyXSxBcnJheS5pc0FycmF5KG8pP2Fbcl09by5zbGljZSgwKTphW3JdPSJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8/ZShvLHt9KTpvO2ZvcihpIGluIG4pbz1uW2ldLGkgaW4gYSYmQXJyYXkuaXNBcnJheShvKT9hW2ldPW8uc2xpY2UoMCk6YVtpXT1pIGluIGEmJiJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8/ZShhW2ldLG8pOm87cmV0dXJuIGF9fSx7fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuLi90b2tlbml6ZXIvbWFya2VyIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1jLk9QRU5fUk9VTkRfQlJBQ0tFVCxpPWMuQ0xPU0VfUk9VTkRfQlJBQ0tFVCxvPTAsYT0wLHM9MCx1PWUubGVuZ3RoLGw9W107aWYoLTE9PWUuaW5kZXhPZih0KSlyZXR1cm5bZV07aWYoLTE9PWUuaW5kZXhPZihyKSlyZXR1cm4gZS5zcGxpdCh0KTtmb3IoO2E8dTspZVthXT09cj9vKys6ZVthXT09aSYmby0tLDA9PT1vJiYwPGEmJmErMTx1JiZlW2FdPT10JiYobC5wdXNoKGUuc3Vic3RyaW5nKHMsYSkpLHM9YSsxKSxhKys7cmV0dXJuIHM8YSsxJiYoKG49ZS5zdWJzdHJpbmcocykpW24ubGVuZ3RoLTFdPT10JiYobj1uLnN1YnN0cmluZygwLG4ubGVuZ3RoLTEpKSxsLnB1c2gobikpLGx9fSx7Ii4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sOTc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbD0iIixjPWUoIi4uL29wdGlvbnMvZm9ybWF0IikuQnJlYWtzLGY9ZSgiLi4vb3B0aW9ucy9mb3JtYXQiKS5TcGFjZXMscD1lKCIuLi90b2tlbml6ZXIvbWFya2VyIiksaD1lKCIuLi90b2tlbml6ZXIvdG9rZW4iKTtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4hZS5zcGFjZUFmdGVyQ2xvc2luZ0JyYWNlJiZmdW5jdGlvbihlKXtyZXR1cm4iYmFja2dyb3VuZCI9PWVbMV1bMV18fCJ0cmFuc2Zvcm0iPT1lWzFdWzFdfHwic3JjIj09ZVsxXVsxXX0odCkmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF1bMV1bZVt0XVsxXS5sZW5ndGgtMV09PXAuQ0xPU0VfUk9VTkRfQlJBQ0tFVH0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0KzFdJiZlW3QrMV1bMV09PXAuRk9SV0FSRF9TTEFTSH0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XVsxXT09cC5GT1JXQVJEX1NMQVNIfSh0LG4pfHxmdW5jdGlvbihlLHQpe3JldHVybiBlW3QrMV0mJmVbdCsxXVsxXT09cC5DT01NQX0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XVsxXT09cC5DT01NQX0odCxuKX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciBuLHI9ZS5zdG9yZSxpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXIoZSx0W2ldKSxpPG8tMSYmcihlLChuPWUpLmZvcm1hdD9wLkNPTU1BKyh1KG4sYy5CZXR3ZWVuU2VsZWN0b3JzKT9uLmZvcm1hdC5icmVha1dpdGg6bCkrbi5pbmRlbnRXaXRoOnAuQ09NTUEpfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLTE7MDw9dCYmZVt0XVswXT09aC5DT01NRU5UO3QtLSk7cmV0dXJuIHR9KHQpLHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbyhlLHQscixuKX1mdW5jdGlvbiBvKGUsdCxuLHIpe3ZhciBpLG89ZS5zdG9yZSxhPXRbbl0scz1hWzJdWzBdPT1oLlBST1BFUlRZX0JMT0NLO2k9ZS5mb3JtYXQ/ISghZS5mb3JtYXQuc2VtaWNvbG9uQWZ0ZXJMYXN0UHJvcGVydHkmJiFzKXx8bjxyOm48cnx8czt2YXIgdT1uPT09cjtzd2l0Y2goYVswXSl7Y2FzZSBoLkFUX1JVTEU6byhlLGEpLG8oZSxfKGUsYy5BZnRlclByb3BlcnR5LCExKSk7YnJlYWs7Y2FzZSBoLkFUX1JVTEVfQkxPQ0s6ZChlLGFbMV0pLG8oZSxiKGUsYy5BZnRlclJ1bGVCZWdpbnMsITApKSxtKGUsYVsyXSksbyhlLHkoZSxjLkFmdGVyUnVsZUVuZHMsITEsdSkpO2JyZWFrO2Nhc2UgaC5DT01NRU5UOm8oZSxhKTticmVhaztjYXNlIGguUFJPUEVSVFk6byhlLGFbMV0pLG8oZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5mb3JtYXQ/cC5DT0xPTisodihlLGYuQmVmb3JlVmFsdWUpP3AuU1BBQ0U6bCk6cC5DT0xPTn0oZSkpLGcoZSxhKSxvKGUsaT9fKGUsYy5BZnRlclByb3BlcnR5LHUpOmwpO2JyZWFrO2Nhc2UgaC5SQVc6byhlLGEpfX1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixpLG89ZS5zdG9yZTtpZih0WzJdWzBdPT1oLlBST1BFUlRZX0JMT0NLKW8oZSxiKGUsYy5BZnRlckJsb2NrQmVnaW5zLCExKSksbShlLHRbMl1bMV0pLG8oZSx5KGUsYy5BZnRlckJsb2NrRW5kcywhMSwhMCkpO2Vsc2UgZm9yKG49MixyPXQubGVuZ3RoO248cjtuKyspbyhlLHRbbl0pLG48ci0xJiYoImZpbHRlciI9PShpPXQpWzFdWzFdfHwiLW1zLWZpbHRlciI9PWlbMV1bMV18fCFhKGUsdCxuKSkmJm8oZSxwLlNQQUNFKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGUuZm9ybWF0JiZlLmZvcm1hdC5icmVha3NbdF19ZnVuY3Rpb24gdihlLHQpe3JldHVybiBlLmZvcm1hdCYmZS5mb3JtYXQuc3BhY2VzW3RdfWZ1bmN0aW9uIGIoZSx0LG4pe3JldHVybiBlLmZvcm1hdD8oZS5pbmRlbnRCeSs9ZS5mb3JtYXQuaW5kZW50QnksZS5pbmRlbnRXaXRoPWUuZm9ybWF0LmluZGVudFdpdGgucmVwZWF0KGUuaW5kZW50QnkpLChuJiZ2KGUsZi5CZWZvcmVCbG9ja0JlZ2lucyk/cC5TUEFDRTpsKStwLk9QRU5fQ1VSTFlfQlJBQ0tFVCsodShlLHQpP2UuZm9ybWF0LmJyZWFrV2l0aDpsKStlLmluZGVudFdpdGgpOnAuT1BFTl9DVVJMWV9CUkFDS0VUfWZ1bmN0aW9uIHkoZSx0LG4scil7cmV0dXJuIGUuZm9ybWF0PyhlLmluZGVudEJ5LT1lLmZvcm1hdC5pbmRlbnRCeSxlLmluZGVudFdpdGg9ZS5mb3JtYXQuaW5kZW50V2l0aC5yZXBlYXQoZS5pbmRlbnRCeSksKHUoZSxjLkFmdGVyUHJvcGVydHkpfHxuJiZ1KGUsYy5CZWZvcmVCbG9ja0VuZHMpP2UuZm9ybWF0LmJyZWFrV2l0aDpsKStlLmluZGVudFdpdGgrcC5DTE9TRV9DVVJMWV9CUkFDS0VUKyhyP2w6KHUoZSx0KT9lLmZvcm1hdC5icmVha1dpdGg6bCkrZS5pbmRlbnRXaXRoKSk6cC5DTE9TRV9DVVJMWV9CUkFDS0VUfWZ1bmN0aW9uIF8oZSx0LG4pe3JldHVybiBlLmZvcm1hdD9wLlNFTUlDT0xPTisobnx8IXUoZSx0KT9sOmUuZm9ybWF0LmJyZWFrV2l0aCtlLmluZGVudFdpdGgpOnAuU0VNSUNPTE9OfXQuZXhwb3J0cz17YWxsOmZ1bmN0aW9uIGUodCxuKXt2YXIgcixpLG8sYSxzPXQuc3RvcmU7Zm9yKG89MCxhPW4ubGVuZ3RoO288YTtvKyspc3dpdGNoKGk9bz09YS0xLChyPW5bb10pWzBdKXtjYXNlIGguQVRfUlVMRTpzKHQscikscyh0LF8odCxjLkFmdGVyQXRSdWxlLGkpKTticmVhaztjYXNlIGguQVRfUlVMRV9CTE9DSzpkKHQsclsxXSkscyh0LGIodCxjLkFmdGVyUnVsZUJlZ2lucywhMCkpLG0odCxyWzJdKSxzKHQseSh0LGMuQWZ0ZXJSdWxlRW5kcywhMSxpKSk7YnJlYWs7Y2FzZSBoLk5FU1RFRF9CTE9DSzpkKHQsclsxXSkscyh0LGIodCxjLkFmdGVyQmxvY2tCZWdpbnMsITApKSxlKHQsclsyXSkscyh0LHkodCxjLkFmdGVyQmxvY2tFbmRzLCEwLGkpKTticmVhaztjYXNlIGguQ09NTUVOVDpzKHQscikscyh0LHUodCxjLkFmdGVyQ29tbWVudCk/dC5mb3JtYXQuYnJlYWtXaXRoOmwpO2JyZWFrO2Nhc2UgaC5SQVc6cyh0LHIpO2JyZWFrO2Nhc2UgaC5SVUxFOmQodCxyWzFdKSxzKHQsYih0LGMuQWZ0ZXJSdWxlQmVnaW5zLCEwKSksbSh0LHJbMl0pLHModCx5KHQsYy5BZnRlclJ1bGVFbmRzLCExLGkpKX19LGJvZHk6bSxwcm9wZXJ0eTpvLHJ1bGVzOmQsdmFsdWU6Z319LHsiLi4vb3B0aW9ucy9mb3JtYXQiOjYxLCIuLi90b2tlbml6ZXIvbWFya2VyIjo4MywiLi4vdG9rZW5pemVyL3Rva2VuIjo4NH1dLDk4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gaShlLHQpe2Uub3V0cHV0LnB1c2goInN0cmluZyI9PXR5cGVvZiB0P3Q6dFsxXSl9ZnVuY3Rpb24gbygpe3JldHVybntvdXRwdXQ6W10sc3RvcmU6aX19dC5leHBvcnRzPXthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiByLmFsbCh0LGUpLHQub3V0cHV0LmpvaW4oIiIpfSxib2R5OmZ1bmN0aW9uKGUpe3ZhciB0PW8oKTtyZXR1cm4gci5ib2R5KHQsZSksdC5vdXRwdXQuam9pbigiIil9LHByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7dmFyIG49bygpO3JldHVybiByLnByb3BlcnR5KG4sZSx0LCEwKSxuLm91dHB1dC5qb2luKCIiKX0scnVsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiByLnJ1bGVzKHQsZSksdC5vdXRwdXQuam9pbigiIil9LHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW8oKTtyZXR1cm4gci52YWx1ZSh0LGUpLHQub3V0cHV0LmpvaW4oIiIpfX19LHsiLi9oZWxwZXJzIjo5N31dLDk5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9oZWxwZXJzIikuYWxsO2Z1bmN0aW9uIGkoZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHQ/dDp0WzFdOygwLGUud3JhcCkoZSxuKSxhKGUsbiksZS5vdXRwdXQucHVzaChuKX1mdW5jdGlvbiBvKGUsdCl7ZS5jb2x1bW4rdC5sZW5ndGg+ZS5mb3JtYXQud3JhcEF0JiYoYShlLGUuZm9ybWF0LmJyZWFrV2l0aCksZS5vdXRwdXQucHVzaChlLmZvcm1hdC5icmVha1dpdGgpKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dC5zcGxpdCgiXG4iKTtlLmxpbmUrPW4ubGVuZ3RoLTEsZS5jb2x1bW49MTxuLmxlbmd0aD8wOmUuY29sdW1uK24ucG9wKCkubGVuZ3RofXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXtjb2x1bW46MCxmb3JtYXQ6dC5vcHRpb25zLmZvcm1hdCxpbmRlbnRCeTowLGluZGVudFdpdGg6IiIsbGluZToxLG91dHB1dDpbXSxzcGFjZUFmdGVyQ2xvc2luZ0JyYWNlOnQub3B0aW9ucy5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxzdG9yZTppLHdyYXA6dC5vcHRpb25zLmZvcm1hdC53cmFwQXQ/bzpmdW5jdGlvbigpe319O3JldHVybiByKG4sZSkse3N0eWxlczpuLm91dHB1dC5qb2luKCIiKX19fSx7Ii4vaGVscGVycyI6OTd9XSwxMDA6W2Z1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24oZSl7dmFyIHI9dCgic291cmNlLW1hcCIpLlNvdXJjZU1hcEdlbmVyYXRvcixpPXQoIi4vaGVscGVycyIpLmFsbCxzPXQoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpLHU9IndpbjMyIj09ZS5wbGF0Zm9ybSxsPS9cLy9nLGM9IiRzdGRpbiIsZj0iXFwiO2Z1bmN0aW9uIG8oZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHQscj1uP3Q6dFsxXSxpPW4/bnVsbDp0WzJdOygwLGUud3JhcCkoZSxyKSxwKGUscixpKSxlLm91dHB1dC5wdXNoKHIpfWZ1bmN0aW9uIGEoZSx0KXtlLmNvbHVtbit0Lmxlbmd0aD5lLmZvcm1hdC53cmFwQXQmJihwKGUsZS5mb3JtYXQuYnJlYWtXaXRoLCExKSxlLm91dHB1dC5wdXNoKGUuZm9ybWF0LmJyZWFrV2l0aCkpfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByPXQuc3BsaXQoIlxuIik7biYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaChlLHRbbl0pfShlLG4pLGUubGluZSs9ci5sZW5ndGgtMSxlLmNvbHVtbj0xPHIubGVuZ3RoPzA6ZS5jb2x1bW4rci5wb3AoKS5sZW5ndGh9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPXRbMF0scj10WzFdLGk9dFsyXSxvPWksYT1vfHxjO3UmJm8mJiFzKG8pJiYoYT1vLnJlcGxhY2UobCxmKSksZS5vdXRwdXRNYXAuYWRkTWFwcGluZyh7Z2VuZXJhdGVkOntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW59LHNvdXJjZTphLG9yaWdpbmFsOntsaW5lOm4sY29sdW1uOnJ9fSksZS5pbmxpbmVTb3VyY2VzJiZpIGluIGUuc291cmNlc0NvbnRlbnQmJmUub3V0cHV0TWFwLnNldFNvdXJjZUNvbnRlbnQoYSxlLnNvdXJjZXNDb250ZW50W2ldKX1uLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17Y29sdW1uOjAsZm9ybWF0OnQub3B0aW9ucy5mb3JtYXQsaW5kZW50Qnk6MCxpbmRlbnRXaXRoOiIiLGlubGluZVNvdXJjZXM6dC5vcHRpb25zLnNvdXJjZU1hcElubGluZVNvdXJjZXMsbGluZToxLG91dHB1dDpbXSxvdXRwdXRNYXA6bmV3IHIsc291cmNlc0NvbnRlbnQ6dC5zb3VyY2VzQ29udGVudCxzcGFjZUFmdGVyQ2xvc2luZ0JyYWNlOnQub3B0aW9ucy5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxzdG9yZTpvLHdyYXA6dC5vcHRpb25zLmZvcm1hdC53cmFwQXQ/YTpmdW5jdGlvbigpe319O3JldHVybiBpKG4sZSkse3NvdXJjZU1hcDpuLm91dHB1dE1hcCxzdHlsZXM6bi5vdXRwdXQuam9pbigiIil9fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiOjkzLCIuL2hlbHBlcnMiOjk3LF9wcm9jZXNzOjExMiwic291cmNlLW1hcCI6MTU1fV0sMTAxOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1uLmlzQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKToiW29iamVjdCBBcnJheV0iPT09dChlKX0sbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sbi5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxuLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxuLmlzTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sbi5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LG4uaXNTeW1ib2w9ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfSxuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxuLmlzUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09dChlKX0sbi5pc09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfSxuLmlzRGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT10KGUpfSxuLmlzRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PXQoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcn0sbi5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfSxuLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGV8fCJzeW1ib2wiPT10eXBlb2YgZXx8dm9pZCAwPT09ZX0sbi5pc0J1ZmZlcj1lLmlzQnVmZmVyfSkuY2FsbCh0aGlzLHtpc0J1ZmZlcjplKCIuLi8uLi9pcy1idWZmZXIvaW5kZXguanMiKX0pfSx7Ii4uLy4uL2lzLWJ1ZmZlci9pbmRleC5qcyI6MTA3fV0sMTAyOltmdW5jdGlvbihlLHQsbil7dmFyIHU9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXt9O3JldHVybiB0LnByb3RvdHlwZT1lLG5ldyB0fSxhPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5wdXNoKG4pO3JldHVybiBufSxvPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19O2Z1bmN0aW9uIHIoKXt0aGlzLl9ldmVudHMmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCJfZXZlbnRzIil8fCh0aGlzLl9ldmVudHM9dShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9KCh0LmV4cG9ydHM9cikuRXZlbnRFbWl0dGVyPXIpLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgaSxzPTEwO3RyeXt2YXIgbD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ4Iix7dmFsdWU6MH0pLGk9MD09PWwueH1jYXRjaChlKXtpPSExfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIHZvaWQgMD09PWUuX21heExpc3RlbmVycz9yLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIGksbyxhO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKG89ZS5fZXZlbnRzKT8oby5uZXdMaXN0ZW5lciYmKGUuZW1pdCgibmV3TGlzdGVuZXIiLHQsbi5saXN0ZW5lcj9uLmxpc3RlbmVyOm4pLG89ZS5fZXZlbnRzKSxhPW9bdF0pOihvPWUuX2V2ZW50cz11KG51bGwpLGUuX2V2ZW50c0NvdW50PTApLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2E9b1t0XT1yP1tuLGFdOlthLG5dOnI/YS51bnNoaWZ0KG4pOmEucHVzaChuKSwhYS53YXJuZWQmJihpPWMoZSkpJiYwPGkmJmEubGVuZ3RoPmkpe2Eud2FybmVkPSEwO3ZhciBzPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK2EubGVuZ3RoKycgIicrU3RyaW5nKHQpKyciIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7cy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHMuZW1pdHRlcj1lLHMudHlwZT10LHMuY291bnQ9YS5sZW5ndGgsIm9iamVjdCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiJXM6ICVzIixzLm5hbWUscy5tZXNzYWdlKX19ZWxzZSBhPW9bdF09biwrK2UuX2V2ZW50c0NvdW50O3JldHVybiBlfWZ1bmN0aW9uIHAoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNlIDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdD0wO3Q8ZS5sZW5ndGg7Kyt0KWVbdF09YXJndW1lbnRzW3RdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsZSl9fWZ1bmN0aW9uIGgoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxpPW8uY2FsbChwLHIpO3JldHVybiBpLmxpc3RlbmVyPW4sci53cmFwRm49aX1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYoIXIpcmV0dXJuW107dmFyIGk9clt0XTtyZXR1cm4gaT8iZnVuY3Rpb24iPT10eXBlb2YgaT9uP1tpLmxpc3RlbmVyfHxpXTpbaV06bj9mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXT1lW25dLmxpc3RlbmVyfHxlW25dO3JldHVybiB0fShpKTpnKGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9dGhpcy5fZXZlbnRzO2lmKHQpe3ZhciBuPXRbZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIDE7aWYobilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpbltyXT1lW3JdO3JldHVybiBufWk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlfHxlPDB8fGUhPWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtzPWV9fSk6ci5kZWZhdWx0TWF4TGlzdGVuZXJzPXMsci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwfHxpc05hTihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKX0sci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz0iZXJyb3IiPT09ZTtpZihhPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PWEuZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgmJih0PWFyZ3VtZW50c1sxXSksdCBpbnN0YW5jZW9mIEVycm9yKXRocm93IHQ7dmFyIHU9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrdCsiKSIpO3Rocm93IHUuY29udGV4dD10LHV9aWYoIShuPWFbZV0pKXJldHVybiExO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3N3aXRjaChyPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24oZSx0LG4pe2lmKHQpZS5jYWxsKG4pO2Vsc2UgZm9yKHZhciByPWUubGVuZ3RoLGk9ZyhlLHIpLG89MDtvPHI7KytvKWlbb10uY2FsbChuKX0obixsLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24oZSx0LG4scil7aWYodCllLmNhbGwobixyKTtlbHNlIGZvcih2YXIgaT1lLmxlbmd0aCxvPWcoZSxpKSxhPTA7YTxpOysrYSlvW2FdLmNhbGwobixyKX0obixsLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodCllLmNhbGwobixyLGkpO2Vsc2UgZm9yKHZhciBvPWUubGVuZ3RoLGE9ZyhlLG8pLHM9MDtzPG87KytzKWFbc10uY2FsbChuLHIsaSl9KG4sbCx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpZS5jYWxsKG4scixpLG8pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLHM9ZyhlLGEpLHU9MDt1PGE7Kyt1KXNbdV0uY2FsbChuLHIsaSxvKX0obixsLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KHItMSksbz0xO288cjtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTshZnVuY3Rpb24oZSx0LG4scil7aWYodCllLmFwcGx5KG4scik7ZWxzZSBmb3IodmFyIGk9ZS5sZW5ndGgsbz1nKGUsaSksYT0wO2E8aTsrK2Epb1thXS5hcHBseShuLHIpfShuLGwsdGhpcyxpKX1yZXR1cm4hMH0sci5wcm90b3R5cGUub249ci5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZih0aGlzLGUsdCwhMSl9LHIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBmKHRoaXMsZSx0LCEwKX0sci5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24oZSxoKHRoaXMsZSx0KSksdGhpc30sci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKGUsaCh0aGlzLGUsdCkpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEobj1yW2VdKSlyZXR1cm4gdGhpcztpZihuPT09dHx8bi5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9dShudWxsKTooZGVsZXRlIHJbZV0sci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxuLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil7Zm9yKGk9LTEsbz1uLmxlbmd0aC0xOzA8PW87by0tKWlmKG5bb109PT10fHxuW29dLmxpc3RlbmVyPT09dCl7YT1uW29dLmxpc3RlbmVyLGk9bzticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/bi5zaGlmdCgpOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQscj1uKzEsaT1lLmxlbmd0aDtyPGk7bis9MSxyKz0xKWVbbl09ZVtyXTtlLnBvcCgpfShuLGkpLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxhfHx0KX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZighKG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighbi5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz11KG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOm5bZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz11KG51bGwpOmRlbGV0ZSBuW2VdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgaSxvPWEobik7Zm9yKHI9MDtyPG8ubGVuZ3RoOysrcikicmVtb3ZlTGlzdGVuZXIiIT09KGk9b1tyXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGkpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9dShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9bltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodClmb3Iocj10Lmxlbmd0aC0xOzA8PXI7ci0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W3JdKTtyZXR1cm4gdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMCl9LHIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gZCh0aGlzLGUsITEpfSxyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5saXN0ZW5lckNvdW50P2UubGlzdGVuZXJDb3VudCh0KTptLmNhbGwoZSx0KX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1tLHIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLl9ldmVudHNDb3VudD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSwxMDM6W2Z1bmN0aW9uKGUsQixSKXsoZnVuY3Rpb24oVCl7IWZ1bmN0aW9uKGUpe3ZhciB0PSJvYmplY3QiPT10eXBlb2YgUiYmUixuPSJvYmplY3QiPT10eXBlb2YgQiYmQiYmQi5leHBvcnRzPT10JiZCLHI9Im9iamVjdCI9PXR5cGVvZiBUJiZUO3IuZ2xvYmFsIT09ciYmci53aW5kb3chPT1yfHwoZT1yKTt2YXIgcz0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csdT0vW1x4MDEtXHg3Rl0vZyxsPS9bXHgwMS1cdFx4MEJcZlx4MEUtXHgxRlx4N0ZceDgxXHg4RFx4OEZceDkwXHg5RFx4QTAtXHVGRkZGXS9nLGM9LzxcdTIwRDJ8PVx1MjBFNXw+XHUyMEQyfFx1MjA1Rlx1MjAwQXxcdTIxOURcdTAzMzh8XHUyMjAyXHUwMzM4fFx1MjIyMFx1MjBEMnxcdTIyMjlcdUZFMDB8XHUyMjJBXHVGRTAwfFx1MjIzQ1x1MjBEMnxcdTIyM0RcdTAzMzF8XHUyMjNFXHUwMzMzfFx1MjI0Mlx1MDMzOHxcdTIyNEJcdTAzMzh8XHUyMjREXHUyMEQyfFx1MjI0RVx1MDMzOHxcdTIyNEZcdTAzMzh8XHUyMjUwXHUwMzM4fFx1MjI2MVx1MjBFNXxcdTIyNjRcdTIwRDJ8XHUyMjY1XHUyMEQyfFx1MjI2Nlx1MDMzOHxcdTIyNjdcdTAzMzh8XHUyMjY4XHVGRTAwfFx1MjI2OVx1RkUwMHxcdTIyNkFcdTAzMzh8XHUyMjZBXHUyMEQyfFx1MjI2Qlx1MDMzOHxcdTIyNkJcdTIwRDJ8XHUyMjdGXHUwMzM4fFx1MjI4Mlx1MjBEMnxcdTIyODNcdTIwRDJ8XHUyMjhBXHVGRTAwfFx1MjI4Qlx1RkUwMHxcdTIyOEZcdTAzMzh8XHUyMjkwXHUwMzM4fFx1MjI5M1x1RkUwMHxcdTIyOTRcdUZFMDB8XHUyMkI0XHUyMEQyfFx1MjJCNVx1MjBEMnxcdTIyRDhcdTAzMzh8XHUyMkQ5XHUwMzM4fFx1MjJEQVx1RkUwMHxcdTIyREJcdUZFMDB8XHUyMkY1XHUwMzM4fFx1MjJGOVx1MDMzOHxcdTI5MzNcdTAzMzh8XHUyOUNGXHUwMzM4fFx1MjlEMFx1MDMzOHxcdTJBNkRcdTAzMzh8XHUyQTcwXHUwMzM4fFx1MkE3RFx1MDMzOHxcdTJBN0VcdTAzMzh8XHUyQUExXHUwMzM4fFx1MkFBMlx1MDMzOHxcdTJBQUNcdUZFMDB8XHUyQUFEXHVGRTAwfFx1MkFBRlx1MDMzOHxcdTJBQjBcdTAzMzh8XHUyQUM1XHUwMzM4fFx1MkFDNlx1MDMzOHxcdTJBQ0JcdUZFMDB8XHUyQUNDXHVGRTAwfFx1MkFGRFx1MjBFNXxbXHhBMC1cdTAxMTNcdTAxMTYtXHUwMTIyXHUwMTI0LVx1MDEyQlx1MDEyRS1cdTAxNERcdTAxNTAtXHUwMTdFXHUwMTkyXHUwMUI1XHUwMUY1XHUwMjM3XHUwMkM2XHUwMkM3XHUwMkQ4LVx1MDJERFx1MDMxMVx1MDM5MS1cdTAzQTFcdTAzQTMtXHUwM0E5XHUwM0IxLVx1MDNDOVx1MDNEMVx1MDNEMlx1MDNENVx1MDNENlx1MDNEQ1x1MDNERFx1MDNGMFx1MDNGMVx1MDNGNVx1MDNGNlx1MDQwMS1cdTA0MENcdTA0MEUtXHUwNDRGXHUwNDUxLVx1MDQ1Q1x1MDQ1RVx1MDQ1Rlx1MjAwMi1cdTIwMDVcdTIwMDctXHUyMDEwXHUyMDEzLVx1MjAxNlx1MjAxOC1cdTIwMUFcdTIwMUMtXHUyMDFFXHUyMDIwLVx1MjAyMlx1MjAyNVx1MjAyNlx1MjAzMC1cdTIwMzVcdTIwMzlcdTIwM0FcdTIwM0VcdTIwNDFcdTIwNDNcdTIwNDRcdTIwNEZcdTIwNTdcdTIwNUYtXHUyMDYzXHUyMEFDXHUyMERCXHUyMERDXHUyMTAyXHUyMTA1XHUyMTBBLVx1MjExM1x1MjExNS1cdTIxMUVcdTIxMjJcdTIxMjRcdTIxMjctXHUyMTI5XHUyMTJDXHUyMTJEXHUyMTJGLVx1MjEzMVx1MjEzMy1cdTIxMzhcdTIxNDUtXHUyMTQ4XHUyMTUzLVx1MjE1RVx1MjE5MC1cdTIxOUJcdTIxOUQtXHUyMUE3XHUyMUE5LVx1MjFBRVx1MjFCMC1cdTIxQjNcdTIxQjUtXHUyMUI3XHUyMUJBLVx1MjFEQlx1MjFERFx1MjFFNFx1MjFFNVx1MjFGNVx1MjFGRC1cdTIyMDVcdTIyMDctXHUyMjA5XHUyMjBCXHUyMjBDXHUyMjBGLVx1MjIxNFx1MjIxNi1cdTIyMThcdTIyMUFcdTIyMUQtXHUyMjM4XHUyMjNBLVx1MjI1N1x1MjI1OVx1MjI1QVx1MjI1Q1x1MjI1Ri1cdTIyNjJcdTIyNjQtXHUyMjhCXHUyMjhELVx1MjI5Qlx1MjI5RC1cdTIyQTVcdTIyQTctXHUyMkIwXHUyMkIyLVx1MjJCQlx1MjJCRC1cdTIyREJcdTIyREUtXHUyMkUzXHUyMkU2LVx1MjJGN1x1MjJGOS1cdTIyRkVcdTIzMDVcdTIzMDZcdTIzMDgtXHUyMzEwXHUyMzEyXHUyMzEzXHUyMzE1XHUyMzE2XHUyMzFDLVx1MjMxRlx1MjMyMlx1MjMyM1x1MjMyRFx1MjMyRVx1MjMzNlx1MjMzRFx1MjMzRlx1MjM3Q1x1MjNCMFx1MjNCMVx1MjNCNC1cdTIzQjZcdTIzREMtXHUyM0RGXHUyM0UyXHUyM0U3XHUyNDIzXHUyNEM4XHUyNTAwXHUyNTAyXHUyNTBDXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFDXHUyNTI0XHUyNTJDXHUyNTM0XHUyNTNDXHUyNTUwLVx1MjU2Q1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU5MS1cdTI1OTNcdTI1QTFcdTI1QUFcdTI1QUJcdTI1QURcdTI1QUVcdTI1QjFcdTI1QjMtXHUyNUI1XHUyNUI4XHUyNUI5XHUyNUJELVx1MjVCRlx1MjVDMlx1MjVDM1x1MjVDQVx1MjVDQlx1MjVFQ1x1MjVFRlx1MjVGOC1cdTI1RkNcdTI2MDVcdTI2MDZcdTI2MEVcdTI2NDBcdTI2NDJcdTI2NjBcdTI2NjNcdTI2NjVcdTI2NjZcdTI2NkFcdTI2NkQtXHUyNjZGXHUyNzEzXHUyNzE3XHUyNzIwXHUyNzM2XHUyNzU4XHUyNzcyXHUyNzczXHUyN0M4XHUyN0M5XHUyN0U2LVx1MjdFRFx1MjdGNS1cdTI3RkFcdTI3RkNcdTI3RkZcdTI5MDItXHUyOTA1XHUyOTBDLVx1MjkxM1x1MjkxNlx1MjkxOS1cdTI5MjBcdTI5MjMtXHUyOTJBXHUyOTMzXHUyOTM1LVx1MjkzOVx1MjkzQ1x1MjkzRFx1Mjk0NVx1Mjk0OC1cdTI5NEJcdTI5NEUtXHUyOTc2XHUyOTc4XHUyOTc5XHUyOTdCLVx1Mjk3Rlx1Mjk4NVx1Mjk4Nlx1Mjk4Qi1cdTI5OTZcdTI5OUFcdTI5OUNcdTI5OURcdTI5QTQtXHUyOUI3XHUyOUI5XHUyOUJCXHUyOUJDXHUyOUJFLVx1MjlDNVx1MjlDOVx1MjlDRC1cdTI5RDBcdTI5REMtXHUyOURFXHUyOUUzLVx1MjlFNVx1MjlFQlx1MjlGNFx1MjlGNlx1MkEwMC1cdTJBMDJcdTJBMDRcdTJBMDZcdTJBMENcdTJBMERcdTJBMTAtXHUyQTE3XHUyQTIyLVx1MkEyN1x1MkEyOVx1MkEyQVx1MkEyRC1cdTJBMzFcdTJBMzMtXHUyQTNDXHUyQTNGXHUyQTQwXHUyQTQyLVx1MkE0RFx1MkE1MFx1MkE1My1cdTJBNThcdTJBNUEtXHUyQTVEXHUyQTVGXHUyQTY2XHUyQTZBXHUyQTZELVx1MkE3NVx1MkE3Ny1cdTJBOUFcdTJBOUQtXHUyQUEyXHUyQUE0LVx1MkFCMFx1MkFCMy1cdTJBQzhcdTJBQ0JcdTJBQ0NcdTJBQ0YtXHUyQURCXHUyQUU0XHUyQUU2LVx1MkFFOVx1MkFFQi1cdTJBRjNcdTJBRkRcdUZCMDAtXHVGQjA0XXxcdUQ4MzVbXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1RENDRlx1REQwNFx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERDZCXS9nLGY9eyLCrSI6InNoeSIsIuKAjCI6Inp3bmoiLCLigI0iOiJ6d2oiLCLigI4iOiJscm0iLCLigaMiOiJpYyIsIuKBoiI6Iml0Iiwi4oGhIjoiYWYiLCLigI8iOiJybG0iLCLigIsiOiJaZXJvV2lkdGhTcGFjZSIsIuKBoCI6Ik5vQnJlYWsiLCLMkSI6IkRvd25CcmV2ZSIsIuKDmyI6InRkb3QiLCLig5wiOiJEb3REb3QiLCJcdCI6IlRhYiIsIlxuIjoiTmV3TGluZSIsIuKAiCI6InB1bmNzcCIsIuKBnyI6Ik1lZGl1bVNwYWNlIiwi4oCJIjoidGhpbnNwIiwi4oCKIjoiaGFpcnNwIiwi4oCEIjoiZW1zcDEzIiwi4oCCIjoiZW5zcCIsIuKAhSI6ImVtc3AxNCIsIuKAgyI6ImVtc3AiLCLigIciOiJudW1zcCIsIsKgIjoibmJzcCIsIuKBn+KAiiI6IlRoaWNrU3BhY2UiLCLigL4iOiJvbGluZSIsXzoibG93YmFyIiwi4oCQIjoiZGFzaCIsIuKAkyI6Im5kYXNoIiwi4oCUIjoibWRhc2giLCLigJUiOiJob3JiYXIiLCIsIjoiY29tbWEiLCI7Ijoic2VtaSIsIuKBjyI6ImJzZW1pIiwiOiI6ImNvbG9uIiwi4qm0IjoiQ29sb25lIiwiISI6ImV4Y2wiLCLCoSI6ImlleGNsIiwiPyI6InF1ZXN0Iiwiwr8iOiJpcXVlc3QiLCIuIjoicGVyaW9kIiwi4oClIjoibmxkciIsIuKApiI6Im1sZHIiLCLCtyI6Im1pZGRvdCIsIiciOiJhcG9zIiwi4oCYIjoibHNxdW8iLCLigJkiOiJyc3F1byIsIuKAmiI6InNicXVvIiwi4oC5IjoibHNhcXVvIiwi4oC6IjoicnNhcXVvIiwnIic6InF1b3QiLCLigJwiOiJsZHF1byIsIuKAnSI6InJkcXVvIiwi4oCeIjoiYmRxdW8iLCLCqyI6ImxhcXVvIiwiwrsiOiJyYXF1byIsIigiOiJscGFyIiwiKSI6InJwYXIiLCJbIjoibHNxYiIsIl0iOiJyc3FiIiwieyI6ImxjdWIiLCJ9IjoicmN1YiIsIuKMiCI6ImxjZWlsIiwi4oyJIjoicmNlaWwiLCLijIoiOiJsZmxvb3IiLCLijIsiOiJyZmxvb3IiLCLipoUiOiJsb3BhciIsIuKmhiI6InJvcGFyIiwi4qaLIjoibGJya2UiLCLipowiOiJyYnJrZSIsIuKmjSI6ImxicmtzbHUiLCLipo4iOiJyYnJrc2xkIiwi4qaPIjoibGJya3NsZCIsIuKmkCI6InJicmtzbHUiLCLippEiOiJsYW5nZCIsIuKmkiI6InJhbmdkIiwi4qaTIjoibHBhcmx0Iiwi4qaUIjoicnBhcmd0Iiwi4qaVIjoiZ3RsUGFyIiwi4qaWIjoibHRyUGFyIiwi4p+mIjoibG9icmsiLCLin6ciOiJyb2JyayIsIuKfqCI6ImxhbmciLCLin6kiOiJyYW5nIiwi4p+qIjoiTGFuZyIsIuKfqyI6IlJhbmciLCLin6wiOiJsb2FuZyIsIuKfrSI6InJvYW5nIiwi4p2yIjoibGJicmsiLCLinbMiOiJyYmJyayIsIuKAliI6IlZlcnQiLCLCpyI6InNlY3QiLCLCtiI6InBhcmEiLCJAIjoiY29tbWF0IiwiKiI6ImFzdCIsIi8iOiJzb2wiLHVuZGVmaW5lZDpudWxsLCImIjoiYW1wIiwiIyI6Im51bSIsIiUiOiJwZXJjbnQiLCLigLAiOiJwZXJtaWwiLCLigLEiOiJwZXJ0ZW5rIiwi4oCgIjoiZGFnZ2VyIiwi4oChIjoiRGFnZ2VyIiwi4oCiIjoiYnVsbCIsIuKBgyI6Imh5YnVsbCIsIuKAsiI6InByaW1lIiwi4oCzIjoiUHJpbWUiLCLigLQiOiJ0cHJpbWUiLCLigZciOiJxcHJpbWUiLCLigLUiOiJicHJpbWUiLCLigYEiOiJjYXJldCIsImAiOiJncmF2ZSIsIsK0IjoiYWN1dGUiLCLLnCI6InRpbGRlIiwiXiI6IkhhdCIsIsKvIjoibWFjciIsIsuYIjoiYnJldmUiLCLLmSI6ImRvdCIsIsKoIjoiZGllIiwiy5oiOiJyaW5nIiwiy50iOiJkYmxhYyIsIsK4IjoiY2VkaWwiLCLLmyI6Im9nb24iLCLLhiI6ImNpcmMiLCLLhyI6ImNhcm9uIiwiwrAiOiJkZWciLCLCqSI6ImNvcHkiLCLCriI6InJlZyIsIuKElyI6ImNvcHlzciIsIuKEmCI6IndwIiwi4oSeIjoicngiLCLihKciOiJtaG8iLCLihKkiOiJpaW90YSIsIuKGkCI6ImxhcnIiLCLihpoiOiJubGFyciIsIuKGkiI6InJhcnIiLCLihpsiOiJucmFyciIsIuKGkSI6InVhcnIiLCLihpMiOiJkYXJyIiwi4oaUIjoiaGFyciIsIuKGriI6Im5oYXJyIiwi4oaVIjoidmFyciIsIuKGliI6Im53YXJyIiwi4oaXIjoibmVhcnIiLCLihpgiOiJzZWFyciIsIuKGmSI6InN3YXJyIiwi4oadIjoicmFycnciLCLihp3MuCI6Im5yYXJydyIsIuKGniI6IkxhcnIiLCLihp8iOiJVYXJyIiwi4oagIjoiUmFyciIsIuKGoSI6IkRhcnIiLCLihqIiOiJsYXJydGwiLCLihqMiOiJyYXJydGwiLCLihqQiOiJtYXBzdG9sZWZ0Iiwi4oalIjoibWFwc3RvdXAiLCLihqYiOiJtYXAiLCLihqciOiJtYXBzdG9kb3duIiwi4oapIjoibGFycmhrIiwi4oaqIjoicmFycmhrIiwi4oarIjoibGFycmxwIiwi4oasIjoicmFycmxwIiwi4oatIjoiaGFycnciLCLihrAiOiJsc2giLCLihrEiOiJyc2giLCLihrIiOiJsZHNoIiwi4oazIjoicmRzaCIsIuKGtSI6ImNyYXJyIiwi4oa2IjoiY3VsYXJyIiwi4oa3IjoiY3VyYXJyIiwi4oa6Ijoib2xhcnIiLCLihrsiOiJvcmFyciIsIuKGvCI6ImxoYXJ1Iiwi4oa9IjoibGhhcmQiLCLihr4iOiJ1aGFyciIsIuKGvyI6InVoYXJsIiwi4oeAIjoicmhhcnUiLCLih4EiOiJyaGFyZCIsIuKHgiI6ImRoYXJyIiwi4oeDIjoiZGhhcmwiLCLih4QiOiJybGFyciIsIuKHhSI6InVkYXJyIiwi4oeGIjoibHJhcnIiLCLih4ciOiJsbGFyciIsIuKHiCI6InV1YXJyIiwi4oeJIjoicnJhcnIiLCLih4oiOiJkZGFyciIsIuKHiyI6ImxyaGFyIiwi4oeMIjoicmxoYXIiLCLih5AiOiJsQXJyIiwi4oeNIjoibmxBcnIiLCLih5EiOiJ1QXJyIiwi4oeSIjoickFyciIsIuKHjyI6Im5yQXJyIiwi4oeTIjoiZEFyciIsIuKHlCI6ImlmZiIsIuKHjiI6Im5oQXJyIiwi4oeVIjoidkFyciIsIuKHliI6Im53QXJyIiwi4oeXIjoibmVBcnIiLCLih5giOiJzZUFyciIsIuKHmSI6InN3QXJyIiwi4oeaIjoibEFhcnIiLCLih5siOiJyQWFyciIsIuKHnSI6InppZ3JhcnIiLCLih6QiOiJsYXJyYiIsIuKHpSI6InJhcnJiIiwi4oe1IjoiZHVhcnIiLCLih70iOiJsb2FyciIsIuKHviI6InJvYXJyIiwi4oe/IjoiaG9hcnIiLCLiiIAiOiJmb3JhbGwiLCLiiIEiOiJjb21wIiwi4oiCIjoicGFydCIsIuKIgsy4IjoibnBhcnQiLCLiiIMiOiJleGlzdCIsIuKIhCI6Im5leGlzdCIsIuKIhSI6ImVtcHR5Iiwi4oiHIjoiRGVsIiwi4oiIIjoiaW4iLCLiiIkiOiJub3RpbiIsIuKIiyI6Im5pIiwi4oiMIjoibm90bmkiLCLPtiI6ImJlcHNpIiwi4oiPIjoicHJvZCIsIuKIkCI6ImNvcHJvZCIsIuKIkSI6InN1bSIsIisiOiJwbHVzIiwiwrEiOiJwbSIsIsO3IjoiZGl2Iiwiw5ciOiJ0aW1lcyIsIjwiOiJsdCIsIuKJriI6Im5sdCIsIjzig5IiOiJudmx0IiwiPSI6ImVxdWFscyIsIuKJoCI6Im5lIiwiPeKDpSI6ImJuZSIsIuKptSI6IkVxdWFsIiwiPiI6Imd0Iiwi4omvIjoibmd0IiwiPuKDkiI6Im52Z3QiLCLCrCI6Im5vdCIsInwiOiJ2ZXJ0IiwiwqYiOiJicnZiYXIiLCLiiJIiOiJtaW51cyIsIuKIkyI6Im1wIiwi4oiUIjoicGx1c2RvIiwi4oGEIjoiZnJhc2wiLCLiiJYiOiJzZXRtbiIsIuKIlyI6Imxvd2FzdCIsIuKImCI6ImNvbXBmbiIsIuKImiI6IlNxcnQiLCLiiJ0iOiJwcm9wIiwi4oieIjoiaW5maW4iLCLiiJ8iOiJhbmdydCIsIuKIoCI6ImFuZyIsIuKIoOKDkiI6Im5hbmciLCLiiKEiOiJhbmdtc2QiLCLiiKIiOiJhbmdzcGgiLCLiiKMiOiJtaWQiLCLiiKQiOiJubWlkIiwi4oilIjoicGFyIiwi4oimIjoibnBhciIsIuKIpyI6ImFuZCIsIuKIqCI6Im9yIiwi4oipIjoiY2FwIiwi4oip77iAIjoiY2FwcyIsIuKIqiI6ImN1cCIsIuKIqu+4gCI6ImN1cHMiLCLiiKsiOiJpbnQiLCLiiKwiOiJJbnQiLCLiiK0iOiJ0aW50Iiwi4qiMIjoicWludCIsIuKIriI6Im9pbnQiLCLiiK8iOiJDb25pbnQiLCLiiLAiOiJDY29uaW50Iiwi4oixIjoiY3dpbnQiLCLiiLIiOiJjd2NvbmludCIsIuKIsyI6ImF3Y29uaW50Iiwi4oi0IjoidGhlcmU0Iiwi4oi1IjoiYmVjYXVzIiwi4oi2IjoicmF0aW8iLCLiiLciOiJDb2xvbiIsIuKIuCI6Im1pbnVzZCIsIuKIuiI6Im1ERG90Iiwi4oi7IjoiaG9tdGh0Iiwi4oi8Ijoic2ltIiwi4omBIjoibnNpbSIsIuKIvOKDkiI6Im52c2ltIiwi4oi9IjoiYnNpbSIsIuKIvcyxIjoicmFjZSIsIuKIviI6ImFjIiwi4oi+zLMiOiJhY0UiLCLiiL8iOiJhY2QiLCLiiYAiOiJ3ciIsIuKJgiI6ImVzaW0iLCLiiYLMuCI6Im5lc2ltIiwi4omDIjoic2ltZSIsIuKJhCI6Im5zaW1lIiwi4omFIjoiY29uZyIsIuKJhyI6Im5jb25nIiwi4omGIjoic2ltbmUiLCLiiYgiOiJhcCIsIuKJiSI6Im5hcCIsIuKJiiI6ImFwZSIsIuKJiyI6ImFwaWQiLCLiiYvMuCI6Im5hcGlkIiwi4omMIjoiYmNvbmciLCLiiY0iOiJDdXBDYXAiLCLiia0iOiJOb3RDdXBDYXAiLCLiiY3ig5IiOiJudmFwIiwi4omOIjoiYnVtcCIsIuKJjsy4IjoibmJ1bXAiLCLiiY8iOiJidW1wZSIsIuKJj8y4IjoibmJ1bXBlIiwi4omQIjoiZG90ZXEiLCLiiZDMuCI6Im5lZG90Iiwi4omRIjoiZURvdCIsIuKJkiI6ImVmRG90Iiwi4omTIjoiZXJEb3QiLCLiiZQiOiJjb2xvbmUiLCLiiZUiOiJlY29sb24iLCLiiZYiOiJlY2lyIiwi4omXIjoiY2lyZSIsIuKJmSI6IndlZGdlcSIsIuKJmiI6InZlZWVxIiwi4omcIjoidHJpZSIsIuKJnyI6ImVxdWVzdCIsIuKJoSI6ImVxdWl2Iiwi4omiIjoibmVxdWl2Iiwi4omh4oOlIjoiYm5lcXVpdiIsIuKJpCI6ImxlIiwi4omwIjoibmxlIiwi4omk4oOSIjoibnZsZSIsIuKJpSI6ImdlIiwi4omxIjoibmdlIiwi4oml4oOSIjoibnZnZSIsIuKJpiI6ImxFIiwi4ommzLgiOiJubEUiLCLiiaciOiJnRSIsIuKJp8y4IjoibmdFIiwi4omo77iAIjoibHZuRSIsIuKJqCI6ImxuRSIsIuKJqSI6ImduRSIsIuKJqe+4gCI6Imd2bkUiLCLiiaoiOiJsbCIsIuKJqsy4Ijoibkx0diIsIuKJquKDkiI6Im5MdCIsIuKJqyI6ImdnIiwi4omrzLgiOiJuR3R2Iiwi4omr4oOSIjoibkd0Iiwi4omsIjoidHdpeHQiLCLiibIiOiJsc2ltIiwi4om0IjoibmxzaW0iLCLiibMiOiJnc2ltIiwi4om1IjoibmdzaW0iLCLiibYiOiJsZyIsIuKJuCI6Im50bGciLCLiibciOiJnbCIsIuKJuSI6Im50Z2wiLCLiiboiOiJwciIsIuKKgCI6Im5wciIsIuKJuyI6InNjIiwi4oqBIjoibnNjIiwi4om8IjoicHJjdWUiLCLii6AiOiJucHJjdWUiLCLiib0iOiJzY2N1ZSIsIuKLoSI6Im5zY2N1ZSIsIuKJviI6InByc2ltIiwi4om/Ijoic2NzaW0iLCLiib/MuCI6Ik5vdFN1Y2NlZWRzVGlsZGUiLCLiioIiOiJzdWIiLCLiioQiOiJuc3ViIiwi4oqC4oOSIjoidm5zdWIiLCLiioMiOiJzdXAiLCLiioUiOiJuc3VwIiwi4oqD4oOSIjoidm5zdXAiLCLiioYiOiJzdWJlIiwi4oqIIjoibnN1YmUiLCLiiociOiJzdXBlIiwi4oqJIjoibnN1cGUiLCLiiorvuIAiOiJ2c3VibmUiLCLiiooiOiJzdWJuZSIsIuKKi++4gCI6InZzdXBuZSIsIuKKiyI6InN1cG5lIiwi4oqNIjoiY3VwZG90Iiwi4oqOIjoidXBsdXMiLCLiio8iOiJzcXN1YiIsIuKKj8y4IjoiTm90U3F1YXJlU3Vic2V0Iiwi4oqQIjoic3FzdXAiLCLiipDMuCI6Ik5vdFNxdWFyZVN1cGVyc2V0Iiwi4oqRIjoic3FzdWJlIiwi4ouiIjoibnNxc3ViZSIsIuKKkiI6InNxc3VwZSIsIuKLoyI6Im5zcXN1cGUiLCLiipMiOiJzcWNhcCIsIuKKk++4gCI6InNxY2FwcyIsIuKKlCI6InNxY3VwIiwi4oqU77iAIjoic3FjdXBzIiwi4oqVIjoib3BsdXMiLCLiipYiOiJvbWludXMiLCLiipciOiJvdGltZXMiLCLiipgiOiJvc29sIiwi4oqZIjoib2RvdCIsIuKKmiI6Im9jaXIiLCLiipsiOiJvYXN0Iiwi4oqdIjoib2Rhc2giLCLiip4iOiJwbHVzYiIsIuKKnyI6Im1pbnVzYiIsIuKKoCI6InRpbWVzYiIsIuKKoSI6InNkb3RiIiwi4oqiIjoidmRhc2giLCLiiqwiOiJudmRhc2giLCLiiqMiOiJkYXNodiIsIuKKpCI6InRvcCIsIuKKpSI6ImJvdCIsIuKKpyI6Im1vZGVscyIsIuKKqCI6InZEYXNoIiwi4oqtIjoibnZEYXNoIiwi4oqpIjoiVmRhc2giLCLiiq4iOiJuVmRhc2giLCLiiqoiOiJWdmRhc2giLCLiiqsiOiJWRGFzaCIsIuKKryI6Im5WRGFzaCIsIuKKsCI6InBydXJlbCIsIuKKsiI6InZsdHJpIiwi4ouqIjoibmx0cmkiLCLiirMiOiJ2cnRyaSIsIuKLqyI6Im5ydHJpIiwi4oq0IjoibHRyaWUiLCLii6wiOiJubHRyaWUiLCLiirTig5IiOiJudmx0cmllIiwi4oq1IjoicnRyaWUiLCLii60iOiJucnRyaWUiLCLiirXig5IiOiJudnJ0cmllIiwi4oq2Ijoib3JpZ29mIiwi4oq3IjoiaW1vZiIsIuKKuCI6Im11bWFwIiwi4oq5IjoiaGVyY29uIiwi4oq6IjoiaW50Y2FsIiwi4oq7IjoidmVlYmFyIiwi4oq9IjoiYmFydmVlIiwi4oq+IjoiYW5ncnR2YiIsIuKKvyI6ImxydHJpIiwi4ouAIjoiV2VkZ2UiLCLii4EiOiJWZWUiLCLii4IiOiJ4Y2FwIiwi4ouDIjoieGN1cCIsIuKLhCI6ImRpYW0iLCLii4UiOiJzZG90Iiwi4ouGIjoiU3RhciIsIuKLhyI6ImRpdm9ueCIsIuKLiCI6ImJvd3RpZSIsIuKLiSI6Imx0aW1lcyIsIuKLiiI6InJ0aW1lcyIsIuKLiyI6Imx0aHJlZSIsIuKLjCI6InJ0aHJlZSIsIuKLjSI6ImJzaW1lIiwi4ouOIjoiY3V2ZWUiLCLii48iOiJjdXdlZCIsIuKLkCI6IlN1YiIsIuKLkSI6IlN1cCIsIuKLkiI6IkNhcCIsIuKLkyI6IkN1cCIsIuKLlCI6ImZvcmsiLCLii5UiOiJlcGFyIiwi4ouWIjoibHRkb3QiLCLii5ciOiJndGRvdCIsIuKLmCI6IkxsIiwi4ouYzLgiOiJuTGwiLCLii5kiOiJHZyIsIuKLmcy4IjoibkdnIiwi4oua77iAIjoibGVzZyIsIuKLmiI6ImxlZyIsIuKLmyI6ImdlbCIsIuKLm++4gCI6Imdlc2wiLCLii54iOiJjdWVwciIsIuKLnyI6ImN1ZXNjIiwi4oumIjoibG5zaW0iLCLii6ciOiJnbnNpbSIsIuKLqCI6InBybnNpbSIsIuKLqSI6InNjbnNpbSIsIuKLriI6InZlbGxpcCIsIuKLryI6ImN0ZG90Iiwi4ouwIjoidXRkb3QiLCLii7EiOiJkdGRvdCIsIuKLsiI6ImRpc2luIiwi4ouzIjoiaXNpbnN2Iiwi4ou0IjoiaXNpbnMiLCLii7UiOiJpc2luZG90Iiwi4ou1zLgiOiJub3RpbmRvdCIsIuKLtiI6Im5vdGludmMiLCLii7ciOiJub3RpbnZiIiwi4ou5IjoiaXNpbkUiLCLii7nMuCI6Im5vdGluRSIsIuKLuiI6Im5pc2QiLCLii7siOiJ4bmlzIiwi4ou8IjoibmlzIiwi4ou9Ijoibm90bml2YyIsIuKLviI6Im5vdG5pdmIiLCLijIUiOiJiYXJ3ZWQiLCLijIYiOiJCYXJ3ZWQiLCLijIwiOiJkcmNyb3AiLCLijI0iOiJkbGNyb3AiLCLijI4iOiJ1cmNyb3AiLCLijI8iOiJ1bGNyb3AiLCLijJAiOiJibm90Iiwi4oySIjoicHJvZmxpbmUiLCLijJMiOiJwcm9mc3VyZiIsIuKMlSI6InRlbHJlYyIsIuKMliI6InRhcmdldCIsIuKMnCI6InVsY29ybiIsIuKMnSI6InVyY29ybiIsIuKMniI6ImRsY29ybiIsIuKMnyI6ImRyY29ybiIsIuKMoiI6ImZyb3duIiwi4oyjIjoic21pbGUiLCLijK0iOiJjeWxjdHkiLCLijK4iOiJwcm9mYWxhciIsIuKMtiI6InRvcGJvdCIsIuKMvSI6Im92YmFyIiwi4oy/Ijoic29sYmFyIiwi4o28IjoiYW5nemFyciIsIuKOsCI6Imxtb3VzdCIsIuKOsSI6InJtb3VzdCIsIuKOtCI6InRicmsiLCLijrUiOiJiYnJrIiwi4o62IjoiYmJya3RicmsiLCLij5wiOiJPdmVyUGFyZW50aGVzaXMiLCLij50iOiJVbmRlclBhcmVudGhlc2lzIiwi4o+eIjoiT3ZlckJyYWNlIiwi4o+fIjoiVW5kZXJCcmFjZSIsIuKPoiI6InRycGV6aXVtIiwi4o+nIjoiZWxpbnRlcnMiLCLikKMiOiJibGFuayIsIuKUgCI6ImJveGgiLCLilIIiOiJib3h2Iiwi4pSMIjoiYm94ZHIiLCLilJAiOiJib3hkbCIsIuKUlCI6ImJveHVyIiwi4pSYIjoiYm94dWwiLCLilJwiOiJib3h2ciIsIuKUpCI6ImJveHZsIiwi4pSsIjoiYm94aGQiLCLilLQiOiJib3hodSIsIuKUvCI6ImJveHZoIiwi4pWQIjoiYm94SCIsIuKVkSI6ImJveFYiLCLilZIiOiJib3hkUiIsIuKVkyI6ImJveERyIiwi4pWUIjoiYm94RFIiLCLilZUiOiJib3hkTCIsIuKVliI6ImJveERsIiwi4pWXIjoiYm94REwiLCLilZgiOiJib3h1UiIsIuKVmSI6ImJveFVyIiwi4pWaIjoiYm94VVIiLCLilZsiOiJib3h1TCIsIuKVnCI6ImJveFVsIiwi4pWdIjoiYm94VUwiLCLilZ4iOiJib3h2UiIsIuKVnyI6ImJveFZyIiwi4pWgIjoiYm94VlIiLCLilaEiOiJib3h2TCIsIuKVoiI6ImJveFZsIiwi4pWjIjoiYm94VkwiLCLilaQiOiJib3hIZCIsIuKVpSI6ImJveGhEIiwi4pWmIjoiYm94SEQiLCLilaciOiJib3hIdSIsIuKVqCI6ImJveGhVIiwi4pWpIjoiYm94SFUiLCLilaoiOiJib3h2SCIsIuKVqyI6ImJveFZoIiwi4pWsIjoiYm94VkgiLCLiloAiOiJ1aGJsayIsIuKWhCI6ImxoYmxrIiwi4paIIjoiYmxvY2siLCLilpEiOiJibGsxNCIsIuKWkiI6ImJsazEyIiwi4paTIjoiYmxrMzQiLCLilqEiOiJzcXUiLCLilqoiOiJzcXVmIiwi4parIjoiRW1wdHlWZXJ5U21hbGxTcXVhcmUiLCLilq0iOiJyZWN0Iiwi4pauIjoibWFya2VyIiwi4paxIjoiZmx0bnMiLCLilrMiOiJ4dXRyaSIsIuKWtCI6InV0cmlmIiwi4pa1IjoidXRyaSIsIuKWuCI6InJ0cmlmIiwi4pa5IjoicnRyaSIsIuKWvSI6InhkdHJpIiwi4pa+IjoiZHRyaWYiLCLilr8iOiJkdHJpIiwi4peCIjoibHRyaWYiLCLil4MiOiJsdHJpIiwi4peKIjoibG96Iiwi4peLIjoiY2lyIiwi4pesIjoidHJpZG90Iiwi4pevIjoieGNpcmMiLCLil7giOiJ1bHRyaSIsIuKXuSI6InVydHJpIiwi4pe6IjoibGx0cmkiLCLil7siOiJFbXB0eVNtYWxsU3F1YXJlIiwi4pe8IjoiRmlsbGVkU21hbGxTcXVhcmUiLCLimIUiOiJzdGFyZiIsIuKYhiI6InN0YXIiLCLimI4iOiJwaG9uZSIsIuKZgCI6ImZlbWFsZSIsIuKZgiI6Im1hbGUiLCLimaAiOiJzcGFkZXMiLCLimaMiOiJjbHVicyIsIuKZpSI6ImhlYXJ0cyIsIuKZpiI6ImRpYW1zIiwi4pmqIjoic3VuZyIsIuKckyI6ImNoZWNrIiwi4pyXIjoiY3Jvc3MiLCLinKAiOiJtYWx0Iiwi4py2Ijoic2V4dCIsIuKdmCI6IlZlcnRpY2FsU2VwYXJhdG9yIiwi4p+IIjoiYnNvbGhzdWIiLCLin4kiOiJzdXBoc29sIiwi4p+1IjoieGxhcnIiLCLin7YiOiJ4cmFyciIsIuKftyI6InhoYXJyIiwi4p+4IjoieGxBcnIiLCLin7kiOiJ4ckFyciIsIuKfuiI6InhoQXJyIiwi4p+8IjoieG1hcCIsIuKfvyI6ImR6aWdyYXJyIiwi4qSCIjoibnZsQXJyIiwi4qSDIjoibnZyQXJyIiwi4qSEIjoibnZIYXJyIiwi4qSFIjoiTWFwIiwi4qSMIjoibGJhcnIiLCLipI0iOiJyYmFyciIsIuKkjiI6ImxCYXJyIiwi4qSPIjoickJhcnIiLCLipJAiOiJSQmFyciIsIuKkkSI6IkREb3RyYWhkIiwi4qSSIjoiVXBBcnJvd0JhciIsIuKkkyI6IkRvd25BcnJvd0JhciIsIuKkliI6IlJhcnJ0bCIsIuKkmSI6ImxhdGFpbCIsIuKkmiI6InJhdGFpbCIsIuKkmyI6ImxBdGFpbCIsIuKknCI6InJBdGFpbCIsIuKknSI6ImxhcnJmcyIsIuKkniI6InJhcnJmcyIsIuKknyI6ImxhcnJiZnMiLCLipKAiOiJyYXJyYmZzIiwi4qSjIjoibndhcmhrIiwi4qSkIjoibmVhcmhrIiwi4qSlIjoic2VhcmhrIiwi4qSmIjoic3dhcmhrIiwi4qSnIjoibnduZWFyIiwi4qSoIjoidG9lYSIsIuKkqSI6InRvc2EiLCLipKoiOiJzd253YXIiLCLipLMiOiJyYXJyYyIsIuKks8y4IjoibnJhcnJjIiwi4qS1IjoiY3VkYXJyciIsIuKktiI6ImxkY2EiLCLipLciOiJyZGNhIiwi4qS4IjoiY3VkYXJybCIsIuKkuSI6ImxhcnJwbCIsIuKkvCI6ImN1cmFycm0iLCLipL0iOiJjdWxhcnJwIiwi4qWFIjoicmFycnBsIiwi4qWIIjoiaGFycmNpciIsIuKliSI6IlVhcnJvY2lyIiwi4qWKIjoibHVyZHNoYXIiLCLipYsiOiJsZHJ1c2hhciIsIuKljiI6IkxlZnRSaWdodFZlY3RvciIsIuKljyI6IlJpZ2h0VXBEb3duVmVjdG9yIiwi4qWQIjoiRG93bkxlZnRSaWdodFZlY3RvciIsIuKlkSI6IkxlZnRVcERvd25WZWN0b3IiLCLipZIiOiJMZWZ0VmVjdG9yQmFyIiwi4qWTIjoiUmlnaHRWZWN0b3JCYXIiLCLipZQiOiJSaWdodFVwVmVjdG9yQmFyIiwi4qWVIjoiUmlnaHREb3duVmVjdG9yQmFyIiwi4qWWIjoiRG93bkxlZnRWZWN0b3JCYXIiLCLipZciOiJEb3duUmlnaHRWZWN0b3JCYXIiLCLipZgiOiJMZWZ0VXBWZWN0b3JCYXIiLCLipZkiOiJMZWZ0RG93blZlY3RvckJhciIsIuKlmiI6IkxlZnRUZWVWZWN0b3IiLCLipZsiOiJSaWdodFRlZVZlY3RvciIsIuKlnCI6IlJpZ2h0VXBUZWVWZWN0b3IiLCLipZ0iOiJSaWdodERvd25UZWVWZWN0b3IiLCLipZ4iOiJEb3duTGVmdFRlZVZlY3RvciIsIuKlnyI6IkRvd25SaWdodFRlZVZlY3RvciIsIuKloCI6IkxlZnRVcFRlZVZlY3RvciIsIuKloSI6IkxlZnREb3duVGVlVmVjdG9yIiwi4qWiIjoibEhhciIsIuKloyI6InVIYXIiLCLipaQiOiJySGFyIiwi4qWlIjoiZEhhciIsIuKlpiI6Imx1cnVoYXIiLCLipaciOiJsZHJkaGFyIiwi4qWoIjoicnVsdWhhciIsIuKlqSI6InJkbGRoYXIiLCLipaoiOiJsaGFydWwiLCLipasiOiJsbGhhcmQiLCLipawiOiJyaGFydWwiLCLipa0iOiJscmhhcmQiLCLipa4iOiJ1ZGhhciIsIuKlryI6ImR1aGFyIiwi4qWwIjoiUm91bmRJbXBsaWVzIiwi4qWxIjoiZXJhcnIiLCLipbIiOiJzaW1yYXJyIiwi4qWzIjoibGFycnNpbSIsIuKltCI6InJhcnJzaW0iLCLipbUiOiJyYXJyYXAiLCLipbYiOiJsdGxhcnIiLCLipbgiOiJndHJhcnIiLCLipbkiOiJzdWJyYXJyIiwi4qW7Ijoic3VwbGFyciIsIuKlvCI6ImxmaXNodCIsIuKlvSI6InJmaXNodCIsIuKlviI6InVmaXNodCIsIuKlvyI6ImRmaXNodCIsIuKmmiI6InZ6aWd6YWciLCLippwiOiJ2YW5ncnQiLCLipp0iOiJhbmdydHZiZCIsIuKmpCI6ImFuZ2UiLCLipqUiOiJyYW5nZSIsIuKmpiI6ImR3YW5nbGUiLCLipqciOiJ1d2FuZ2xlIiwi4qaoIjoiYW5nbXNkYWEiLCLipqkiOiJhbmdtc2RhYiIsIuKmqiI6ImFuZ21zZGFjIiwi4qarIjoiYW5nbXNkYWQiLCLipqwiOiJhbmdtc2RhZSIsIuKmrSI6ImFuZ21zZGFmIiwi4qauIjoiYW5nbXNkYWciLCLipq8iOiJhbmdtc2RhaCIsIuKmsCI6ImJlbXB0eXYiLCLiprEiOiJkZW1wdHl2Iiwi4qayIjoiY2VtcHR5diIsIuKmsyI6InJhZW1wdHl2Iiwi4qa0IjoibGFlbXB0eXYiLCLiprUiOiJvaGJhciIsIuKmtiI6Im9taWQiLCLiprciOiJvcGFyIiwi4qa5Ijoib3BlcnAiLCLiprsiOiJvbGNyb3NzIiwi4qa8Ijoib2Rzb2xkIiwi4qa+Ijoib2xjaXIiLCLipr8iOiJvZmNpciIsIuKngCI6Im9sdCIsIuKngSI6Im9ndCIsIuKngiI6ImNpcnNjaXIiLCLip4MiOiJjaXJFIiwi4qeEIjoic29sYiIsIuKnhSI6ImJzb2xiIiwi4qeJIjoiYm94Ym94Iiwi4qeNIjoidHJpc2IiLCLip44iOiJydHJpbHRyaSIsIuKnjyI6IkxlZnRUcmlhbmdsZUJhciIsIuKnj8y4IjoiTm90TGVmdFRyaWFuZ2xlQmFyIiwi4qeQIjoiUmlnaHRUcmlhbmdsZUJhciIsIuKnkMy4IjoiTm90UmlnaHRUcmlhbmdsZUJhciIsIuKnnCI6ImlpbmZpbiIsIuKnnSI6ImluZmludGllIiwi4qeeIjoibnZpbmZpbiIsIuKnoyI6ImVwYXJzbCIsIuKnpCI6InNtZXBhcnNsIiwi4qelIjoiZXF2cGFyc2wiLCLip6siOiJsb3pmIiwi4qe0IjoiUnVsZURlbGF5ZWQiLCLip7YiOiJkc29sIiwi4qiAIjoieG9kb3QiLCLiqIEiOiJ4b3BsdXMiLCLiqIIiOiJ4b3RpbWUiLCLiqIQiOiJ4dXBsdXMiLCLiqIYiOiJ4c3FjdXAiLCLiqI0iOiJmcGFydGludCIsIuKokCI6ImNpcmZuaW50Iiwi4qiRIjoiYXdpbnQiLCLiqJIiOiJycHBvbGludCIsIuKokyI6InNjcG9saW50Iiwi4qiUIjoibnBvbGludCIsIuKolSI6InBvaW50aW50Iiwi4qiWIjoicXVhdGludCIsIuKolyI6ImludGxhcmhrIiwi4qiiIjoicGx1c2NpciIsIuKooyI6InBsdXNhY2lyIiwi4qikIjoic2ltcGx1cyIsIuKopSI6InBsdXNkdSIsIuKopiI6InBsdXNzaW0iLCLiqKciOiJwbHVzdHdvIiwi4qipIjoibWNvbW1hIiwi4qiqIjoibWludXNkdSIsIuKorSI6ImxvcGx1cyIsIuKoriI6InJvcGx1cyIsIuKoryI6IkNyb3NzIiwi4qiwIjoidGltZXNkIiwi4qixIjoidGltZXNiYXIiLCLiqLMiOiJzbWFzaHAiLCLiqLQiOiJsb3RpbWVzIiwi4qi1Ijoicm90aW1lcyIsIuKotiI6Im90aW1lc2FzIiwi4qi3IjoiT3RpbWVzIiwi4qi4Ijoib2RpdiIsIuKouSI6InRyaXBsdXMiLCLiqLoiOiJ0cmltaW51cyIsIuKouyI6InRyaXRpbWUiLCLiqLwiOiJpcHJvZCIsIuKovyI6ImFtYWxnIiwi4qmAIjoiY2FwZG90Iiwi4qmCIjoibmN1cCIsIuKpgyI6Im5jYXAiLCLiqYQiOiJjYXBhbmQiLCLiqYUiOiJjdXBvciIsIuKphiI6ImN1cGNhcCIsIuKphyI6ImNhcGN1cCIsIuKpiCI6ImN1cGJyY2FwIiwi4qmJIjoiY2FwYnJjdXAiLCLiqYoiOiJjdXBjdXAiLCLiqYsiOiJjYXBjYXAiLCLiqYwiOiJjY3VwcyIsIuKpjSI6ImNjYXBzIiwi4qmQIjoiY2N1cHNzbSIsIuKpkyI6IkFuZCIsIuKplCI6Ik9yIiwi4qmVIjoiYW5kYW5kIiwi4qmWIjoib3JvciIsIuKplyI6Im9yc2xvcGUiLCLiqZgiOiJhbmRzbG9wZSIsIuKpmiI6ImFuZHYiLCLiqZsiOiJvcnYiLCLiqZwiOiJhbmRkIiwi4qmdIjoib3JkIiwi4qmfIjoid2VkYmFyIiwi4qmmIjoic2RvdGUiLCLiqaoiOiJzaW1kb3QiLCLiqa0iOiJjb25nZG90Iiwi4qmtzLgiOiJuY29uZ2RvdCIsIuKpriI6ImVhc3RlciIsIuKpryI6ImFwYWNpciIsIuKpsCI6ImFwRSIsIuKpsMy4IjoibmFwRSIsIuKpsSI6ImVwbHVzIiwi4qmyIjoicGx1c2UiLCLiqbMiOiJFc2ltIiwi4qm3IjoiZUREb3QiLCLiqbgiOiJlcXVpdkREIiwi4qm5IjoibHRjaXIiLCLiqboiOiJndGNpciIsIuKpuyI6Imx0cXVlc3QiLCLiqbwiOiJndHF1ZXN0Iiwi4qm9IjoibGVzIiwi4qm9zLgiOiJubGVzIiwi4qm+IjoiZ2VzIiwi4qm+zLgiOiJuZ2VzIiwi4qm/IjoibGVzZG90Iiwi4qqAIjoiZ2VzZG90Iiwi4qqBIjoibGVzZG90byIsIuKqgiI6Imdlc2RvdG8iLCLiqoMiOiJsZXNkb3RvciIsIuKqhCI6Imdlc2RvdG9sIiwi4qqFIjoibGFwIiwi4qqGIjoiZ2FwIiwi4qqHIjoibG5lIiwi4qqIIjoiZ25lIiwi4qqJIjoibG5hcCIsIuKqiiI6ImduYXAiLCLiqosiOiJsRWciLCLiqowiOiJnRWwiLCLiqo0iOiJsc2ltZSIsIuKqjiI6ImdzaW1lIiwi4qqPIjoibHNpbWciLCLiqpAiOiJnc2ltbCIsIuKqkSI6ImxnRSIsIuKqkiI6ImdsRSIsIuKqkyI6Imxlc2dlcyIsIuKqlCI6Imdlc2xlcyIsIuKqlSI6ImVscyIsIuKqliI6ImVncyIsIuKqlyI6ImVsc2RvdCIsIuKqmCI6ImVnc2RvdCIsIuKqmSI6ImVsIiwi4qqaIjoiZWciLCLiqp0iOiJzaW1sIiwi4qqeIjoic2ltZyIsIuKqnyI6InNpbWxFIiwi4qqgIjoic2ltZ0UiLCLiqqEiOiJMZXNzTGVzcyIsIuKqocy4IjoiTm90TmVzdGVkTGVzc0xlc3MiLCLiqqIiOiJHcmVhdGVyR3JlYXRlciIsIuKqosy4IjoiTm90TmVzdGVkR3JlYXRlckdyZWF0ZXIiLCLiqqQiOiJnbGoiLCLiqqUiOiJnbGEiLCLiqqYiOiJsdGNjIiwi4qqnIjoiZ3RjYyIsIuKqqCI6Imxlc2NjIiwi4qqpIjoiZ2VzY2MiLCLiqqoiOiJzbXQiLCLiqqsiOiJsYXQiLCLiqqwiOiJzbXRlIiwi4qqs77iAIjoic210ZXMiLCLiqq0iOiJsYXRlIiwi4qqt77iAIjoibGF0ZXMiLCLiqq4iOiJidW1wRSIsIuKqryI6InByZSIsIuKqr8y4IjoibnByZSIsIuKqsCI6InNjZSIsIuKqsMy4IjoibnNjZSIsIuKqsyI6InByRSIsIuKqtCI6InNjRSIsIuKqtSI6InBybkUiLCLiqrYiOiJzY25FIiwi4qq3IjoicHJhcCIsIuKquCI6InNjYXAiLCLiqrkiOiJwcm5hcCIsIuKquiI6InNjbmFwIiwi4qq7IjoiUHIiLCLiqrwiOiJTYyIsIuKqvSI6InN1YmRvdCIsIuKqviI6InN1cGRvdCIsIuKqvyI6InN1YnBsdXMiLCLiq4AiOiJzdXBwbHVzIiwi4quBIjoic3VibXVsdCIsIuKrgiI6InN1cG11bHQiLCLiq4MiOiJzdWJlZG90Iiwi4quEIjoic3VwZWRvdCIsIuKrhSI6InN1YkUiLCLiq4XMuCI6Im5zdWJFIiwi4quGIjoic3VwRSIsIuKrhsy4IjoibnN1cEUiLCLiq4ciOiJzdWJzaW0iLCLiq4giOiJzdXBzaW0iLCLiq4vvuIAiOiJ2c3VibkUiLCLiq4siOiJzdWJuRSIsIuKrjO+4gCI6InZzdXBuRSIsIuKrjCI6InN1cG5FIiwi4quPIjoiY3N1YiIsIuKrkCI6ImNzdXAiLCLiq5EiOiJjc3ViZSIsIuKrkiI6ImNzdXBlIiwi4quTIjoic3Vic3VwIiwi4quUIjoic3Vwc3ViIiwi4quVIjoic3Vic3ViIiwi4quWIjoic3Vwc3VwIiwi4quXIjoic3VwaHN1YiIsIuKrmCI6InN1cGRzdWIiLCLiq5kiOiJmb3JrdiIsIuKrmiI6InRvcGZvcmsiLCLiq5siOiJtbGNwIiwi4qukIjoiRGFzaHYiLCLiq6YiOiJWZGFzaGwiLCLiq6ciOiJCYXJ2Iiwi4quoIjoidkJhciIsIuKrqSI6InZCYXJ2Iiwi4qurIjoiVmJhciIsIuKrrCI6Ik5vdCIsIuKrrSI6ImJOb3QiLCLiq64iOiJybm1pZCIsIuKrryI6ImNpcm1pZCIsIuKrsCI6Im1pZGNpciIsIuKrsSI6InRvcGNpciIsIuKrsiI6Im5ocGFyIiwi4quzIjoicGFyc2ltIiwi4qu9IjoicGFyc2wiLCLiq73ig6UiOiJucGFyc2wiLCLima0iOiJmbGF0Iiwi4pmuIjoibmF0dXIiLCLima8iOiJzaGFycCIsIsKkIjoiY3VycmVuIiwiwqIiOiJjZW50IiwkOiJkb2xsYXIiLCLCoyI6InBvdW5kIiwiwqUiOiJ5ZW4iLCLigqwiOiJldXJvIiwiwrkiOiJzdXAxIiwiwr0iOiJoYWxmIiwi4oWTIjoiZnJhYzEzIiwiwrwiOiJmcmFjMTQiLCLihZUiOiJmcmFjMTUiLCLihZkiOiJmcmFjMTYiLCLihZsiOiJmcmFjMTgiLCLCsiI6InN1cDIiLCLihZQiOiJmcmFjMjMiLCLihZYiOiJmcmFjMjUiLCLCsyI6InN1cDMiLCLCviI6ImZyYWMzNCIsIuKFlyI6ImZyYWMzNSIsIuKFnCI6ImZyYWMzOCIsIuKFmCI6ImZyYWM0NSIsIuKFmiI6ImZyYWM1NiIsIuKFnSI6ImZyYWM1OCIsIuKFniI6ImZyYWM3OCIsIvCdkrYiOiJhc2NyIiwi8J2VkiI6ImFvcGYiLCLwnZSeIjoiYWZyIiwi8J2UuCI6IkFvcGYiLCLwnZSEIjoiQWZyIiwi8J2SnCI6IkFzY3IiLCLCqiI6Im9yZGYiLCLDoSI6ImFhY3V0ZSIsIsOBIjoiQWFjdXRlIiwiw6AiOiJhZ3JhdmUiLCLDgCI6IkFncmF2ZSIsIsSDIjoiYWJyZXZlIiwixIIiOiJBYnJldmUiLCLDoiI6ImFjaXJjIiwiw4IiOiJBY2lyYyIsIsOlIjoiYXJpbmciLCLDhSI6ImFuZ3N0Iiwiw6QiOiJhdW1sIiwiw4QiOiJBdW1sIiwiw6MiOiJhdGlsZGUiLCLDgyI6IkF0aWxkZSIsIsSFIjoiYW9nb24iLCLEhCI6IkFvZ29uIiwixIEiOiJhbWFjciIsIsSAIjoiQW1hY3IiLCLDpiI6ImFlbGlnIiwiw4YiOiJBRWxpZyIsIvCdkrciOiJic2NyIiwi8J2VkyI6ImJvcGYiLCLwnZSfIjoiYmZyIiwi8J2UuSI6IkJvcGYiLCLihKwiOiJCc2NyIiwi8J2UhSI6IkJmciIsIvCdlKAiOiJjZnIiLCLwnZK4IjoiY3NjciIsIvCdlZQiOiJjb3BmIiwi4oStIjoiQ2ZyIiwi8J2SniI6IkNzY3IiLCLihIIiOiJDb3BmIiwixIciOiJjYWN1dGUiLCLEhiI6IkNhY3V0ZSIsIsSJIjoiY2NpcmMiLCLEiCI6IkNjaXJjIiwixI0iOiJjY2Fyb24iLCLEjCI6IkNjYXJvbiIsIsSLIjoiY2RvdCIsIsSKIjoiQ2RvdCIsIsOnIjoiY2NlZGlsIiwiw4ciOiJDY2VkaWwiLCLihIUiOiJpbmNhcmUiLCLwnZShIjoiZGZyIiwi4oWGIjoiZGQiLCLwnZWVIjoiZG9wZiIsIvCdkrkiOiJkc2NyIiwi8J2SnyI6IkRzY3IiLCLwnZSHIjoiRGZyIiwi4oWFIjoiREQiLCLwnZS7IjoiRG9wZiIsIsSPIjoiZGNhcm9uIiwixI4iOiJEY2Fyb24iLCLEkSI6ImRzdHJvayIsIsSQIjoiRHN0cm9rIiwiw7AiOiJldGgiLCLDkCI6IkVUSCIsIuKFhyI6ImVlIiwi4oSvIjoiZXNjciIsIvCdlKIiOiJlZnIiLCLwnZWWIjoiZW9wZiIsIuKEsCI6IkVzY3IiLCLwnZSIIjoiRWZyIiwi8J2UvCI6IkVvcGYiLCLDqSI6ImVhY3V0ZSIsIsOJIjoiRWFjdXRlIiwiw6giOiJlZ3JhdmUiLCLDiCI6IkVncmF2ZSIsIsOqIjoiZWNpcmMiLCLDiiI6IkVjaXJjIiwixJsiOiJlY2Fyb24iLCLEmiI6IkVjYXJvbiIsIsOrIjoiZXVtbCIsIsOLIjoiRXVtbCIsIsSXIjoiZWRvdCIsIsSWIjoiRWRvdCIsIsSZIjoiZW9nb24iLCLEmCI6IkVvZ29uIiwixJMiOiJlbWFjciIsIsSSIjoiRW1hY3IiLCLwnZSjIjoiZmZyIiwi8J2VlyI6ImZvcGYiLCLwnZK7IjoiZnNjciIsIvCdlIkiOiJGZnIiLCLwnZS9IjoiRm9wZiIsIuKEsSI6IkZzY3IiLCLvrIAiOiJmZmxpZyIsIu+sgyI6ImZmaWxpZyIsIu+shCI6ImZmbGxpZyIsIu+sgSI6ImZpbGlnIixmajoiZmpsaWciLCLvrIIiOiJmbGxpZyIsIsaSIjoiZm5vZiIsIuKEiiI6ImdzY3IiLCLwnZWYIjoiZ29wZiIsIvCdlKQiOiJnZnIiLCLwnZKiIjoiR3NjciIsIvCdlL4iOiJHb3BmIiwi8J2UiiI6IkdmciIsIse1IjoiZ2FjdXRlIiwixJ8iOiJnYnJldmUiLCLEniI6IkdicmV2ZSIsIsSdIjoiZ2NpcmMiLCLEnCI6IkdjaXJjIiwixKEiOiJnZG90IiwixKAiOiJHZG90IiwixKIiOiJHY2VkaWwiLCLwnZSlIjoiaGZyIiwi4oSOIjoicGxhbmNraCIsIvCdkr0iOiJoc2NyIiwi8J2VmSI6ImhvcGYiLCLihIsiOiJIc2NyIiwi4oSMIjoiSGZyIiwi4oSNIjoiSG9wZiIsIsSlIjoiaGNpcmMiLCLEpCI6IkhjaXJjIiwi4oSPIjoiaGJhciIsIsSnIjoiaHN0cm9rIiwixKYiOiJIc3Ryb2siLCLwnZWaIjoiaW9wZiIsIvCdlKYiOiJpZnIiLCLwnZK+IjoiaXNjciIsIuKFiCI6ImlpIiwi8J2VgCI6IklvcGYiLCLihJAiOiJJc2NyIiwi4oSRIjoiSW0iLCLDrSI6ImlhY3V0ZSIsIsONIjoiSWFjdXRlIiwiw6wiOiJpZ3JhdmUiLCLDjCI6IklncmF2ZSIsIsOuIjoiaWNpcmMiLCLDjiI6IkljaXJjIiwiw68iOiJpdW1sIiwiw48iOiJJdW1sIiwixKkiOiJpdGlsZGUiLCLEqCI6Ikl0aWxkZSIsIsSwIjoiSWRvdCIsIsSvIjoiaW9nb24iLCLEriI6IklvZ29uIiwixKsiOiJpbWFjciIsIsSqIjoiSW1hY3IiLCLEsyI6ImlqbGlnIiwixLIiOiJJSmxpZyIsIsSxIjoiaW1hdGgiLCLwnZK/IjoianNjciIsIvCdlZsiOiJqb3BmIiwi8J2UpyI6ImpmciIsIvCdkqUiOiJKc2NyIiwi8J2UjSI6IkpmciIsIvCdlYEiOiJKb3BmIiwixLUiOiJqY2lyYyIsIsS0IjoiSmNpcmMiLCLItyI6ImptYXRoIiwi8J2VnCI6ImtvcGYiLCLwnZOAIjoia3NjciIsIvCdlKgiOiJrZnIiLCLwnZKmIjoiS3NjciIsIvCdlYIiOiJLb3BmIiwi8J2UjiI6IktmciIsIsS3Ijoia2NlZGlsIiwixLYiOiJLY2VkaWwiLCLwnZSpIjoibGZyIiwi8J2TgSI6ImxzY3IiLCLihJMiOiJlbGwiLCLwnZWdIjoibG9wZiIsIuKEkiI6IkxzY3IiLCLwnZSPIjoiTGZyIiwi8J2VgyI6IkxvcGYiLCLEuiI6ImxhY3V0ZSIsIsS5IjoiTGFjdXRlIiwixL4iOiJsY2Fyb24iLCLEvSI6IkxjYXJvbiIsIsS8IjoibGNlZGlsIiwixLsiOiJMY2VkaWwiLCLFgiI6ImxzdHJvayIsIsWBIjoiTHN0cm9rIiwixYAiOiJsbWlkb3QiLCLEvyI6IkxtaWRvdCIsIvCdlKoiOiJtZnIiLCLwnZWeIjoibW9wZiIsIvCdk4IiOiJtc2NyIiwi8J2UkCI6Ik1mciIsIvCdlYQiOiJNb3BmIiwi4oSzIjoiTXNjciIsIvCdlKsiOiJuZnIiLCLwnZWfIjoibm9wZiIsIvCdk4MiOiJuc2NyIiwi4oSVIjoiTm9wZiIsIvCdkqkiOiJOc2NyIiwi8J2UkSI6Ik5mciIsIsWEIjoibmFjdXRlIiwixYMiOiJOYWN1dGUiLCLFiCI6Im5jYXJvbiIsIsWHIjoiTmNhcm9uIiwiw7EiOiJudGlsZGUiLCLDkSI6Ik50aWxkZSIsIsWGIjoibmNlZGlsIiwixYUiOiJOY2VkaWwiLCLihJYiOiJudW1lcm8iLCLFiyI6ImVuZyIsIsWKIjoiRU5HIiwi8J2VoCI6Im9vcGYiLCLwnZSsIjoib2ZyIiwi4oS0Ijoib3NjciIsIvCdkqoiOiJPc2NyIiwi8J2UkiI6Ik9mciIsIvCdlYYiOiJPb3BmIiwiwroiOiJvcmRtIiwiw7MiOiJvYWN1dGUiLCLDkyI6Ik9hY3V0ZSIsIsOyIjoib2dyYXZlIiwiw5IiOiJPZ3JhdmUiLCLDtCI6Im9jaXJjIiwiw5QiOiJPY2lyYyIsIsO2Ijoib3VtbCIsIsOWIjoiT3VtbCIsIsWRIjoib2RibGFjIiwixZAiOiJPZGJsYWMiLCLDtSI6Im90aWxkZSIsIsOVIjoiT3RpbGRlIiwiw7giOiJvc2xhc2giLCLDmCI6Ik9zbGFzaCIsIsWNIjoib21hY3IiLCLFjCI6Ik9tYWNyIiwixZMiOiJvZWxpZyIsIsWSIjoiT0VsaWciLCLwnZStIjoicGZyIiwi8J2ThSI6InBzY3IiLCLwnZWhIjoicG9wZiIsIuKEmSI6IlBvcGYiLCLwnZSTIjoiUGZyIiwi8J2SqyI6IlBzY3IiLCLwnZWiIjoicW9wZiIsIvCdlK4iOiJxZnIiLCLwnZOGIjoicXNjciIsIvCdkqwiOiJRc2NyIiwi8J2UlCI6IlFmciIsIuKEmiI6IlFvcGYiLCLEuCI6ImtncmVlbiIsIvCdlK8iOiJyZnIiLCLwnZWjIjoicm9wZiIsIvCdk4ciOiJyc2NyIiwi4oSbIjoiUnNjciIsIuKEnCI6IlJlIiwi4oSdIjoiUm9wZiIsIsWVIjoicmFjdXRlIiwixZQiOiJSYWN1dGUiLCLFmSI6InJjYXJvbiIsIsWYIjoiUmNhcm9uIiwixZciOiJyY2VkaWwiLCLFliI6IlJjZWRpbCIsIvCdlaQiOiJzb3BmIiwi8J2TiCI6InNzY3IiLCLwnZSwIjoic2ZyIiwi8J2ViiI6IlNvcGYiLCLwnZSWIjoiU2ZyIiwi8J2SriI6IlNzY3IiLCLik4giOiJvUyIsIsWbIjoic2FjdXRlIiwixZoiOiJTYWN1dGUiLCLFnSI6InNjaXJjIiwixZwiOiJTY2lyYyIsIsWhIjoic2Nhcm9uIiwixaAiOiJTY2Fyb24iLCLFnyI6InNjZWRpbCIsIsWeIjoiU2NlZGlsIiwiw58iOiJzemxpZyIsIvCdlLEiOiJ0ZnIiLCLwnZOJIjoidHNjciIsIvCdlaUiOiJ0b3BmIiwi8J2SryI6IlRzY3IiLCLwnZSXIjoiVGZyIiwi8J2ViyI6IlRvcGYiLCLFpSI6InRjYXJvbiIsIsWkIjoiVGNhcm9uIiwixaMiOiJ0Y2VkaWwiLCLFoiI6IlRjZWRpbCIsIuKEoiI6InRyYWRlIiwixaciOiJ0c3Ryb2siLCLFpiI6IlRzdHJvayIsIvCdk4oiOiJ1c2NyIiwi8J2VpiI6InVvcGYiLCLwnZSyIjoidWZyIiwi8J2VjCI6IlVvcGYiLCLwnZSYIjoiVWZyIiwi8J2SsCI6IlVzY3IiLCLDuiI6InVhY3V0ZSIsIsOaIjoiVWFjdXRlIiwiw7kiOiJ1Z3JhdmUiLCLDmSI6IlVncmF2ZSIsIsWtIjoidWJyZXZlIiwixawiOiJVYnJldmUiLCLDuyI6InVjaXJjIiwiw5siOiJVY2lyYyIsIsWvIjoidXJpbmciLCLFriI6IlVyaW5nIiwiw7wiOiJ1dW1sIiwiw5wiOiJVdW1sIiwixbEiOiJ1ZGJsYWMiLCLFsCI6IlVkYmxhYyIsIsWpIjoidXRpbGRlIiwixagiOiJVdGlsZGUiLCLFsyI6InVvZ29uIiwixbIiOiJVb2dvbiIsIsWrIjoidW1hY3IiLCLFqiI6IlVtYWNyIiwi8J2UsyI6InZmciIsIvCdlaciOiJ2b3BmIiwi8J2TiyI6InZzY3IiLCLwnZSZIjoiVmZyIiwi8J2VjSI6IlZvcGYiLCLwnZKxIjoiVnNjciIsIvCdlagiOiJ3b3BmIiwi8J2TjCI6IndzY3IiLCLwnZS0Ijoid2ZyIiwi8J2SsiI6IldzY3IiLCLwnZWOIjoiV29wZiIsIvCdlJoiOiJXZnIiLCLFtSI6IndjaXJjIiwixbQiOiJXY2lyYyIsIvCdlLUiOiJ4ZnIiLCLwnZONIjoieHNjciIsIvCdlakiOiJ4b3BmIiwi8J2VjyI6IlhvcGYiLCLwnZSbIjoiWGZyIiwi8J2SsyI6IlhzY3IiLCLwnZS2IjoieWZyIiwi8J2TjiI6InlzY3IiLCLwnZWqIjoieW9wZiIsIvCdkrQiOiJZc2NyIiwi8J2UnCI6IllmciIsIvCdlZAiOiJZb3BmIiwiw70iOiJ5YWN1dGUiLCLDnSI6IllhY3V0ZSIsIsW3IjoieWNpcmMiLCLFtiI6IlljaXJjIiwiw78iOiJ5dW1sIiwixbgiOiJZdW1sIiwi8J2TjyI6InpzY3IiLCLwnZS3IjoiemZyIiwi8J2VqyI6InpvcGYiLCLihKgiOiJaZnIiLCLihKQiOiJab3BmIiwi8J2StSI6IlpzY3IiLCLFuiI6InphY3V0ZSIsIsW5IjoiWmFjdXRlIiwixb4iOiJ6Y2Fyb24iLCLFvSI6IlpjYXJvbiIsIsW8IjoiemRvdCIsIsW7IjoiWmRvdCIsIsa1IjoiaW1wZWQiLCLDviI6InRob3JuIiwiw54iOiJUSE9STiIsIsWJIjoibmFwb3MiLCLOsSI6ImFscGhhIiwizpEiOiJBbHBoYSIsIs6yIjoiYmV0YSIsIs6SIjoiQmV0YSIsIs6zIjoiZ2FtbWEiLCLOkyI6IkdhbW1hIiwizrQiOiJkZWx0YSIsIs6UIjoiRGVsdGEiLCLOtSI6ImVwc2kiLCLPtSI6ImVwc2l2IiwizpUiOiJFcHNpbG9uIiwiz50iOiJnYW1tYWQiLCLPnCI6IkdhbW1hZCIsIs62IjoiemV0YSIsIs6WIjoiWmV0YSIsIs63IjoiZXRhIiwizpciOiJFdGEiLCLOuCI6InRoZXRhIiwiz5EiOiJ0aGV0YXYiLCLOmCI6IlRoZXRhIiwizrkiOiJpb3RhIiwizpkiOiJJb3RhIiwizroiOiJrYXBwYSIsIs+wIjoia2FwcGF2IiwizpoiOiJLYXBwYSIsIs67IjoibGFtYmRhIiwizpsiOiJMYW1iZGEiLCLOvCI6Im11IiwiwrUiOiJtaWNybyIsIs6cIjoiTXUiLCLOvSI6Im51Iiwizp0iOiJOdSIsIs6+IjoieGkiLCLOniI6IlhpIiwizr8iOiJvbWljcm9uIiwizp8iOiJPbWljcm9uIiwiz4AiOiJwaSIsIs+WIjoicGl2IiwizqAiOiJQaSIsIs+BIjoicmhvIiwiz7EiOiJyaG92IiwizqEiOiJSaG8iLCLPgyI6InNpZ21hIiwizqMiOiJTaWdtYSIsIs+CIjoic2lnbWFmIiwiz4QiOiJ0YXUiLCLOpCI6IlRhdSIsIs+FIjoidXBzaSIsIs6lIjoiVXBzaWxvbiIsIs+SIjoiVXBzaSIsIs+GIjoicGhpIiwiz5UiOiJwaGl2IiwizqYiOiJQaGkiLCLPhyI6ImNoaSIsIs6nIjoiQ2hpIiwiz4giOiJwc2kiLCLOqCI6IlBzaSIsIs+JIjoib21lZ2EiLCLOqSI6Im9obSIsItCwIjoiYWN5Iiwi0JAiOiJBY3kiLCLQsSI6ImJjeSIsItCRIjoiQmN5Iiwi0LIiOiJ2Y3kiLCLQkiI6IlZjeSIsItCzIjoiZ2N5Iiwi0JMiOiJHY3kiLCLRkyI6ImdqY3kiLCLQgyI6IkdKY3kiLCLQtCI6ImRjeSIsItCUIjoiRGN5Iiwi0ZIiOiJkamN5Iiwi0IIiOiJESmN5Iiwi0LUiOiJpZWN5Iiwi0JUiOiJJRWN5Iiwi0ZEiOiJpb2N5Iiwi0IEiOiJJT2N5Iiwi0ZQiOiJqdWtjeSIsItCEIjoiSnVrY3kiLCLQtiI6InpoY3kiLCLQliI6IlpIY3kiLCLQtyI6InpjeSIsItCXIjoiWmN5Iiwi0ZUiOiJkc2N5Iiwi0IUiOiJEU2N5Iiwi0LgiOiJpY3kiLCLQmCI6IkljeSIsItGWIjoiaXVrY3kiLCLQhiI6Ikl1a2N5Iiwi0ZciOiJ5aWN5Iiwi0IciOiJZSWN5Iiwi0LkiOiJqY3kiLCLQmSI6IkpjeSIsItGYIjoianNlcmN5Iiwi0IgiOiJKc2VyY3kiLCLQuiI6ImtjeSIsItCaIjoiS2N5Iiwi0ZwiOiJramN5Iiwi0IwiOiJLSmN5Iiwi0LsiOiJsY3kiLCLQmyI6IkxjeSIsItGZIjoibGpjeSIsItCJIjoiTEpjeSIsItC8IjoibWN5Iiwi0JwiOiJNY3kiLCLQvSI6Im5jeSIsItCdIjoiTmN5Iiwi0ZoiOiJuamN5Iiwi0IoiOiJOSmN5Iiwi0L4iOiJvY3kiLCLQniI6Ik9jeSIsItC/IjoicGN5Iiwi0J8iOiJQY3kiLCLRgCI6InJjeSIsItCgIjoiUmN5Iiwi0YEiOiJzY3kiLCLQoSI6IlNjeSIsItGCIjoidGN5Iiwi0KIiOiJUY3kiLCLRmyI6InRzaGN5Iiwi0IsiOiJUU0hjeSIsItGDIjoidWN5Iiwi0KMiOiJVY3kiLCLRniI6InVicmN5Iiwi0I4iOiJVYnJjeSIsItGEIjoiZmN5Iiwi0KQiOiJGY3kiLCLRhSI6ImtoY3kiLCLQpSI6IktIY3kiLCLRhiI6InRzY3kiLCLQpiI6IlRTY3kiLCLRhyI6ImNoY3kiLCLQpyI6IkNIY3kiLCLRnyI6ImR6Y3kiLCLQjyI6IkRaY3kiLCLRiCI6InNoY3kiLCLQqCI6IlNIY3kiLCLRiSI6InNoY2hjeSIsItCpIjoiU0hDSGN5Iiwi0YoiOiJoYXJkY3kiLCLQqiI6IkhBUkRjeSIsItGLIjoieWN5Iiwi0KsiOiJZY3kiLCLRjCI6InNvZnRjeSIsItCsIjoiU09GVGN5Iiwi0Y0iOiJlY3kiLCLQrSI6IkVjeSIsItGOIjoieXVjeSIsItCuIjoiWVVjeSIsItGPIjoieWFjeSIsItCvIjoiWUFjeSIsIuKEtSI6ImFsZXBoIiwi4oS2IjoiYmV0aCIsIuKEtyI6ImdpbWVsIiwi4oS4IjoiZGFsZXRoIn0scD0vWyImJzw+YF0vZyxpPXsnIic6IiZxdW90OyIsIiYiOiImYW1wOyIsIiciOiImI3gyNzsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiYCI6IiYjeDYwOyJ9LG89LyYjKD86W3hYXVteYS1mQS1GMC05XXxbXjAtOXhYXSkvLGg9L1tcMC1ceDA4XHgwQlx4MEUtXHgxRlx4N0YtXHg5Rlx1RkREMC1cdUZERUZcdUZGRkVcdUZGRkZdfFtcdUQ4M0ZcdUQ4N0ZcdUQ4QkZcdUQ4RkZcdUQ5M0ZcdUQ5N0ZcdUQ5QkZcdUQ5RkZcdURBM0ZcdURBN0ZcdURBQkZcdURBRkZcdURCM0ZcdURCN0ZcdURCQkZcdURCRkZdW1x1REZGRVx1REZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxhPS8mKENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWx8RG91YmxlTG9uZ0xlZnRSaWdodEFycm93fENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldEVxdWFsfERpYWNyaXRpY2FsRG91YmxlQWN1dGV8Tm90UmlnaHRUcmlhbmdsZUVxdWFsfE5vdFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RQcmVjZWRlc1NsYW50RXF1YWx8Q2xvc2VDdXJseURvdWJsZVF1b3RlfE5lZ2F0aXZlVmVyeVRoaW5TcGFjZXxEb3VibGVDb250b3VySW50ZWdyYWx8RmlsbGVkVmVyeVNtYWxsU3F1YXJlfENhcGl0YWxEaWZmZXJlbnRpYWxEfE9wZW5DdXJseURvdWJsZVF1b3RlfEVtcHR5VmVyeVNtYWxsU3F1YXJlfE5lc3RlZEdyZWF0ZXJHcmVhdGVyfERvdWJsZUxvbmdSaWdodEFycm93fE5vdExlZnRUcmlhbmdsZUVxdWFsfE5vdEdyZWF0ZXJTbGFudEVxdWFsfFJldmVyc2VVcEVxdWlsaWJyaXVtfERvdWJsZUxlZnRSaWdodEFycm93fE5vdFNxdWFyZVN1YnNldEVxdWFsfE5vdERvdWJsZVZlcnRpY2FsQmFyfFJpZ2h0QXJyb3dMZWZ0QXJyb3d8Tm90R3JlYXRlckZ1bGxFcXVhbHxOb3RSaWdodFRyaWFuZ2xlQmFyfFNxdWFyZVN1cGVyc2V0RXF1YWx8RG93bkxlZnRSaWdodFZlY3RvcnxEb3VibGVMb25nTGVmdEFycm93fGxlZnRyaWdodHNxdWlnYXJyb3d8TGVmdEFycm93UmlnaHRBcnJvd3xOZWdhdGl2ZU1lZGl1bVNwYWNlfGJsYWNrdHJpYW5nbGVyaWdodHxSaWdodERvd25WZWN0b3JCYXJ8UHJlY2VkZXNTbGFudEVxdWFsfFJpZ2h0RG91YmxlQnJhY2tldHxTdWNjZWVkc1NsYW50RXF1YWx8Tm90TGVmdFRyaWFuZ2xlQmFyfFJpZ2h0VHJpYW5nbGVFcXVhbHxTcXVhcmVJbnRlcnNlY3Rpb258UmlnaHREb3duVGVlVmVjdG9yfFJldmVyc2VFcXVpbGlicml1bXxOZWdhdGl2ZVRoaWNrU3BhY2V8bG9uZ2xlZnRyaWdodGFycm93fExvbmdsZWZ0cmlnaHRhcnJvd3xMb25nTGVmdFJpZ2h0QXJyb3d8RG93blJpZ2h0VGVlVmVjdG9yfERvd25SaWdodFZlY3RvckJhcnxHcmVhdGVyU2xhbnRFcXVhbHxTcXVhcmVTdWJzZXRFcXVhbHxMZWZ0RG93blZlY3RvckJhcnxMZWZ0RG91YmxlQnJhY2tldHxWZXJ0aWNhbFNlcGFyYXRvcnxyaWdodGxlZnRoYXJwb29uc3xOb3RHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldHxibGFja3RyaWFuZ2xlbGVmdHxibGFja3RyaWFuZ2xlZG93bnxOZWdhdGl2ZVRoaW5TcGFjZXxMZWZ0RG93blRlZVZlY3RvcnxOb3RMZXNzU2xhbnRFcXVhbHxsZWZ0cmlnaHRoYXJwb29uc3xEb3VibGVVcERvd25BcnJvd3xEb3VibGVWZXJ0aWNhbEJhcnxMZWZ0VHJpYW5nbGVFcXVhbHxGaWxsZWRTbWFsbFNxdWFyZXx0d29oZWFkcmlnaHRhcnJvd3xOb3ROZXN0ZWRMZXNzTGVzc3xEb3duTGVmdFRlZVZlY3RvcnxEb3duTGVmdFZlY3RvckJhcnxSaWdodEFuZ2xlQnJhY2tldHxOb3RUaWxkZUZ1bGxFcXVhbHxOb3RSZXZlcnNlRWxlbWVudHxSaWdodFVwRG93blZlY3RvcnxEaWFjcml0aWNhbFRpbGRlfE5vdFN1Y2NlZWRzVGlsZGV8Y2lyY2xlYXJyb3dyaWdodHxOb3RQcmVjZWRlc0VxdWFsfHJpZ2h0aGFycG9vbmRvd258RG91YmxlUmlnaHRBcnJvd3xOb3RTdWNjZWVkc0VxdWFsfE5vbkJyZWFraW5nU3BhY2V8Tm90UmlnaHRUcmlhbmdsZXxMZXNzRXF1YWxHcmVhdGVyfFJpZ2h0VXBUZWVWZWN0b3J8TGVmdEFuZ2xlQnJhY2tldHxHcmVhdGVyRnVsbEVxdWFsfERvd25BcnJvd1VwQXJyb3d8UmlnaHRVcFZlY3RvckJhcnx0d29oZWFkbGVmdGFycm93fEdyZWF0ZXJFcXVhbExlc3N8ZG93bmhhcnBvb25yaWdodHxSaWdodFRyaWFuZ2xlQmFyfG50cmlhbmdsZXJpZ2h0ZXF8Tm90U3VwZXJzZXRFcXVhbHxMZWZ0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsQWN1dGV8cmlnaHRyaWdodGFycm93c3x2YXJ0cmlhbmdsZXJpZ2h0fFVwQXJyb3dEb3duQXJyb3d8RGlhY3JpdGljYWxHcmF2ZXxVbmRlclBhcmVudGhlc2lzfEVtcHR5U21hbGxTcXVhcmV8TGVmdFVwVmVjdG9yQmFyfGxlZnRyaWdodGFycm93c3xEb3duUmlnaHRWZWN0b3J8ZG93bmhhcnBvb25sZWZ0fHRyaWFuZ2xlcmlnaHRlcXxTaG9ydFJpZ2h0QXJyb3d8T3ZlclBhcmVudGhlc2lzfERvdWJsZUxlZnRBcnJvd3xEb3VibGVEb3duQXJyb3d8Tm90U3F1YXJlU3Vic2V0fGJpZ3RyaWFuZ2xlZG93bnxudHJpYW5nbGVsZWZ0ZXF8VXBwZXJSaWdodEFycm93fGN1cnZlYXJyb3dyaWdodHx2YXJ0cmlhbmdsZWxlZnR8Tm90TGVmdFRyaWFuZ2xlfG5sZWZ0cmlnaHRhcnJvd3xMb3dlclJpZ2h0QXJyb3d8Tm90SHVtcERvd25IdW1wfE5vdEdyZWF0ZXJUaWxkZXxyaWdodHRocmVldGltZXN8TGVmdFVwVGVlVmVjdG9yfE5vdEdyZWF0ZXJFcXVhbHxzdHJhaWdodGVwc2lsb258TGVmdFRyaWFuZ2xlQmFyfHJpZ2h0c3F1aWdhcnJvd3xDb250b3VySW50ZWdyYWx8cmlnaHRsZWZ0YXJyb3dzfENsb3NlQ3VybHlRdW90ZXxSaWdodERvd25WZWN0b3J8TGVmdFJpZ2h0VmVjdG9yfG5MZWZ0cmlnaHRhcnJvd3xsZWZ0aGFycG9vbmRvd258Y2lyY2xlYXJyb3dsZWZ0fFNxdWFyZVN1cGVyc2V0fE9wZW5DdXJseVF1b3RlfGhvb2tyaWdodGFycm93fEhvcml6b250YWxMaW5lfERpYWNyaXRpY2FsRG90fE5vdExlc3NHcmVhdGVyfG50cmlhbmdsZXJpZ2h0fERvdWJsZVJpZ2h0VGVlfEludmlzaWJsZUNvbW1hfEludmlzaWJsZVRpbWVzfExvd2VyTGVmdEFycm93fERvd25MZWZ0VmVjdG9yfE5vdFN1YnNldEVxdWFsfGN1cnZlYXJyb3dsZWZ0fHRyaWFuZ2xlbGVmdGVxfE5vdFZlcnRpY2FsQmFyfFRpbGRlRnVsbEVxdWFsfGRvd25kb3duYXJyb3dzfE5vdEdyZWF0ZXJMZXNzfFJpZ2h0VGVlVmVjdG9yfFplcm9XaWR0aFNwYWNlfGxvb3BhcnJvd3JpZ2h0fExvbmdSaWdodEFycm93fGRvdWJsZWJhcndlZGdlfFNob3J0TGVmdEFycm93fFNob3J0RG93bkFycm93fFJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJHcmVhdGVyfFJldmVyc2VFbGVtZW50fHJpZ2h0aGFycG9vbnVwfExlc3NTbGFudEVxdWFsfGxlZnR0aHJlZXRpbWVzfHVwaGFycG9vbnJpZ2h0fHJpZ2h0YXJyb3d0YWlsfExlZnREb3duVmVjdG9yfExvbmdyaWdodGFycm93fE5lc3RlZExlc3NMZXNzfFVwcGVyTGVmdEFycm93fG5zaG9ydHBhcmFsbGVsfGxlZnRsZWZ0YXJyb3dzfGxlZnRyaWdodGFycm93fExlZnRyaWdodGFycm93fExlZnRSaWdodEFycm93fGxvbmdyaWdodGFycm93fHVwaGFycG9vbmxlZnR8UmlnaHRBcnJvd0JhcnxBcHBseUZ1bmN0aW9ufExlZnRUZWVWZWN0b3J8bGVmdGFycm93dGFpbHxOb3RFcXVhbFRpbGRlfHZhcnN1YnNldG5lcXF8dmFyc3Vwc2V0bmVxcXxSaWdodFRlZUFycm93fFN1Y2NlZWRzRXF1YWx8U3VjY2VlZHNUaWxkZXxMZWZ0VmVjdG9yQmFyfFN1cGVyc2V0RXF1YWx8aG9va2xlZnRhcnJvd3xEaWZmZXJlbnRpYWxEfFZlcnRpY2FsVGlsZGV8VmVyeVRoaW5TcGFjZXxibGFja3RyaWFuZ2xlfGJpZ3RyaWFuZ2xldXB8TGVzc0Z1bGxFcXVhbHxkaXZpZGVvbnRpbWVzfGxlZnRoYXJwb29udXB8VXBFcXVpbGlicml1bXxudHJpYW5nbGVsZWZ0fFJpZ2h0VHJpYW5nbGV8bWVhc3VyZWRhbmdsZXxzaG9ydHBhcmFsbGVsfGxvbmdsZWZ0YXJyb3d8TG9uZ2xlZnRhcnJvd3xMb25nTGVmdEFycm93fERvdWJsZUxlZnRUZWV8UG9pbmNhcmVwbGFuZXxQcmVjZWRlc0VxdWFsfHRyaWFuZ2xlcmlnaHR8RG91YmxlVXBBcnJvd3xSaWdodFVwVmVjdG9yfGZhbGxpbmdkb3RzZXF8bG9vcGFycm93bGVmdHxQcmVjZWRlc1RpbGRlfE5vdFRpbGRlRXF1YWx8Tm90VGlsZGVUaWxkZXxzbWFsbHNldG1pbnVzfFByb3BvcnRpb25hbHx0cmlhbmdsZWxlZnR8dHJpYW5nbGVkb3dufFVuZGVyQnJhY2tldHxOb3RIdW1wRXF1YWx8ZXhwb25lbnRpYWxlfEV4cG9uZW50aWFsRXxOb3RMZXNzVGlsZGV8SGlsYmVydFNwYWNlfFJpZ2h0Q2VpbGluZ3xibGFja2xvemVuZ2V8dmFyc3Vwc2V0bmVxfEh1bXBEb3duSHVtcHxHcmVhdGVyRXF1YWx8VmVydGljYWxMaW5lfExlZnRUZWVBcnJvd3xOb3RMZXNzRXF1YWx8RG93blRlZUFycm93fExlZnRUcmlhbmdsZXx2YXJzdWJzZXRuZXF8SW50ZXJzZWN0aW9ufE5vdENvbmdydWVudHxEb3duQXJyb3dCYXJ8TGVmdFVwVmVjdG9yfExlZnRBcnJvd0JhcnxyaXNpbmdkb3RzZXF8R3JlYXRlclRpbGRlfFJvdW5kSW1wbGllc3xTcXVhcmVTdWJzZXR8U2hvcnRVcEFycm93fE5vdFN1cGVyc2V0fHF1YXRlcm5pb25zfHByZWNuYXBwcm94fGJhY2tlcHNpbG9ufHByZWNjdXJseWVxfE92ZXJCcmFja2V0fGJsYWNrc3F1YXJlfE1lZGl1bVNwYWNlfFZlcnRpY2FsQmFyfGNpcmNsZWRjaXJjfGNpcmNsZWRkYXNofENpcmNsZU1pbnVzfENpcmNsZVRpbWVzfExlc3NHcmVhdGVyfGN1cmx5ZXFwcmVjfGN1cmx5ZXFzdWNjfGRpYW1vbmRzdWl0fFVwRG93bkFycm93fFVwZG93bmFycm93fFJ1bGVEZWxheWVkfFJyaWdodGFycm93fHVwZG93bmFycm93fFJpZ2h0VmVjdG9yfG5SaWdodGFycm93fG5yaWdodGFycm93fGVxc2xhbnRsZXNzfExlZnRDZWlsaW5nfEVxdWlsaWJyaXVtfFNtYWxsQ2lyY2xlfGV4cGVjdGF0aW9ufE5vdFN1Y2NlZWRzfHRoaWNrYXBwcm94fEdyZWF0ZXJMZXNzfFNxdWFyZVVuaW9ufE5vdFByZWNlZGVzfE5vdExlc3NMZXNzfHN0cmFpZ2h0cGhpfHN1Y2NuYXBwcm94fHN1Y2NjdXJseWVxfFN1YnNldEVxdWFsfHNxc3Vwc2V0ZXF8UHJvcG9ydGlvbnxMYXBsYWNldHJmfEltYWdpbmFyeUl8c3Vwc2V0bmVxcXxOb3RHcmVhdGVyfGd0cmVxcWxlc3N8Tm90RWxlbWVudHxUaGlja1NwYWNlfFRpbGRlRXF1YWx8VGlsZGVUaWxkZXxGb3VyaWVydHJmfHJtb3VzdGFjaGV8RXF1YWxUaWxkZXxlcXNsYW50Z3RyfFVuZGVyQnJhY2V8TGVmdFZlY3RvcnxVcEFycm93QmFyfG5MZWZ0YXJyb3d8bnN1YnNldGVxcXxzdWJzZXRuZXFxfG5zdXBzZXRlcXF8bmxlZnRhcnJvd3xzdWNjYXBwcm94fGxlc3NhcHByb3h8VXBUZWVBcnJvd3x1cHVwYXJyb3dzfGN1cmx5d2VkZ2V8bGVzc2VxcWd0cnx2YXJlcHNpbG9ufHZhcm5vdGhpbmd8UmlnaHRGbG9vcnxjb21wbGVtZW50fENpcmNsZVBsdXN8c3FzdWJzZXRlcXxMbGVmdGFycm93fGNpcmNsZWRhc3R8UmlnaHRBcnJvd3xSaWdodGFycm93fHJpZ2h0YXJyb3d8bG1vdXN0YWNoZXxCZXJub3VsbGlzfHByZWNhcHByb3h8bWFwc3RvbGVmdHxtYXBzdG9kb3dufGxvbmdtYXBzdG98ZG90c3F1YXJlfGRvd25hcnJvd3xEb3VibGVEb3R8bnN1YnNldGVxfHN1cHNldG5lcXxsZWZ0YXJyb3d8bnN1cHNldGVxfHN1YnNldG5lcXxUaGluU3BhY2V8bmdlcXNsYW50fHN1YnNldGVxcXxIdW1wRXF1YWx8Tm90U3Vic2V0fHRyaWFuZ2xlcXxOb3RDdXBDYXB8bGVzc2VxZ3RyfGhlYXJ0c3VpdHxUcmlwbGVEb3R8TGVmdGFycm93fENvcHJvZHVjdHxDb25ncnVlbnR8dmFycHJvcHRvfGNvbXBsZXhlc3xndmVydG5lcXF8TGVmdEFycm93fExlc3NUaWxkZXxzdXBzZXRlcXF8TWludXNQbHVzfENpcmNsZURvdHxubGVxc2xhbnR8Tm90RXhpc3RzfGd0cmVxbGVzc3xucGFyYWxsZWx8VW5pb25QbHVzfExlZnRGbG9vcnxjaGVja21hcmt8Q2VudGVyRG90fGNlbnRlcmRvdHxNZWxsaW50cmZ8Z3RyYXBwcm94fGJpZ290aW1lc3xPdmVyQnJhY2V8c3BhZGVzdWl0fHRoZXJlZm9yZXxwaXRjaGZvcmt8cmF0aW9uYWxzfFBsdXNNaW51c3xCYWNrc2xhc2h8VGhlcmVmb3JlfERvd25CcmV2ZXxiYWNrc2ltZXF8YmFja3ByaW1lfERvd25BcnJvd3xuc2hvcnRtaWR8RG93bmFycm93fGx2ZXJ0bmVxcXxlcXZwYXJzbHxpbWFnbGluZXxpbWFncGFydHxpbmZpbnRpZXxpbnRlZ2Vyc3xJbnRlZ3JhbHxpbnRlcmNhbHxMZXNzTGVzc3xVYXJyb2NpcnxpbnRsYXJoa3xzcXN1cHNldHxhbmdtc2RhZnxzcXN1YnNldHxsbGNvcm5lcnx2YXJ0aGV0YXxjdXBicmNhcHxsbmFwcHJveHxTdXBlcnNldHxTdWNoVGhhdHxzdWNjbnNpbXxzdWNjbmVxcXxhbmdtc2RhZ3xiaWd1cGx1c3xjdXJseXZlZXx0cnBleml1bXxTdWNjZWVkc3xOb3RUaWxkZXxiaWd3ZWRnZXxhbmdtc2RhaHxhbmdydHZiZHx0cmltaW51c3xjd2NvbmludHxmcGFydGludHxscmNvcm5lcnxzbWVwYXJzbHxzdWJzZXRlcXx1cmNvcm5lcnxsdXJkc2hhcnxsYWVtcHR5dnxERG90cmFoZHxhcHByb3hlcXxsZHJ1c2hhcnxhd2NvbmludHxtYXBzdG91cHxiYWNrY29uZ3xzaG9ydG1pZHx0cmlhbmdsZXxnZXFzbGFudHxnZXNkb3RvbHx0aW1lc2JhcnxjaXJjbGVkUnxjaXJjbGVkU3xzZXRtaW51c3xtdWx0aW1hcHxuYXR1cmFsc3xzY3BvbGludHxuY29uZ2RvdHxSaWdodFRlZXxib3htaW51c3xnbmFwcHJveHxib3h0aW1lc3xhbmRzbG9wZXx0aGlja3NpbXxhbmdtc2RhYXx2YXJzaWdtYXxjaXJmbmludHxydHJpbHRyaXxhbmdtc2RhYnxycHBvbGludHxhbmdtc2RhY3xiYXJ3ZWRnZXxkcmJrYXJvd3xjbHVic3VpdHx0aGV0YXN5bXxic29saHN1YnxjYXBicmN1cHxkemlncmFycnxkb3RlcWRvdHxEb3RFcXVhbHxkb3RtaW51c3xVbmRlckJhcnxOb3RFcXVhbHxyZWFscGFydHxvdGltZXNhc3x1bGNvcm5lcnxoa3NlYXJvd3xoa3N3YXJvd3xwYXJhbGxlbHxQYXJ0aWFsRHxlbGludGVyc3xlbXB0eXNldHxwbHVzYWNpcnxiYnJrdGJya3xhbmdtc2RhZHxwb2ludGludHxiaWdvcGx1c3xhbmdtc2RhZXxQcmVjZWRlc3xiaWdzcWN1cHx2YXJrYXBwYXxub3RpbmRvdHxzdXBzZXRlcXxwcmVjbmVxcXxwcmVjbnNpbXxwcm9mYWxhcnxwcm9mbGluZXxwcm9mc3VyZnxsZXFzbGFudHxsZXNkb3RvcnxyYWVtcHR5dnxzdWJwbHVzfG5vdG5pdmJ8bm90bml2Y3xzdWJyYXJyfHppZ3JhcnJ8dnppZ3phZ3xzdWJtdWx0fHN1YmVkb3R8RWxlbWVudHxiZXR3ZWVufGNpcnNjaXJ8bGFycmJmc3xsYXJyc2ltfGxvdGltZXN8bGJya3NsZHxsYnJrc2x1fGxvemVuZ2V8bGRyZGhhcnxkYmthcm93fGJpZ2NpcmN8ZXBzaWxvbnxzaW1yYXJyfHNpbXBsdXN8bHRxdWVzdHxFcHNpbG9ufGx1cnVoYXJ8Z3RxdWVzdHxtYWx0ZXNlfG5wb2xpbnR8ZXFjb2xvbnxucHJlY2VxfGJpZ29kb3R8ZGRhZ2dlcnxndHJsZXNzfGJuZXF1aXZ8aGFycmNpcnxkZG90c2VxfGVxdWl2RER8YmFja3NpbXxkZW1wdHl2fG5zcXN1YmV8bnNxc3VwZXxVcHNpbG9ufG5zdWJzZXR8dXBzaWxvbnxtaW51c2R1fG5zdWNjZXF8c3dhcnJvd3xuc3Vwc2V0fGNvbG9uZXF8c2VhcnJvd3xib3hwbHVzfG5hcHByb3h8bmF0dXJhbHxhc3ltcGVxfGFsZWZzeW18Y29uZ2RvdHxuZWFycm93fGJpZ3N0YXJ8ZGlhbW9uZHxzdXBwbHVzfHRyaXRpbWV8TGVmdFRlZXxudmluZmlufHRyaXBsdXN8TmV3TGluZXxudmx0cmllfG52cnRyaWV8bndhcnJvd3xuZXhpc3RzfERpYW1vbmR8cnVsdWhhcnxJbXBsaWVzfHN1cG11bHR8YW5nemFycnxzdXBsYXJyfHN1cGhzdWJ8cXVlc3RlcXxiZWNhdXNlfGRpZ2FtbWF8QmVjYXVzZXxvbGNyb3NzfGJlbXB0eXZ8b21pY3JvbnxPbWljcm9ufHJvdGltZXN8Tm9CcmVha3xpbnRwcm9kfGFuZ3J0dmJ8b3JkZXJvZnx1d2FuZ2xlfHN1cGhzb2x8bGVzZG90b3xvcnNsb3BlfERvd25UZWV8cmVhbGluZXxjdWRhcnJsfHJkbGRoYXJ8T3ZlckJhcnxzdXBlZG90fGxlc3Nkb3R8c3VwZHN1Ynx0b3Bmb3JrfHN1Y2NzaW18cmJya3NsdXxyYnJrc2xkfHBlcnRlbmt8Y3VkYXJycnxpc2luZG90fHBsYW5ja2h8bGVzc2d0cnxwbHVzY2lyfGdlc2RvdG98cGx1c3NpbXxwbHVzdHdvfGxlc3NzaW18Y3VsYXJycHxyYXJyc2ltfENheWxleXN8bm90aW52YXxub3RpbnZifG5vdGludmN8VXBBcnJvd3xVcGFycm93fHVwYXJyb3d8Tm90TGVzc3xkd2FuZ2xlfHByZWNzaW18UHJvZHVjdHxjdXJhcnJtfENjb25pbnR8ZG90cGx1c3xyYXJyYmZzfGNjdXBzc218Q2VkaWxsYXxjZW1wdHl2fG5vdG5pdmF8cXVhdGludHxmcmFjMzV8ZnJhYzM4fGZyYWM0NXxmcmFjNTZ8ZnJhYzU4fGZyYWM3OHx0cmlkb3R8eG9wbHVzfGdhY3V0ZXxnYW1tYWR8R2FtbWFkfGxmaXNodHxsZmxvb3J8YmlnY3VwfHNxc3VwZXxnYnJldmV8R2JyZXZlfGxoYXJ1bHxzcXN1YmV8c3FjdXBzfEdjZWRpbHxhcGFjaXJ8bGxoYXJkfGxtaWRvdHxMbWlkb3R8bG1vdXN0fGFuZGFuZHxzcWNhcHN8YXBwcm94fEFicmV2ZXxzcGFkZXN8Y2lyY2VxfHRwcmltZXxkaXZpZGV8dG9wY2lyfEFzc2lnbnx0b3Bib3R8Z2VzZG90fGRpdm9ueHx4dXBsdXN8dGltZXNkfGdlc2xlc3xhdGlsZGV8c29sYmFyfFNPRlRjeXxsb3BsdXN8dGltZXNifGxvd2FzdHxsb3diYXJ8ZGxjb3JufGRsY3JvcHxzb2Z0Y3l8ZG9sbGFyfGxwYXJsdHx0aGtzaW18bHJoYXJkfEF0aWxkZXxsc2FxdW98c21hc2hwfGJpZ3ZlZXx0aGluc3B8d3JlYXRofGJrYXJvd3xsc3F1b3J8bHN0cm9rfExzdHJva3xsdGhyZWV8bHRpbWVzfGx0bGFycnxEb3REb3R8c2ltZG90fGx0clBhcnx3ZWllcnB8eHNxY3VwfGFuZ21zZHxzaWdtYXZ8c2lnbWFmfHplZXRyZnxaY2Fyb258emNhcm9ufG1hcHN0b3x2c3VwbmV8dGhldGF2fGNpcm1pZHxtYXJrZXJ8bWNvbW1hfFphY3V0ZXx2c3VibkV8dGhlcmU0fGd0bFBhcnx2c3VibmV8Ym90dG9tfGd0cmFycnxTSENIY3l8c2hjaGN5fG1pZGFzdHxtaWRjaXJ8bWlkZG90fG1pbnVzYnxtaW51c2R8Z3RyZG90fGJvd3RpZXxzZnJvd258bW5wbHVzfG1vZGVsc3xjb2xvbmV8c2Vzd2FyfENvbG9uZXxtc3Rwb3N8c2VhcmhrfGd0cnNpbXxuYWN1dGV8TmFjdXRlfGJveGJveHx0ZWxyZWN8aGFpcnNwfFRjZWRpbHxuYnVtcGV8c2Nuc2ltfG5jYXJvbnxOY2Fyb258bmNlZGlsfE5jZWRpbHxoYW1pbHR8U2NlZGlsfG5lYXJoa3xoYXJkY3l8SEFSRGN5fHRjZWRpbHxUY2Fyb258Y29tbWF0fG5lcXVpdnxuZXNlYXJ8dGNhcm9ufHRhcmdldHxoZWFydHN8bmV4aXN0fHZhcnJob3xzY2VkaWx8U2Nhcm9ufHNjYXJvbnxoZWxsaXB8U2FjdXRlfHNhY3V0ZXxoZXJjb258c3dud2FyfGNvbXBmbnxydGltZXN8cnRocmVlfHJzcXVvcnxyc2FxdW98emFjdXRlfHdlZGdlcXxob210aHR8YmFydmVlfGJhcndlZHxCYXJ3ZWR8cnBhcmd0fGhvcmJhcnxjb25pbnR8c3dhcmhrfHJvcGx1c3xubHRyaWV8aHNsYXNofGhzdHJva3xIc3Ryb2t8cm1vdXN0fENvbmludHxicHJpbWV8aHlidWxsfGh5cGhlbnxpYWN1dGV8SWFjdXRlfHN1cHN1cHxzdXBzdWJ8c3Vwc2ltfHZhcnBoaXxjb3Byb2R8YnJ2YmFyfGFncmF2ZXxTdXBzZXR8c3Vwc2V0fGlncmF2ZXxJZ3JhdmV8bm90aW5FfEFncmF2ZXxpaWlpbnR8aWluZmlufGNvcHlzcnx3ZWRiYXJ8VmVyYmFyfHZhbmdydHxiZWNhdXN8aW5jYXJlfHZlcmJhcnxpbm9kb3R8YnVsbGV0fGRyY29ybnxpbnRjYWx8ZHJjcm9wfGN1bGFycnx2ZWxsaXB8VXRpbGRlfGJ1bXBlcXxjdXBjYXB8ZHN0cm9rfERzdHJva3xDdXBDYXB8Y3VwY3VwfGN1cGRvdHxlYWN1dGV8RWFjdXRlfHN1cGRvdHxpcXVlc3R8ZWFzdGVyfGVjYXJvbnxFY2Fyb258ZWNvbG9ufGlzaW5zdnx1dGlsZGV8aXRpbGRlfEl0aWxkZXxjdXJhcnJ8c3VjY2VxfEJ1bXBlcXxjYWN1dGV8dWxjcm9wfG5wYXJzbHxDYWN1dGV8bnByY3VlfGVncmF2ZXxFZ3JhdmV8bnJhcnJjfG5yYXJyd3xzdWJzdXB8c3Vic3VifG5ydHJpZXxqc2VyY3l8bnNjY3VlfEpzZXJjeXxrYXBwYXZ8a2NlZGlsfEtjZWRpbHxzdWJzaW18dWxjb3JufG5zaW1lcXxlZ3Nkb3R8dmVlYmFyfGtncmVlbnxjYXBhbmR8ZWxzZG90fFN1YnNldHxzdWJzZXR8Y3VycmVufGFhY3V0ZXxsYWN1dGV8TGFjdXRlfGVtcHR5dnxudGlsZGV8TnRpbGRlfGxhZ3JhbnxsYW1iZGF8TGFtYmRhfGNhcGNhcHxVZ3JhdmV8bGFuZ2xlfHN1YmRvdHxlbXNwMTN8bnVtZXJvfGVtc3AxNHxudmRhc2h8bnZEYXNofG5WZGFzaHxuVkRhc2h8dWdyYXZlfHVmaXNodHxudkhhcnJ8bGFycmZzfG52bEFycnxsYXJyaGt8bGFycmxwfGxhcnJwbHxudnJBcnJ8VWRibGFjfG53YXJoa3xsYXJydGx8bnduZWFyfG9hY3V0ZXxPYWN1dGV8bGF0YWlsfGxBdGFpbHxzc3RhcmZ8bGJyYWNlfG9kYmxhY3xPZGJsYWN8bGJyYWNrfHVkYmxhY3xvZHNvbGR8ZXBhcnNsfGxjYXJvbnxMY2Fyb258b2dyYXZlfE9ncmF2ZXxsY2VkaWx8TGNlZGlsfEFhY3V0ZXxzc21pbGV8c3NldG1ufHNxdWFyZnxsZHF1b3J8Y2FwY3VwfG9taW51c3xjeWxjdHl8cmhhcnVsfGVxY2lyY3xkYWdnZXJ8cmZsb29yfHJmaXNodHxEYWdnZXJ8ZGFsZXRofGVxdWFsc3xvcmlnb2Z8Y2FwZG90fGVxdWVzdHxkY2Fyb258RGNhcm9ufHJkcXVvcnxvc2xhc2h8T3NsYXNofG90aWxkZXxPdGlsZGV8b3RpbWVzfE90aW1lc3x1cmNyb3B8VWJyZXZlfHVicmV2ZXxZYWN1dGV8VWFjdXRlfHVhY3V0ZXxSY2VkaWx8cmNlZGlsfHVyY29ybnxwYXJzaW18UmNhcm9ufFZkYXNobHxyY2Fyb258VHN0cm9rfHBlcmNudHxwZXJpb2R8cGVybWlsfEV4aXN0c3x5YWN1dGV8cmJyYWNrfHJicmFjZXxwaG1tYXR8Y2Nhcm9ufENjYXJvbnxwbGFuY2t8Y2NlZGlsfHBsYW5rdnx0c3Ryb2t8ZmVtYWxlfHBsdXNkb3xwbHVzZHV8ZmZpbGlnfHBsdXNtbnxmZmxsaWd8Q2NlZGlsfHJBdGFpbHxkZmlzaHR8YmVybm91fHJhdGFpbHxSYXJydGx8cmFycnRsfGFuZ3NwaHxyYXJycGx8cmFycmxwfHJhcnJoa3x4d2VkZ2V8eG90aW1lfGZvcmFsbHxGb3JBbGx8VnZkYXNofHZzdXBuRXxwcmVjZXF8YmlnY2FwfGZyYWMxMnxmcmFjMTN8ZnJhYzE0fHByaW1lc3xyYXJyZnN8cHJuc2ltfGZyYWMxNXxTcXVhcmV8ZnJhYzE2fHNxdWFyZXxsZXNkb3R8ZnJhYzE4fGZyYWMyM3xwcm9wdG98cHJ1cmVsfHJhcnJhcHxyYW5nbGV8cHVuY3NwfGZyYWMyNXxSYWN1dGV8cXByaW1lfHJhY3V0ZXxsZXNnZXN8ZnJhYzM0fGFicmV2ZXxBRWxpZ3xlcXNpbXx1dGRvdHxzZXRtbnx1cnRyaXxFcXVhbHxVcmluZ3xzZUFycnx1cmluZ3xzZWFycnxkYXNodnxEYXNodnxtdW1hcHxuYWJsYXxpb2dvbnxJb2dvbnxzZG90ZXxzZG90YnxzY3NpbXxuYXBpZHxuYXBvc3xlcXVpdnxuYXR1cnxBY2lyY3xkYmxhY3xlcmFycnxuYnVtcHxpcHJvZHxlckRvdHx1Y2lyY3xhd2ludHxlc2RvdHxhbmdydHxuY29uZ3xpc2luRXxzY25hcHxTY2lyY3xzY2lyY3xuZGFzaHxpc2luc3xVYnJjeXxuZWFycnxuZUFycnxpc2ludnxuZWRvdHx1YnJjeXxhY3V0ZXxZY2lyY3xpdWtjeXxJdWtjeXx4dXRyaXxuZXNpbXxjYXJldHxqY2lyY3xKY2lyY3xjYXJvbnx0d2l4dHxkZGFycnxzY2N1ZXxleGlzdHxqbWF0aHxzYnF1b3xuZ2VxcXxhbmdzdHxjY2Fwc3xsY2VpbHxuZ3NpbXxVcFRlZXxkZWx0YXxEZWx0YXxydHJpZnxuaGFycnxuaEFycnxuaHBhcnxydHJpZXxqdWtjeXxKdWtjeXxrYXBwYXxyc3F1b3xLYXBwYXxubGFycnxubEFycnxUU0hjeXxycmFycnxhb2dvbnxBb2dvbnxmZmxpZ3x4cmFycnx0c2hjeXxjY2lyY3xubGVxcXxmaWxpZ3x1cHNpaHxubGVzc3xkaGFybHxubHNpbXxmamxpZ3xyb3BhcnxubHRyaXxkaGFycnxyb2Jya3xyb2FycnxmbGxpZ3xmbHRuc3xyb2FuZ3xybm1pZHxzdWJuRXxzdWJuZXxsQWFycnx0cmlzYnxDY2lyY3xhY2lyY3xjY3Vwc3xibGFua3xWRGFzaHxmb3JrdnxWZGFzaHxsYW5nZHxjZWRpbHxibGsxMnxibGsxNHxsYXF1b3xzdHJuc3xkaWFtc3xub3Rpbnx2RGFzaHxsYXJyYnxibGszNHxibG9ja3xkaXNpbnx1cGx1c3x2ZGFzaHx2QmFydnxhZWxpZ3xzdGFyZnxXZWRnZXxjaGVja3x4ckFycnxsYXRlc3xsYmFycnxsQmFycnxub3RuaXxsYmJya3xiY29uZ3xmcmFzbHxsYnJrZXxmcm93bnx2cnRyaXx2cHJvcHx2bnN1cHxnYW1tYXxHYW1tYXx3ZWRnZXx4b2RvdHxiZHF1b3xzcmFycnxkb3RlcXxsZHF1b3xib3hkbHxib3hkTHxnY2lyY3xHY2lyY3xib3hEbHxib3hETHxib3hkcnxib3hkUnxib3hEcnxUUkFERXx0cmFkZXxybGhhcnxib3hEUnx2bnN1YnxucGFydHx2bHRyaXxybGFycnxib3hoZHxib3hoRHxucHJlY3xnZXNjY3xucmFycnxuckFycnxib3hIZHxib3hIRHxib3hodXxib3hoVXxucnRyaXxib3hIdXxjbHVic3xib3hIVXx0aW1lc3xjb2xvbnxDb2xvbnxnaW1lbHx4bEFycnxUaWxkZXxuc2ltZXx0aWxkZXxuc21pZHxuc3BhcnxUSE9STnx0aG9ybnx4bGFycnxuc3ViZXxuc3ViRXx0aGthcHx4aEFycnxjb21tYXxuc3VjY3xib3h1bHxib3h1THxuc3VwZXxuc3VwRXxnbmVxcXxnbnNpbXxib3hVbHxib3hVTHxncmF2ZXxib3h1cnxib3h1Unxib3hVcnxib3hVUnxsZXNjY3xhbmdsZXxiZXBzaXxib3h2aHx2YXJwaXxib3h2SHxudW1zcHxUaGV0YXxnc2ltZXxnc2ltbHx0aGV0YXxib3hWaHxib3hWSHxib3h2bHxndGNpcnxndGRvdHxib3h2THxib3hWbHxib3hWTHxjcmFycnxjcm9zc3xDcm9zc3xudnNpbXxib3h2cnxud2Fycnxud0FycnxzcXN1cHxkdGRvdHxVb2dvbnxsaGFyZHxsaGFydXxkdHJpZnxvY2lyY3xPY2lyY3xsaGJsa3xkdWFycnxvZGFzaHxzcXN1YnxIYWNla3xzcWN1cHxsbGFycnxkdWhhcnxvZWxpZ3xPRWxpZ3xvZmNpcnxib3h2Unx1b2dvbnxsbHRyaXxib3hWcnxjc3ViZXx1dWFycnxvaGJhcnxjc3VwZXxjdGRvdHxvbGFycnxvbGNpcnxoYXJyd3xvbGluZXxzcWNhcHxvbWFjcnxPbWFjcnxvbWVnYXxPbWVnYXxib3hWUnxhbGVwaHxsbmVxcXxsbnNpbXxsb2FuZ3xsb2FycnxyaGFydXxsb2Jya3xoY2lyY3xvcGVycHxvcGx1c3xyaGFyZHxIY2lyY3xvcmFycnxVbmlvbnxvcmRlcnxlY2lyY3xFY2lyY3xjdWVwcnxzemxpZ3xjdWVzY3xicmV2ZXxyZWFsc3xlRERvdHxCcmV2ZXxob2Fycnxsb3Bhcnx1dHJpZnxyZHF1b3xVbWFjcnx1bWFjcnxlZkRvdHxzd0Fycnx1bHRyaXxhbHBoYXxyY2VpbHxvdmJhcnxzd2FycnxXY2lyY3x3Y2lyY3xzbXRlc3xzbWlsZXxic2VtaXxscmFycnxhcmluZ3xwYXJzbHxscmhhcnxic2ltZXx1aGJsa3xscnRyaXxjdXBvcnxBcmluZ3x1aGFycnx1aGFybHxzbGFycnxyYnJrZXxic29sYnxsc2ltZXxyYmJya3xSQmFycnxsc2ltZ3xwaG9uZXxyQmFycnxyYmFycnxpY2lyY3xsc3F1b3xJY2lyY3xlbWFjcnxFbWFjcnxyYXRpb3xzaW1uZXxwbHVzYnxzaW1sRXxzaW1nRXxzaW1lcXxwbHVzZXxsdGNpcnxsdGRvdHxlbXB0eXx4aGFycnx4ZHRyaXxpZXhjbHxBbHBoYXxsdHJpZXxyYXJyd3xwb3VuZHxsdHJpZnx4Y2lyY3xidW1wZXxwcmN1ZXxidW1wRXxhc3ltcHxhbWFjcnxjdXZlZXxTaWdtYXxzaWdtYXxpaWludHx1ZGhhcnxpaW90YXxpamxpZ3xJSmxpZ3xzdXBuRXxpbWFjcnxJbWFjcnxwcmltZXxQcmltZXxpbWFnZXxwcm5hcHxlb2dvbnxFb2dvbnxyYXJyY3xtZGFzaHxtRERvdHxjdXdlZHxpbWF0aHxzdXBuZXxpbXBlZHxBbWFjcnx1ZGFycnxwcnNpbXxtaWNyb3xyYXJyYnxjd2ludHxyYXF1b3xpbmZpbnxlcGx1c3xyYW5nZXxyYW5nZHxVY2lyY3xyYWRpY3xtaW51c3xhbWFsZ3x2ZWVlcXxyQWFycnxlcHNpdnx5Y2lyY3xxdWVzdHxzaGFycHxxdW90fHp3bmp8UXNjcnxyYWNlfHFzY3J8UW9wZnxxb3BmfHFpbnR8cmFuZ3xSYW5nfFpzY3J8enNjcnxab3BmfHpvcGZ8cmFycnxyQXJyfFJhcnJ8UHNjcnxwc2NyfHByb3B8cHJvZHxwcm5FfHByZWN8WkhjeXx6aGN5fHByYXB8WmV0YXx6ZXRhfFBvcGZ8cG9wZnxaZG90fHBsdXN8emRvdHxZdW1sfHl1bWx8cGhpdnxZVWN5fHl1Y3l8WXNjcnx5c2NyfHBlcnB8WW9wZnx5b3BmfHBhcnR8cGFyYXxZSWN5fE91bWx8cmN1Ynx5aWN5fFlBY3l8cmRjYXxvdW1sfG9zb2x8T3NjcnxyZHNofHlhY3l8cmVhbHxvc2NyfHh2ZWV8YW5kZHxyZWN0fGFuZHZ8WHNjcnxvcm9yfG9yZG18b3JkZnx4c2NyfGFuZ2V8YW9wZnxBb3BmfHJIYXJ8WG9wZnxvcGFyfE9vcGZ8eG9wZnx4bmlzfHJob3Z8b29wZnxvbWlkfHhtYXB8b2ludHxhcGlkfGFwb3N8b2dvbnxhc2NyfEFzY3J8b2RvdHxvZGl2fHhjdXB8eGNhcHxvY2lyfG9hc3R8bnZsdHxudmxlfG52Z3R8bnZnZXxudmFwfFdzY3J8d3NjcnxhdW1sfG50bGd8bnRnbHxuc3VwfG5zdWJ8bnNpbXxOc2NyfG5zY3J8bnNjZXxXb3BmfHJpbmd8bnByZXx3b3BmfG5wYXJ8QXVtbHxCYXJ2fGJicmt8Tm9wZnxub3BmfG5taWR8bkx0dnxiZXRhfHJvcGZ8Um9wZnxCZXRhfGJldGh8bmxlc3xycGFyfG5sZXF8Ym5vdHxiTm90fG5sZHJ8TkpjeXxyc2NyfFJzY3J8VnNjcnx2c2NyfHJzcWJ8bmpjeXxib3BmfG5pc2R8Qm9wZnxydHJpfFZvcGZ8bkd0dnxuZ3RyfHZvcGZ8Ym94aHxib3hIfGJveHZ8bmdlc3xuZ2VxfGJveFZ8YnNjcnxzY2FwfEJzY3J8YnNpbXxWZXJ0fHZlcnR8YnNvbHxidWxsfGJ1bXB8Y2Fwc3xjZG90fG5jdXB8c2NuRXxuY2FwfG5ic3B8bmFwRXxDZG90fGNlbnR8c2RvdHxWYmFyfG5hbmd8dkJhcnxjaGN5fE1zY3J8bXNjcnxzZWN0fHNlbWl8Q0hjeXxNb3BmfG1vcGZ8c2V4dHxjaXJjfGNpcmV8bWxkcnxtbGNwfGNpckV8Y29tcHxzaGN5fFNIY3l8dkFycnx2YXJyfGNvbmd8Y29wZnxDb3BmfGNvcHl8Q09QWXxtYWx0fG1hbGV8bWFjcnxsdm5FfGNzY3J8bHRyaXxzaW1lfGx0Y2N8c2ltZ3xDc2NyfHNpbWx8Y3N1YnxVdW1sfGxzcWJ8bHNpbXx1dW1sfGNzdXB8THNjcnxsc2NyfHV0cml8c21pZHxscGFyfGN1cHN8c210ZXxsb3pmfGRhcnJ8TG9wZnxVc2NyfHNvbGJ8bG9wZnxzb3BmfFNvcGZ8bG5lcXx1c2NyfHNwYXJ8ZEFycnxsbmFwfERhcnJ8ZGFzaHxTcXJ0fExKY3l8bGpjeXxsSGFyfGRIYXJ8VXBzaXx1cHNpfGRpYW18bGVzZ3xkamN5fERKY3l8bGVxcXxkb3BmfERvcGZ8ZHNjcnxEc2NyfGRzY3l8bGRzaHxsZGNhfHNxdWZ8RFNjeXxzc2NyfFNzY3J8ZHNvbHxsY3VifGxhdGV8c3RhcnxTdGFyfFVvcGZ8TGFycnxsQXJyfGxhcnJ8dW9wZnxkdHJpfGR6Y3l8c3ViZXxzdWJFfExhbmd8bGFuZ3xLc2NyfGtzY3J8S29wZnxrb3BmfEtKY3l8a2pjeXxLSGN5fGtoY3l8RFpjeXxlY2lyfGVkb3R8ZURvdHxKc2NyfGpzY3J8c3VjY3xKb3BmfGpvcGZ8RWRvdHx1SGFyfGVtc3B8ZW5zcHxJdW1sfGl1bWx8ZW9wZnxpc2lufElzY3J8aXNjcnxFb3BmfGVwYXJ8c3VuZ3xlcHNpfGVzY3J8c3VwMXxzdXAyfHN1cDN8SW90YXxpb3RhfHN1cGV8c3VwRXxJb3BmfGlvcGZ8SU9jeXxpb2N5fEVzY3J8ZXNpbXxFc2ltfGltb2Z8VWFycnxRVU9UfHVBcnJ8dWFycnxldW1sfElFY3l8aWVjeXxJZG90fEV1bWx8ZXVyb3xleGNsfEhzY3J8aHNjcnxIb3BmfGhvcGZ8VFNjeXx0c2N5fFRzY3J8aGJhcnx0c2NyfGZsYXR8dGJya3xmbm9mfGhBcnJ8aGFycnxoYWxmfGZvcGZ8Rm9wZnx0ZG90fGd2bkV8Zm9ya3x0cmllfGd0Y2N8ZnNjcnxGc2NyfGdkb3R8Z3NpbXxHc2NyfGdzY3J8R29wZnxnb3BmfGduZXF8R2RvdHx0b3NhfGduYXB8VG9wZnx0b3BmfGdlcXF8dG9lYXxHSmN5fGdqY3l8dGludHxnZXNsfG1pZHxTZnJ8Z2dnfHRvcHxnZXN8Z2xhfGdsRXxnbGp8Z2VxfGduZXxnRWx8Z2VsfGduRXxHY3l8Z2N5fGdhcHxUZnJ8dGZyfFRjeXx0Y3l8SGF0fFRhdXxGZnJ8dGF1fFRhYnxoZnJ8SGZyfGZmcnxGY3l8ZmN5fGljeXxJY3l8aWZmfEVUSHxldGh8aWZyfElmcnxFdGF8ZXRhfGludHxJbnR8U3VwfHN1cHx1Y3l8VWN5fFN1bXxzdW18amN5fEVOR3x1ZnJ8VWZyfGVuZ3xKY3l8amZyfGVsc3xlbGx8ZWdzfEVmcnxlZnJ8SmZyfHVtbHxrY3l8S2N5fEVjeXxlY3l8a2ZyfEtmcnxsYXB8U3VifHN1YnxsYXR8bGN5fExjeXxsZWd8RG90fGRvdHxsRWd8bGVxfGxlc3xzcXV8ZGl2fGRpZXxsZnJ8TGZyfGxnRXxEZnJ8ZGZyfERlbHxkZWd8RGN5fGRjeXxsbmV8bG5FfHNvbHxsb3p8c210fEN1cHxscm18Y3VwfGxzaHxMc2h8c2ltfHNoeXxtYXB8TWFwfG1jeXxNY3l8bWZyfE1mcnxtaG98Z2ZyfEdmcnxzZnJ8Y2lyfENoaXxjaGl8bmFwfENmcnx2Y3l8VmN5fGNmcnxTY3l8c2N5fG5jeXxOY3l8dmVlfFZlZXxDYXB8Y2FwfG5mcnxzY0V8c2NlfE5mcnxuZ2V8bmdFfG5HZ3x2ZnJ8VmZyfG5ndHxib3R8bkd0fG5pc3xuaXZ8UnNofHJzaHxubGV8bmxFfGJuZXxCZnJ8YmZyfG5MbHxubHR8bkx0fEJjeXxiY3l8bm90fE5vdHxybG18d2ZyfFdmcnxucHJ8bnNjfG51bXxvY3l8YXN0fE9jeXxvZnJ8eGZyfFhmcnxPZnJ8b2d0fG9obXxhcEV8b2x0fFJob3xhcGV8cmhvfFJmcnxyZnJ8b3JkfFJFR3xhbmd8cmVnfG9ydnxBbmR8YW5kfEFNUHxSY3l8YW1wfEFmcnx5Y3l8WWN5fHllbnx5ZnJ8WWZyfHJjeXxwYXJ8cGN5fFBjeXxwZnJ8UGZyfHBoaXxQaGl8YWZyfEFjeXxhY3l8emN5fFpjeXxwaXZ8YWNFfGFjZHx6ZnJ8WmZyfHByZXxwckV8cHNpfFBzaXxxZnJ8UWZyfHp3anxPcnxnZXxHZ3xndHxnZ3xlbHxvU3xsdHxMdHxMVHxSZXxsZ3xnbHxlZ3xuZXxJbXxpdHxsZXxERHx3cHx3cnxudXxOdXxkZHxsRXxTY3xzY3xwaXxQaXxlZXxhZnxsbHxMbHxyeHxnRXx4aXxwbXxYaXxpY3xwcnxQcnxpbnxuaXxtcHxtdXxhY3xNdXxvcnxhcHxHdHxHVHxpaSk7fCYoQWFjdXRlfEFncmF2ZXxBdGlsZGV8Q2NlZGlsfEVhY3V0ZXxFZ3JhdmV8SWFjdXRlfElncmF2ZXxOdGlsZGV8T2FjdXRlfE9ncmF2ZXxPc2xhc2h8T3RpbGRlfFVhY3V0ZXxVZ3JhdmV8WWFjdXRlfGFhY3V0ZXxhZ3JhdmV8YXRpbGRlfGJydmJhcnxjY2VkaWx8Y3VycmVufGRpdmlkZXxlYWN1dGV8ZWdyYXZlfGZyYWMxMnxmcmFjMTR8ZnJhYzM0fGlhY3V0ZXxpZ3JhdmV8aXF1ZXN0fG1pZGRvdHxudGlsZGV8b2FjdXRlfG9ncmF2ZXxvc2xhc2h8b3RpbGRlfHBsdXNtbnx1YWN1dGV8dWdyYXZlfHlhY3V0ZXxBRWxpZ3xBY2lyY3xBcmluZ3xFY2lyY3xJY2lyY3xPY2lyY3xUSE9STnxVY2lyY3xhY2lyY3xhY3V0ZXxhZWxpZ3xhcmluZ3xjZWRpbHxlY2lyY3xpY2lyY3xpZXhjbHxsYXF1b3xtaWNyb3xvY2lyY3xwb3VuZHxyYXF1b3xzemxpZ3x0aG9ybnx0aW1lc3x1Y2lyY3xBdW1sfENPUFl8RXVtbHxJdW1sfE91bWx8UVVPVHxVdW1sfGF1bWx8Y2VudHxjb3B5fGV1bWx8aXVtbHxtYWNyfG5ic3B8b3JkZnxvcmRtfG91bWx8cGFyYXxxdW90fHNlY3R8c3VwMXxzdXAyfHN1cDN8dXVtbHx5dW1sfEFNUHxFVEh8UkVHfGFtcHxkZWd8ZXRofG5vdHxyZWd8c2h5fHVtbHx5ZW58R1R8TFR8Z3R8bHQpKD8hOykoWz1hLXpBLVowLTldPyl8JiMoWzAtOV0rKSg7Pyl8JiNbeFhdKFthLWZBLUYwLTldKykoOz8pfCYoWzAtOWEtekEtWl0rKS9nLHY9e2FhY3V0ZToiw6EiLEFhY3V0ZToiw4EiLGFicmV2ZToixIMiLEFicmV2ZToixIIiLGFjOiLiiL4iLGFjZDoi4oi/IixhY0U6IuKIvsyzIixhY2lyYzoiw6IiLEFjaXJjOiLDgiIsYWN1dGU6IsK0IixhY3k6ItCwIixBY3k6ItCQIixhZWxpZzoiw6YiLEFFbGlnOiLDhiIsYWY6IuKBoSIsYWZyOiLwnZSeIixBZnI6IvCdlIQiLGFncmF2ZToiw6AiLEFncmF2ZToiw4AiLGFsZWZzeW06IuKEtSIsYWxlcGg6IuKEtSIsYWxwaGE6Is6xIixBbHBoYToizpEiLGFtYWNyOiLEgSIsQW1hY3I6IsSAIixhbWFsZzoi4qi/IixhbXA6IiYiLEFNUDoiJiIsYW5kOiLiiKciLEFuZDoi4qmTIixhbmRhbmQ6IuKplSIsYW5kZDoi4qmcIixhbmRzbG9wZToi4qmYIixhbmR2OiLiqZoiLGFuZzoi4oigIixhbmdlOiLipqQiLGFuZ2xlOiLiiKAiLGFuZ21zZDoi4oihIixhbmdtc2RhYToi4qaoIixhbmdtc2RhYjoi4qapIixhbmdtc2RhYzoi4qaqIixhbmdtc2RhZDoi4qarIixhbmdtc2RhZToi4qasIixhbmdtc2RhZjoi4qatIixhbmdtc2RhZzoi4qauIixhbmdtc2RhaDoi4qavIixhbmdydDoi4oifIixhbmdydHZiOiLiir4iLGFuZ3J0dmJkOiLipp0iLGFuZ3NwaDoi4oiiIixhbmdzdDoiw4UiLGFuZ3phcnI6IuKNvCIsYW9nb246IsSFIixBb2dvbjoixIQiLGFvcGY6IvCdlZIiLEFvcGY6IvCdlLgiLGFwOiLiiYgiLGFwYWNpcjoi4qmvIixhcGU6IuKJiiIsYXBFOiLiqbAiLGFwaWQ6IuKJiyIsYXBvczoiJyIsQXBwbHlGdW5jdGlvbjoi4oGhIixhcHByb3g6IuKJiCIsYXBwcm94ZXE6IuKJiiIsYXJpbmc6IsOlIixBcmluZzoiw4UiLGFzY3I6IvCdkrYiLEFzY3I6IvCdkpwiLEFzc2lnbjoi4omUIixhc3Q6IioiLGFzeW1wOiLiiYgiLGFzeW1wZXE6IuKJjSIsYXRpbGRlOiLDoyIsQXRpbGRlOiLDgyIsYXVtbDoiw6QiLEF1bWw6IsOEIixhd2NvbmludDoi4oizIixhd2ludDoi4qiRIixiYWNrY29uZzoi4omMIixiYWNrZXBzaWxvbjoiz7YiLGJhY2twcmltZToi4oC1IixiYWNrc2ltOiLiiL0iLGJhY2tzaW1lcToi4ouNIixCYWNrc2xhc2g6IuKIliIsQmFydjoi4qunIixiYXJ2ZWU6IuKKvSIsYmFyd2VkOiLijIUiLEJhcndlZDoi4oyGIixiYXJ3ZWRnZToi4oyFIixiYnJrOiLijrUiLGJicmt0YnJrOiLijrYiLGJjb25nOiLiiYwiLGJjeToi0LEiLEJjeToi0JEiLGJkcXVvOiLigJ4iLGJlY2F1czoi4oi1IixiZWNhdXNlOiLiiLUiLEJlY2F1c2U6IuKItSIsYmVtcHR5djoi4qawIixiZXBzaToiz7YiLGJlcm5vdToi4oSsIixCZXJub3VsbGlzOiLihKwiLGJldGE6Is6yIixCZXRhOiLOkiIsYmV0aDoi4oS2IixiZXR3ZWVuOiLiiawiLGJmcjoi8J2UnyIsQmZyOiLwnZSFIixiaWdjYXA6IuKLgiIsYmlnY2lyYzoi4pevIixiaWdjdXA6IuKLgyIsYmlnb2RvdDoi4qiAIixiaWdvcGx1czoi4qiBIixiaWdvdGltZXM6IuKogiIsYmlnc3FjdXA6IuKohiIsYmlnc3Rhcjoi4piFIixiaWd0cmlhbmdsZWRvd246IuKWvSIsYmlndHJpYW5nbGV1cDoi4pazIixiaWd1cGx1czoi4qiEIixiaWd2ZWU6IuKLgSIsYmlnd2VkZ2U6IuKLgCIsYmthcm93OiLipI0iLGJsYWNrbG96ZW5nZToi4qerIixibGFja3NxdWFyZToi4paqIixibGFja3RyaWFuZ2xlOiLilrQiLGJsYWNrdHJpYW5nbGVkb3duOiLilr4iLGJsYWNrdHJpYW5nbGVsZWZ0OiLil4IiLGJsYWNrdHJpYW5nbGVyaWdodDoi4pa4IixibGFuazoi4pCjIixibGsxMjoi4paSIixibGsxNDoi4paRIixibGszNDoi4paTIixibG9jazoi4paIIixibmU6Ij3ig6UiLGJuZXF1aXY6IuKJoeKDpSIsYm5vdDoi4oyQIixiTm90OiLiq60iLGJvcGY6IvCdlZMiLEJvcGY6IvCdlLkiLGJvdDoi4oqlIixib3R0b206IuKKpSIsYm93dGllOiLii4giLGJveGJveDoi4qeJIixib3hkbDoi4pSQIixib3hkTDoi4pWVIixib3hEbDoi4pWWIixib3hETDoi4pWXIixib3hkcjoi4pSMIixib3hkUjoi4pWSIixib3hEcjoi4pWTIixib3hEUjoi4pWUIixib3hoOiLilIAiLGJveEg6IuKVkCIsYm94aGQ6IuKUrCIsYm94aEQ6IuKVpSIsYm94SGQ6IuKVpCIsYm94SEQ6IuKVpiIsYm94aHU6IuKUtCIsYm94aFU6IuKVqCIsYm94SHU6IuKVpyIsYm94SFU6IuKVqSIsYm94bWludXM6IuKKnyIsYm94cGx1czoi4oqeIixib3h0aW1lczoi4oqgIixib3h1bDoi4pSYIixib3h1TDoi4pWbIixib3hVbDoi4pWcIixib3hVTDoi4pWdIixib3h1cjoi4pSUIixib3h1Ujoi4pWYIixib3hVcjoi4pWZIixib3hVUjoi4pWaIixib3h2OiLilIIiLGJveFY6IuKVkSIsYm94dmg6IuKUvCIsYm94dkg6IuKVqiIsYm94Vmg6IuKVqyIsYm94Vkg6IuKVrCIsYm94dmw6IuKUpCIsYm94dkw6IuKVoSIsYm94Vmw6IuKVoiIsYm94Vkw6IuKVoyIsYm94dnI6IuKUnCIsYm94dlI6IuKVniIsYm94VnI6IuKVnyIsYm94VlI6IuKVoCIsYnByaW1lOiLigLUiLGJyZXZlOiLLmCIsQnJldmU6IsuYIixicnZiYXI6IsKmIixic2NyOiLwnZK3IixCc2NyOiLihKwiLGJzZW1pOiLigY8iLGJzaW06IuKIvSIsYnNpbWU6IuKLjSIsYnNvbDoiXFwiLGJzb2xiOiLip4UiLGJzb2xoc3ViOiLin4giLGJ1bGw6IuKAoiIsYnVsbGV0OiLigKIiLGJ1bXA6IuKJjiIsYnVtcGU6IuKJjyIsYnVtcEU6IuKqriIsYnVtcGVxOiLiiY8iLEJ1bXBlcToi4omOIixjYWN1dGU6IsSHIixDYWN1dGU6IsSGIixjYXA6IuKIqSIsQ2FwOiLii5IiLGNhcGFuZDoi4qmEIixjYXBicmN1cDoi4qmJIixjYXBjYXA6IuKpiyIsY2FwY3VwOiLiqYciLGNhcGRvdDoi4qmAIixDYXBpdGFsRGlmZmVyZW50aWFsRDoi4oWFIixjYXBzOiLiiKnvuIAiLGNhcmV0OiLigYEiLGNhcm9uOiLLhyIsQ2F5bGV5czoi4oStIixjY2Fwczoi4qmNIixjY2Fyb246IsSNIixDY2Fyb246IsSMIixjY2VkaWw6IsOnIixDY2VkaWw6IsOHIixjY2lyYzoixIkiLENjaXJjOiLEiCIsQ2NvbmludDoi4oiwIixjY3Vwczoi4qmMIixjY3Vwc3NtOiLiqZAiLGNkb3Q6IsSLIixDZG90OiLEiiIsY2VkaWw6IsK4IixDZWRpbGxhOiLCuCIsY2VtcHR5djoi4qayIixjZW50OiLCoiIsY2VudGVyZG90OiLCtyIsQ2VudGVyRG90OiLCtyIsY2ZyOiLwnZSgIixDZnI6IuKErSIsY2hjeToi0YciLENIY3k6ItCnIixjaGVjazoi4pyTIixjaGVja21hcms6IuKckyIsY2hpOiLPhyIsQ2hpOiLOpyIsY2lyOiLil4siLGNpcmM6IsuGIixjaXJjZXE6IuKJlyIsY2lyY2xlYXJyb3dsZWZ0OiLihroiLGNpcmNsZWFycm93cmlnaHQ6IuKGuyIsY2lyY2xlZGFzdDoi4oqbIixjaXJjbGVkY2lyYzoi4oqaIixjaXJjbGVkZGFzaDoi4oqdIixDaXJjbGVEb3Q6IuKKmSIsY2lyY2xlZFI6IsKuIixjaXJjbGVkUzoi4pOIIixDaXJjbGVNaW51czoi4oqWIixDaXJjbGVQbHVzOiLiipUiLENpcmNsZVRpbWVzOiLiipciLGNpcmU6IuKJlyIsY2lyRToi4qeDIixjaXJmbmludDoi4qiQIixjaXJtaWQ6IuKrryIsY2lyc2Npcjoi4qeCIixDbG9ja3dpc2VDb250b3VySW50ZWdyYWw6IuKIsiIsQ2xvc2VDdXJseURvdWJsZVF1b3RlOiLigJ0iLENsb3NlQ3VybHlRdW90ZToi4oCZIixjbHViczoi4pmjIixjbHVic3VpdDoi4pmjIixjb2xvbjoiOiIsQ29sb246IuKItyIsY29sb25lOiLiiZQiLENvbG9uZToi4qm0Iixjb2xvbmVxOiLiiZQiLGNvbW1hOiIsIixjb21tYXQ6IkAiLGNvbXA6IuKIgSIsY29tcGZuOiLiiJgiLGNvbXBsZW1lbnQ6IuKIgSIsY29tcGxleGVzOiLihIIiLGNvbmc6IuKJhSIsY29uZ2RvdDoi4qmtIixDb25ncnVlbnQ6IuKJoSIsY29uaW50OiLiiK4iLENvbmludDoi4oivIixDb250b3VySW50ZWdyYWw6IuKIriIsY29wZjoi8J2VlCIsQ29wZjoi4oSCIixjb3Byb2Q6IuKIkCIsQ29wcm9kdWN0OiLiiJAiLGNvcHk6IsKpIixDT1BZOiLCqSIsY29weXNyOiLihJciLENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw6IuKIsyIsY3JhcnI6IuKGtSIsY3Jvc3M6IuKclyIsQ3Jvc3M6IuKoryIsY3Njcjoi8J2SuCIsQ3Njcjoi8J2SniIsY3N1Yjoi4quPIixjc3ViZToi4quRIixjc3VwOiLiq5AiLGNzdXBlOiLiq5IiLGN0ZG90OiLii68iLGN1ZGFycmw6IuKkuCIsY3VkYXJycjoi4qS1IixjdWVwcjoi4oueIixjdWVzYzoi4oufIixjdWxhcnI6IuKGtiIsY3VsYXJycDoi4qS9IixjdXA6IuKIqiIsQ3VwOiLii5MiLGN1cGJyY2FwOiLiqYgiLGN1cGNhcDoi4qmGIixDdXBDYXA6IuKJjSIsY3VwY3VwOiLiqYoiLGN1cGRvdDoi4oqNIixjdXBvcjoi4qmFIixjdXBzOiLiiKrvuIAiLGN1cmFycjoi4oa3IixjdXJhcnJtOiLipLwiLGN1cmx5ZXFwcmVjOiLii54iLGN1cmx5ZXFzdWNjOiLii58iLGN1cmx5dmVlOiLii44iLGN1cmx5d2VkZ2U6IuKLjyIsY3VycmVuOiLCpCIsY3VydmVhcnJvd2xlZnQ6IuKGtiIsY3VydmVhcnJvd3JpZ2h0OiLihrciLGN1dmVlOiLii44iLGN1d2VkOiLii48iLGN3Y29uaW50OiLiiLIiLGN3aW50OiLiiLEiLGN5bGN0eToi4oytIixkYWdnZXI6IuKAoCIsRGFnZ2VyOiLigKEiLGRhbGV0aDoi4oS4IixkYXJyOiLihpMiLGRBcnI6IuKHkyIsRGFycjoi4oahIixkYXNoOiLigJAiLGRhc2h2OiLiiqMiLERhc2h2OiLiq6QiLGRia2Fyb3c6IuKkjyIsZGJsYWM6IsudIixkY2Fyb246IsSPIixEY2Fyb246IsSOIixkY3k6ItC0IixEY3k6ItCUIixkZDoi4oWGIixERDoi4oWFIixkZGFnZ2VyOiLigKEiLGRkYXJyOiLih4oiLEREb3RyYWhkOiLipJEiLGRkb3RzZXE6IuKptyIsZGVnOiLCsCIsRGVsOiLiiIciLGRlbHRhOiLOtCIsRGVsdGE6Is6UIixkZW1wdHl2OiLiprEiLGRmaXNodDoi4qW/IixkZnI6IvCdlKEiLERmcjoi8J2UhyIsZEhhcjoi4qWlIixkaGFybDoi4oeDIixkaGFycjoi4oeCIixEaWFjcml0aWNhbEFjdXRlOiLCtCIsRGlhY3JpdGljYWxEb3Q6IsuZIixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiLLnSIsRGlhY3JpdGljYWxHcmF2ZToiYCIsRGlhY3JpdGljYWxUaWxkZToiy5wiLGRpYW06IuKLhCIsZGlhbW9uZDoi4ouEIixEaWFtb25kOiLii4QiLGRpYW1vbmRzdWl0OiLimaYiLGRpYW1zOiLimaYiLGRpZToiwqgiLERpZmZlcmVudGlhbEQ6IuKFhiIsZGlnYW1tYToiz50iLGRpc2luOiLii7IiLGRpdjoiw7ciLGRpdmlkZToiw7ciLGRpdmlkZW9udGltZXM6IuKLhyIsZGl2b254OiLii4ciLGRqY3k6ItGSIixESmN5OiLQgiIsZGxjb3JuOiLijJ4iLGRsY3JvcDoi4oyNIixkb2xsYXI6IiQiLGRvcGY6IvCdlZUiLERvcGY6IvCdlLsiLGRvdDoiy5kiLERvdDoiwqgiLERvdERvdDoi4oOcIixkb3RlcToi4omQIixkb3RlcWRvdDoi4omRIixEb3RFcXVhbDoi4omQIixkb3RtaW51czoi4oi4Iixkb3RwbHVzOiLiiJQiLGRvdHNxdWFyZToi4oqhIixkb3VibGViYXJ3ZWRnZToi4oyGIixEb3VibGVDb250b3VySW50ZWdyYWw6IuKIryIsRG91YmxlRG90OiLCqCIsRG91YmxlRG93bkFycm93OiLih5MiLERvdWJsZUxlZnRBcnJvdzoi4oeQIixEb3VibGVMZWZ0UmlnaHRBcnJvdzoi4oeUIixEb3VibGVMZWZ0VGVlOiLiq6QiLERvdWJsZUxvbmdMZWZ0QXJyb3c6IuKfuCIsRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OiLin7oiLERvdWJsZUxvbmdSaWdodEFycm93OiLin7kiLERvdWJsZVJpZ2h0QXJyb3c6IuKHkiIsRG91YmxlUmlnaHRUZWU6IuKKqCIsRG91YmxlVXBBcnJvdzoi4oeRIixEb3VibGVVcERvd25BcnJvdzoi4oeVIixEb3VibGVWZXJ0aWNhbEJhcjoi4oilIixkb3duYXJyb3c6IuKGkyIsRG93bmFycm93OiLih5MiLERvd25BcnJvdzoi4oaTIixEb3duQXJyb3dCYXI6IuKkkyIsRG93bkFycm93VXBBcnJvdzoi4oe1IixEb3duQnJldmU6IsyRIixkb3duZG93bmFycm93czoi4oeKIixkb3duaGFycG9vbmxlZnQ6IuKHgyIsZG93bmhhcnBvb25yaWdodDoi4oeCIixEb3duTGVmdFJpZ2h0VmVjdG9yOiLipZAiLERvd25MZWZ0VGVlVmVjdG9yOiLipZ4iLERvd25MZWZ0VmVjdG9yOiLihr0iLERvd25MZWZ0VmVjdG9yQmFyOiLipZYiLERvd25SaWdodFRlZVZlY3Rvcjoi4qWfIixEb3duUmlnaHRWZWN0b3I6IuKHgSIsRG93blJpZ2h0VmVjdG9yQmFyOiLipZciLERvd25UZWU6IuKKpCIsRG93blRlZUFycm93OiLihqciLGRyYmthcm93OiLipJAiLGRyY29ybjoi4oyfIixkcmNyb3A6IuKMjCIsZHNjcjoi8J2SuSIsRHNjcjoi8J2SnyIsZHNjeToi0ZUiLERTY3k6ItCFIixkc29sOiLip7YiLGRzdHJvazoixJEiLERzdHJvazoixJAiLGR0ZG90OiLii7EiLGR0cmk6IuKWvyIsZHRyaWY6IuKWviIsZHVhcnI6IuKHtSIsZHVoYXI6IuKlryIsZHdhbmdsZToi4qamIixkemN5OiLRnyIsRFpjeToi0I8iLGR6aWdyYXJyOiLin78iLGVhY3V0ZToiw6kiLEVhY3V0ZToiw4kiLGVhc3Rlcjoi4qmuIixlY2Fyb246IsSbIixFY2Fyb246IsSaIixlY2lyOiLiiZYiLGVjaXJjOiLDqiIsRWNpcmM6IsOKIixlY29sb246IuKJlSIsZWN5OiLRjSIsRWN5OiLQrSIsZUREb3Q6IuKptyIsZWRvdDoixJciLGVEb3Q6IuKJkSIsRWRvdDoixJYiLGVlOiLihYciLGVmRG90OiLiiZIiLGVmcjoi8J2UoiIsRWZyOiLwnZSIIixlZzoi4qqaIixlZ3JhdmU6IsOoIixFZ3JhdmU6IsOIIixlZ3M6IuKqliIsZWdzZG90OiLiqpgiLGVsOiLiqpkiLEVsZW1lbnQ6IuKIiCIsZWxpbnRlcnM6IuKPpyIsZWxsOiLihJMiLGVsczoi4qqVIixlbHNkb3Q6IuKqlyIsZW1hY3I6IsSTIixFbWFjcjoixJIiLGVtcHR5OiLiiIUiLGVtcHR5c2V0OiLiiIUiLEVtcHR5U21hbGxTcXVhcmU6IuKXuyIsZW1wdHl2OiLiiIUiLEVtcHR5VmVyeVNtYWxsU3F1YXJlOiLilqsiLGVtc3A6IuKAgyIsZW1zcDEzOiLigIQiLGVtc3AxNDoi4oCFIixlbmc6IsWLIixFTkc6IsWKIixlbnNwOiLigIIiLGVvZ29uOiLEmSIsRW9nb246IsSYIixlb3BmOiLwnZWWIixFb3BmOiLwnZS8IixlcGFyOiLii5UiLGVwYXJzbDoi4qejIixlcGx1czoi4qmxIixlcHNpOiLOtSIsZXBzaWxvbjoizrUiLEVwc2lsb246Is6VIixlcHNpdjoiz7UiLGVxY2lyYzoi4omWIixlcWNvbG9uOiLiiZUiLGVxc2ltOiLiiYIiLGVxc2xhbnRndHI6IuKqliIsZXFzbGFudGxlc3M6IuKqlSIsRXF1YWw6IuKptSIsZXF1YWxzOiI9IixFcXVhbFRpbGRlOiLiiYIiLGVxdWVzdDoi4omfIixFcXVpbGlicml1bToi4oeMIixlcXVpdjoi4omhIixlcXVpdkREOiLiqbgiLGVxdnBhcnNsOiLip6UiLGVyYXJyOiLipbEiLGVyRG90OiLiiZMiLGVzY3I6IuKEryIsRXNjcjoi4oSwIixlc2RvdDoi4omQIixlc2ltOiLiiYIiLEVzaW06IuKpsyIsZXRhOiLOtyIsRXRhOiLOlyIsZXRoOiLDsCIsRVRIOiLDkCIsZXVtbDoiw6siLEV1bWw6IsOLIixldXJvOiLigqwiLGV4Y2w6IiEiLGV4aXN0OiLiiIMiLEV4aXN0czoi4oiDIixleHBlY3RhdGlvbjoi4oSwIixleHBvbmVudGlhbGU6IuKFhyIsRXhwb25lbnRpYWxFOiLihYciLGZhbGxpbmdkb3RzZXE6IuKJkiIsZmN5OiLRhCIsRmN5OiLQpCIsZmVtYWxlOiLimYAiLGZmaWxpZzoi76yDIixmZmxpZzoi76yAIixmZmxsaWc6Iu+shCIsZmZyOiLwnZSjIixGZnI6IvCdlIkiLGZpbGlnOiLvrIEiLEZpbGxlZFNtYWxsU3F1YXJlOiLil7wiLEZpbGxlZFZlcnlTbWFsbFNxdWFyZToi4paqIixmamxpZzoiZmoiLGZsYXQ6IuKZrSIsZmxsaWc6Iu+sgiIsZmx0bnM6IuKWsSIsZm5vZjoixpIiLGZvcGY6IvCdlZciLEZvcGY6IvCdlL0iLGZvcmFsbDoi4oiAIixGb3JBbGw6IuKIgCIsZm9yazoi4ouUIixmb3Jrdjoi4quZIixGb3VyaWVydHJmOiLihLEiLGZwYXJ0aW50OiLiqI0iLGZyYWMxMjoiwr0iLGZyYWMxMzoi4oWTIixmcmFjMTQ6IsK8IixmcmFjMTU6IuKFlSIsZnJhYzE2OiLihZkiLGZyYWMxODoi4oWbIixmcmFjMjM6IuKFlCIsZnJhYzI1OiLihZYiLGZyYWMzNDoiwr4iLGZyYWMzNToi4oWXIixmcmFjMzg6IuKFnCIsZnJhYzQ1OiLihZgiLGZyYWM1Njoi4oWaIixmcmFjNTg6IuKFnSIsZnJhYzc4OiLihZ4iLGZyYXNsOiLigYQiLGZyb3duOiLijKIiLGZzY3I6IvCdkrsiLEZzY3I6IuKEsSIsZ2FjdXRlOiLHtSIsZ2FtbWE6Is6zIixHYW1tYToizpMiLGdhbW1hZDoiz50iLEdhbW1hZDoiz5wiLGdhcDoi4qqGIixnYnJldmU6IsSfIixHYnJldmU6IsSeIixHY2VkaWw6IsSiIixnY2lyYzoixJ0iLEdjaXJjOiLEnCIsZ2N5OiLQsyIsR2N5OiLQkyIsZ2RvdDoixKEiLEdkb3Q6IsSgIixnZToi4omlIixnRToi4omnIixnZWw6IuKLmyIsZ0VsOiLiqowiLGdlcToi4omlIixnZXFxOiLiiaciLGdlcXNsYW50OiLiqb4iLGdlczoi4qm+IixnZXNjYzoi4qqpIixnZXNkb3Q6IuKqgCIsZ2VzZG90bzoi4qqCIixnZXNkb3RvbDoi4qqEIixnZXNsOiLii5vvuIAiLGdlc2xlczoi4qqUIixnZnI6IvCdlKQiLEdmcjoi8J2UiiIsZ2c6IuKJqyIsR2c6IuKLmSIsZ2dnOiLii5kiLGdpbWVsOiLihLciLGdqY3k6ItGTIixHSmN5OiLQgyIsZ2w6IuKJtyIsZ2xhOiLiqqUiLGdsRToi4qqSIixnbGo6IuKqpCIsZ25hcDoi4qqKIixnbmFwcHJveDoi4qqKIixnbmU6IuKqiCIsZ25FOiLiiakiLGduZXE6IuKqiCIsZ25lcXE6IuKJqSIsZ25zaW06IuKLpyIsZ29wZjoi8J2VmCIsR29wZjoi8J2UviIsZ3JhdmU6ImAiLEdyZWF0ZXJFcXVhbDoi4omlIixHcmVhdGVyRXF1YWxMZXNzOiLii5siLEdyZWF0ZXJGdWxsRXF1YWw6IuKJpyIsR3JlYXRlckdyZWF0ZXI6IuKqoiIsR3JlYXRlckxlc3M6IuKJtyIsR3JlYXRlclNsYW50RXF1YWw6IuKpviIsR3JlYXRlclRpbGRlOiLiibMiLGdzY3I6IuKEiiIsR3Njcjoi8J2SoiIsZ3NpbToi4omzIixnc2ltZToi4qqOIixnc2ltbDoi4qqQIixndDoiPiIsR3Q6IuKJqyIsR1Q6Ij4iLGd0Y2M6IuKqpyIsZ3RjaXI6IuKpuiIsZ3Rkb3Q6IuKLlyIsZ3RsUGFyOiLippUiLGd0cXVlc3Q6IuKpvCIsZ3RyYXBwcm94OiLiqoYiLGd0cmFycjoi4qW4IixndHJkb3Q6IuKLlyIsZ3RyZXFsZXNzOiLii5siLGd0cmVxcWxlc3M6IuKqjCIsZ3RybGVzczoi4om3IixndHJzaW06IuKJsyIsZ3ZlcnRuZXFxOiLiianvuIAiLGd2bkU6IuKJqe+4gCIsSGFjZWs6IsuHIixoYWlyc3A6IuKAiiIsaGFsZjoiwr0iLGhhbWlsdDoi4oSLIixoYXJkY3k6ItGKIixIQVJEY3k6ItCqIixoYXJyOiLihpQiLGhBcnI6IuKHlCIsaGFycmNpcjoi4qWIIixoYXJydzoi4oatIixIYXQ6Il4iLGhiYXI6IuKEjyIsaGNpcmM6IsSlIixIY2lyYzoixKQiLGhlYXJ0czoi4pmlIixoZWFydHN1aXQ6IuKZpSIsaGVsbGlwOiLigKYiLGhlcmNvbjoi4oq5IixoZnI6IvCdlKUiLEhmcjoi4oSMIixIaWxiZXJ0U3BhY2U6IuKEiyIsaGtzZWFyb3c6IuKkpSIsaGtzd2Fyb3c6IuKkpiIsaG9hcnI6IuKHvyIsaG9tdGh0OiLiiLsiLGhvb2tsZWZ0YXJyb3c6IuKGqSIsaG9va3JpZ2h0YXJyb3c6IuKGqiIsaG9wZjoi8J2VmSIsSG9wZjoi4oSNIixob3JiYXI6IuKAlSIsSG9yaXpvbnRhbExpbmU6IuKUgCIsaHNjcjoi8J2SvSIsSHNjcjoi4oSLIixoc2xhc2g6IuKEjyIsaHN0cm9rOiLEpyIsSHN0cm9rOiLEpiIsSHVtcERvd25IdW1wOiLiiY4iLEh1bXBFcXVhbDoi4omPIixoeWJ1bGw6IuKBgyIsaHlwaGVuOiLigJAiLGlhY3V0ZToiw60iLElhY3V0ZToiw40iLGljOiLigaMiLGljaXJjOiLDriIsSWNpcmM6IsOOIixpY3k6ItC4IixJY3k6ItCYIixJZG90OiLEsCIsaWVjeToi0LUiLElFY3k6ItCVIixpZXhjbDoiwqEiLGlmZjoi4oeUIixpZnI6IvCdlKYiLElmcjoi4oSRIixpZ3JhdmU6IsOsIixJZ3JhdmU6IsOMIixpaToi4oWIIixpaWlpbnQ6IuKojCIsaWlpbnQ6IuKIrSIsaWluZmluOiLip5wiLGlpb3RhOiLihKkiLGlqbGlnOiLEsyIsSUpsaWc6IsSyIixJbToi4oSRIixpbWFjcjoixKsiLEltYWNyOiLEqiIsaW1hZ2U6IuKEkSIsSW1hZ2luYXJ5SToi4oWIIixpbWFnbGluZToi4oSQIixpbWFncGFydDoi4oSRIixpbWF0aDoixLEiLGltb2Y6IuKKtyIsaW1wZWQ6Isa1IixJbXBsaWVzOiLih5IiLGluOiLiiIgiLGluY2FyZToi4oSFIixpbmZpbjoi4oieIixpbmZpbnRpZToi4qedIixpbm9kb3Q6IsSxIixpbnQ6IuKIqyIsSW50OiLiiKwiLGludGNhbDoi4oq6IixpbnRlZ2Vyczoi4oSkIixJbnRlZ3JhbDoi4oirIixpbnRlcmNhbDoi4oq6IixJbnRlcnNlY3Rpb246IuKLgiIsaW50bGFyaGs6IuKolyIsaW50cHJvZDoi4qi8IixJbnZpc2libGVDb21tYToi4oGjIixJbnZpc2libGVUaW1lczoi4oGiIixpb2N5OiLRkSIsSU9jeToi0IEiLGlvZ29uOiLEryIsSW9nb246IsSuIixpb3BmOiLwnZWaIixJb3BmOiLwnZWAIixpb3RhOiLOuSIsSW90YToizpkiLGlwcm9kOiLiqLwiLGlxdWVzdDoiwr8iLGlzY3I6IvCdkr4iLElzY3I6IuKEkCIsaXNpbjoi4oiIIixpc2luZG90OiLii7UiLGlzaW5FOiLii7kiLGlzaW5zOiLii7QiLGlzaW5zdjoi4ouzIixpc2ludjoi4oiIIixpdDoi4oGiIixpdGlsZGU6IsSpIixJdGlsZGU6IsSoIixpdWtjeToi0ZYiLEl1a2N5OiLQhiIsaXVtbDoiw68iLEl1bWw6IsOPIixqY2lyYzoixLUiLEpjaXJjOiLEtCIsamN5OiLQuSIsSmN5OiLQmSIsamZyOiLwnZSnIixKZnI6IvCdlI0iLGptYXRoOiLItyIsam9wZjoi8J2VmyIsSm9wZjoi8J2VgSIsanNjcjoi8J2SvyIsSnNjcjoi8J2SpSIsanNlcmN5OiLRmCIsSnNlcmN5OiLQiCIsanVrY3k6ItGUIixKdWtjeToi0IQiLGthcHBhOiLOuiIsS2FwcGE6Is6aIixrYXBwYXY6Is+wIixrY2VkaWw6IsS3IixLY2VkaWw6IsS2IixrY3k6ItC6IixLY3k6ItCaIixrZnI6IvCdlKgiLEtmcjoi8J2UjiIsa2dyZWVuOiLEuCIsa2hjeToi0YUiLEtIY3k6ItClIixramN5OiLRnCIsS0pjeToi0IwiLGtvcGY6IvCdlZwiLEtvcGY6IvCdlYIiLGtzY3I6IvCdk4AiLEtzY3I6IvCdkqYiLGxBYXJyOiLih5oiLGxhY3V0ZToixLoiLExhY3V0ZToixLkiLGxhZW1wdHl2OiLiprQiLGxhZ3Jhbjoi4oSSIixsYW1iZGE6Is67IixMYW1iZGE6Is6bIixsYW5nOiLin6giLExhbmc6IuKfqiIsbGFuZ2Q6IuKmkSIsbGFuZ2xlOiLin6giLGxhcDoi4qqFIixMYXBsYWNldHJmOiLihJIiLGxhcXVvOiLCqyIsbGFycjoi4oaQIixsQXJyOiLih5AiLExhcnI6IuKGniIsbGFycmI6IuKHpCIsbGFycmJmczoi4qSfIixsYXJyZnM6IuKknSIsbGFycmhrOiLihqkiLGxhcnJscDoi4oarIixsYXJycGw6IuKkuSIsbGFycnNpbToi4qWzIixsYXJydGw6IuKGoiIsbGF0OiLiqqsiLGxhdGFpbDoi4qSZIixsQXRhaWw6IuKkmyIsbGF0ZToi4qqtIixsYXRlczoi4qqt77iAIixsYmFycjoi4qSMIixsQmFycjoi4qSOIixsYmJyazoi4p2yIixsYnJhY2U6InsiLGxicmFjazoiWyIsbGJya2U6IuKmiyIsbGJya3NsZDoi4qaPIixsYnJrc2x1OiLipo0iLGxjYXJvbjoixL4iLExjYXJvbjoixL0iLGxjZWRpbDoixLwiLExjZWRpbDoixLsiLGxjZWlsOiLijIgiLGxjdWI6InsiLGxjeToi0LsiLExjeToi0JsiLGxkY2E6IuKktiIsbGRxdW86IuKAnCIsbGRxdW9yOiLigJ4iLGxkcmRoYXI6IuKlpyIsbGRydXNoYXI6IuKliyIsbGRzaDoi4oayIixsZToi4omkIixsRToi4ommIixMZWZ0QW5nbGVCcmFja2V0OiLin6giLGxlZnRhcnJvdzoi4oaQIixMZWZ0YXJyb3c6IuKHkCIsTGVmdEFycm93OiLihpAiLExlZnRBcnJvd0Jhcjoi4oekIixMZWZ0QXJyb3dSaWdodEFycm93OiLih4YiLGxlZnRhcnJvd3RhaWw6IuKGoiIsTGVmdENlaWxpbmc6IuKMiCIsTGVmdERvdWJsZUJyYWNrZXQ6IuKfpiIsTGVmdERvd25UZWVWZWN0b3I6IuKloSIsTGVmdERvd25WZWN0b3I6IuKHgyIsTGVmdERvd25WZWN0b3JCYXI6IuKlmSIsTGVmdEZsb29yOiLijIoiLGxlZnRoYXJwb29uZG93bjoi4oa9IixsZWZ0aGFycG9vbnVwOiLihrwiLGxlZnRsZWZ0YXJyb3dzOiLih4ciLGxlZnRyaWdodGFycm93OiLihpQiLExlZnRyaWdodGFycm93OiLih5QiLExlZnRSaWdodEFycm93OiLihpQiLGxlZnRyaWdodGFycm93czoi4oeGIixsZWZ0cmlnaHRoYXJwb29uczoi4oeLIixsZWZ0cmlnaHRzcXVpZ2Fycm93OiLihq0iLExlZnRSaWdodFZlY3Rvcjoi4qWOIixMZWZ0VGVlOiLiiqMiLExlZnRUZWVBcnJvdzoi4oakIixMZWZ0VGVlVmVjdG9yOiLipZoiLGxlZnR0aHJlZXRpbWVzOiLii4siLExlZnRUcmlhbmdsZToi4oqyIixMZWZ0VHJpYW5nbGVCYXI6IuKnjyIsTGVmdFRyaWFuZ2xlRXF1YWw6IuKKtCIsTGVmdFVwRG93blZlY3Rvcjoi4qWRIixMZWZ0VXBUZWVWZWN0b3I6IuKloCIsTGVmdFVwVmVjdG9yOiLihr8iLExlZnRVcFZlY3RvckJhcjoi4qWYIixMZWZ0VmVjdG9yOiLihrwiLExlZnRWZWN0b3JCYXI6IuKlkiIsbGVnOiLii5oiLGxFZzoi4qqLIixsZXE6IuKJpCIsbGVxcToi4ommIixsZXFzbGFudDoi4qm9IixsZXM6IuKpvSIsbGVzY2M6IuKqqCIsbGVzZG90OiLiqb8iLGxlc2RvdG86IuKqgSIsbGVzZG90b3I6IuKqgyIsbGVzZzoi4oua77iAIixsZXNnZXM6IuKqkyIsbGVzc2FwcHJveDoi4qqFIixsZXNzZG90OiLii5YiLGxlc3NlcWd0cjoi4ouaIixsZXNzZXFxZ3RyOiLiqosiLExlc3NFcXVhbEdyZWF0ZXI6IuKLmiIsTGVzc0Z1bGxFcXVhbDoi4ommIixMZXNzR3JlYXRlcjoi4om2IixsZXNzZ3RyOiLiibYiLExlc3NMZXNzOiLiqqEiLGxlc3NzaW06IuKJsiIsTGVzc1NsYW50RXF1YWw6IuKpvSIsTGVzc1RpbGRlOiLiibIiLGxmaXNodDoi4qW8IixsZmxvb3I6IuKMiiIsbGZyOiLwnZSpIixMZnI6IvCdlI8iLGxnOiLiibYiLGxnRToi4qqRIixsSGFyOiLipaIiLGxoYXJkOiLihr0iLGxoYXJ1OiLihrwiLGxoYXJ1bDoi4qWqIixsaGJsazoi4paEIixsamN5OiLRmSIsTEpjeToi0IkiLGxsOiLiiaoiLExsOiLii5giLGxsYXJyOiLih4ciLGxsY29ybmVyOiLijJ4iLExsZWZ0YXJyb3c6IuKHmiIsbGxoYXJkOiLipasiLGxsdHJpOiLil7oiLGxtaWRvdDoixYAiLExtaWRvdDoixL8iLGxtb3VzdDoi4o6wIixsbW91c3RhY2hlOiLijrAiLGxuYXA6IuKqiSIsbG5hcHByb3g6IuKqiSIsbG5lOiLiqociLGxuRToi4omoIixsbmVxOiLiqociLGxuZXFxOiLiiagiLGxuc2ltOiLii6YiLGxvYW5nOiLin6wiLGxvYXJyOiLih70iLGxvYnJrOiLin6YiLGxvbmdsZWZ0YXJyb3c6IuKftSIsTG9uZ2xlZnRhcnJvdzoi4p+4IixMb25nTGVmdEFycm93OiLin7UiLGxvbmdsZWZ0cmlnaHRhcnJvdzoi4p+3IixMb25nbGVmdHJpZ2h0YXJyb3c6IuKfuiIsTG9uZ0xlZnRSaWdodEFycm93OiLin7ciLGxvbmdtYXBzdG86IuKfvCIsbG9uZ3JpZ2h0YXJyb3c6IuKftiIsTG9uZ3JpZ2h0YXJyb3c6IuKfuSIsTG9uZ1JpZ2h0QXJyb3c6IuKftiIsbG9vcGFycm93bGVmdDoi4oarIixsb29wYXJyb3dyaWdodDoi4oasIixsb3Bhcjoi4qaFIixsb3BmOiLwnZWdIixMb3BmOiLwnZWDIixsb3BsdXM6IuKorSIsbG90aW1lczoi4qi0Iixsb3dhc3Q6IuKIlyIsbG93YmFyOiJfIixMb3dlckxlZnRBcnJvdzoi4oaZIixMb3dlclJpZ2h0QXJyb3c6IuKGmCIsbG96OiLil4oiLGxvemVuZ2U6IuKXiiIsbG96Zjoi4qerIixscGFyOiIoIixscGFybHQ6IuKmkyIsbHJhcnI6IuKHhiIsbHJjb3JuZXI6IuKMnyIsbHJoYXI6IuKHiyIsbHJoYXJkOiLipa0iLGxybToi4oCOIixscnRyaToi4oq/Iixsc2FxdW86IuKAuSIsbHNjcjoi8J2TgSIsTHNjcjoi4oSSIixsc2g6IuKGsCIsTHNoOiLihrAiLGxzaW06IuKJsiIsbHNpbWU6IuKqjSIsbHNpbWc6IuKqjyIsbHNxYjoiWyIsbHNxdW86IuKAmCIsbHNxdW9yOiLigJoiLGxzdHJvazoixYIiLExzdHJvazoixYEiLGx0OiI8IixMdDoi4omqIixMVDoiPCIsbHRjYzoi4qqmIixsdGNpcjoi4qm5IixsdGRvdDoi4ouWIixsdGhyZWU6IuKLiyIsbHRpbWVzOiLii4kiLGx0bGFycjoi4qW2IixsdHF1ZXN0OiLiqbsiLGx0cmk6IuKXgyIsbHRyaWU6IuKKtCIsbHRyaWY6IuKXgiIsbHRyUGFyOiLippYiLGx1cmRzaGFyOiLipYoiLGx1cnVoYXI6IuKlpiIsbHZlcnRuZXFxOiLiiajvuIAiLGx2bkU6IuKJqO+4gCIsbWFjcjoiwq8iLG1hbGU6IuKZgiIsbWFsdDoi4pygIixtYWx0ZXNlOiLinKAiLG1hcDoi4oamIixNYXA6IuKkhSIsbWFwc3RvOiLihqYiLG1hcHN0b2Rvd246IuKGpyIsbWFwc3RvbGVmdDoi4oakIixtYXBzdG91cDoi4oalIixtYXJrZXI6IuKWriIsbWNvbW1hOiLiqKkiLG1jeToi0LwiLE1jeToi0JwiLG1kYXNoOiLigJQiLG1ERG90OiLiiLoiLG1lYXN1cmVkYW5nbGU6IuKIoSIsTWVkaXVtU3BhY2U6IuKBnyIsTWVsbGludHJmOiLihLMiLG1mcjoi8J2UqiIsTWZyOiLwnZSQIixtaG86IuKEpyIsbWljcm86IsK1IixtaWQ6IuKIoyIsbWlkYXN0OiIqIixtaWRjaXI6IuKrsCIsbWlkZG90OiLCtyIsbWludXM6IuKIkiIsbWludXNiOiLiip8iLG1pbnVzZDoi4oi4IixtaW51c2R1OiLiqKoiLE1pbnVzUGx1czoi4oiTIixtbGNwOiLiq5siLG1sZHI6IuKApiIsbW5wbHVzOiLiiJMiLG1vZGVsczoi4oqnIixtb3BmOiLwnZWeIixNb3BmOiLwnZWEIixtcDoi4oiTIixtc2NyOiLwnZOCIixNc2NyOiLihLMiLG1zdHBvczoi4oi+IixtdToizrwiLE11OiLOnCIsbXVsdGltYXA6IuKKuCIsbXVtYXA6IuKKuCIsbmFibGE6IuKIhyIsbmFjdXRlOiLFhCIsTmFjdXRlOiLFgyIsbmFuZzoi4oig4oOSIixuYXA6IuKJiSIsbmFwRToi4qmwzLgiLG5hcGlkOiLiiYvMuCIsbmFwb3M6IsWJIixuYXBwcm94OiLiiYkiLG5hdHVyOiLima4iLG5hdHVyYWw6IuKZriIsbmF0dXJhbHM6IuKElSIsbmJzcDoiwqAiLG5idW1wOiLiiY7MuCIsbmJ1bXBlOiLiiY/MuCIsbmNhcDoi4qmDIixuY2Fyb246IsWIIixOY2Fyb246IsWHIixuY2VkaWw6IsWGIixOY2VkaWw6IsWFIixuY29uZzoi4omHIixuY29uZ2RvdDoi4qmtzLgiLG5jdXA6IuKpgiIsbmN5OiLQvSIsTmN5OiLQnSIsbmRhc2g6IuKAkyIsbmU6IuKJoCIsbmVhcmhrOiLipKQiLG5lYXJyOiLihpciLG5lQXJyOiLih5ciLG5lYXJyb3c6IuKGlyIsbmVkb3Q6IuKJkMy4IixOZWdhdGl2ZU1lZGl1bVNwYWNlOiLigIsiLE5lZ2F0aXZlVGhpY2tTcGFjZToi4oCLIixOZWdhdGl2ZVRoaW5TcGFjZToi4oCLIixOZWdhdGl2ZVZlcnlUaGluU3BhY2U6IuKAiyIsbmVxdWl2OiLiiaIiLG5lc2Vhcjoi4qSoIixuZXNpbToi4omCzLgiLE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiLiiasiLE5lc3RlZExlc3NMZXNzOiLiiaoiLE5ld0xpbmU6IlxuIixuZXhpc3Q6IuKIhCIsbmV4aXN0czoi4oiEIixuZnI6IvCdlKsiLE5mcjoi8J2UkSIsbmdlOiLiibEiLG5nRToi4omnzLgiLG5nZXE6IuKJsSIsbmdlcXE6IuKJp8y4IixuZ2Vxc2xhbnQ6IuKpvsy4IixuZ2VzOiLiqb7MuCIsbkdnOiLii5nMuCIsbmdzaW06IuKJtSIsbmd0OiLiia8iLG5HdDoi4omr4oOSIixuZ3RyOiLiia8iLG5HdHY6IuKJq8y4IixuaGFycjoi4oauIixuaEFycjoi4oeOIixuaHBhcjoi4quyIixuaToi4oiLIixuaXM6IuKLvCIsbmlzZDoi4ou6IixuaXY6IuKIiyIsbmpjeToi0ZoiLE5KY3k6ItCKIixubGFycjoi4oaaIixubEFycjoi4oeNIixubGRyOiLigKUiLG5sZToi4omwIixubEU6IuKJpsy4IixubGVmdGFycm93OiLihpoiLG5MZWZ0YXJyb3c6IuKHjSIsbmxlZnRyaWdodGFycm93OiLihq4iLG5MZWZ0cmlnaHRhcnJvdzoi4oeOIixubGVxOiLiibAiLG5sZXFxOiLiiabMuCIsbmxlcXNsYW50OiLiqb3MuCIsbmxlczoi4qm9zLgiLG5sZXNzOiLiia4iLG5MbDoi4ouYzLgiLG5sc2ltOiLiibQiLG5sdDoi4omuIixuTHQ6IuKJquKDkiIsbmx0cmk6IuKLqiIsbmx0cmllOiLii6wiLG5MdHY6IuKJqsy4IixubWlkOiLiiKQiLE5vQnJlYWs6IuKBoCIsTm9uQnJlYWtpbmdTcGFjZToiwqAiLG5vcGY6IvCdlZ8iLE5vcGY6IuKElSIsbm90OiLCrCIsTm90OiLiq6wiLE5vdENvbmdydWVudDoi4omiIixOb3RDdXBDYXA6IuKJrSIsTm90RG91YmxlVmVydGljYWxCYXI6IuKIpiIsTm90RWxlbWVudDoi4oiJIixOb3RFcXVhbDoi4omgIixOb3RFcXVhbFRpbGRlOiLiiYLMuCIsTm90RXhpc3RzOiLiiIQiLE5vdEdyZWF0ZXI6IuKJryIsTm90R3JlYXRlckVxdWFsOiLiibEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6IuKJp8y4IixOb3RHcmVhdGVyR3JlYXRlcjoi4omrzLgiLE5vdEdyZWF0ZXJMZXNzOiLiibkiLE5vdEdyZWF0ZXJTbGFudEVxdWFsOiLiqb7MuCIsTm90R3JlYXRlclRpbGRlOiLiibUiLE5vdEh1bXBEb3duSHVtcDoi4omOzLgiLE5vdEh1bXBFcXVhbDoi4omPzLgiLG5vdGluOiLiiIkiLG5vdGluZG90OiLii7XMuCIsbm90aW5FOiLii7nMuCIsbm90aW52YToi4oiJIixub3RpbnZiOiLii7ciLG5vdGludmM6IuKLtiIsTm90TGVmdFRyaWFuZ2xlOiLii6oiLE5vdExlZnRUcmlhbmdsZUJhcjoi4qePzLgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiLii6wiLE5vdExlc3M6IuKJriIsTm90TGVzc0VxdWFsOiLiibAiLE5vdExlc3NHcmVhdGVyOiLiibgiLE5vdExlc3NMZXNzOiLiiarMuCIsTm90TGVzc1NsYW50RXF1YWw6IuKpvcy4IixOb3RMZXNzVGlsZGU6IuKJtCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6IuKqosy4IixOb3ROZXN0ZWRMZXNzTGVzczoi4qqhzLgiLG5vdG5pOiLiiIwiLG5vdG5pdmE6IuKIjCIsbm90bml2Yjoi4ou+Iixub3RuaXZjOiLii70iLE5vdFByZWNlZGVzOiLiioAiLE5vdFByZWNlZGVzRXF1YWw6IuKqr8y4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6IuKLoCIsTm90UmV2ZXJzZUVsZW1lbnQ6IuKIjCIsTm90UmlnaHRUcmlhbmdsZToi4ourIixOb3RSaWdodFRyaWFuZ2xlQmFyOiLip5DMuCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiLii60iLE5vdFNxdWFyZVN1YnNldDoi4oqPzLgiLE5vdFNxdWFyZVN1YnNldEVxdWFsOiLii6IiLE5vdFNxdWFyZVN1cGVyc2V0OiLiipDMuCIsTm90U3F1YXJlU3VwZXJzZXRFcXVhbDoi4oujIixOb3RTdWJzZXQ6IuKKguKDkiIsTm90U3Vic2V0RXF1YWw6IuKKiCIsTm90U3VjY2VlZHM6IuKKgSIsTm90U3VjY2VlZHNFcXVhbDoi4qqwzLgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoi4ouhIixOb3RTdWNjZWVkc1RpbGRlOiLiib/MuCIsTm90U3VwZXJzZXQ6IuKKg+KDkiIsTm90U3VwZXJzZXRFcXVhbDoi4oqJIixOb3RUaWxkZToi4omBIixOb3RUaWxkZUVxdWFsOiLiiYQiLE5vdFRpbGRlRnVsbEVxdWFsOiLiiYciLE5vdFRpbGRlVGlsZGU6IuKJiSIsTm90VmVydGljYWxCYXI6IuKIpCIsbnBhcjoi4oimIixucGFyYWxsZWw6IuKIpiIsbnBhcnNsOiLiq73ig6UiLG5wYXJ0OiLiiILMuCIsbnBvbGludDoi4qiUIixucHI6IuKKgCIsbnByY3VlOiLii6AiLG5wcmU6IuKqr8y4IixucHJlYzoi4oqAIixucHJlY2VxOiLiqq/MuCIsbnJhcnI6IuKGmyIsbnJBcnI6IuKHjyIsbnJhcnJjOiLipLPMuCIsbnJhcnJ3OiLihp3MuCIsbnJpZ2h0YXJyb3c6IuKGmyIsblJpZ2h0YXJyb3c6IuKHjyIsbnJ0cmk6IuKLqyIsbnJ0cmllOiLii60iLG5zYzoi4oqBIixuc2NjdWU6IuKLoSIsbnNjZToi4qqwzLgiLG5zY3I6IvCdk4MiLE5zY3I6IvCdkqkiLG5zaG9ydG1pZDoi4oikIixuc2hvcnRwYXJhbGxlbDoi4oimIixuc2ltOiLiiYEiLG5zaW1lOiLiiYQiLG5zaW1lcToi4omEIixuc21pZDoi4oikIixuc3Bhcjoi4oimIixuc3FzdWJlOiLii6IiLG5zcXN1cGU6IuKLoyIsbnN1Yjoi4oqEIixuc3ViZToi4oqIIixuc3ViRToi4quFzLgiLG5zdWJzZXQ6IuKKguKDkiIsbnN1YnNldGVxOiLiiogiLG5zdWJzZXRlcXE6IuKrhcy4Iixuc3VjYzoi4oqBIixuc3VjY2VxOiLiqrDMuCIsbnN1cDoi4oqFIixuc3VwZToi4oqJIixuc3VwRToi4quGzLgiLG5zdXBzZXQ6IuKKg+KDkiIsbnN1cHNldGVxOiLiiokiLG5zdXBzZXRlcXE6IuKrhsy4IixudGdsOiLiibkiLG50aWxkZToiw7EiLE50aWxkZToiw5EiLG50bGc6IuKJuCIsbnRyaWFuZ2xlbGVmdDoi4ouqIixudHJpYW5nbGVsZWZ0ZXE6IuKLrCIsbnRyaWFuZ2xlcmlnaHQ6IuKLqyIsbnRyaWFuZ2xlcmlnaHRlcToi4outIixudToizr0iLE51OiLOnSIsbnVtOiIjIixudW1lcm86IuKEliIsbnVtc3A6IuKAhyIsbnZhcDoi4omN4oOSIixudmRhc2g6IuKKrCIsbnZEYXNoOiLiiq0iLG5WZGFzaDoi4oquIixuVkRhc2g6IuKKryIsbnZnZToi4oml4oOSIixudmd0OiI+4oOSIixudkhhcnI6IuKkhCIsbnZpbmZpbjoi4qeeIixudmxBcnI6IuKkgiIsbnZsZToi4omk4oOSIixudmx0OiI84oOSIixudmx0cmllOiLiirTig5IiLG52ckFycjoi4qSDIixudnJ0cmllOiLiirXig5IiLG52c2ltOiLiiLzig5IiLG53YXJoazoi4qSjIixud2Fycjoi4oaWIixud0Fycjoi4oeWIixud2Fycm93OiLihpYiLG53bmVhcjoi4qSnIixvYWN1dGU6IsOzIixPYWN1dGU6IsOTIixvYXN0OiLiipsiLG9jaXI6IuKKmiIsb2NpcmM6IsO0IixPY2lyYzoiw5QiLG9jeToi0L4iLE9jeToi0J4iLG9kYXNoOiLiip0iLG9kYmxhYzoixZEiLE9kYmxhYzoixZAiLG9kaXY6IuKouCIsb2RvdDoi4oqZIixvZHNvbGQ6IuKmvCIsb2VsaWc6IsWTIixPRWxpZzoixZIiLG9mY2lyOiLipr8iLG9mcjoi8J2UrCIsT2ZyOiLwnZSSIixvZ29uOiLLmyIsb2dyYXZlOiLDsiIsT2dyYXZlOiLDkiIsb2d0OiLip4EiLG9oYmFyOiLiprUiLG9obToizqkiLG9pbnQ6IuKIriIsb2xhcnI6IuKGuiIsb2xjaXI6IuKmviIsb2xjcm9zczoi4qa7IixvbGluZToi4oC+IixvbHQ6IuKngCIsb21hY3I6IsWNIixPbWFjcjoixYwiLG9tZWdhOiLPiSIsT21lZ2E6Is6pIixvbWljcm9uOiLOvyIsT21pY3Jvbjoizp8iLG9taWQ6IuKmtiIsb21pbnVzOiLiipYiLG9vcGY6IvCdlaAiLE9vcGY6IvCdlYYiLG9wYXI6IuKmtyIsT3BlbkN1cmx5RG91YmxlUXVvdGU6IuKAnCIsT3BlbkN1cmx5UXVvdGU6IuKAmCIsb3BlcnA6IuKmuSIsb3BsdXM6IuKKlSIsb3I6IuKIqCIsT3I6IuKplCIsb3JhcnI6IuKGuyIsb3JkOiLiqZ0iLG9yZGVyOiLihLQiLG9yZGVyb2Y6IuKEtCIsb3JkZjoiwqoiLG9yZG06IsK6Iixvcmlnb2Y6IuKKtiIsb3Jvcjoi4qmWIixvcnNsb3BlOiLiqZciLG9ydjoi4qmbIixvUzoi4pOIIixvc2NyOiLihLQiLE9zY3I6IvCdkqoiLG9zbGFzaDoiw7giLE9zbGFzaDoiw5giLG9zb2w6IuKKmCIsb3RpbGRlOiLDtSIsT3RpbGRlOiLDlSIsb3RpbWVzOiLiipciLE90aW1lczoi4qi3IixvdGltZXNhczoi4qi2IixvdW1sOiLDtiIsT3VtbDoiw5YiLG92YmFyOiLijL0iLE92ZXJCYXI6IuKAviIsT3ZlckJyYWNlOiLij54iLE92ZXJCcmFja2V0OiLijrQiLE92ZXJQYXJlbnRoZXNpczoi4o+cIixwYXI6IuKIpSIscGFyYToiwrYiLHBhcmFsbGVsOiLiiKUiLHBhcnNpbToi4quzIixwYXJzbDoi4qu9IixwYXJ0OiLiiIIiLFBhcnRpYWxEOiLiiIIiLHBjeToi0L8iLFBjeToi0J8iLHBlcmNudDoiJSIscGVyaW9kOiIuIixwZXJtaWw6IuKAsCIscGVycDoi4oqlIixwZXJ0ZW5rOiLigLEiLHBmcjoi8J2UrSIsUGZyOiLwnZSTIixwaGk6Is+GIixQaGk6Is6mIixwaGl2OiLPlSIscGhtbWF0OiLihLMiLHBob25lOiLimI4iLHBpOiLPgCIsUGk6Is6gIixwaXRjaGZvcms6IuKLlCIscGl2OiLPliIscGxhbmNrOiLihI8iLHBsYW5ja2g6IuKEjiIscGxhbmt2OiLihI8iLHBsdXM6IisiLHBsdXNhY2lyOiLiqKMiLHBsdXNiOiLiip4iLHBsdXNjaXI6IuKooiIscGx1c2RvOiLiiJQiLHBsdXNkdToi4qilIixwbHVzZToi4qmyIixQbHVzTWludXM6IsKxIixwbHVzbW46IsKxIixwbHVzc2ltOiLiqKYiLHBsdXN0d286IuKopyIscG06IsKxIixQb2luY2FyZXBsYW5lOiLihIwiLHBvaW50aW50OiLiqJUiLHBvcGY6IvCdlaEiLFBvcGY6IuKEmSIscG91bmQ6IsKjIixwcjoi4om6IixQcjoi4qq7IixwcmFwOiLiqrciLHByY3VlOiLiibwiLHByZToi4qqvIixwckU6IuKqsyIscHJlYzoi4om6IixwcmVjYXBwcm94OiLiqrciLHByZWNjdXJseWVxOiLiibwiLFByZWNlZGVzOiLiiboiLFByZWNlZGVzRXF1YWw6IuKqryIsUHJlY2VkZXNTbGFudEVxdWFsOiLiibwiLFByZWNlZGVzVGlsZGU6IuKJviIscHJlY2VxOiLiqq8iLHByZWNuYXBwcm94OiLiqrkiLHByZWNuZXFxOiLiqrUiLHByZWNuc2ltOiLii6giLHByZWNzaW06IuKJviIscHJpbWU6IuKAsiIsUHJpbWU6IuKAsyIscHJpbWVzOiLihJkiLHBybmFwOiLiqrkiLHBybkU6IuKqtSIscHJuc2ltOiLii6giLHByb2Q6IuKIjyIsUHJvZHVjdDoi4oiPIixwcm9mYWxhcjoi4oyuIixwcm9mbGluZToi4oySIixwcm9mc3VyZjoi4oyTIixwcm9wOiLiiJ0iLFByb3BvcnRpb246IuKItyIsUHJvcG9ydGlvbmFsOiLiiJ0iLHByb3B0bzoi4oidIixwcnNpbToi4om+IixwcnVyZWw6IuKKsCIscHNjcjoi8J2ThSIsUHNjcjoi8J2SqyIscHNpOiLPiCIsUHNpOiLOqCIscHVuY3NwOiLigIgiLHFmcjoi8J2UriIsUWZyOiLwnZSUIixxaW50OiLiqIwiLHFvcGY6IvCdlaIiLFFvcGY6IuKEmiIscXByaW1lOiLigZciLHFzY3I6IvCdk4YiLFFzY3I6IvCdkqwiLHF1YXRlcm5pb25zOiLihI0iLHF1YXRpbnQ6IuKoliIscXVlc3Q6Ij8iLHF1ZXN0ZXE6IuKJnyIscXVvdDonIicsUVVPVDonIicsckFhcnI6IuKHmyIscmFjZToi4oi9zLEiLHJhY3V0ZToixZUiLFJhY3V0ZToixZQiLHJhZGljOiLiiJoiLHJhZW1wdHl2OiLiprMiLHJhbmc6IuKfqSIsUmFuZzoi4p+rIixyYW5nZDoi4qaSIixyYW5nZToi4qalIixyYW5nbGU6IuKfqSIscmFxdW86IsK7IixyYXJyOiLihpIiLHJBcnI6IuKHkiIsUmFycjoi4oagIixyYXJyYXA6IuKltSIscmFycmI6IuKHpSIscmFycmJmczoi4qSgIixyYXJyYzoi4qSzIixyYXJyZnM6IuKkniIscmFycmhrOiLihqoiLHJhcnJscDoi4oasIixyYXJycGw6IuKlhSIscmFycnNpbToi4qW0IixyYXJydGw6IuKGoyIsUmFycnRsOiLipJYiLHJhcnJ3OiLihp0iLHJhdGFpbDoi4qSaIixyQXRhaWw6IuKknCIscmF0aW86IuKItiIscmF0aW9uYWxzOiLihJoiLHJiYXJyOiLipI0iLHJCYXJyOiLipI8iLFJCYXJyOiLipJAiLHJiYnJrOiLinbMiLHJicmFjZToifSIscmJyYWNrOiJdIixyYnJrZToi4qaMIixyYnJrc2xkOiLipo4iLHJicmtzbHU6IuKmkCIscmNhcm9uOiLFmSIsUmNhcm9uOiLFmCIscmNlZGlsOiLFlyIsUmNlZGlsOiLFliIscmNlaWw6IuKMiSIscmN1YjoifSIscmN5OiLRgCIsUmN5OiLQoCIscmRjYToi4qS3IixyZGxkaGFyOiLipakiLHJkcXVvOiLigJ0iLHJkcXVvcjoi4oCdIixyZHNoOiLihrMiLFJlOiLihJwiLHJlYWw6IuKEnCIscmVhbGluZToi4oSbIixyZWFscGFydDoi4oScIixyZWFsczoi4oSdIixyZWN0OiLilq0iLHJlZzoiwq4iLFJFRzoiwq4iLFJldmVyc2VFbGVtZW50OiLiiIsiLFJldmVyc2VFcXVpbGlicml1bToi4oeLIixSZXZlcnNlVXBFcXVpbGlicml1bToi4qWvIixyZmlzaHQ6IuKlvSIscmZsb29yOiLijIsiLHJmcjoi8J2UryIsUmZyOiLihJwiLHJIYXI6IuKlpCIscmhhcmQ6IuKHgSIscmhhcnU6IuKHgCIscmhhcnVsOiLipawiLHJobzoiz4EiLFJobzoizqEiLHJob3Y6Is+xIixSaWdodEFuZ2xlQnJhY2tldDoi4p+pIixyaWdodGFycm93OiLihpIiLFJpZ2h0YXJyb3c6IuKHkiIsUmlnaHRBcnJvdzoi4oaSIixSaWdodEFycm93QmFyOiLih6UiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6IuKHhCIscmlnaHRhcnJvd3RhaWw6IuKGoyIsUmlnaHRDZWlsaW5nOiLijIkiLFJpZ2h0RG91YmxlQnJhY2tldDoi4p+nIixSaWdodERvd25UZWVWZWN0b3I6IuKlnSIsUmlnaHREb3duVmVjdG9yOiLih4IiLFJpZ2h0RG93blZlY3RvckJhcjoi4qWVIixSaWdodEZsb29yOiLijIsiLHJpZ2h0aGFycG9vbmRvd246IuKHgSIscmlnaHRoYXJwb29udXA6IuKHgCIscmlnaHRsZWZ0YXJyb3dzOiLih4QiLHJpZ2h0bGVmdGhhcnBvb25zOiLih4wiLHJpZ2h0cmlnaHRhcnJvd3M6IuKHiSIscmlnaHRzcXVpZ2Fycm93OiLihp0iLFJpZ2h0VGVlOiLiiqIiLFJpZ2h0VGVlQXJyb3c6IuKGpiIsUmlnaHRUZWVWZWN0b3I6IuKlmyIscmlnaHR0aHJlZXRpbWVzOiLii4wiLFJpZ2h0VHJpYW5nbGU6IuKKsyIsUmlnaHRUcmlhbmdsZUJhcjoi4qeQIixSaWdodFRyaWFuZ2xlRXF1YWw6IuKKtSIsUmlnaHRVcERvd25WZWN0b3I6IuKljyIsUmlnaHRVcFRlZVZlY3Rvcjoi4qWcIixSaWdodFVwVmVjdG9yOiLihr4iLFJpZ2h0VXBWZWN0b3JCYXI6IuKllCIsUmlnaHRWZWN0b3I6IuKHgCIsUmlnaHRWZWN0b3JCYXI6IuKlkyIscmluZzoiy5oiLHJpc2luZ2RvdHNlcToi4omTIixybGFycjoi4oeEIixybGhhcjoi4oeMIixybG06IuKAjyIscm1vdXN0OiLijrEiLHJtb3VzdGFjaGU6IuKOsSIscm5taWQ6IuKrriIscm9hbmc6IuKfrSIscm9hcnI6IuKHviIscm9icms6IuKfpyIscm9wYXI6IuKmhiIscm9wZjoi8J2VoyIsUm9wZjoi4oSdIixyb3BsdXM6IuKoriIscm90aW1lczoi4qi1IixSb3VuZEltcGxpZXM6IuKlsCIscnBhcjoiKSIscnBhcmd0OiLippQiLHJwcG9saW50OiLiqJIiLHJyYXJyOiLih4kiLFJyaWdodGFycm93OiLih5siLHJzYXF1bzoi4oC6Iixyc2NyOiLwnZOHIixSc2NyOiLihJsiLHJzaDoi4oaxIixSc2g6IuKGsSIscnNxYjoiXSIscnNxdW86IuKAmSIscnNxdW9yOiLigJkiLHJ0aHJlZToi4ouMIixydGltZXM6IuKLiiIscnRyaToi4pa5IixydHJpZToi4oq1IixydHJpZjoi4pa4IixydHJpbHRyaToi4qeOIixSdWxlRGVsYXllZDoi4qe0IixydWx1aGFyOiLipagiLHJ4OiLihJ4iLHNhY3V0ZToixZsiLFNhY3V0ZToixZoiLHNicXVvOiLigJoiLHNjOiLiibsiLFNjOiLiqrwiLHNjYXA6IuKquCIsc2Nhcm9uOiLFoSIsU2Nhcm9uOiLFoCIsc2NjdWU6IuKJvSIsc2NlOiLiqrAiLHNjRToi4qq0IixzY2VkaWw6IsWfIixTY2VkaWw6IsWeIixzY2lyYzoixZ0iLFNjaXJjOiLFnCIsc2NuYXA6IuKquiIsc2NuRToi4qq2IixzY25zaW06IuKLqSIsc2Nwb2xpbnQ6IuKokyIsc2NzaW06IuKJvyIsc2N5OiLRgSIsU2N5OiLQoSIsc2RvdDoi4ouFIixzZG90Yjoi4oqhIixzZG90ZToi4qmmIixzZWFyaGs6IuKkpSIsc2VhcnI6IuKGmCIsc2VBcnI6IuKHmCIsc2VhcnJvdzoi4oaYIixzZWN0OiLCpyIsc2VtaToiOyIsc2Vzd2FyOiLipKkiLHNldG1pbnVzOiLiiJYiLHNldG1uOiLiiJYiLHNleHQ6IuKctiIsc2ZyOiLwnZSwIixTZnI6IvCdlJYiLHNmcm93bjoi4oyiIixzaGFycDoi4pmvIixzaGNoY3k6ItGJIixTSENIY3k6ItCpIixzaGN5OiLRiCIsU0hjeToi0KgiLFNob3J0RG93bkFycm93OiLihpMiLFNob3J0TGVmdEFycm93OiLihpAiLHNob3J0bWlkOiLiiKMiLHNob3J0cGFyYWxsZWw6IuKIpSIsU2hvcnRSaWdodEFycm93OiLihpIiLFNob3J0VXBBcnJvdzoi4oaRIixzaHk6IsKtIixzaWdtYToiz4MiLFNpZ21hOiLOoyIsc2lnbWFmOiLPgiIsc2lnbWF2OiLPgiIsc2ltOiLiiLwiLHNpbWRvdDoi4qmqIixzaW1lOiLiiYMiLHNpbWVxOiLiiYMiLHNpbWc6IuKqniIsc2ltZ0U6IuKqoCIsc2ltbDoi4qqdIixzaW1sRToi4qqfIixzaW1uZToi4omGIixzaW1wbHVzOiLiqKQiLHNpbXJhcnI6IuKlsiIsc2xhcnI6IuKGkCIsU21hbGxDaXJjbGU6IuKImCIsc21hbGxzZXRtaW51czoi4oiWIixzbWFzaHA6IuKosyIsc21lcGFyc2w6IuKnpCIsc21pZDoi4oijIixzbWlsZToi4oyjIixzbXQ6IuKqqiIsc210ZToi4qqsIixzbXRlczoi4qqs77iAIixzb2Z0Y3k6ItGMIixTT0ZUY3k6ItCsIixzb2w6Ii8iLHNvbGI6IuKnhCIsc29sYmFyOiLijL8iLHNvcGY6IvCdlaQiLFNvcGY6IvCdlYoiLHNwYWRlczoi4pmgIixzcGFkZXN1aXQ6IuKZoCIsc3Bhcjoi4oilIixzcWNhcDoi4oqTIixzcWNhcHM6IuKKk++4gCIsc3FjdXA6IuKKlCIsc3FjdXBzOiLiipTvuIAiLFNxcnQ6IuKImiIsc3FzdWI6IuKKjyIsc3FzdWJlOiLiipEiLHNxc3Vic2V0OiLiio8iLHNxc3Vic2V0ZXE6IuKKkSIsc3FzdXA6IuKKkCIsc3FzdXBlOiLiipIiLHNxc3Vwc2V0OiLiipAiLHNxc3Vwc2V0ZXE6IuKKkiIsc3F1OiLilqEiLHNxdWFyZToi4pahIixTcXVhcmU6IuKWoSIsU3F1YXJlSW50ZXJzZWN0aW9uOiLiipMiLFNxdWFyZVN1YnNldDoi4oqPIixTcXVhcmVTdWJzZXRFcXVhbDoi4oqRIixTcXVhcmVTdXBlcnNldDoi4oqQIixTcXVhcmVTdXBlcnNldEVxdWFsOiLiipIiLFNxdWFyZVVuaW9uOiLiipQiLHNxdWFyZjoi4paqIixzcXVmOiLilqoiLHNyYXJyOiLihpIiLHNzY3I6IvCdk4giLFNzY3I6IvCdkq4iLHNzZXRtbjoi4oiWIixzc21pbGU6IuKMoyIsc3N0YXJmOiLii4YiLHN0YXI6IuKYhiIsU3Rhcjoi4ouGIixzdGFyZjoi4piFIixzdHJhaWdodGVwc2lsb246Is+1IixzdHJhaWdodHBoaToiz5UiLHN0cm5zOiLCryIsc3ViOiLiioIiLFN1Yjoi4ouQIixzdWJkb3Q6IuKqvSIsc3ViZToi4oqGIixzdWJFOiLiq4UiLHN1YmVkb3Q6IuKrgyIsc3VibXVsdDoi4quBIixzdWJuZToi4oqKIixzdWJuRToi4quLIixzdWJwbHVzOiLiqr8iLHN1YnJhcnI6IuKluSIsc3Vic2V0OiLiioIiLFN1YnNldDoi4ouQIixzdWJzZXRlcToi4oqGIixzdWJzZXRlcXE6IuKrhSIsU3Vic2V0RXF1YWw6IuKKhiIsc3Vic2V0bmVxOiLiiooiLHN1YnNldG5lcXE6IuKriyIsc3Vic2ltOiLiq4ciLHN1YnN1Yjoi4quVIixzdWJzdXA6IuKrkyIsc3VjYzoi4om7IixzdWNjYXBwcm94OiLiqrgiLHN1Y2NjdXJseWVxOiLiib0iLFN1Y2NlZWRzOiLiibsiLFN1Y2NlZWRzRXF1YWw6IuKqsCIsU3VjY2VlZHNTbGFudEVxdWFsOiLiib0iLFN1Y2NlZWRzVGlsZGU6IuKJvyIsc3VjY2VxOiLiqrAiLHN1Y2NuYXBwcm94OiLiqroiLHN1Y2NuZXFxOiLiqrYiLHN1Y2Nuc2ltOiLii6kiLHN1Y2NzaW06IuKJvyIsU3VjaFRoYXQ6IuKIiyIsc3VtOiLiiJEiLFN1bToi4oiRIixzdW5nOiLimaoiLHN1cDoi4oqDIixTdXA6IuKLkSIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3VwZG90OiLiqr4iLHN1cGRzdWI6IuKrmCIsc3VwZToi4oqHIixzdXBFOiLiq4YiLHN1cGVkb3Q6IuKrhCIsU3VwZXJzZXQ6IuKKgyIsU3VwZXJzZXRFcXVhbDoi4oqHIixzdXBoc29sOiLin4kiLHN1cGhzdWI6IuKrlyIsc3VwbGFycjoi4qW7IixzdXBtdWx0OiLiq4IiLHN1cG5lOiLiiosiLHN1cG5FOiLiq4wiLHN1cHBsdXM6IuKrgCIsc3Vwc2V0OiLiioMiLFN1cHNldDoi4ouRIixzdXBzZXRlcToi4oqHIixzdXBzZXRlcXE6IuKrhiIsc3Vwc2V0bmVxOiLiiosiLHN1cHNldG5lcXE6IuKrjCIsc3Vwc2ltOiLiq4giLHN1cHN1Yjoi4quUIixzdXBzdXA6IuKrliIsc3dhcmhrOiLipKYiLHN3YXJyOiLihpkiLHN3QXJyOiLih5kiLHN3YXJyb3c6IuKGmSIsc3dud2FyOiLipKoiLHN6bGlnOiLDnyIsVGFiOiJcdCIsdGFyZ2V0OiLijJYiLHRhdToiz4QiLFRhdToizqQiLHRicms6IuKOtCIsdGNhcm9uOiLFpSIsVGNhcm9uOiLFpCIsdGNlZGlsOiLFoyIsVGNlZGlsOiLFoiIsdGN5OiLRgiIsVGN5OiLQoiIsdGRvdDoi4oObIix0ZWxyZWM6IuKMlSIsdGZyOiLwnZSxIixUZnI6IvCdlJciLHRoZXJlNDoi4oi0Iix0aGVyZWZvcmU6IuKItCIsVGhlcmVmb3JlOiLiiLQiLHRoZXRhOiLOuCIsVGhldGE6Is6YIix0aGV0YXN5bToiz5EiLHRoZXRhdjoiz5EiLHRoaWNrYXBwcm94OiLiiYgiLHRoaWNrc2ltOiLiiLwiLFRoaWNrU3BhY2U6IuKBn+KAiiIsdGhpbnNwOiLigIkiLFRoaW5TcGFjZToi4oCJIix0aGthcDoi4omIIix0aGtzaW06IuKIvCIsdGhvcm46IsO+IixUSE9STjoiw54iLHRpbGRlOiLLnCIsVGlsZGU6IuKIvCIsVGlsZGVFcXVhbDoi4omDIixUaWxkZUZ1bGxFcXVhbDoi4omFIixUaWxkZVRpbGRlOiLiiYgiLHRpbWVzOiLDlyIsdGltZXNiOiLiiqAiLHRpbWVzYmFyOiLiqLEiLHRpbWVzZDoi4qiwIix0aW50OiLiiK0iLHRvZWE6IuKkqCIsdG9wOiLiiqQiLHRvcGJvdDoi4oy2Iix0b3BjaXI6IuKrsSIsdG9wZjoi8J2VpSIsVG9wZjoi8J2ViyIsdG9wZm9yazoi4quaIix0b3NhOiLipKkiLHRwcmltZToi4oC0Iix0cmFkZToi4oSiIixUUkFERToi4oSiIix0cmlhbmdsZToi4pa1Iix0cmlhbmdsZWRvd246IuKWvyIsdHJpYW5nbGVsZWZ0OiLil4MiLHRyaWFuZ2xlbGVmdGVxOiLiirQiLHRyaWFuZ2xlcToi4omcIix0cmlhbmdsZXJpZ2h0OiLilrkiLHRyaWFuZ2xlcmlnaHRlcToi4oq1Iix0cmlkb3Q6IuKXrCIsdHJpZToi4omcIix0cmltaW51czoi4qi6IixUcmlwbGVEb3Q6IuKDmyIsdHJpcGx1czoi4qi5Iix0cmlzYjoi4qeNIix0cml0aW1lOiLiqLsiLHRycGV6aXVtOiLij6IiLHRzY3I6IvCdk4kiLFRzY3I6IvCdkq8iLHRzY3k6ItGGIixUU2N5OiLQpiIsdHNoY3k6ItGbIixUU0hjeToi0IsiLHRzdHJvazoixaciLFRzdHJvazoixaYiLHR3aXh0OiLiiawiLHR3b2hlYWRsZWZ0YXJyb3c6IuKGniIsdHdvaGVhZHJpZ2h0YXJyb3c6IuKGoCIsdWFjdXRlOiLDuiIsVWFjdXRlOiLDmiIsdWFycjoi4oaRIix1QXJyOiLih5EiLFVhcnI6IuKGnyIsVWFycm9jaXI6IuKliSIsdWJyY3k6ItGeIixVYnJjeToi0I4iLHVicmV2ZToixa0iLFVicmV2ZToixawiLHVjaXJjOiLDuyIsVWNpcmM6IsObIix1Y3k6ItGDIixVY3k6ItCjIix1ZGFycjoi4oeFIix1ZGJsYWM6IsWxIixVZGJsYWM6IsWwIix1ZGhhcjoi4qWuIix1ZmlzaHQ6IuKlviIsdWZyOiLwnZSyIixVZnI6IvCdlJgiLHVncmF2ZToiw7kiLFVncmF2ZToiw5kiLHVIYXI6IuKloyIsdWhhcmw6IuKGvyIsdWhhcnI6IuKGviIsdWhibGs6IuKWgCIsdWxjb3JuOiLijJwiLHVsY29ybmVyOiLijJwiLHVsY3JvcDoi4oyPIix1bHRyaToi4pe4Iix1bWFjcjoixasiLFVtYWNyOiLFqiIsdW1sOiLCqCIsVW5kZXJCYXI6Il8iLFVuZGVyQnJhY2U6IuKPnyIsVW5kZXJCcmFja2V0OiLijrUiLFVuZGVyUGFyZW50aGVzaXM6IuKPnSIsVW5pb246IuKLgyIsVW5pb25QbHVzOiLiio4iLHVvZ29uOiLFsyIsVW9nb246IsWyIix1b3BmOiLwnZWmIixVb3BmOiLwnZWMIix1cGFycm93OiLihpEiLFVwYXJyb3c6IuKHkSIsVXBBcnJvdzoi4oaRIixVcEFycm93QmFyOiLipJIiLFVwQXJyb3dEb3duQXJyb3c6IuKHhSIsdXBkb3duYXJyb3c6IuKGlSIsVXBkb3duYXJyb3c6IuKHlSIsVXBEb3duQXJyb3c6IuKGlSIsVXBFcXVpbGlicml1bToi4qWuIix1cGhhcnBvb25sZWZ0OiLihr8iLHVwaGFycG9vbnJpZ2h0OiLihr4iLHVwbHVzOiLiio4iLFVwcGVyTGVmdEFycm93OiLihpYiLFVwcGVyUmlnaHRBcnJvdzoi4oaXIix1cHNpOiLPhSIsVXBzaToiz5IiLHVwc2loOiLPkiIsdXBzaWxvbjoiz4UiLFVwc2lsb246Is6lIixVcFRlZToi4oqlIixVcFRlZUFycm93OiLihqUiLHVwdXBhcnJvd3M6IuKHiCIsdXJjb3JuOiLijJ0iLHVyY29ybmVyOiLijJ0iLHVyY3JvcDoi4oyOIix1cmluZzoixa8iLFVyaW5nOiLFriIsdXJ0cmk6IuKXuSIsdXNjcjoi8J2TiiIsVXNjcjoi8J2SsCIsdXRkb3Q6IuKLsCIsdXRpbGRlOiLFqSIsVXRpbGRlOiLFqCIsdXRyaToi4pa1Iix1dHJpZjoi4pa0Iix1dWFycjoi4oeIIix1dW1sOiLDvCIsVXVtbDoiw5wiLHV3YW5nbGU6IuKmpyIsdmFuZ3J0OiLippwiLHZhcmVwc2lsb246Is+1Iix2YXJrYXBwYToiz7AiLHZhcm5vdGhpbmc6IuKIhSIsdmFycGhpOiLPlSIsdmFycGk6Is+WIix2YXJwcm9wdG86IuKInSIsdmFycjoi4oaVIix2QXJyOiLih5UiLHZhcnJobzoiz7EiLHZhcnNpZ21hOiLPgiIsdmFyc3Vic2V0bmVxOiLiiorvuIAiLHZhcnN1YnNldG5lcXE6IuKri++4gCIsdmFyc3Vwc2V0bmVxOiLiiovvuIAiLHZhcnN1cHNldG5lcXE6IuKrjO+4gCIsdmFydGhldGE6Is+RIix2YXJ0cmlhbmdsZWxlZnQ6IuKKsiIsdmFydHJpYW5nbGVyaWdodDoi4oqzIix2QmFyOiLiq6giLFZiYXI6IuKrqyIsdkJhcnY6IuKrqSIsdmN5OiLQsiIsVmN5OiLQkiIsdmRhc2g6IuKKoiIsdkRhc2g6IuKKqCIsVmRhc2g6IuKKqSIsVkRhc2g6IuKKqyIsVmRhc2hsOiLiq6YiLHZlZToi4oioIixWZWU6IuKLgSIsdmVlYmFyOiLiirsiLHZlZWVxOiLiiZoiLHZlbGxpcDoi4ouuIix2ZXJiYXI6InwiLFZlcmJhcjoi4oCWIix2ZXJ0OiJ8IixWZXJ0OiLigJYiLFZlcnRpY2FsQmFyOiLiiKMiLFZlcnRpY2FsTGluZToifCIsVmVydGljYWxTZXBhcmF0b3I6IuKdmCIsVmVydGljYWxUaWxkZToi4omAIixWZXJ5VGhpblNwYWNlOiLigIoiLHZmcjoi8J2UsyIsVmZyOiLwnZSZIix2bHRyaToi4oqyIix2bnN1Yjoi4oqC4oOSIix2bnN1cDoi4oqD4oOSIix2b3BmOiLwnZWnIixWb3BmOiLwnZWNIix2cHJvcDoi4oidIix2cnRyaToi4oqzIix2c2NyOiLwnZOLIixWc2NyOiLwnZKxIix2c3VibmU6IuKKiu+4gCIsdnN1Ym5FOiLiq4vvuIAiLHZzdXBuZToi4oqL77iAIix2c3VwbkU6IuKrjO+4gCIsVnZkYXNoOiLiiqoiLHZ6aWd6YWc6IuKmmiIsd2NpcmM6IsW1IixXY2lyYzoixbQiLHdlZGJhcjoi4qmfIix3ZWRnZToi4oinIixXZWRnZToi4ouAIix3ZWRnZXE6IuKJmSIsd2VpZXJwOiLihJgiLHdmcjoi8J2UtCIsV2ZyOiLwnZSaIix3b3BmOiLwnZWoIixXb3BmOiLwnZWOIix3cDoi4oSYIix3cjoi4omAIix3cmVhdGg6IuKJgCIsd3Njcjoi8J2TjCIsV3Njcjoi8J2SsiIseGNhcDoi4ouCIix4Y2lyYzoi4pevIix4Y3VwOiLii4MiLHhkdHJpOiLilr0iLHhmcjoi8J2UtSIsWGZyOiLwnZSbIix4aGFycjoi4p+3Iix4aEFycjoi4p+6Iix4aToizr4iLFhpOiLOniIseGxhcnI6IuKftSIseGxBcnI6IuKfuCIseG1hcDoi4p+8Iix4bmlzOiLii7siLHhvZG90OiLiqIAiLHhvcGY6IvCdlakiLFhvcGY6IvCdlY8iLHhvcGx1czoi4qiBIix4b3RpbWU6IuKogiIseHJhcnI6IuKftiIseHJBcnI6IuKfuSIseHNjcjoi8J2TjSIsWHNjcjoi8J2SsyIseHNxY3VwOiLiqIYiLHh1cGx1czoi4qiEIix4dXRyaToi4pazIix4dmVlOiLii4EiLHh3ZWRnZToi4ouAIix5YWN1dGU6IsO9IixZYWN1dGU6IsOdIix5YWN5OiLRjyIsWUFjeToi0K8iLHljaXJjOiLFtyIsWWNpcmM6IsW2Iix5Y3k6ItGLIixZY3k6ItCrIix5ZW46IsKlIix5ZnI6IvCdlLYiLFlmcjoi8J2UnCIseWljeToi0ZciLFlJY3k6ItCHIix5b3BmOiLwnZWqIixZb3BmOiLwnZWQIix5c2NyOiLwnZOOIixZc2NyOiLwnZK0Iix5dWN5OiLRjiIsWVVjeToi0K4iLHl1bWw6IsO/IixZdW1sOiLFuCIsemFjdXRlOiLFuiIsWmFjdXRlOiLFuSIsemNhcm9uOiLFviIsWmNhcm9uOiLFvSIsemN5OiLQtyIsWmN5OiLQlyIsemRvdDoixbwiLFpkb3Q6IsW7Iix6ZWV0cmY6IuKEqCIsWmVyb1dpZHRoU3BhY2U6IuKAiyIsemV0YToizrYiLFpldGE6Is6WIix6ZnI6IvCdlLciLFpmcjoi4oSoIix6aGN5OiLQtiIsWkhjeToi0JYiLHppZ3JhcnI6IuKHnSIsem9wZjoi8J2VqyIsWm9wZjoi4oSkIix6c2NyOiLwnZOPIixac2NyOiLwnZK1Iix6d2o6IuKAjSIsenduajoi4oCMIn0sYj17YWFjdXRlOiLDoSIsQWFjdXRlOiLDgSIsYWNpcmM6IsOiIixBY2lyYzoiw4IiLGFjdXRlOiLCtCIsYWVsaWc6IsOmIixBRWxpZzoiw4YiLGFncmF2ZToiw6AiLEFncmF2ZToiw4AiLGFtcDoiJiIsQU1QOiImIixhcmluZzoiw6UiLEFyaW5nOiLDhSIsYXRpbGRlOiLDoyIsQXRpbGRlOiLDgyIsYXVtbDoiw6QiLEF1bWw6IsOEIixicnZiYXI6IsKmIixjY2VkaWw6IsOnIixDY2VkaWw6IsOHIixjZWRpbDoiwrgiLGNlbnQ6IsKiIixjb3B5OiLCqSIsQ09QWToiwqkiLGN1cnJlbjoiwqQiLGRlZzoiwrAiLGRpdmlkZToiw7ciLGVhY3V0ZToiw6kiLEVhY3V0ZToiw4kiLGVjaXJjOiLDqiIsRWNpcmM6IsOKIixlZ3JhdmU6IsOoIixFZ3JhdmU6IsOIIixldGg6IsOwIixFVEg6IsOQIixldW1sOiLDqyIsRXVtbDoiw4siLGZyYWMxMjoiwr0iLGZyYWMxNDoiwrwiLGZyYWMzNDoiwr4iLGd0OiI+IixHVDoiPiIsaWFjdXRlOiLDrSIsSWFjdXRlOiLDjSIsaWNpcmM6IsOuIixJY2lyYzoiw44iLGlleGNsOiLCoSIsaWdyYXZlOiLDrCIsSWdyYXZlOiLDjCIsaXF1ZXN0OiLCvyIsaXVtbDoiw68iLEl1bWw6IsOPIixsYXF1bzoiwqsiLGx0OiI8IixMVDoiPCIsbWFjcjoiwq8iLG1pY3JvOiLCtSIsbWlkZG90OiLCtyIsbmJzcDoiwqAiLG5vdDoiwqwiLG50aWxkZToiw7EiLE50aWxkZToiw5EiLG9hY3V0ZToiw7MiLE9hY3V0ZToiw5MiLG9jaXJjOiLDtCIsT2NpcmM6IsOUIixvZ3JhdmU6IsOyIixPZ3JhdmU6IsOSIixvcmRmOiLCqiIsb3JkbToiwroiLG9zbGFzaDoiw7giLE9zbGFzaDoiw5giLG90aWxkZToiw7UiLE90aWxkZToiw5UiLG91bWw6IsO2IixPdW1sOiLDliIscGFyYToiwrYiLHBsdXNtbjoiwrEiLHBvdW5kOiLCoyIscXVvdDonIicsUVVPVDonIicscmFxdW86IsK7IixyZWc6IsKuIixSRUc6IsKuIixzZWN0OiLCpyIsc2h5OiLCrSIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3psaWc6IsOfIix0aG9ybjoiw74iLFRIT1JOOiLDniIsdGltZXM6IsOXIix1YWN1dGU6IsO6IixVYWN1dGU6IsOaIix1Y2lyYzoiw7siLFVjaXJjOiLDmyIsdWdyYXZlOiLDuSIsVWdyYXZlOiLDmSIsdW1sOiLCqCIsdXVtbDoiw7wiLFV1bWw6IsOcIix5YWN1dGU6IsO9IixZYWN1dGU6IsOdIix5ZW46IsKlIix5dW1sOiLDvyJ9LGQ9ezA6Iu+/vSIsMTI4OiLigqwiLDEzMDoi4oCaIiwxMzE6IsaSIiwxMzI6IuKAniIsMTMzOiLigKYiLDEzNDoi4oCgIiwxMzU6IuKAoSIsMTM2OiLLhiIsMTM3OiLigLAiLDEzODoixaAiLDEzOToi4oC5IiwxNDA6IsWSIiwxNDI6IsW9IiwxNDU6IuKAmCIsMTQ2OiLigJkiLDE0Nzoi4oCcIiwxNDg6IuKAnSIsMTQ5OiLigKIiLDE1MDoi4oCTIiwxNTE6IuKAlCIsMTUyOiLLnCIsMTUzOiLihKIiLDE1NDoixaEiLDE1NToi4oC6IiwxNTY6IsWTIiwxNTg6IsW+IiwxNTk6IsW4In0sbT1bMSwyLDMsNCw1LDYsNyw4LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDY0OTc2LDY0OTc3LDY0OTc4LDY0OTc5LDY0OTgwLDY0OTgxLDY0OTgyLDY0OTgzLDY0OTg0LDY0OTg1LDY0OTg2LDY0OTg3LDY0OTg4LDY0OTg5LDY0OTkwLDY0OTkxLDY0OTkyLDY0OTkzLDY0OTk0LDY0OTk1LDY0OTk2LDY0OTk3LDY0OTk4LDY0OTk5LDY1ZTMsNjUwMDEsNjUwMDIsNjUwMDMsNjUwMDQsNjUwMDUsNjUwMDYsNjUwMDcsNjU1MzQsNjU1MzUsMTMxMDcwLDEzMTA3MSwxOTY2MDYsMTk2NjA3LDI2MjE0MiwyNjIxNDMsMzI3Njc4LDMyNzY3OSwzOTMyMTQsMzkzMjE1LDQ1ODc1MCw0NTg3NTEsNTI0Mjg2LDUyNDI4Nyw1ODk4MjIsNTg5ODIzLDY1NTM1OCw2NTUzNTksNzIwODk0LDcyMDg5NSw3ODY0MzAsNzg2NDMxLDg1MTk2Niw4NTE5NjcsOTE3NTAyLDkxNzUwMyw5ODMwMzgsOTgzMDM5LDEwNDg1NzQsMTA0ODU3NSwxMTE0MTEwLDExMTQxMTFdLGc9U3RyaW5nLmZyb21DaGFyQ29kZSx5PXt9Lmhhc093blByb3BlcnR5LF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4geS5jYWxsKGUsdCl9LHc9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDt2YXIgbixyPXt9O2ZvcihuIGluIHQpcltuXT1fKGUsbik/ZVtuXTp0W25dO3JldHVybiByfSxFPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NzM0M3x8MTExNDExMTxlPyh0JiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIG91dHNpZGUgdGhlIHBlcm1pc3NpYmxlIFVuaWNvZGUgcmFuZ2UiKSwi77+9Iik6XyhkLGUpPyh0JiZrKCJkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UiKSxkW2VdKToodCYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aDsrK248cjspaWYoZVtuXT09dClyZXR1cm4hMDtyZXR1cm4hMX0obSxlKSYmaygiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIiksNjU1MzU8ZSYmKG4rPWcoKGUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLGU9NTYzMjB8MTAyMyZlKSxuKz1nKGUpKX0sQT1mdW5jdGlvbihlKXtyZXR1cm4iJiN4IitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0seD1mdW5jdGlvbihlKXtyZXR1cm4iJiMiK2UrIjsifSxrPWZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKCJQYXJzZSBlcnJvcjogIitlKX0sQz1mdW5jdGlvbihlLHQpeyh0PXcodCxDLm9wdGlvbnMpKS5zdHJpY3QmJmgudGVzdChlKSYmaygiZm9yYmlkZGVuIGNvZGUgcG9pbnQiKTt2YXIgbj10LmVuY29kZUV2ZXJ5dGhpbmcscj10LnVzZU5hbWVkUmVmZXJlbmNlcyxpPXQuYWxsb3dVbnNhZmVTeW1ib2xzLG89dC5kZWNpbWFsP3g6QSxhPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUuY2hhckNvZGVBdCgwKSl9O3JldHVybiBuPyhlPWUucmVwbGFjZSh1LGZ1bmN0aW9uKGUpe3JldHVybiByJiZfKGYsZSk/IiYiK2ZbZV0rIjsiOmEoZSl9KSxyJiYoZT1lLnJlcGxhY2UoLyZndDtcdTIwRDIvZywiJm52Z3Q7IikucmVwbGFjZSgvJmx0O1x1MjBEMi9nLCImbnZsdDsiKS5yZXBsYWNlKC8mI3g2NjsmI3g2QTsvZywiJmZqbGlnOyIpKSxyJiYoZT1lLnJlcGxhY2UoYyxmdW5jdGlvbihlKXtyZXR1cm4iJiIrZltlXSsiOyJ9KSkpOnI/KGl8fChlPWUucmVwbGFjZShwLGZ1bmN0aW9uKGUpe3JldHVybiImIitmW2VdKyI7In0pKSxlPShlPWUucmVwbGFjZSgvJmd0O1x1MjBEMi9nLCImbnZndDsiKS5yZXBsYWNlKC8mbHQ7XHUyMEQyL2csIiZudmx0OyIpKS5yZXBsYWNlKGMsZnVuY3Rpb24oZSl7cmV0dXJuIiYiK2ZbZV0rIjsifSkpOml8fChlPWUucmVwbGFjZShwLGEpKSxlLnJlcGxhY2UocyxmdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCksbj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIG8oMTAyNCoodC01NTI5Nikrbi01NjMyMCs2NTUzNil9KS5yZXBsYWNlKGwsYSl9O0Mub3B0aW9ucz17YWxsb3dVbnNhZmVTeW1ib2xzOiExLGVuY29kZUV2ZXJ5dGhpbmc6ITEsc3RyaWN0OiExLHVzZU5hbWVkUmVmZXJlbmNlczohMSxkZWNpbWFsOiExfTt2YXIgTz1mdW5jdGlvbihlLG0pe3ZhciBnPShtPXcobSxPLm9wdGlvbnMpKS5zdHJpY3Q7cmV0dXJuIGcmJm8udGVzdChlKSYmaygibWFsZm9ybWVkIGNoYXJhY3RlciByZWZlcmVuY2UiKSxlLnJlcGxhY2UoYSxmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsdSl7dmFyIGwsYyxmLHAsaCxkO3JldHVybiB0P3ZbaD10XTpuPyhoPW4sKGQ9cikmJm0uaXNBdHRyaWJ1dGVWYWx1ZT8oZyYmIj0iPT1kJiZrKCJgJmAgZGlkIG5vdCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UiKSxlKTooZyYmaygibmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24iKSxiW2hdKyhkfHwiIikpKTppPyhmPWksYz1vLGcmJiFjJiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbiIpLGw9cGFyc2VJbnQoZiwxMCksRShsLGcpKTphPyhwPWEsYz1zLGcmJiFjJiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbiIpLGw9cGFyc2VJbnQocCwxNiksRShsLGcpKTooZyYmaygibmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24iKSxlKX0pfTtPLm9wdGlvbnM9e2lzQXR0cmlidXRlVmFsdWU6ITEsc3RyaWN0OiExfTt2YXIgUz17dmVyc2lvbjoiMS4yLjAiLGVuY29kZTpDLGRlY29kZTpPLGVzY2FwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHAsZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV19KX0sdW5lc2NhcGU6T307aWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmIm9iamVjdCI9PXR5cGVvZiBkZWZpbmUuYW1kJiZkZWZpbmUuYW1kKWRlZmluZShmdW5jdGlvbigpe3JldHVybiBTfSk7ZWxzZSBpZih0JiYhdC5ub2RlVHlwZSlpZihuKW4uZXhwb3J0cz1TO2Vsc2UgZm9yKHZhciBEIGluIFMpXyhTLEQpJiYodFtEXT1TW0RdKTtlbHNlIGUuaGU9U30odGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwxMDQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJodHRwIiksaT1lKCJ1cmwiKSxvPXQuZXhwb3J0cztmb3IodmFyIGEgaW4gcilyLmhhc093blByb3BlcnR5KGEpJiYob1thXT1yW2FdKTtmdW5jdGlvbiBzKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aS5wYXJzZShlKSksZS5wcm90b2NvbHx8KGUucHJvdG9jb2w9Imh0dHBzOiIpLCJodHRwczoiIT09ZS5wcm90b2NvbCl0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvY29sICInK2UucHJvdG9jb2wrJyIgbm90IHN1cHBvcnRlZC4gRXhwZWN0ZWQgImh0dHBzOiInKTtyZXR1cm4gZX1vLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1zKGUpLHIucmVxdWVzdC5jYWxsKHRoaXMsZSx0KX0sby5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1zKGUpLHIuZ2V0LmNhbGwodGhpcyxlLHQpfX0se2h0dHA6MTU2LHVybDoxNjJ9XSwxMDU6W2Z1bmN0aW9uKGUsdCxuKXtuLnJlYWQ9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHM9OCppLXItMSx1PSgxPDxzKS0xLGw9dT4+MSxjPS03LGY9bj9pLTE6MCxwPW4/LTE6MSxoPWVbdCtmXTtmb3IoZis9cCxvPWgmKDE8PC1jKS0xLGg+Pj0tYyxjKz1zOzA8YztvPTI1NipvK2VbdCtmXSxmKz1wLGMtPTgpO2ZvcihhPW8mKDE8PC1jKS0xLG8+Pj0tYyxjKz1yOzA8YzthPTI1NiphK2VbdCtmXSxmKz1wLGMtPTgpO2lmKDA9PT1vKW89MS1sO2Vsc2V7aWYobz09PXUpcmV0dXJuIGE/TmFOOjEvMCooaD8tMToxKTthKz1NYXRoLnBvdygyLHIpLG8tPWx9cmV0dXJuKGg/LTE6MSkqYSpNYXRoLnBvdygyLG8tcil9LG4ud3JpdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhLHMsdSxsPTgqby1pLTEsYz0oMTw8bCktMSxmPWM+PjEscD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGg9cj8wOm8tMSxkPXI/MTotMSxtPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsYT1jKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLHUqPTIpLDI8PSh0Kz0xPD1hK2Y/cC91OnAqTWF0aC5wb3coMiwxLWYpKSp1JiYoYSsrLHUvPTIpLGM8PWErZj8ocz0wLGE9Yyk6MTw9YStmPyhzPSh0KnUtMSkqTWF0aC5wb3coMixpKSxhKz1mKToocz10Kk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLGE9MCkpOzg8PWk7ZVtuK2hdPTI1NSZzLGgrPWQscy89MjU2LGktPTgpO2ZvcihhPWE8PGl8cyxsKz1pOzA8bDtlW24raF09MjU1JmEsaCs9ZCxhLz0yNTYsbC09OCk7ZVtuK2gtZF18PTEyOCptfX0se31dLDEwNjpbZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQ7dmFyIG49ZnVuY3Rpb24oKXt9O24ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fSx7fV0sMTA3OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKHIoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmcihlLnNsaWNlKDAsMCkpfShlKXx8ISFlLl9pc0J1ZmZlcil9fSx7fV0sMTA4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXIuY2FsbChlKX19LHt9XSwxMDk6W2Z1bmN0aW9uKGUsdCxuKXtuLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxuLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhdGlvbj9sb2NhdGlvbi5ob3N0bmFtZToiIn0sbi5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LG4udXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LG4uZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxuLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LG4uY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxuLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LG4ucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxuLm5ldHdvcmtJbnRlcmZhY2VzPW4uZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sbi5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxuLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxuLnRtcGRpcj1uLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sbi5FT0w9IlxuIixuLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSx7fV0sMTEwOltmdW5jdGlvbihlLHQsbCl7KGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTE7MDw9cjtyLS0pe3ZhciBpPWVbcl07Ii4iPT09aT9lLnNwbGljZShyLDEpOiIuLiI9PT1pPyhlLnNwbGljZShyLDEpLG4rKyk6biYmKGUuc3BsaWNlKHIsMSksbi0tKX1pZih0KWZvcig7bi0tO24pZS51bnNoaWZ0KCIuLiIpO3JldHVybiBlfWZ1bmN0aW9uIGEoZSx0KXtpZihlLmZpbHRlcilyZXR1cm4gZS5maWx0ZXIodCk7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0KGVbcl0scixlKSYmbi5wdXNoKGVbcl0pO3JldHVybiBufWwucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIix0PSExLG49YXJndW1lbnRzLmxlbmd0aC0xOy0xPD1uJiYhdDtuLS0pe3ZhciByPTA8PW4/YXJndW1lbnRzW25dOmkuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7ciYmKGU9cisiLyIrZSx0PSIvIj09PXIuY2hhckF0KDApKX1yZXR1cm4odD8iLyI6IiIpKyhlPW8oYShlLnNwbGl0KCIvIiksZnVuY3Rpb24oZSl7cmV0dXJuISFlfSksIXQpLmpvaW4oIi8iKSl8fCIuIn0sbC5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9bC5pc0Fic29sdXRlKGUpLG49Ii8iPT09cihlLC0xKTtyZXR1cm4oZT1vKGEoZS5zcGxpdCgiLyIpLGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pLCF0KS5qb2luKCIvIikpfHx0fHwoZT0iLiIpLGUmJm4mJihlKz0iLyIpLCh0PyIvIjoiIikrZX0sbC5pc0Fic29sdXRlPWZ1bmN0aW9uKGUpe3JldHVybiIvIj09PWUuY2hhckF0KDApfSxsLmpvaW49ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGwubm9ybWFsaXplKGEoZSxmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO3JldHVybiBlfSkuam9pbigiLyIpKX0sbC5yZWxhdGl2ZT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aCYmIiI9PT1lW3RdO3QrKyk7Zm9yKHZhciBuPWUubGVuZ3RoLTE7MDw9biYmIiI9PT1lW25dO24tLSk7cmV0dXJuIG48dD9bXTplLnNsaWNlKHQsbi10KzEpfWU9bC5yZXNvbHZlKGUpLnN1YnN0cigxKSx0PWwucmVzb2x2ZSh0KS5zdWJzdHIoMSk7Zm9yKHZhciByPW4oZS5zcGxpdCgiLyIpKSxpPW4odC5zcGxpdCgiLyIpKSxvPU1hdGgubWluKHIubGVuZ3RoLGkubGVuZ3RoKSxhPW8scz0wO3M8bztzKyspaWYocltzXSE9PWlbc10pe2E9czticmVha312YXIgdT1bXTtmb3Iocz1hO3M8ci5sZW5ndGg7cysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChpLnNsaWNlKGEpKSkuam9pbigiLyIpfSxsLnNlcD0iLyIsbC5kZWxpbWl0ZXI9IjoiLGwuZGlybmFtZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihlKz0iIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG49NDc9PT10LHI9LTEsaT0hMCxvPWUubGVuZ3RoLTE7MTw9bzstLW8paWYoNDc9PT0odD1lLmNoYXJDb2RlQXQobykpKXtpZighaSl7cj1vO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6ZS5zbGljZSgwLHIpfSxsLmJhc2VuYW1lPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7InN0cmluZyIhPXR5cGVvZiBlJiYoZSs9IiIpO3ZhciB0LG49MCxyPS0xLGk9ITA7Zm9yKHQ9ZS5sZW5ndGgtMTswPD10Oy0tdClpZig0Nz09PWUuY2hhckNvZGVBdCh0KSl7aWYoIWkpe249dCsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPXQrMSk7cmV0dXJuLTE9PT1yPyIiOmUuc2xpY2UobixyKX0oZSk7cmV0dXJuIHQmJm4uc3Vic3RyKC0xKnQubGVuZ3RoKT09PXQmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtdC5sZW5ndGgpKSxufSxsLmV4dG5hbWU9ZnVuY3Rpb24oZSl7InN0cmluZyIhPXR5cGVvZiBlJiYoZSs9IiIpO2Zvcih2YXIgdD0tMSxuPTAscj0tMSxpPSEwLG89MCxhPWUubGVuZ3RoLTE7MDw9YTstLWEpe3ZhciBzPWUuY2hhckNvZGVBdChhKTtpZig0Nz09PXMpe2lmKGkpY29udGludWU7bj1hKzE7YnJlYWt9LTE9PT1yJiYoaT0hMSxyPWErMSksNDY9PT1zPy0xPT09dD90PWE6MSE9PW8mJihvPTEpOi0xIT09dCYmKG89LTEpfXJldHVybi0xPT09dHx8LTE9PT1yfHwwPT09b3x8MT09PW8mJnQ9PT1yLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHIpfTt2YXIgcj0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnN1YnN0cih0LG4pfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ8MCYmKHQ9ZS5sZW5ndGgrdCksZS5zdWJzdHIodCxuKX19KS5jYWxsKHRoaXMsZSgiX3Byb2Nlc3MiKSl9LHtfcHJvY2VzczoxMTJ9XSwxMTE6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24ocyl7InVzZSBzdHJpY3QiOyFzLnZlcnNpb258fDA9PT1zLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1zLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1zLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT90LmV4cG9ydHM9e25leHRUaWNrOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIGksbyxhPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHMubmV4dFRpY2soZSk7Y2FzZSAyOnJldHVybiBzLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwsdCl9KTtjYXNlIDM6cmV0dXJuIHMubmV4dFRpY2soZnVuY3Rpb24oKXtlLmNhbGwobnVsbCx0LG4pfSk7Y2FzZSA0OnJldHVybiBzLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwsdCxuLHIpfSk7ZGVmYXVsdDpmb3IoaT1uZXcgQXJyYXkoYS0xKSxvPTA7bzxpLmxlbmd0aDspaVtvKytdPWFyZ3VtZW50c1tvXTtyZXR1cm4gcy5uZXh0VGljayhmdW5jdGlvbigpe2UuYXBwbHkobnVsbCxpKX0pfX19OnQuZXhwb3J0cz1zfSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6MTEyfV0sMTEyOltmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gdSh0KXtpZihyPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChyPT09YXx8IXIpJiZzZXRUaW1lb3V0KXJldHVybiByPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gcih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtyPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaChlKXtyPWF9dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaChlKXtpPXN9fSgpO3ZhciBsLGM9W10sZj0hMSxwPS0xO2Z1bmN0aW9uIGgoKXtmJiZsJiYoZj0hMSxsLmxlbmd0aD9jPWwuY29uY2F0KGMpOnA9LTEsYy5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgZT11KGgpO2Y9ITA7Zm9yKHZhciB0PWMubGVuZ3RoO3Q7KXtmb3IobD1jLGM9W107KytwPHQ7KWwmJmxbcF0ucnVuKCk7cD0tMSx0PWMubGVuZ3RofWw9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0oZSl9fWZ1bmN0aW9uIG0oZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBnKCl7fW8ubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtjLnB1c2gobmV3IG0oZSx0KSksMSE9PWMubGVuZ3RofHxmfHx1KGQpfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxvLnRpdGxlPSJicm93c2VyIixvLmJyb3dzZXI9ITAsby5lbnY9e30sby5hcmd2PVtdLG8udmVyc2lvbj0iIixvLnZlcnNpb25zPXt9LG8ub249ZyxvLmFkZExpc3RlbmVyPWcsby5vbmNlPWcsby5vZmY9ZyxvLnJlbW92ZUxpc3RlbmVyPWcsby5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxvLmVtaXQ9ZyxvLnByZXBlbmRMaXN0ZW5lcj1nLG8ucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLG8ubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxvLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxvLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sby5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxvLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sMTEzOltmdW5jdGlvbihlLFIsTCl7KGZ1bmN0aW9uKEIpeyFmdW5jdGlvbihlKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiFMLm5vZGVUeXBlJiZMLG49Im9iamVjdCI9PXR5cGVvZiBSJiZSJiYhUi5ub2RlVHlwZSYmUixyPSJvYmplY3QiPT10eXBlb2YgQiYmQjtyLmdsb2JhbCE9PXImJnIud2luZG93IT09ciYmci5zZWxmIT09cnx8KGU9cik7dmFyIGksbyx2PTIxNDc0ODM2NDcsYj0zNix5PTEsXz0yNixhPTM4LHM9NzAwLHc9NzIsRT0xMjgsQT0iLSIsdT0vXnhuLS0vLGw9L1teXHgyMC1ceDdFXS8sYz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csZj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0scD1iLXkseD1NYXRoLmZsb29yLGs9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBDKGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKGZbZV0pfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj1bXTtuLS07KXJbbl09dChlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBkKGUsdCl7dmFyIG49ZS5zcGxpdCgiQCIpLHI9IiI7cmV0dXJuIDE8bi5sZW5ndGgmJihyPW5bMF0rIkAiLGU9blsxXSkscitoKChlPWUucmVwbGFjZShjLCIuIikpLnNwbGl0KCIuIiksdCkuam9pbigiLiIpfWZ1bmN0aW9uIE8oZSl7Zm9yKHZhciB0LG4scj1bXSxpPTAsbz1lLmxlbmd0aDtpPG87KTU1Mjk2PD0odD1lLmNoYXJDb2RlQXQoaSsrKSkmJnQ8PTU2MzE5JiZpPG8/NTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsrKSkpP3IucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZuKSs2NTUzNik6KHIucHVzaCh0KSxpLS0pOnIucHVzaCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBTKGUpe3JldHVybiBoKGUsZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIDY1NTM1PGUmJih0Kz1rKChlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxlPTU2MzIwfDEwMjMmZSksdCs9ayhlKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gZSsyMis3NSooZTwyNiktKCgwIT10KTw8NSl9ZnVuY3Rpb24gVChlLHQsbil7dmFyIHI9MDtmb3IoZT1uP3goZS9zKTplPj4xLGUrPXgoZS90KTtwKl8+PjE8ZTtyKz1iKWU9eChlL3ApO3JldHVybiB4KHIrKHArMSkqZS8oZSthKSl9ZnVuY3Rpb24gbShlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGwsYyxmLHA9W10saD1lLmxlbmd0aCxkPTAsbT1FLGc9dztmb3IoKG49ZS5sYXN0SW5kZXhPZihBKSk8MCYmKG49MCkscj0wO3I8bjsrK3IpMTI4PD1lLmNoYXJDb2RlQXQocikmJkMoIm5vdC1iYXNpYyIpLHAucHVzaChlLmNoYXJDb2RlQXQocikpO2ZvcihpPTA8bj9uKzE6MDtpPGg7KXtmb3Iobz1kLGE9MSxzPWI7aDw9aSYmQygiaW52YWxpZC1pbnB1dCIpLGY9ZS5jaGFyQ29kZUF0KGkrKyksKGI8PSh1PWYtNDg8MTA/Zi0yMjpmLTY1PDI2P2YtNjU6Zi05NzwyNj9mLTk3OmIpfHx1PngoKHYtZCkvYSkpJiZDKCJvdmVyZmxvdyIpLGQrPXUqYSwhKHU8KGw9czw9Zz95OmcrXzw9cz9fOnMtZykpO3MrPWIpYT54KHYvKGM9Yi1sKSkmJkMoIm92ZXJmbG93IiksYSo9YztnPVQoZC1vLHQ9cC5sZW5ndGgrMSwwPT1vKSx4KGQvdCk+di1tJiZDKCJvdmVyZmxvdyIpLG0rPXgoZC90KSxkJT10LHAuc3BsaWNlKGQrKywwLG0pfXJldHVybiBTKHApfWZ1bmN0aW9uIGcoZSl7dmFyIHQsbixyLGksbyxhLHMsdSxsLGMsZixwLGgsZCxtLGc9W107Zm9yKHA9KGU9TyhlKSkubGVuZ3RoLHQ9RSxvPXcsYT1uPTA7YTxwOysrYSkoZj1lW2FdKTwxMjgmJmcucHVzaChrKGYpKTtmb3Iocj1pPWcubGVuZ3RoLGkmJmcucHVzaChBKTtyPHA7KXtmb3Iocz12LGE9MDthPHA7KythKXQ8PShmPWVbYV0pJiZmPHMmJihzPWYpO2ZvcihzLXQ+eCgodi1uKS8oaD1yKzEpKSYmQygib3ZlcmZsb3ciKSxuKz0ocy10KSpoLHQ9cyxhPTA7YTxwOysrYSlpZigoZj1lW2FdKTx0JiYrK24+diYmQygib3ZlcmZsb3ciKSxmPT10KXtmb3IodT1uLGw9YjshKHU8KGM9bDw9bz95Om8rXzw9bD9fOmwtbykpO2wrPWIpbT11LWMsZD1iLWMsZy5wdXNoKGsoRChjK20lZCwwKSkpLHU9eChtL2QpO2cucHVzaChrKEQodSwwKSkpLG89VChuLGgscj09aSksbj0wLCsrcn0rK24sKyt0fXJldHVybiBnLmpvaW4oIiIpfWlmKGk9e3ZlcnNpb246IjEuNC4xIix1Y3MyOntkZWNvZGU6TyxlbmNvZGU6U30sZGVjb2RlOm0sZW5jb2RlOmcsdG9BU0NJSTpmdW5jdGlvbihlKXtyZXR1cm4gZChlLGZ1bmN0aW9uKGUpe3JldHVybiBsLnRlc3QoZSk/InhuLS0iK2coZSk6ZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSxmdW5jdGlvbihlKXtyZXR1cm4gdS50ZXN0KGUpP20oZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTplfSl9fSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiYib2JqZWN0Ij09dHlwZW9mIGRlZmluZS5hbWQmJmRlZmluZS5hbWQpZGVmaW5lKCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO2Vsc2UgaWYodCYmbilpZihSLmV4cG9ydHM9PXQpbi5leHBvcnRzPWk7ZWxzZSBmb3IobyBpbiBpKWkuaGFzT3duUHJvcGVydHkobykmJih0W29dPWlbb10pO2Vsc2UgZS5wdW55Y29kZT1pfSh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDExNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dD10fHwiJiIsbj1ufHwiPSI7dmFyIGk9e307aWYoInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpcmV0dXJuIGk7dmFyIG89L1wrL2c7ZT1lLnNwbGl0KHQpO3ZhciBhPTFlMztyJiYibnVtYmVyIj09dHlwZW9mIHIubWF4S2V5cyYmKGE9ci5tYXhLZXlzKTt2YXIgcyx1LGw9ZS5sZW5ndGg7MDxhJiZhPGwmJihsPWEpO2Zvcih2YXIgYz0wO2M8bDsrK2Mpe3ZhciBmLHAsaCxkLG09ZVtjXS5yZXBsYWNlKG8sIiUyMCIpLGc9bS5pbmRleE9mKG4pO3A9MDw9Zz8oZj1tLnN1YnN0cigwLGcpLG0uc3Vic3RyKGcrMSkpOihmPW0sIiIpLGg9ZGVjb2RlVVJJQ29tcG9uZW50KGYpLGQ9ZGVjb2RlVVJJQ29tcG9uZW50KHApLHM9aSx1PWgsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsdSk/dihpW2hdKT9pW2hdLnB1c2goZCk6aVtoXT1baVtoXSxkXTppW2hdPWR9cmV0dXJuIGl9O3ZhciB2PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9fSx7fV0sMTE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBvPWZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBlO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShlKT9lOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fTt0LmV4cG9ydHM9ZnVuY3Rpb24obixyLGksZSl7cmV0dXJuIHI9cnx8IiYiLGk9aXx8Ij0iLG51bGw9PT1uJiYobj12b2lkIDApLCJvYmplY3QiPT10eXBlb2Ygbj9zKHUobiksZnVuY3Rpb24oZSl7dmFyIHQ9ZW5jb2RlVVJJQ29tcG9uZW50KG8oZSkpK2k7cmV0dXJuIGEobltlXSk/cyhuW2VdLGZ1bmN0aW9uKGUpe3JldHVybiB0K2VuY29kZVVSSUNvbXBvbmVudChvKGUpKX0pLmpvaW4ocik6dCtlbmNvZGVVUklDb21wb25lbnQobyhuW2VdKSl9KS5qb2luKHIpOmU/ZW5jb2RlVVJJQ29tcG9uZW50KG8oZSkpK2krZW5jb2RlVVJJQ29tcG9uZW50KG8obikpOiIifTt2YXIgYT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfTtmdW5jdGlvbiBzKGUsdCl7aWYoZS5tYXApcmV0dXJuIGUubWFwKHQpO2Zvcih2YXIgbj1bXSxyPTA7cjxlLmxlbmd0aDtyKyspbi5wdXNoKHQoZVtyXSxyKSk7cmV0dXJuIG59dmFyIHU9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9fSx7fV0sMTE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZGVjb2RlPW4ucGFyc2U9ZSgiLi9kZWNvZGUiKSxuLmVuY29kZT1uLnN0cmluZ2lmeT1lKCIuL2VuY29kZSIpfSx7Ii4vZGVjb2RlIjoxMTQsIi4vZW5jb2RlIjoxMTV9XSwxMTc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiKSxpPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHR9O3QuZXhwb3J0cz1mO3ZhciBvPWUoImNvcmUtdXRpbC1pcyIpO28uaW5oZXJpdHM9ZSgiaW5oZXJpdHMiKTt2YXIgYT1lKCIuL19zdHJlYW1fcmVhZGFibGUiKSxzPWUoIi4vX3N0cmVhbV93cml0YWJsZSIpO28uaW5oZXJpdHMoZixhKTtmb3IodmFyIHU9aShzLnByb3RvdHlwZSksbD0wO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2YucHJvdG90eXBlW2NdfHwoZi5wcm90b3R5cGVbY109cy5wcm90b3R5cGVbY10pfWZ1bmN0aW9uIGYoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBmKGUpO2EuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGUmJiExPT09ZS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLGUmJiExPT09ZS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYhMT09PWUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLHApfWZ1bmN0aW9uIHAoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHIubmV4dFRpY2soaCx0aGlzKX1mdW5jdGlvbiBoKGUpe2UuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCl9LHNldDpmdW5jdGlvbihlKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxmLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLHIubmV4dFRpY2sodCxlKX19LHsiLi9fc3RyZWFtX3JlYWRhYmxlIjoxMTksIi4vX3N0cmVhbV93cml0YWJsZSI6MTIxLCJjb3JlLXV0aWwtaXMiOjEwMSxpbmhlcml0czoxMDYsInByb2Nlc3MtbmV4dGljay1hcmdzIjoxMTF9XSwxMTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPW87dmFyIHI9ZSgiLi9fc3RyZWFtX3RyYW5zZm9ybSIpLGk9ZSgiY29yZS11dGlsLWlzIik7ZnVuY3Rpb24gbyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSk7ci5jYWxsKHRoaXMsZSl9aS5pbmhlcml0cz1lKCJpbmhlcml0cyIpLGkuaW5oZXJpdHMobyxyKSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXtuKG51bGwsZSl9fSx7Ii4vX3N0cmVhbV90cmFuc2Zvcm0iOjEyMCwiY29yZS11dGlsLWlzIjoxMDEsaW5oZXJpdHM6MTA2fV0sMTE5OltmdW5jdGlvbihMLEYsZSl7KGZ1bmN0aW9uKG0sZSl7InVzZSBzdHJpY3QiO3ZhciBnPUwoInByb2Nlc3MtbmV4dGljay1hcmdzIik7Ri5leHBvcnRzPXA7dmFyIGEsdj1MKCJpc2FycmF5Iik7cC5SZWFkYWJsZVN0YXRlPW87TCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO3ZhciBiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGlzdGVuZXJzKHQpLmxlbmd0aH0saT1MKCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIikscz1MKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcix1PWUuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciB0PUwoImNvcmUtdXRpbC1pcyIpO3QuaW5oZXJpdHM9TCgiaW5oZXJpdHMiKTt2YXIgbj1MKCJ1dGlsIikseT12b2lkIDA7eT1uJiZuLmRlYnVnbG9nP24uZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgbCxjPUwoIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Iikscj1MKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO3QuaW5oZXJpdHMocCxpKTt2YXIgZj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBvKGUsdCl7ZT1lfHx7fTt2YXIgbj10IGluc3RhbmNlb2YoYT1hfHxMKCIuL19zdHJlYW1fZHVwbGV4IikpO3RoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxuJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIHI9ZS5oaWdoV2F0ZXJNYXJrLGk9ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcmssbz10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPXJ8fDA9PT1yP3I6biYmKGl8fDA9PT1pKT9pOm8sdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgYyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxlLmVuY29kaW5nJiYobHx8KGw9TCgic3RyaW5nX2RlY29kZXIvIikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBsKGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9ZS5lbmNvZGluZyl9ZnVuY3Rpb24gcChlKXtpZihhPWF8fEwoIi4vX3N0cmVhbV9kdXBsZXgiKSwhKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgbyhlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSksaS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGgoZSx0LG4scixpKXt2YXIgbyxhPWUuX3JlYWRhYmxlU3RhdGU7bnVsbD09PXQ/KGEucmVhZGluZz0hMSxmdW5jdGlvbihlLHQpe2lmKHQuZW5kZWQpcmV0dXJuO2lmKHQuZGVjb2Rlcil7dmFyIG49dC5kZWNvZGVyLmVuZCgpO24mJm4ubGVuZ3RoJiYodC5idWZmZXIucHVzaChuKSx0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGgpfXQuZW5kZWQ9ITAsRShlKX0oZSxhKSk6KGl8fChvPWZ1bmN0aW9uKGUsdCl7dmFyIG47KGZ1bmN0aW9uKGUpe3JldHVybiBzLmlzQnVmZmVyKGUpfHxlIGluc3RhbmNlb2YgdX0pKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fHZvaWQgMD09PXR8fGUub2JqZWN0TW9kZXx8KG49bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKTtyZXR1cm4gbn0oYSx0KSksbz9lLmVtaXQoImVycm9yIixvKTphLm9iamVjdE1vZGV8fHQmJjA8dC5sZW5ndGg/KCJzdHJpbmciPT10eXBlb2YgdHx8YS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1zLnByb3RvdHlwZXx8KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZnJvbShlKX0odCkpLHI/YS5lbmRFbWl0dGVkP2UuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6ZChlLGEsdCwhMCk6YS5lbmRlZD9lLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihhLnJlYWRpbmc9ITEsYS5kZWNvZGVyJiYhbj8odD1hLmRlY29kZXIud3JpdGUodCksYS5vYmplY3RNb2RlfHwwIT09dC5sZW5ndGg/ZChlLGEsdCwhMSk6eChlLGEpKTpkKGUsYSx0LCExKSkpOnJ8fChhLnJlYWRpbmc9ITEpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIWUuZW5kZWQmJihlLm5lZWRSZWFkYWJsZXx8ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHwwPT09ZS5sZW5ndGgpfShhKX1mdW5jdGlvbiBkKGUsdCxuLHIpe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jPyhlLmVtaXQoImRhdGEiLG4pLGUucmVhZCgwKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmRShlKSkseChlLHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLHAucHJvdG90eXBlLmRlc3Ryb3k9ci5kZXN0cm95LHAucHJvdG90eXBlLl91bmRlc3Ryb3k9ci51bmRlc3Ryb3kscC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2gobnVsbCksdChlKX0scC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gci5vYmplY3RNb2RlP249ITA6InN0cmluZyI9PXR5cGVvZiBlJiYoKHQ9dHx8ci5kZWZhdWx0RW5jb2RpbmcpIT09ci5lbmNvZGluZyYmKGU9cy5mcm9tKGUsdCksdD0iIiksbj0hMCksaCh0aGlzLGUsdCwhMSxuKX0scC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXtyZXR1cm4gaCh0aGlzLGUsbnVsbCwhMCwhMSl9LHAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHAucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsfHwobD1MKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IGwoZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz1lLHRoaXN9O3ZhciBfPTgzODg2MDg7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/MDp0Lm9iamVjdE1vZGU/MTplIT1lP3QuZmxvd2luZyYmdC5sZW5ndGg/dC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp0Lmxlbmd0aDooZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIF88PWU/ZT1fOihlLS0sZXw9ZT4+PjEsZXw9ZT4+PjIsZXw9ZT4+PjQsZXw9ZT4+PjgsZXw9ZT4+PjE2LGUrKyksZX0oZSkpLGU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTt0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KHkoImVtaXRSZWFkYWJsZSIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCx0LnN5bmM/Zy5uZXh0VGljayhBLGUpOkEoZSkpfWZ1bmN0aW9uIEEoZSl7eSgiZW1pdCByZWFkYWJsZSIpLGUuZW1pdCgicmVhZGFibGUiKSxTKGUpfWZ1bmN0aW9uIHgoZSx0KXt0LnJlYWRpbmdNb3JlfHwodC5yZWFkaW5nTW9yZT0hMCxnLm5leHRUaWNrKGssZSx0KSl9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aDshdC5yZWFkaW5nJiYhdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrJiYoeSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxlLnJlYWQoMCksbiE9PXQubGVuZ3RoKTspbj10Lmxlbmd0aDt0LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEMoZSl7eSgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksZS5yZWFkKDApfWZ1bmN0aW9uIE8oZSx0KXt0LnJlYWRpbmd8fCh5KCJyZXN1bWUgcmVhZCAwIiksZS5yZWFkKDApKSx0LnJlc3VtZVNjaGVkdWxlZD0hMSx0LmF3YWl0RHJhaW49MCxlLmVtaXQoInJlc3VtZSIpLFMoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2Zvcih5KCJmbG93Iix0LmZsb3dpbmcpO3QuZmxvd2luZyYmbnVsbCE9PWUucmVhZCgpOyk7fWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gMD09PXQubGVuZ3RoP251bGw6KHQub2JqZWN0TW9kZT9uPXQuYnVmZmVyLnNoaWZ0KCk6IWV8fGU+PXQubGVuZ3RoPyhuPXQuZGVjb2Rlcj90LmJ1ZmZlci5qb2luKCIiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YTp0LmJ1ZmZlci5jb25jYXQodC5sZW5ndGgpLHQuYnVmZmVyLmNsZWFyKCkpOm49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U8dC5oZWFkLmRhdGEubGVuZ3RoPyhyPXQuaGVhZC5kYXRhLnNsaWNlKDAsZSksdC5oZWFkLmRhdGE9dC5oZWFkLmRhdGEuc2xpY2UoZSkpOnI9ZT09PXQuaGVhZC5kYXRhLmxlbmd0aD90LnNoaWZ0KCk6bj9mdW5jdGlvbihlLHQpe3ZhciBuPXQuaGVhZCxyPTEsaT1uLmRhdGE7ZS09aS5sZW5ndGg7Zm9yKDtuPW4ubmV4dDspe3ZhciBvPW4uZGF0YSxhPWU+by5sZW5ndGg/by5sZW5ndGg6ZTtpZihhPT09by5sZW5ndGg/aSs9bzppKz1vLnNsaWNlKDAsZSksMD09PShlLT1hKSl7YT09PW8ubGVuZ3RoPygrK3Isbi5uZXh0P3QuaGVhZD1uLm5leHQ6dC5oZWFkPXQudGFpbD1udWxsKToodC5oZWFkPW4pLmRhdGE9by5zbGljZShhKTticmVha30rK3J9cmV0dXJuIHQubGVuZ3RoLT1yLGl9KGUsdCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmFsbG9jVW5zYWZlKGUpLHI9dC5oZWFkLGk9MTtyLmRhdGEuY29weShuKSxlLT1yLmRhdGEubGVuZ3RoO2Zvcig7cj1yLm5leHQ7KXt2YXIgbz1yLmRhdGEsYT1lPm8ubGVuZ3RoP28ubGVuZ3RoOmU7aWYoby5jb3B5KG4sbi5sZW5ndGgtZSwwLGEpLDA9PT0oZS09YSkpe2E9PT1vLmxlbmd0aD8oKytpLHIubmV4dD90LmhlYWQ9ci5uZXh0OnQuaGVhZD10LnRhaWw9bnVsbCk6KHQuaGVhZD1yKS5kYXRhPW8uc2xpY2UoYSk7YnJlYWt9KytpfXJldHVybiB0Lmxlbmd0aC09aSxufShlLHQpO3JldHVybiByfShlLHQuYnVmZmVyLHQuZGVjb2Rlciksbik7dmFyIG59ZnVuY3Rpb24gVChlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2lmKDA8dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLGcubmV4dFRpY2soQix0LGUpKX1mdW5jdGlvbiBCKGUsdCl7ZS5lbmRFbWl0dGVkfHwwIT09ZS5sZW5ndGh8fChlLmVuZEVtaXR0ZWQ9ITAsdC5yZWFkYWJsZT0hMSx0LmVtaXQoImVuZCIpKX1mdW5jdGlvbiBSKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXAucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7eSgicmVhZCIsZSksZT1wYXJzZUludChlLDEwKTt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZigwIT09ZSYmKHQuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ZSYmdC5uZWVkUmVhZGFibGUmJih0Lmxlbmd0aD49dC5oaWdoV2F0ZXJNYXJrfHx0LmVuZGVkKSlyZXR1cm4geSgicmVhZDogZW1pdFJlYWRhYmxlIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/VCh0aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShlPXcoZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmVCh0aGlzKSxudWxsO3ZhciByLGk9dC5uZWVkUmVhZGFibGU7cmV0dXJuIHkoIm5lZWQgcmVhZGFibGUiLGkpLCgwPT09dC5sZW5ndGh8fHQubGVuZ3RoLWU8dC5oaWdoV2F0ZXJNYXJrKSYmeSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGk9ITApLHQuZW5kZWR8fHQucmVhZGluZz95KCJyZWFkaW5nIG9yIGVuZGVkIixpPSExKTppJiYoeSgiZG8gcmVhZCIpLHQucmVhZGluZz0hMCx0LnN5bmM9ITAsMD09PXQubGVuZ3RoJiYodC5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKSx0LnN5bmM9ITEsdC5yZWFkaW5nfHwoZT13KG4sdCkpKSxudWxsPT09KHI9MDxlP0QoZSx0KTpudWxsKT8odC5uZWVkUmVhZGFibGU9ITAsZT0wKTp0Lmxlbmd0aC09ZSwwPT09dC5sZW5ndGgmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLG4hPT1lJiZ0LmVuZGVkJiZUKHRoaXMpKSxudWxsIT09ciYmdGhpcy5lbWl0KCJkYXRhIixyKSxyfSxwLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKG4sZSl7dmFyIHI9dGhpcyxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGkucGlwZXNDb3VudCl7Y2FzZSAwOmkucGlwZXM9bjticmVhaztjYXNlIDE6aS5waXBlcz1baS5waXBlcyxuXTticmVhaztkZWZhdWx0OmkucGlwZXMucHVzaChuKX1pLnBpcGVzQ291bnQrPTEseSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixpLnBpcGVzQ291bnQsZSk7dmFyIHQ9KCFlfHwhMSE9PWUuZW5kKSYmbiE9PW0uc3Rkb3V0JiZuIT09bS5zdGRlcnI/YTpkO2Z1bmN0aW9uIG8oZSx0KXt5KCJvbnVucGlwZSIpLGU9PT1yJiZ0JiYhMT09PXQuaGFzVW5waXBlZCYmKHQuaGFzVW5waXBlZD0hMCx5KCJjbGVhbnVwIiksbi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHApLG4ucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaCksbi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHMpLG4ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixmKSxuLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLG8pLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixkKSxyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixjKSx1PSEwLCFpLmF3YWl0RHJhaW58fG4uX3dyaXRhYmxlU3RhdGUmJiFuLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8cygpKX1mdW5jdGlvbiBhKCl7eSgib25lbmQiKSxuLmVuZCgpfWkuZW5kRW1pdHRlZD9nLm5leHRUaWNrKHQpOnIub25jZSgiZW5kIix0KSxuLm9uKCJ1bnBpcGUiLG8pO3ZhciBzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7eSgicGlwZU9uRHJhaW4iLGUuYXdhaXREcmFpbiksZS5hd2FpdERyYWluJiZlLmF3YWl0RHJhaW4tLSwwPT09ZS5hd2FpdERyYWluJiZiKHQsImRhdGEiKSYmKGUuZmxvd2luZz0hMCxTKHQpKX19KHIpO24ub24oImRyYWluIixzKTt2YXIgdT0hMTt2YXIgbD0hMTtmdW5jdGlvbiBjKGUpe3koIm9uZGF0YSIpLChsPSExKSE9PW4ud3JpdGUoZSl8fGx8fCgoMT09PWkucGlwZXNDb3VudCYmaS5waXBlcz09PW58fDE8aS5waXBlc0NvdW50JiYtMSE9PVIoaS5waXBlcyxuKSkmJiF1JiYoeSgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixyLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pLHIuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrLGw9ITApLHIucGF1c2UoKSl9ZnVuY3Rpb24gZihlKXt5KCJvbmVycm9yIixlKSxkKCksbi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGYpLDA9PT1iKG4sImVycm9yIikmJm4uZW1pdCgiZXJyb3IiLGUpfWZ1bmN0aW9uIHAoKXtuLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGgpLGQoKX1mdW5jdGlvbiBoKCl7eSgib25maW5pc2giKSxuLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscCksZCgpfWZ1bmN0aW9uIGQoKXt5KCJ1bnBpcGUiKSxyLnVucGlwZShuKX1yZXR1cm4gci5vbigiZGF0YSIsYyksZnVuY3Rpb24oZSx0LG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxuKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT92KGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQobik6ZS5fZXZlbnRzW3RdPVtuLGUuX2V2ZW50c1t0XV06ZS5vbih0LG4pfShuLCJlcnJvciIsZiksbi5vbmNlKCJjbG9zZSIscCksbi5vbmNlKCJmaW5pc2giLGgpLG4uZW1pdCgicGlwZSIsciksaS5mbG93aW5nfHwoeSgicGlwZSByZXN1bWUiKSxyLnJlc3VtZSgpKSxufSxwLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxuPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dC5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT10LnBpcGVzQ291bnQpcmV0dXJuIGUmJmUhPT10LnBpcGVzfHwoZXx8KGU9dC5waXBlcyksdC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMSxlJiZlLmVtaXQoInVucGlwZSIsdGhpcyxuKSksdGhpcztpZighZSl7dmFyIHI9dC5waXBlcyxpPXQucGlwZXNDb3VudDt0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspcltvXS5lbWl0KCJ1bnBpcGUiLHRoaXMsbik7cmV0dXJuIHRoaXN9dmFyIGE9Uih0LnBpcGVzLGUpO3JldHVybi0xPT09YXx8KHQucGlwZXMuc3BsaWNlKGEsMSksdC5waXBlc0NvdW50LT0xLDE9PT10LnBpcGVzQ291bnQmJih0LnBpcGVzPXQucGlwZXNbMF0pLGUuZW1pdCgidW5waXBlIix0aGlzLG4pKSx0aGlzfSxwLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1wLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpO2lmKCJkYXRhIj09PWUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09ZSl7dmFyIHI9dGhpcy5fcmVhZGFibGVTdGF0ZTtyLmVuZEVtaXR0ZWR8fHIucmVhZGFibGVMaXN0ZW5pbmd8fChyLnJlYWRhYmxlTGlzdGVuaW5nPXIubmVlZFJlYWRhYmxlPSEwLHIuZW1pdHRlZFJlYWRhYmxlPSExLHIucmVhZGluZz9yLmxlbmd0aCYmRSh0aGlzKTpnLm5leHRUaWNrKEMsdGhpcykpfXJldHVybiBufSxwLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fCh5KCJyZXN1bWUiKSxlLmZsb3dpbmc9ITAsZnVuY3Rpb24oZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLGcubmV4dFRpY2soTyxlLHQpKX0odGhpcyxlKSksdGhpc30scC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4geSgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoeSgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxwLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLGk9ITE7Zm9yKHZhciBlIGluIHQub24oImVuZCIsZnVuY3Rpb24oKXtpZih5KCJ3cmFwcGVkIGVuZCIpLHIuZGVjb2RlciYmIXIuZW5kZWQpe3ZhciBlPXIuZGVjb2Rlci5lbmQoKTtlJiZlLmxlbmd0aCYmbi5wdXNoKGUpfW4ucHVzaChudWxsKX0pLHQub24oImRhdGEiLGZ1bmN0aW9uKGUpeyh5KCJ3cmFwcGVkIGRhdGEiKSxyLmRlY29kZXImJihlPXIuZGVjb2Rlci53cml0ZShlKSksci5vYmplY3RNb2RlJiZudWxsPT1lKXx8KHIub2JqZWN0TW9kZXx8ZSYmZS5sZW5ndGgpJiYobi5wdXNoKGUpfHwoaT0hMCx0LnBhdXNlKCkpKX0pLHQpdm9pZCAwPT09dGhpc1tlXSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0aGlzW2VdPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYXJndW1lbnRzKX19KGUpKTtmb3IodmFyIG89MDtvPGYubGVuZ3RoO28rKyl0Lm9uKGZbb10sdGhpcy5lbWl0LmJpbmQodGhpcyxmW29dKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oZSl7eSgid3JhcHBlZCBfcmVhZCIsZSksaSYmKGk9ITEsdC5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHAuX2Zyb21MaXN0PUR9KS5jYWxsKHRoaXMsTCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL19zdHJlYW1fZHVwbGV4IjoxMTcsIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0IjoxMjIsIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IjoxMjMsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iOjEyNCxfcHJvY2VzczoxMTIsImNvcmUtdXRpbC1pcyI6MTAxLGV2ZW50czoxMDIsaW5oZXJpdHM6MTA2LGlzYXJyYXk6MTA4LCJwcm9jZXNzLW5leHRpY2stYXJncyI6MTExLCJzYWZlLWJ1ZmZlciI6MTQ0LCJzdHJpbmdfZGVjb2Rlci8iOjEyNSx1dGlsOjJ9XSwxMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPW87dmFyIHI9ZSgiLi9fc3RyZWFtX2R1cGxleCIpLGk9ZSgiY29yZS11dGlsLWlzIik7ZnVuY3Rpb24gbyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSk7ci5jYWxsKHRoaXMsZSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7bi50cmFuc2Zvcm1pbmc9ITE7dmFyIHI9bi53cml0ZWNiO2lmKCFyKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTtuLndyaXRlY2h1bms9bnVsbCwobi53cml0ZWNiPW51bGwpIT10JiZ0aGlzLnB1c2godCkscihlKTt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucmVhZGluZz0hMSwoaS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX0uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmZsdXNoJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsYSl9ZnVuY3Rpb24gYSgpe3ZhciBuPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKGUsdCl7cyhuLGUsdCl9KTpzKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBzKGUsdCxuKXtpZih0KXJldHVybiBlLmVtaXQoImVycm9yIix0KTtpZihudWxsIT1uJiZlLnB1c2gobiksZS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihlLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIGUucHVzaChudWxsKX1pLmluaGVyaXRzPWUoImluaGVyaXRzIiksaS5pbmhlcml0cyhvLHIpLG8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxyLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sby5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihyLndyaXRlY2I9bixyLndyaXRlY2h1bms9ZSxyLndyaXRlZW5jb2Rpbmc9dCwhci50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KHIubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LG8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT10LndyaXRlY2h1bmsmJnQud3JpdGVjYiYmIXQudHJhbnNmb3JtaW5nPyh0LnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0odC53cml0ZWNodW5rLHQud3JpdGVlbmNvZGluZyx0LmFmdGVyVHJhbnNmb3JtKSk6dC5uZWVkVHJhbnNmb3JtPSEwfSxvLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ci5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGUsZnVuY3Rpb24oZSl7dChlKSxuLmVtaXQoImNsb3NlIil9KX19LHsiLi9fc3RyZWFtX2R1cGxleCI6MTE3LCJjb3JlLXV0aWwtaXMiOjEwMSxpbmhlcml0czoxMDZ9XSwxMjE6W2Z1bmN0aW9uKEEseCxlKXsoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcz1BKCJwcm9jZXNzLW5leHRpY2stYXJncyIpO2Z1bmN0aW9uIGYoZSl7dmFyIHQ9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZW50cnk7ZS5lbnRyeT1udWxsO2Zvcig7cjspe3ZhciBpPXIuY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKG4pLHI9ci5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlP3QuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1lfSh0LGUpfX14LmV4cG9ydHM9Zzt2YXIgdSxsPSFlLmJyb3dzZXImJi0xPFsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoZS52ZXJzaW9uLnNsaWNlKDAsNSkpP246cy5uZXh0VGljaztnLldyaXRhYmxlU3RhdGU9bTt2YXIgcj1BKCJjb3JlLXV0aWwtaXMiKTtyLmluaGVyaXRzPUEoImluaGVyaXRzIik7dmFyIGk9e2RlcHJlY2F0ZTpBKCJ1dGlsLWRlcHJlY2F0ZSIpfSxvPUEoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxjPUEoInNhZmUtYnVmZmVyIikuQnVmZmVyLGE9dC5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIHAsaD1BKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gbShlLHQpe3U9dXx8QSgiLi9fc3RyZWFtX2R1cGxleCIpLGU9ZXx8e307dmFyIG49dCBpbnN0YW5jZW9mIHU7dGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLG4mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgcj1lLmhpZ2hXYXRlck1hcmssaT1lLndyaXRhYmxlSGlnaFdhdGVyTWFyayxvPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9cnx8MD09PXI/cjpuJiYoaXx8MD09PWkpP2k6byx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExO3ZhciBhPSh0aGlzLmRlc3Ryb3llZD0hMSk9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFhLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl93cml0YWJsZVN0YXRlLHI9bi5zeW5jLGk9bi53cml0ZWNiO2lmKGZ1bmN0aW9uKGUpe2Uud3JpdGluZz0hMSxlLndyaXRlY2I9bnVsbCxlLmxlbmd0aC09ZS53cml0ZWxlbixlLndyaXRlbGVuPTB9KG4pLHQpIWZ1bmN0aW9uKGUsdCxuLHIsaSl7LS10LnBlbmRpbmdjYixuPyhzLm5leHRUaWNrKGkscikscy5uZXh0VGljayhFLGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5lbWl0KCJlcnJvciIscikpOihpKHIpLGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGUuZW1pdCgiZXJyb3IiLHIpLEUoZSx0KSl9KGUsbixyLHQsaSk7ZWxzZXt2YXIgbz1fKG4pO298fG4uY29ya2VkfHxuLmJ1ZmZlclByb2Nlc3Npbmd8fCFuLmJ1ZmZlcmVkUmVxdWVzdHx8eShlLG4pLHI/bChiLGUsbixvLGkpOmIoZSxuLG8saSl9fSh0LGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBmKHRoaXMpfWZ1bmN0aW9uIGcoZSl7aWYodT11fHxBKCIuL19zdHJlYW1fZHVwbGV4IiksIShwLmNhbGwoZyx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgZyhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBtKGUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSksby5jYWxsKHRoaXMpfWZ1bmN0aW9uIHYoZSx0LG4scixpLG8sYSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsbj9lLl93cml0ZXYoaSx0Lm9ud3JpdGUpOmUuX3dyaXRlKGksbyx0Lm9ud3JpdGUpLHQuc3luYz0hMX1mdW5jdGlvbiBiKGUsdCxuLHIpe258fGZ1bmN0aW9uKGUsdCl7MD09PXQubGVuZ3RoJiZ0Lm5lZWREcmFpbiYmKHQubmVlZERyYWluPSExLGUuZW1pdCgiZHJhaW4iKSl9KGUsdCksdC5wZW5kaW5nY2ItLSxyKCksRShlLHQpfWZ1bmN0aW9uIHkoZSx0KXt0LmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIG49dC5idWZmZXJlZFJlcXVlc3Q7aWYoZS5fd3JpdGV2JiZuJiZuLm5leHQpe3ZhciByPXQuYnVmZmVyZWRSZXF1ZXN0Q291bnQsaT1uZXcgQXJyYXkociksbz10LmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PW47Zm9yKHZhciBhPTAscz0hMDtuOykoaVthXT1uKS5pc0J1Znx8KHM9ITEpLG49bi5uZXh0LGErPTE7aS5hbGxCdWZmZXJzPXMsdihlLHQsITAsdC5sZW5ndGgsaSwiIixvLmZpbmlzaCksdC5wZW5kaW5nY2IrKyx0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxvLm5leHQ/KHQuY29ya2VkUmVxdWVzdHNGcmVlPW8ubmV4dCxvLm5leHQ9bnVsbCk6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGYodCksdC5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtuOyl7dmFyIHU9bi5jaHVuayxsPW4uZW5jb2RpbmcsYz1uLmNhbGxiYWNrO2lmKHYoZSx0LCExLHQub2JqZWN0TW9kZT8xOnUubGVuZ3RoLHUsbCxjKSxuPW4ubmV4dCx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdC53cml0aW5nKWJyZWFrfW51bGw9PT1uJiYodC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXQuYnVmZmVyZWRSZXF1ZXN0PW4sdC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGUuZW5kaW5nJiYwPT09ZS5sZW5ndGgmJm51bGw9PT1lLmJ1ZmZlcmVkUmVxdWVzdCYmIWUuZmluaXNoZWQmJiFlLndyaXRpbmd9ZnVuY3Rpb24gdyh0LG4pe3QuX2ZpbmFsKGZ1bmN0aW9uKGUpe24ucGVuZGluZ2NiLS0sZSYmdC5lbWl0KCJlcnJvciIsZSksbi5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpLEUodCxuKX0pfWZ1bmN0aW9uIEUoZSx0KXt2YXIgbj1fKHQpO3JldHVybiBuJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbmFsPyh0LnBlbmRpbmdjYisrLHQuZmluYWxDYWxsZWQ9ITAscy5uZXh0VGljayh3LGUsdCkpOih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdCgicHJlZmluaXNoIikpKX0oZSx0KSwwPT09dC5wZW5kaW5nY2ImJih0LmZpbmlzaGVkPSEwLGUuZW1pdCgiZmluaXNoIikpKSxufXIuaW5oZXJpdHMoZyxvKSxtLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdD1bXTtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShtLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmkuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKGUpe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHA9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hIXAuY2FsbCh0aGlzLGUpfHx0aGlzPT09ZyYmKGUmJmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBtKX19KSk6cD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXN9LGcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl93cml0YWJsZVN0YXRlLGk9ITEsbz0hci5vYmplY3RNb2RlJiZmdW5jdGlvbihlKXtyZXR1cm4gYy5pc0J1ZmZlcihlKXx8ZSBpbnN0YW5jZW9mIGF9KGUpO3JldHVybiBvJiYhYy5pc0J1ZmZlcihlKSYmKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuZnJvbShlKX0oZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbz90PSJidWZmZXIiOnR8fCh0PXIuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZCksci5lbmRlZD9mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7ZS5lbWl0KCJlcnJvciIsbikscy5uZXh0VGljayh0LG4pfSh0aGlzLG4pOihvfHxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0hMCxvPSExO3JldHVybiBudWxsPT09bj9vPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyI9PXR5cGVvZiBufHx2b2lkIDA9PT1ufHx0Lm9iamVjdE1vZGV8fChvPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksbyYmKGUuZW1pdCgiZXJyb3IiLG8pLHMubmV4dFRpY2socixvKSxpPSExKSxpfSh0aGlzLHIsZSxuKSkmJihyLnBlbmRpbmdjYisrLGk9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFuKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3RNb2RlfHwhMT09PWUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiB0fHwodD1jLmZyb20odCxuKSk7cmV0dXJuIHR9KHQscixpKTtyIT09YSYmKG49ITAsaT0iYnVmZmVyIixyPWEpfXZhciBzPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoO3QubGVuZ3RoKz1zO3ZhciB1PXQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyazt1fHwodC5uZWVkRHJhaW49ITApO2lmKHQud3JpdGluZ3x8dC5jb3JrZWQpe3ZhciBsPXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDt0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnIsZW5jb2Rpbmc6aSxpc0J1ZjpuLGNhbGxiYWNrOm8sbmV4dDpudWxsfSxsP2wubmV4dD10Lmxhc3RCdWZmZXJlZFJlcXVlc3Q6dC5idWZmZXJlZFJlcXVlc3Q9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSB2KGUsdCwhMSxzLHIsaSxvKTtyZXR1cm4gdX0odGhpcyxyLG8sZSx0LG4pKSxpfSxnLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sZy5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxlLmNvcmtlZHx8ZS5maW5pc2hlZHx8ZS5idWZmZXJQcm9jZXNzaW5nfHwhZS5idWZmZXJlZFJlcXVlc3R8fHkodGhpcyxlKSl9LGcucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWUudG9Mb3dlckNhc2UoKSksISgtMTxbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoZSsiIikudG9Mb3dlckNhc2UoKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksZy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXtuKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxnLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuPWUsdD1lPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbnVsbCE9ZSYmdGhpcy53cml0ZShlLHQpLHIuY29ya2VkJiYoci5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxyLmVuZGluZ3x8ci5maW5pc2hlZHx8ZnVuY3Rpb24oZSx0LG4pe3QuZW5kaW5nPSEwLEUoZSx0KSxuJiYodC5maW5pc2hlZD9zLm5leHRUaWNrKG4pOmUub25jZSgiZmluaXNoIixuKSk7dC5lbmRlZD0hMCxlLndyaXRhYmxlPSExfSh0aGlzLHIsbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLGcucHJvdG90eXBlLmRlc3Ryb3k9aC5kZXN0cm95LGcucHJvdG90eXBlLl91bmRlc3Ryb3k9aC51bmRlc3Ryb3ksZy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLmVuZCgpLHQoZSl9fSkuY2FsbCh0aGlzLEEoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxBKCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7Ii4vX3N0cmVhbV9kdXBsZXgiOjExNywiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiOjEyMywiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6MTI0LF9wcm9jZXNzOjExMiwiY29yZS11dGlsLWlzIjoxMDEsaW5oZXJpdHM6MTA2LCJwcm9jZXNzLW5leHRpY2stYXJncyI6MTExLCJzYWZlLWJ1ZmZlciI6MTQ0LHRpbWVyczoxNjAsInV0aWwtZGVwcmVjYXRlIjoxNjR9XSwxMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHM9ZSgic2FmZS1idWZmZXIiKS5CdWZmZXIscj1lKCJ1dGlsIik7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9e2RhdGE6ZSxuZXh0Om51bGx9OzA8dGhpcy5sZW5ndGg/dGhpcy50YWlsLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10KSx0aGlzLmhlYWQ9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgdD10aGlzLmhlYWQsbj0iIit0LmRhdGE7dD10Lm5leHQ7KW4rPWUrdC5kYXRhO3JldHVybiBufSxlLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO2lmKDE9PT10aGlzLmxlbmd0aClyZXR1cm4gdGhpcy5oZWFkLmRhdGE7Zm9yKHZhciB0LG4scixpPXMuYWxsb2NVbnNhZmUoZT4+PjApLG89dGhpcy5oZWFkLGE9MDtvOyl0PW8uZGF0YSxuPWkscj1hLHQuY29weShuLHIpLGErPW8uZGF0YS5sZW5ndGgsbz1vLm5leHQ7cmV0dXJuIGl9LGV9KCksciYmci5pbnNwZWN0JiZyLmluc3BlY3QuY3VzdG9tJiYodC5leHBvcnRzLnByb3RvdHlwZVtyLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciBlPXIuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrZX0pfSx7InNhZmUtYnVmZmVyIjoxNDQsdXRpbDoyfV0sMTIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBvPWUoInByb2Nlc3MtbmV4dGljay1hcmdzIik7ZnVuY3Rpb24gYShlLHQpe2UuZW1pdCgiZXJyb3IiLHQpfXQuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCxpPXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO3JldHVybiByfHxpP3Q/dChlKTohZXx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fG8ubmV4dFRpY2soYSx0aGlzLGUpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShlfHxudWxsLGZ1bmN0aW9uKGUpeyF0JiZlPyhvLm5leHRUaWNrKGEsbixlKSxuLl93cml0YWJsZVN0YXRlJiYobi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITApKTp0JiZ0KGUpfSkpLHRoaXN9LHVuZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LHsicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjExMX1dLDEyNDpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1lKCJldmVudHMiKS5FdmVudEVtaXR0ZXJ9LHtldmVudHM6MTAyfV0sMTI1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9ci5pc0VuY29kaW5nfHxmdW5jdGlvbihlKXtzd2l0Y2goKGU9IiIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBvKGUpe3ZhciB0O3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiJ1dGY4Ijtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIGU7ZGVmYXVsdDppZih0KXJldHVybjtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihyLmlzRW5jb2Rpbmc9PT1pfHwhaShlKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3JldHVybiB0fHxlfShlKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD11LHRoaXMuZW5kPWwsdD00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1zLHQ9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PWMsdGhpcy5lbmQ9Zix0PTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1wLHZvaWQodGhpcy5lbmQ9aCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1yLmFsbG9jVW5zYWZlKHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU8PTEyNz8wOmU+PjU9PTY/MjplPj40PT0xND8zOmU+PjM9PTMwPzQ6ZT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKGUpe3ZhciB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsbj1mdW5jdGlvbihlLHQsbil7aWYoMTI4IT0oMTkyJnRbMF0pKXJldHVybiBlLmxhc3ROZWVkPTAsIu+/vSI7aWYoMTxlLmxhc3ROZWVkJiYxPHQubGVuZ3RoKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSwi77+9IjtpZigyPGUubGFzdE5lZWQmJjI8dC5sZW5ndGgmJjEyOCE9KDE5MiZ0WzJdKSlyZXR1cm4gZS5sYXN0TmVlZD0yLCLvv70ifX0odGhpcyxlKTtyZXR1cm4gdm9pZCAwIT09bj9uOnRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoPyhlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPWUubGVuZ3RoKSl9ZnVuY3Rpb24gdShlLHQpe2lmKChlLmxlbmd0aC10KSUyIT0wKXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMV0sZS50b1N0cmluZygidXRmMTZsZSIsdCxlLmxlbmd0aC0xKTt2YXIgbj1lLnRvU3RyaW5nKCJ1dGYxNmxlIix0KTtpZihuKXt2YXIgcj1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSk7aWYoNTUyOTY8PXImJnI8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLG4uc2xpY2UoMCwtMSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciBuPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIHQrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxuKX1yZXR1cm4gdH1mdW5jdGlvbiBjKGUsdCl7dmFyIG49KGUubGVuZ3RoLXQpJTM7cmV0dXJuIDA9PW4/ZS50b1N0cmluZygiYmFzZTY0Iix0KToodGhpcy5sYXN0TmVlZD0zLW4sdGhpcy5sYXN0VG90YWw9MywxPT1uP3RoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSksZS50b1N0cmluZygiYmFzZTY0Iix0LGUubGVuZ3RoLW4pKX1mdW5jdGlvbiBmKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTp0fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIn0obi5TdHJpbmdEZWNvZGVyPW8pLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIiI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm4iIjtuPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugbj0wO3JldHVybiBuPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxuKTp0aGlzLnRleHQoZSxuKTp0fHwiIn0sby5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCsi77+9Ijp0fSxvLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQubGVuZ3RoLTE7aWYocjxuKXJldHVybiAwO3ZhciBpPWEodFtyXSk7aWYoMDw9aSlyZXR1cm4gMDxpJiYoZS5sYXN0TmVlZD1pLTEpLGk7aWYoLS1yPG58fC0yPT09aSlyZXR1cm4gMDtpZigwPD0oaT1hKHRbcl0pKSlyZXR1cm4gMDxpJiYoZS5sYXN0TmVlZD1pLTIpLGk7aWYoLS1yPG58fC0yPT09aSlyZXR1cm4gMDtpZigwPD0oaT1hKHRbcl0pKSlyZXR1cm4gMDxpJiYoMj09PWk/aT0wOmUubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoInV0ZjgiLHQpO3RoaXMubGFzdFRvdGFsPW47dmFyIHI9ZS5sZW5ndGgtKG4tdGhpcy5sYXN0TmVlZCk7cmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLDAsciksZS50b1N0cmluZygidXRmOCIsdCxyKX0sby5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGgpcmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7ZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjE0NH1dLDEyNjpbZnVuY3Rpb24oZSx0LG4peygoKG49dC5leHBvcnRzPWUoIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSkuU3RyZWFtPW4pLlJlYWRhYmxlPW4pLldyaXRhYmxlPWUoIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKSxuLkR1cGxleD1lKCIuL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLG4uVHJhbnNmb3JtPWUoIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksbi5QYXNzVGhyb3VnaD1lKCIuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIil9LHsiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiOjExNywiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyI6MTE4LCIuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjoxMTksIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIjoxMjAsIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiOjEyMX1dLDEyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e0FCU09MVVRFOiJhYnNvbHV0ZSIsUEFUSF9SRUxBVElWRToicGF0aFJlbGF0aXZlIixST09UX1JFTEFUSVZFOiJyb290UmVsYXRpdmUiLFNIT1JURVNUOiJzaG9ydGVzdCJ9fSx7fV0sMTI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBzPWUoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gdShlLHQpe3ZhciBuPXQucmVtb3ZlRW1wdHlRdWVyaWVzJiZlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Qb3J0O3JldHVybiBlLnF1ZXJ5LnN0cmluZ1tuPyJzdHJpcHBlZCI6ImZ1bGwiXX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIWUuZXh0cmEucmVsYXRpb24ubWluaW11bVF1ZXJ5fHx0Lm91dHB1dD09PXMuQUJTT0xVVEV8fHQub3V0cHV0PT09cy5ST09UX1JFTEFUSVZFfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj10LnJlbW92ZURpcmVjdG9yeUluZGV4ZXMmJmUuZXh0cmEucmVzb3VyY2VJc0luZGV4LHI9ZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUmVzb3VyY2UmJnQub3V0cHV0IT09cy5BQlNPTFVURSYmdC5vdXRwdXQhPT1zLlJPT1RfUkVMQVRJVkU7cmV0dXJuISFlLnJlc291cmNlJiYhciYmIW59dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuIG4rPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuKGUuZXh0cmEucmVsYXRpb24ubWF4aW11bUhvc3R8fHQub3V0cHV0PT09cy5BQlNPTFVURSkmJihlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJnQuc2NoZW1lUmVsYXRpdmUmJnQub3V0cHV0IT09cy5BQlNPTFVURT9uKz0iLy8iOm4rPWUuc2NoZW1lKyI6Ly8iKSxufShlLHQpLG4rPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuYXV0aHx8dC5yZW1vdmVBdXRofHwhZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdCYmdC5vdXRwdXQhPT1zLkFCU09MVVRFPyIiOmUuYXV0aCsiQCJ9KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0LmZ1bGwmJihlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1BdXRofHx0Lm91dHB1dD09PXMuQUJTT0xVVEUpP2UuaG9zdC5mdWxsOiIifShlLHQpLG4rPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucG9ydCYmIWUuZXh0cmEucG9ydElzRGVmYXVsdCYmZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdD8iOiIrZS5wb3J0OiIifShlKSxuKz1mdW5jdGlvbihlLHQpe3ZhciBuPSIiLHI9ZS5wYXRoLmFic29sdXRlLnN0cmluZyxpPWUucGF0aC5yZWxhdGl2ZS5zdHJpbmcsbz1jKGUsdCk7aWYoZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdHx8dC5vdXRwdXQ9PT1zLkFCU09MVVRFfHx0Lm91dHB1dD09PXMuUk9PVF9SRUxBVElWRSluPXI7ZWxzZSBpZihpLmxlbmd0aDw9ci5sZW5ndGgmJnQub3V0cHV0PT09cy5TSE9SVEVTVHx8dC5vdXRwdXQ9PT1zLlBBVEhfUkVMQVRJVkUpe2lmKCIiPT09KG49aSkpe3ZhciBhPWwoZSx0KSYmISF1KGUsdCk7ZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUGF0aCYmIW8/bj0iLi8iOiFlLmV4dHJhLnJlbGF0aW9uLm92ZXJyaWRlc1F1ZXJ5fHxvfHxhfHwobj0iLi8iKX19ZWxzZSBuPXI7cmV0dXJuIi8iIT09bnx8b3x8IXQucmVtb3ZlUm9vdFRyYWlsaW5nU2xhc2h8fGUuZXh0cmEucmVsYXRpb24ubWluaW11bVBvcnQmJnQub3V0cHV0IT09cy5BQlNPTFVURXx8KG49IiIpLG59KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQpP2UucmVzb3VyY2U6IiJ9KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQpP3UoZSx0KToiIn0oZSx0KSxuKz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmhhc2g/ZS5oYXNoOiIifShlKX19LHsiLi9jb25zdGFudHMiOjEyN31dLDEyOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2NvbnN0YW50cyIpLGk9ZSgiLi9mb3JtYXQiKSxvPWUoIi4vb3B0aW9ucyIpLGE9ZSgiLi91dGlsL29iamVjdCIpLHM9ZSgiLi9wYXJzZSIpLHU9ZSgiLi9yZWxhdGUiKTtmdW5jdGlvbiBsKGUsdCl7dGhpcy5vcHRpb25zPW8odCx7ZGVmYXVsdFBvcnRzOntmdHA6MjEsaHR0cDo4MCxodHRwczo0NDN9LGRpcmVjdG9yeUluZGV4ZXM6WyJpbmRleC5odG1sIl0saWdub3JlX3d3dzohMSxvdXRwdXQ6bC5TSE9SVEVTVCxyZWplY3RlZFNjaGVtZXM6WyJkYXRhIiwiamF2YXNjcmlwdCIsIm1haWx0byJdLHJlbW92ZUF1dGg6ITEscmVtb3ZlRGlyZWN0b3J5SW5kZXhlczohMCxyZW1vdmVFbXB0eVF1ZXJpZXM6ITEscmVtb3ZlUm9vdFRyYWlsaW5nU2xhc2g6ITAsc2NoZW1lUmVsYXRpdmU6ITAsc2l0ZTp2b2lkIDAsc2xhc2hlc0Rlbm90ZUhvc3Q6ITB9KSx0aGlzLmZyb209cy5mcm9tKGUsdGhpcy5vcHRpb25zLG51bGwpfWwucHJvdG90eXBlLnJlbGF0ZT1mdW5jdGlvbihlLHQsbil7aWYoYS5pc1BsYWluT2JqZWN0KHQpPyhuPXQsdD1lLGU9bnVsbCk6dHx8KHQ9ZSxlPW51bGwpLG49byhuLHRoaXMub3B0aW9ucyksZT1lfHxuLnNpdGUsIShlPXMuZnJvbShlLG4sdGhpcy5mcm9tKSl8fCFlLmhyZWYpdGhyb3cgbmV3IEVycm9yKCJmcm9tIHZhbHVlIG5vdCBkZWZpbmVkLiIpO2lmKGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVBhdGhPbmx5KXRocm93IG5ldyBFcnJvcigiZnJvbSB2YWx1ZSBzdXBwbGllZCBpcyBub3QgYWJzb2x1dGU6ICIrZS5ocmVmKTtyZXR1cm4hMT09PSh0PXMudG8odCxuKSkudmFsaWQ/dC5ocmVmOih0PXUoZSx0LG4pLHQ9aSh0LG4pKX0sbC5yZWxhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybihuZXcgbCkucmVsYXRlKGUsdCxuKX0sYS5zaGFsbG93TWVyZ2UobCxyKSx0LmV4cG9ydHM9bH0seyIuL2NvbnN0YW50cyI6MTI3LCIuL2Zvcm1hdCI6MTI4LCIuL29wdGlvbnMiOjEzMCwiLi9wYXJzZSI6MTMzLCIuL3JlbGF0ZSI6MTQwLCIuL3V0aWwvb2JqZWN0IjoxNDJ9XSwxMzA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGE9ZSgiLi91dGlsL29iamVjdCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGEuaXNQbGFpbk9iamVjdChlKSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKHZvaWQgMCE9PWVbcl0/bltyXT0oaT1lW3JdLChvPXRbcl0paW5zdGFuY2VvZiBPYmplY3QmJmkgaW5zdGFuY2VvZiBPYmplY3Q/byBpbnN0YW5jZW9mIEFycmF5JiZpIGluc3RhbmNlb2YgQXJyYXk/by5jb25jYXQoaSk6YS5zaGFsbG93TWVyZ2UoaSxvKTppKTpuW3JdPXRbcl0pO3JldHVybiBufXZhciBpLG87cmV0dXJuIHR9fSx7Ii4vdXRpbC9vYmplY3QiOjE0Mn1dLDEzMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZih0Lmlnbm9yZV93d3cpe3ZhciBuPWUuaG9zdC5mdWxsO2lmKG4pe3ZhciByPW47MD09PW4uaW5kZXhPZigid3d3LiIpJiYocj1uLnN1YnN0cig0KSksZS5ob3N0LnN0cmlwcGVkPXJ9fX19LHt9XSwxMzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSEoZS5zY2hlbWV8fGUuYXV0aHx8ZS5ob3N0LmZ1bGx8fGUucG9ydCksbj10JiYhZS5wYXRoLmFic29sdXRlLnN0cmluZyxyPW4mJiFlLnJlc291cmNlLGk9ciYmIWUucXVlcnkuc3RyaW5nLmZ1bGwubGVuZ3RoLG89aSYmIWUuaGFzaDtlLmV4dHJhLmhyZWZJbmZvLm1pbmltdW1QYXRoT25seT10LGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVJlc291cmNlT25seT1uLGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVF1ZXJ5T25seT1yLGUuZXh0cmEuaHJlZkluZm8ubWluaW11bUhhc2hPbmx5PWksZS5leHRyYS5ocmVmSW5mby5lbXB0eT1vfX0se31dLDEzMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2hyZWZJbmZvIiksaT1lKCIuL2hvc3QiKSxvPWUoIi4vcGF0aCIpLGE9ZSgiLi9wb3J0Iikscz1lKCIuL3F1ZXJ5IiksdT1lKCIuL3VybHN0cmluZyIpLGw9ZSgiLi4vdXRpbC9wYXRoIik7ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXUoZSx0KTtyZXR1cm4hMT09PW4udmFsaWR8fChpKG4sdCksYShuLHQpLG8obix0KSxzKG4sdCkscihuKSksbn10LmV4cG9ydHM9e2Zyb206ZnVuY3Rpb24oZSx0LG4pe2lmKGUpe3ZhciByPWMoZSx0KSxpPWwucmVzb2x2ZURvdFNlZ21lbnRzKHIucGF0aC5hYnNvbHV0ZS5hcnJheSk7cmV0dXJuIHIucGF0aC5hYnNvbHV0ZS5hcnJheT1pLHIucGF0aC5hYnNvbHV0ZS5zdHJpbmc9Ii8iK2wuam9pbihpKSxyfXJldHVybiBufSx0bzpjfX0seyIuLi91dGlsL3BhdGgiOjE0MywiLi9ob3N0IjoxMzEsIi4vaHJlZkluZm8iOjEzMiwiLi9wYXRoIjoxMzQsIi4vcG9ydCI6MTM1LCIuL3F1ZXJ5IjoxMzYsIi4vdXJsc3RyaW5nIjoxMzd9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlKXtpZigiLyI9PT1lKXJldHVybltdO3ZhciB0PVtdO3JldHVybiBlLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihlKXsiIiE9PWUmJnQucHVzaChlKX0pLHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5wYXRoLmFic29sdXRlLnN0cmluZztpZihuKXt2YXIgcj1uLmxhc3RJbmRleE9mKCIvIik7aWYoLTE8cil7aWYoKytyPG4ubGVuZ3RoKXt2YXIgaT1uLnN1YnN0cihyKTsiLiIhPT1pJiYiLi4iIT09aT8oZS5yZXNvdXJjZT1pLG49bi5zdWJzdHIoMCxyKSk6bis9Ii8ifWUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9bixlLnBhdGguYWJzb2x1dGUuYXJyYXk9byhuKX1lbHNlIi4iPT09bnx8Ii4uIj09PW4/KG4rPSIvIixlLnBhdGguYWJzb2x1dGUuc3RyaW5nPW4sZS5wYXRoLmFic29sdXRlLmFycmF5PW8obikpOihlLnJlc291cmNlPW4sZS5wYXRoLmFic29sdXRlLnN0cmluZz1udWxsKTtlLmV4dHJhLnJlc291cmNlSXNJbmRleD1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiBlLmRpcmVjdG9yeUluZGV4ZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fHwhKG49ITApfSksbn0oZS5yZXNvdXJjZSx0KX19fSx7fV0sMTM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO2Zvcih2YXIgciBpbiB0LmRlZmF1bHRQb3J0cylpZihyPT09ZS5zY2hlbWUmJnQuZGVmYXVsdFBvcnRzLmhhc093blByb3BlcnR5KHIpKXtuPXQuZGVmYXVsdFBvcnRzW3JdO2JyZWFrfS0xPG4mJihuPW4udG9TdHJpbmcoKSxudWxsPT09ZS5wb3J0JiYoZS5wb3J0PW4pLGUuZXh0cmEucG9ydElzRGVmYXVsdD1lLnBvcnQ9PT1uKX19LHt9XSwxMzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiByKGUsdCl7dmFyIG49MCxyPSIiO2Zvcih2YXIgaSBpbiBlKWlmKCIiIT09aSYmITA9PT1hLmNhbGwoZSxpKSl7dmFyIG89ZVtpXTsiIj09PW8mJnR8fChyKz0xPT0rK24/Ij8iOiImIixpPWVuY29kZVVSSUNvbXBvbmVudChpKSxyKz0iIiE9PW8/aSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG8pLnJlcGxhY2UoLyUyMC9nLCIrIik6aSl9cmV0dXJuIHJ9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5xdWVyeS5zdHJpbmcuZnVsbD1yKGUucXVlcnkub2JqZWN0LCExKSx0LnJlbW92ZUVtcHR5UXVlcmllcyYmKGUucXVlcnkuc3RyaW5nLnN0cmlwcGVkPXIoZS5xdWVyeS5vYmplY3QsITApKX19LHt9XSwxMzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgidXJsIikucGFyc2U7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49ITA7cmV0dXJuIGUucmVqZWN0ZWRTY2hlbWVzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBuPSEoMD09PXQuaW5kZXhPZihlKyI6IikpfSksbn0oZSx0KT9mdW5jdGlvbihlKXt2YXIgdD1lLnByb3RvY29sO3JldHVybiB0JiZ0LmluZGV4T2YoIjoiKT09PXQubGVuZ3RoLTEmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkpLGUuaG9zdD17ZnVsbDplLmhvc3RuYW1lLHN0cmlwcGVkOm51bGx9LGUucGF0aD17YWJzb2x1dGU6e2FycmF5Om51bGwsc3RyaW5nOmUucGF0aG5hbWV9LHJlbGF0aXZlOnthcnJheTpudWxsLHN0cmluZzpudWxsfX0sZS5xdWVyeT17b2JqZWN0OmUucXVlcnksc3RyaW5nOntmdWxsOm51bGwsc3RyaXBwZWQ6bnVsbH19LGUuZXh0cmE9e2hyZWZJbmZvOnttaW5pbXVtUGF0aE9ubHk6bnVsbCxtaW5pbXVtUmVzb3VyY2VPbmx5Om51bGwsbWluaW11bVF1ZXJ5T25seTpudWxsLG1pbmltdW1IYXNoT25seTpudWxsLGVtcHR5Om51bGwsc2VwYXJhdG9yT25seVF1ZXJ5OiI/Ij09PWUuc2VhcmNofSxwb3J0SXNEZWZhdWx0Om51bGwscmVsYXRpb246e21heGltdW1TY2hlbWU6bnVsbCxtYXhpbXVtQXV0aDpudWxsLG1heGltdW1Ib3N0Om51bGwsbWF4aW11bVBvcnQ6bnVsbCxtYXhpbXVtUGF0aDpudWxsLG1heGltdW1SZXNvdXJjZTpudWxsLG1heGltdW1RdWVyeTpudWxsLG1heGltdW1IYXNoOm51bGwsbWluaW11bVNjaGVtZTpudWxsLG1pbmltdW1BdXRoOm51bGwsbWluaW11bUhvc3Q6bnVsbCxtaW5pbXVtUG9ydDpudWxsLG1pbmltdW1QYXRoOm51bGwsbWluaW11bVJlc291cmNlOm51bGwsbWluaW11bVF1ZXJ5Om51bGwsbWluaW11bUhhc2g6bnVsbCxvdmVycmlkZXNRdWVyeTpudWxsfSxyZXNvdXJjZUlzSW5kZXg6bnVsbCxzbGFzaGVzOmUuc2xhc2hlc30sZS5yZXNvdXJjZT1udWxsLGUuc2NoZW1lPXQsZGVsZXRlIGUuaG9zdG5hbWUsZGVsZXRlIGUucGF0aG5hbWUsZGVsZXRlIGUucHJvdG9jb2wsZGVsZXRlIGUuc2VhcmNoLGRlbGV0ZSBlLnNsYXNoZXMsZX0ocihlLCEwLHQuc2xhc2hlc0Rlbm90ZUhvc3QpKTp7aHJlZjplLHZhbGlkOiExfX19LHt1cmw6MTYyfV0sMTM4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vZmluZFJlbGF0aW9uIiksaT1lKCIuLi91dGlsL29iamVjdCIpLG89ZSgiLi4vdXRpbC9wYXRoIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyLnVwVG9QYXRoKGUsdCxuKSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJihlLnNjaGVtZT10LnNjaGVtZSksZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtQXV0aCYmKGUuYXV0aD10LmF1dGgpLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUhvc3QmJihlLmhvc3Q9aS5jbG9uZSh0Lmhvc3QpKSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Qb3J0JiZmdW5jdGlvbihlLHQpe2UucG9ydD10LnBvcnQsZS5leHRyYS5wb3J0SXNEZWZhdWx0PXQuZXh0cmEucG9ydElzRGVmYXVsdH0oZSx0KSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJmZ1bmN0aW9uKGUsdCl7aWYoZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdHx8IWUuZXh0cmEuaHJlZkluZm8ubWluaW11bVJlc291cmNlT25seSl7dmFyIG49ZS5wYXRoLmFic29sdXRlLmFycmF5LHI9Ii8iO24/KGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVBhdGhPbmx5JiYwIT09ZS5wYXRoLmFic29sdXRlLnN0cmluZy5pbmRleE9mKCIvIikmJihuPXQucGF0aC5hYnNvbHV0ZS5hcnJheS5jb25jYXQobikpLG49by5yZXNvbHZlRG90U2VnbWVudHMobikscis9by5qb2luKG4pKTpuPVtdLGUucGF0aC5hYnNvbHV0ZS5hcnJheT1uLGUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9cn1lbHNlIGUucGF0aD1pLmNsb25lKHQucGF0aCl9KGUsdCksci5wYXRoT24oZSx0LG4pLGUuZXh0cmEucmVsYXRpb24ubWluaW11bVJlc291cmNlJiZmdW5jdGlvbihlLHQpe2UucmVzb3VyY2U9dC5yZXNvdXJjZSxlLmV4dHJhLnJlc291cmNlSXNJbmRleD10LmV4dHJhLnJlc291cmNlSXNJbmRleH0oZSx0KSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1RdWVyeSYmKGUucXVlcnk9aS5jbG9uZSh0LnF1ZXJ5KSksZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtSGFzaCYmKGUuaGFzaD10Lmhhc2gpfX0seyIuLi91dGlsL29iamVjdCI6MTQyLCIuLi91dGlsL3BhdGgiOjE0MywiLi9maW5kUmVsYXRpb24iOjEzOX1dLDEzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e3BhdGhPbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5leHRyYS5ocmVmSW5mby5taW5pbXVtUXVlcnlPbmx5LGk9ZS5leHRyYS5ocmVmSW5mby5taW5pbXVtSGFzaE9ubHksbz1lLmV4dHJhLmhyZWZJbmZvLmVtcHR5LGE9ZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUG9ydCxzPWUuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZSx1PWEmJmUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9PT10LnBhdGguYWJzb2x1dGUuc3RyaW5nLGw9ZS5yZXNvdXJjZT09PXQucmVzb3VyY2V8fCFlLnJlc291cmNlJiZ0LmV4dHJhLnJlc291cmNlSXNJbmRleHx8bi5yZW1vdmVEaXJlY3RvcnlJbmRleGVzJiZlLmV4dHJhLnJlc291cmNlSXNJbmRleCYmIXQucmVzb3VyY2UsYz11JiYobHx8cnx8aXx8byksZj1uLnJlbW92ZUVtcHR5UXVlcmllcz8ic3RyaXBwZWQiOiJmdWxsIixwPWUucXVlcnkuc3RyaW5nW2ZdLGg9dC5xdWVyeS5zdHJpbmdbZl0sZD1jJiYhIXAmJnA9PT1ofHwoaXx8bykmJiFlLmV4dHJhLmhyZWZJbmZvLnNlcGFyYXRvck9ubHlRdWVyeSxtPWQmJmUuaGFzaD09PXQuaGFzaDtlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1QYXRoPXUsZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUmVzb3VyY2U9YyxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1RdWVyeT1kLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUhhc2g9bSxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1Qb3J0PSFzfHxzJiYhdSxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1QYXRoPSFzfHxzJiYhYyxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1SZXNvdXJjZT0hc3x8cyYmIWQsZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUXVlcnk9IXN8fHMmJiFtLGUuZXh0cmEucmVsYXRpb24ubWF4aW11bUhhc2g9IXN8fHMmJiFtLGUuZXh0cmEucmVsYXRpb24ub3ZlcnJpZGVzUXVlcnk9dSYmZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUmVzb3VyY2UmJiFkJiYhIWh9LHVwVG9QYXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmV4dHJhLmhyZWZJbmZvLm1pbmltdW1QYXRoT25seSxpPWUuc2NoZW1lPT09dC5zY2hlbWV8fCFlLnNjaGVtZSxvPWkmJihlLmF1dGg9PT10LmF1dGh8fG4ucmVtb3ZlQXV0aHx8ciksYT1uLmlnbm9yZV93d3c/InN0cmlwcGVkIjoiZnVsbCIscz1vJiYoZS5ob3N0W2FdPT09dC5ob3N0W2FdfHxyKSx1PXMmJihlLnBvcnQ9PT10LnBvcnR8fHIpO2UuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZT1pLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUF1dGg9byxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Ib3N0PXMsZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUG9ydD11LGUuZXh0cmEucmVsYXRpb24ubWF4aW11bVNjaGVtZT0haXx8aSYmIW8sZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtQXV0aD0haXx8aSYmIXMsZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdD0haXx8aSYmIXV9fX0se31dLDE0MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2Fic29sdXRpemUiKSxpPWUoIi4vcmVsYXRpdml6ZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIodCxlLG4pLGkodCxlLG4pLHR9fSx7Ii4vYWJzb2x1dGl6ZSI6MTM4LCIuL3JlbGF0aXZpemUiOjE0MX1dLDE0MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1lKCIuLi91dGlsL3BhdGgiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGUuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZSl7dmFyIHI9ZnVuY3Rpb24obixlKXt2YXIgcj1bXSxpPSEwLG89LTE7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2kmJihuW3RdIT09ZT9pPSExOm89dCksaXx8ci5wdXNoKCIuLiIpfSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7bzx0JiZyLnB1c2goZSl9KSxyfShlLnBhdGguYWJzb2x1dGUuYXJyYXksdC5wYXRoLmFic29sdXRlLmFycmF5KTtlLnBhdGgucmVsYXRpdmUuYXJyYXk9cixlLnBhdGgucmVsYXRpdmUuc3RyaW5nPWkuam9pbihyKX19fSx7Ii4uL3V0aWwvcGF0aCI6MTQzfV0sMTQyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Y2xvbmU6ZnVuY3Rpb24gZSh0KXtpZih0IGluc3RhbmNlb2YgT2JqZWN0KXt2YXIgbj10IGluc3RhbmNlb2YgQXJyYXk/W106e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09ZSh0W3JdKSk7cmV0dXJuIG59cmV0dXJuIHR9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9LHNoYWxsb3dNZXJnZTpmdW5jdGlvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBPYmplY3QmJnQgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGV9fX0se31dLDE0MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2pvaW46ZnVuY3Rpb24oZSl7cmV0dXJuIDA8ZS5sZW5ndGg/ZS5qb2luKCIvIikrIi8iOiIifSxyZXNvbHZlRG90U2VnbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXsiLi4iIT09ZT8iLiIhPT1lJiZ0LnB1c2goZSk6MDx0Lmxlbmd0aCYmdC5zcGxpY2UodC5sZW5ndGgtMSwxKX0pLHR9fX0se31dLDE0NDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoImJ1ZmZlciIpLGk9ci5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gaShlLHQsbil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz90LmV4cG9ydHM9cjoobyhyLG4pLG4uQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKGUsdCxuKX0sYS5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgcj1pKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9yLmZpbGwodCxuKTpyLmZpbGwodCk6ci5maWxsKDApLHJ9LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gci5TbG93QnVmZmVyKGUpfX0se2J1ZmZlcjo0fV0sMTQ1OltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi91dGlsIiksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9InVuZGVmaW5lZCIhPXR5cGVvZiBNYXA7ZnVuY3Rpb24gdSgpe3RoaXMuX2FycmF5PVtdLHRoaXMuX3NldD1zP25ldyBNYXA6T2JqZWN0LmNyZWF0ZShudWxsKX11LmZyb21BcnJheT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgdSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW4uYWRkKGVbcl0sdCk7cmV0dXJuIG59LHUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gcz90aGlzLl9zZXQuc2l6ZTpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aH0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dmFyIG49cz9lOm8udG9TZXRTdHJpbmcoZSkscj1zP3RoaXMuaGFzKGUpOmEuY2FsbCh0aGlzLl9zZXQsbiksaT10aGlzLl9hcnJheS5sZW5ndGg7ciYmIXR8fHRoaXMuX2FycmF5LnB1c2goZSkscnx8KHM/dGhpcy5fc2V0LnNldChlLGkpOnRoaXMuX3NldFtuXT1pKX0sdS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe2lmKHMpcmV0dXJuIHRoaXMuX3NldC5oYXMoZSk7dmFyIHQ9by50b1NldFN0cmluZyhlKTtyZXR1cm4gYS5jYWxsKHRoaXMuX3NldCx0KX0sdS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlKXtpZihzKXt2YXIgdD10aGlzLl9zZXQuZ2V0KGUpO2lmKDA8PXQpcmV0dXJuIHR9ZWxzZXt2YXIgbj1vLnRvU2V0U3RyaW5nKGUpO2lmKGEuY2FsbCh0aGlzLl9zZXQsbikpcmV0dXJuIHRoaXMuX3NldFtuXX10aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBzZXQuJyl9LHUucHJvdG90eXBlLmF0PWZ1bmN0aW9uKGUpe2lmKDA8PWUmJmU8dGhpcy5fYXJyYXkubGVuZ3RoKXJldHVybiB0aGlzLl9hcnJheVtlXTt0aHJvdyBuZXcgRXJyb3IoIk5vIGVsZW1lbnQgaW5kZXhlZCBieSAiK2UpfSx1LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCl9LG4uQXJyYXlTZXQ9dX0seyIuL3V0aWwiOjE1NH1dLDE0NjpbZnVuY3Rpb24oZSx0LG4pe3ZhciB1PWUoIi4vYmFzZTY0Iik7bi5lbmNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwPzErKC1lPDwxKTowKyhlPDwxKX0oZSk7dD0zMSZyLDA8KHI+Pj49NSkmJih0fD0zMiksbis9dS5lbmNvZGUodCksMDxyOyk7cmV0dXJuIG59LG4uZGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5sZW5ndGgsYT0wLHM9MDtkb3tpZihvPD10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuIik7aWYoLTE9PT0oaT11LmRlY29kZShlLmNoYXJDb2RlQXQodCsrKSkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgZGlnaXQ6ICIrZS5jaGFyQXQodC0xKSk7cj0hISgzMiZpKSxhKz0oaSY9MzEpPDxzLHMrPTV9d2hpbGUocik7bi52YWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1lPj4xO3JldHVybiAxPT0oMSZlKT8tdDp0fShhKSxuLnJlc3Q9dH19LHsiLi9iYXNlNjQiOjE0N31dLDE0NzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5zcGxpdCgiIik7bi5lbmNvZGU9ZnVuY3Rpb24oZSl7aWYoMDw9ZSYmZTxyLmxlbmd0aClyZXR1cm4gcltlXTt0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6ICIrZSl9LG4uZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiA2NTw9ZSYmZTw9OTA/ZS02NTo5Nzw9ZSYmZTw9MTIyP2UtOTcrMjY6NDg8PWUmJmU8PTU3P2UtNDgrNTI6NDM9PWU/NjI6NDc9PWU/NjM6LTF9fSx7fV0sMTQ4OltmdW5jdGlvbihlLHQsbCl7bC5HUkVBVEVTVF9MT1dFUl9CT1VORD0xLGwuTEVBU1RfVVBQRVJfQk9VTkQ9MixsLnNlYXJjaD1mdW5jdGlvbihlLHQsbixyKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7dmFyIGk9ZnVuY3Rpb24gZSh0LG4scixpLG8sYSl7dmFyIHM9TWF0aC5mbG9vcigobi10KS8yKSt0LHU9byhyLGlbc10sITApO3JldHVybiAwPT09dT9zOjA8dT8xPG4tcz9lKHMsbixyLGksbyxhKTphPT1sLkxFQVNUX1VQUEVSX0JPVU5EP248aS5sZW5ndGg/bjotMTpzOjE8cy10P2UodCxzLHIsaSxvLGEpOmE9PWwuTEVBU1RfVVBQRVJfQk9VTkQ/czp0PDA/LTE6dH0oLTEsdC5sZW5ndGgsZSx0LG4scnx8bC5HUkVBVEVTVF9MT1dFUl9CT1VORCk7aWYoaTwwKXJldHVybi0xO2Zvcig7MDw9aS0xJiYwPT09bih0W2ldLHRbaS0xXSwhMCk7KS0taTtyZXR1cm4gaX19LHt9XSwxNDk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuL3V0aWwiKTtmdW5jdGlvbiByKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fc29ydGVkPSEwLHRoaXMuX2xhc3Q9e2dlbmVyYXRlZExpbmU6LTEsZ2VuZXJhdGVkQ29sdW1uOjB9fXIucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaD1mdW5jdGlvbihlLHQpe3RoaXMuX2FycmF5LmZvckVhY2goZSx0KX0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2VuZXJhdGVkTGluZSxyPXQuZ2VuZXJhdGVkTGluZSxpPWUuZ2VuZXJhdGVkQ29sdW1uLG89dC5nZW5lcmF0ZWRDb2x1bW47cmV0dXJuIG48cnx8cj09biYmaTw9b3x8YS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChlLHQpPD0wfSh0aGlzLl9sYXN0LGUpP3RoaXMuX3NvcnRlZD0hMTp0aGlzLl9sYXN0PWUsdGhpcy5fYXJyYXkucHVzaChlKX0sci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0ZWR8fCh0aGlzLl9hcnJheS5zb3J0KGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQpLHRoaXMuX3NvcnRlZD0hMCksdGhpcy5fYXJyYXl9LG4uTWFwcGluZ0xpc3Q9cn0seyIuL3V0aWwiOjE1NH1dLDE1MDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHUoZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBsKGUsdCxuLHIpe2lmKG48cil7dmFyIGk9bi0xO3UoZSxmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnJvdW5kKGUrTWF0aC5yYW5kb20oKSoodC1lKSl9KG4scikscik7Zm9yKHZhciBvPWVbcl0sYT1uO2E8cjthKyspdChlW2FdLG8pPD0wJiZ1KGUsaSs9MSxhKTt1KGUsaSsxLGEpO3ZhciBzPWkrMTtsKGUsdCxuLHMtMSksbChlLHQscysxLHIpfX1uLnF1aWNrU29ydD1mdW5jdGlvbihlLHQpe2woZSx0LDAsZS5sZW5ndGgtMSl9fSx7fV0sMTUxOltmdW5jdGlvbihlLHQsbil7dmFyIHk9ZSgiLi91dGlsIiksdT1lKCIuL2JpbmFyeS1zZWFyY2giKSxwPWUoIi4vYXJyYXktc2V0IikuQXJyYXlTZXQsXz1lKCIuL2Jhc2U2NC12bHEiKSx3PWUoIi4vcXVpY2stc29ydCIpLnF1aWNrU29ydDtmdW5jdGlvbiBhKGUsdCl7dmFyIG49ZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihuPXkucGFyc2VTb3VyY2VNYXBJbnB1dChlKSksbnVsbCE9bi5zZWN0aW9ucz9uZXcgcihuLHQpOm5ldyBoKG4sdCl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPWU7InN0cmluZyI9PXR5cGVvZiBlJiYobj15LnBhcnNlU291cmNlTWFwSW5wdXQoZSkpO3ZhciByPXkuZ2V0QXJnKG4sInZlcnNpb24iKSxpPXkuZ2V0QXJnKG4sInNvdXJjZXMiKSxvPXkuZ2V0QXJnKG4sIm5hbWVzIixbXSksYT15LmdldEFyZyhuLCJzb3VyY2VSb290IixudWxsKSxzPXkuZ2V0QXJnKG4sInNvdXJjZXNDb250ZW50IixudWxsKSx1PXkuZ2V0QXJnKG4sIm1hcHBpbmdzIiksbD15LmdldEFyZyhuLCJmaWxlIixudWxsKTtpZihyIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIityKTthJiYoYT15Lm5vcm1hbGl6ZShhKSksaT1pLm1hcChTdHJpbmcpLm1hcCh5Lm5vcm1hbGl6ZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZ5LmlzQWJzb2x1dGUoYSkmJnkuaXNBYnNvbHV0ZShlKT95LnJlbGF0aXZlKGEsZSk6ZX0pLHRoaXMuX25hbWVzPXAuZnJvbUFycmF5KG8ubWFwKFN0cmluZyksITApLHRoaXMuX3NvdXJjZXM9cC5mcm9tQXJyYXkoaSwhMCksdGhpcy5fYWJzb2x1dGVTb3VyY2VzPXRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geS5jb21wdXRlU291cmNlVVJMKGEsZSx0KX0pLHRoaXMuc291cmNlUm9vdD1hLHRoaXMuc291cmNlc0NvbnRlbnQ9cyx0aGlzLl9tYXBwaW5ncz11LHRoaXMuX3NvdXJjZU1hcFVSTD10LHRoaXMuZmlsZT1sfWZ1bmN0aW9uIEUoKXt0aGlzLmdlbmVyYXRlZExpbmU9MCx0aGlzLmdlbmVyYXRlZENvbHVtbj0wLHRoaXMuc291cmNlPW51bGwsdGhpcy5vcmlnaW5hbExpbmU9bnVsbCx0aGlzLm9yaWdpbmFsQ29sdW1uPW51bGwsdGhpcy5uYW1lPW51bGx9ZnVuY3Rpb24gcihlLGkpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiBlJiYodD15LnBhcnNlU291cmNlTWFwSW5wdXQoZSkpO3ZhciBuPXkuZ2V0QXJnKHQsInZlcnNpb24iKSxyPXkuZ2V0QXJnKHQsInNlY3Rpb25zIik7aWYobiE9dGhpcy5fdmVyc2lvbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICIrbik7dGhpcy5fc291cmNlcz1uZXcgcCx0aGlzLl9uYW1lcz1uZXcgcDt2YXIgbz17bGluZTotMSxjb2x1bW46MH07dGhpcy5fc2VjdGlvbnM9ci5tYXAoZnVuY3Rpb24oZSl7aWYoZS51cmwpdGhyb3cgbmV3IEVycm9yKCJTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLiIpO3ZhciB0PXkuZ2V0QXJnKGUsIm9mZnNldCIpLG49eS5nZXRBcmcodCwibGluZSIpLHI9eS5nZXRBcmcodCwiY29sdW1uIik7aWYobjxvLmxpbmV8fG49PT1vLmxpbmUmJnI8by5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuIik7cmV0dXJuIG89dCx7Z2VuZXJhdGVkT2Zmc2V0OntnZW5lcmF0ZWRMaW5lOm4rMSxnZW5lcmF0ZWRDb2x1bW46cisxfSxjb25zdW1lcjpuZXcgYSh5LmdldEFyZyhlLCJtYXAiKSxpKX19KX1hLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaC5mcm9tU291cmNlTWFwKGUsdCl9LGEucHJvdG90eXBlLl92ZXJzaW9uPTMsYS5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwiX2dlbmVyYXRlZE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc3x8dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpLHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc319KSxhLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3M9bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsIl9vcmlnaW5hbE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfHx0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCksdGhpcy5fX29yaWdpbmFsTWFwcGluZ3N9fSksYS5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJBdCh0KTtyZXR1cm4iOyI9PT1ufHwiLCI9PT1ufSxhLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5ncyIpfSxhLkdFTkVSQVRFRF9PUkRFUj0xLGEuT1JJR0lOQUxfT1JERVI9MixhLkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsYS5MRUFTVF9VUFBFUl9CT1VORD0yLGEucHJvdG90eXBlLmVhY2hNYXBwaW5nPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXR8fG51bGw7c3dpdGNoKG58fGEuR0VORVJBVEVEX09SREVSKXtjYXNlIGEuR0VORVJBVEVEX09SREVSOnI9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7YnJlYWs7Y2FzZSBhLk9SSUdJTkFMX09SREVSOnI9dGhpcy5fb3JpZ2luYWxNYXBwaW5nczticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uIil9dmFyIG89dGhpcy5zb3VyY2VSb290O3IubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PT1lLnNvdXJjZT9udWxsOnRoaXMuX3NvdXJjZXMuYXQoZS5zb3VyY2UpO3JldHVybntzb3VyY2U6dD15LmNvbXB1dGVTb3VyY2VVUkwobyx0LHRoaXMuX3NvdXJjZU1hcFVSTCksZ2VuZXJhdGVkTGluZTplLmdlbmVyYXRlZExpbmUsZ2VuZXJhdGVkQ29sdW1uOmUuZ2VuZXJhdGVkQ29sdW1uLG9yaWdpbmFsTGluZTplLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjplLm9yaWdpbmFsQ29sdW1uLG5hbWU6bnVsbD09PWUubmFtZT9udWxsOnRoaXMuX25hbWVzLmF0KGUubmFtZSl9fSx0aGlzKS5mb3JFYWNoKGUsaSl9LGEucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0Zvcj1mdW5jdGlvbihlKXt2YXIgdD15LmdldEFyZyhlLCJsaW5lIiksbj17c291cmNlOnkuZ2V0QXJnKGUsInNvdXJjZSIpLG9yaWdpbmFsTGluZTp0LG9yaWdpbmFsQ29sdW1uOnkuZ2V0QXJnKGUsImNvbHVtbiIsMCl9O2lmKG4uc291cmNlPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChuLnNvdXJjZSksbi5zb3VyY2U8MClyZXR1cm5bXTt2YXIgcj1bXSxpPXRoaXMuX2ZpbmRNYXBwaW5nKG4sdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsdS5MRUFTVF9VUFBFUl9CT1VORCk7aWYoMDw9aSl7dmFyIG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpXTtpZih2b2lkIDA9PT1lLmNvbHVtbilmb3IodmFyIGE9by5vcmlnaW5hbExpbmU7byYmby5vcmlnaW5hbExpbmU9PT1hOylyLnB1c2goe2xpbmU6eS5nZXRBcmcobywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKG8sImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhvLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2ldO2Vsc2UgZm9yKHZhciBzPW8ub3JpZ2luYWxDb2x1bW47byYmby5vcmlnaW5hbExpbmU9PT10JiZvLm9yaWdpbmFsQ29sdW1uPT1zOylyLnB1c2goe2xpbmU6eS5nZXRBcmcobywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKG8sImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhvLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2ldfXJldHVybiByfSxuLlNvdXJjZU1hcENvbnN1bWVyPWEsKGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpKS5jb25zdW1lcj1hLGgucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXg9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO2lmKG51bGwhPXRoaXMuc291cmNlUm9vdCYmKG49eS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsbikpLHRoaXMuX3NvdXJjZXMuaGFzKG4pKXJldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2Yobik7Zm9yKHQ9MDt0PHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7Kyt0KWlmKHRoaXMuX2Fic29sdXRlU291cmNlc1t0XT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0saC5mcm9tU291cmNlTWFwPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSkscj1uLl9uYW1lcz1wLmZyb21BcnJheShlLl9uYW1lcy50b0FycmF5KCksITApLGk9bi5fc291cmNlcz1wLmZyb21BcnJheShlLl9zb3VyY2VzLnRvQXJyYXkoKSwhMCk7bi5zb3VyY2VSb290PWUuX3NvdXJjZVJvb3Qsbi5zb3VyY2VzQ29udGVudD1lLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG4uX3NvdXJjZXMudG9BcnJheSgpLG4uc291cmNlUm9vdCksbi5maWxlPWUuX2ZpbGUsbi5fc291cmNlTWFwVVJMPXQsbi5fYWJzb2x1dGVTb3VyY2VzPW4uX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geS5jb21wdXRlU291cmNlVVJMKG4uc291cmNlUm9vdCxlLHQpfSk7Zm9yKHZhciBvPWUuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpLGE9bi5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdLHM9bi5fX29yaWdpbmFsTWFwcGluZ3M9W10sdT0wLGw9by5sZW5ndGg7dTxsO3UrKyl7dmFyIGM9b1t1XSxmPW5ldyBFO2YuZ2VuZXJhdGVkTGluZT1jLmdlbmVyYXRlZExpbmUsZi5nZW5lcmF0ZWRDb2x1bW49Yy5nZW5lcmF0ZWRDb2x1bW4sYy5zb3VyY2UmJihmLnNvdXJjZT1pLmluZGV4T2YoYy5zb3VyY2UpLGYub3JpZ2luYWxMaW5lPWMub3JpZ2luYWxMaW5lLGYub3JpZ2luYWxDb2x1bW49Yy5vcmlnaW5hbENvbHVtbixjLm5hbWUmJihmLm5hbWU9ci5pbmRleE9mKGMubmFtZSkpLHMucHVzaChmKSksYS5wdXNoKGYpfXJldHVybiB3KG4uX19vcmlnaW5hbE1hcHBpbmdzLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLG59LGgucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGgucHJvdG90eXBlLCJzb3VyY2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpfX0pLGgucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvLGEscz0xLHU9MCxsPTAsYz0wLGY9MCxwPTAsaD1lLmxlbmd0aCxkPTAsbT17fSxnPXt9LHY9W10sYj1bXTtkPGg7KWlmKCI7Ij09PWUuY2hhckF0KGQpKXMrKyxkKyssdT0wO2Vsc2UgaWYoIiwiPT09ZS5jaGFyQXQoZCkpZCsrO2Vsc2V7Zm9yKChuPW5ldyBFKS5nZW5lcmF0ZWRMaW5lPXMsbz1kO288aCYmIXRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoZSxvKTtvKyspO2lmKGk9bVtyPWUuc2xpY2UoZCxvKV0pZCs9ci5sZW5ndGg7ZWxzZXtmb3IoaT1bXTtkPG87KV8uZGVjb2RlKGUsZCxnKSxhPWcudmFsdWUsZD1nLnJlc3QsaS5wdXNoKGEpO2lmKDI9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uIik7aWYoMz09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4iKTttW3JdPWl9bi5nZW5lcmF0ZWRDb2x1bW49dStpWzBdLHU9bi5nZW5lcmF0ZWRDb2x1bW4sMTxpLmxlbmd0aCYmKG4uc291cmNlPWYraVsxXSxmKz1pWzFdLG4ub3JpZ2luYWxMaW5lPWwraVsyXSxsPW4ub3JpZ2luYWxMaW5lLG4ub3JpZ2luYWxMaW5lKz0xLG4ub3JpZ2luYWxDb2x1bW49YytpWzNdLGM9bi5vcmlnaW5hbENvbHVtbiw0PGkubGVuZ3RoJiYobi5uYW1lPXAraVs0XSxwKz1pWzRdKSksYi5wdXNoKG4pLCJudW1iZXIiPT10eXBlb2Ygbi5vcmlnaW5hbExpbmUmJnYucHVzaChuKX13KGIseS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCksdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzPWIsdyh2LHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzPXZ9LGgucHJvdG90eXBlLl9maW5kTWFwcGluZz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYoZVtuXTw9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAiK2Vbbl0pO2lmKGVbcl08MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICIrZVtyXSk7cmV0dXJuIHUuc2VhcmNoKGUsdCxpLG8pfSxoLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsrK2Upe3ZhciB0PXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2VdO2lmKGUrMTx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpe3ZhciBuPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2UrMV07aWYodC5nZW5lcmF0ZWRMaW5lPT09bi5nZW5lcmF0ZWRMaW5lKXt0Lmxhc3RHZW5lcmF0ZWRDb2x1bW49bi5nZW5lcmF0ZWRDb2x1bW4tMTtjb250aW51ZX19dC5sYXN0R2VuZXJhdGVkQ29sdW1uPTEvMH19LGgucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9e2dlbmVyYXRlZExpbmU6eS5nZXRBcmcoZSwibGluZSIpLGdlbmVyYXRlZENvbHVtbjp5LmdldEFyZyhlLCJjb2x1bW4iKX0sbj10aGlzLl9maW5kTWFwcGluZyh0LHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLCJnZW5lcmF0ZWRMaW5lIiwiZ2VuZXJhdGVkQ29sdW1uIix5LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLHkuZ2V0QXJnKGUsImJpYXMiLGEuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZigwPD1uKXt2YXIgcj10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tuXTtpZihyLmdlbmVyYXRlZExpbmU9PT10LmdlbmVyYXRlZExpbmUpe3ZhciBpPXkuZ2V0QXJnKHIsInNvdXJjZSIsbnVsbCk7bnVsbCE9PWkmJihpPXRoaXMuX3NvdXJjZXMuYXQoaSksaT15LmNvbXB1dGVTb3VyY2VVUkwodGhpcy5zb3VyY2VSb290LGksdGhpcy5fc291cmNlTWFwVVJMKSk7dmFyIG89eS5nZXRBcmcociwibmFtZSIsbnVsbCk7cmV0dXJuIG51bGwhPT1vJiYobz10aGlzLl9uYW1lcy5hdChvKSkse3NvdXJjZTppLGxpbmU6eS5nZXRBcmcociwib3JpZ2luYWxMaW5lIixudWxsKSxjb2x1bW46eS5nZXRBcmcociwib3JpZ2luYWxDb2x1bW4iLG51bGwpLG5hbWU6b319fXJldHVybntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX0saC5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc291cmNlc0NvbnRlbnQmJih0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aD49dGhpcy5fc291cmNlcy5zaXplKCkmJiF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9KSl9LGgucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5zb3VyY2VzQ29udGVudClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLl9maW5kU291cmNlSW5kZXgoZSk7aWYoMDw9bilyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtuXTt2YXIgcixpPWU7aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYoaT15LnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCxpKSksbnVsbCE9dGhpcy5zb3VyY2VSb290JiYocj15LnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKXt2YXIgbz1pLnJlcGxhY2UoL15maWxlOlwvXC8vLCIiKTtpZigiZmlsZSI9PXIuc2NoZW1lJiZ0aGlzLl9zb3VyY2VzLmhhcyhvKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YobyldO2lmKCghci5wYXRofHwiLyI9PXIucGF0aCkmJnRoaXMuX3NvdXJjZXMuaGFzKCIvIitpKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoIi8iK2kpXX1pZih0KXJldHVybiBudWxsO3Rocm93IG5ldyBFcnJvcignIicraSsnIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0saC5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9eS5nZXRBcmcoZSwic291cmNlIik7aWYoKHQ9dGhpcy5fZmluZFNvdXJjZUluZGV4KHQpKTwwKXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGwsbGFzdENvbHVtbjpudWxsfTt2YXIgbj17c291cmNlOnQsb3JpZ2luYWxMaW5lOnkuZ2V0QXJnKGUsImxpbmUiKSxvcmlnaW5hbENvbHVtbjp5LmdldEFyZyhlLCJjb2x1bW4iKX0scj10aGlzLl9maW5kTWFwcGluZyhuLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsIm9yaWdpbmFsTGluZSIsIm9yaWdpbmFsQ29sdW1uIix5LmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLHkuZ2V0QXJnKGUsImJpYXMiLGEuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZigwPD1yKXt2YXIgaT10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW3JdO2lmKGkuc291cmNlPT09bi5zb3VyY2UpcmV0dXJue2xpbmU6eS5nZXRBcmcoaSwiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKGksImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhpLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fSxuLkJhc2ljU291cmNlTWFwQ29uc3VtZXI9aCwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWEsci5wcm90b3R5cGUuX3ZlcnNpb249MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInNvdXJjZXMiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKylmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoO24rKyllLnB1c2godGhpcy5fc2VjdGlvbnNbdF0uY29uc3VtZXIuc291cmNlc1tuXSk7cmV0dXJuIGV9fSksci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD17Z2VuZXJhdGVkTGluZTp5LmdldEFyZyhlLCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOnkuZ2V0QXJnKGUsImNvbHVtbiIpfSxuPXUuc2VhcmNoKHQsdGhpcy5fc2VjdGlvbnMsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gbnx8ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1ufSkscj10aGlzLl9zZWN0aW9uc1tuXTtyZXR1cm4gcj9yLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6dC5nZW5lcmF0ZWRMaW5lLShyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjp0LmdlbmVyYXRlZENvbHVtbi0oci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXQuZ2VuZXJhdGVkTGluZT9yLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxiaWFzOmUuYmlhc30pOntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX0sci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKX0pfSxyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgcj10aGlzLl9zZWN0aW9uc1tuXS5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGUsITApO2lmKHIpcmV0dXJuIHJ9aWYodClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyl9LHIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKyl7dmFyIG49dGhpcy5fc2VjdGlvbnNbdF07aWYoLTEhPT1uLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgoeS5nZXRBcmcoZSwic291cmNlIikpKXt2YXIgcj1uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGUpO2lmKHIpcmV0dXJue2xpbmU6ci5saW5lKyhuLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjpyLmNvbHVtbisobi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXIubGluZT9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKX19fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGx9fSxyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtuKyspZm9yKHZhciByPXRoaXMuX3NlY3Rpb25zW25dLGk9ci5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3Msbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dLHM9ci5jb25zdW1lci5fc291cmNlcy5hdChhLnNvdXJjZSk7cz15LmNvbXB1dGVTb3VyY2VVUkwoci5jb25zdW1lci5zb3VyY2VSb290LHMsdGhpcy5fc291cmNlTWFwVVJMKSx0aGlzLl9zb3VyY2VzLmFkZChzKSxzPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihzKTt2YXIgdT1udWxsO2EubmFtZSYmKHU9ci5jb25zdW1lci5fbmFtZXMuYXQoYS5uYW1lKSx0aGlzLl9uYW1lcy5hZGQodSksdT10aGlzLl9uYW1lcy5pbmRleE9mKHUpKTt2YXIgbD17c291cmNlOnMsZ2VuZXJhdGVkTGluZTphLmdlbmVyYXRlZExpbmUrKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksZ2VuZXJhdGVkQ29sdW1uOmEuZ2VuZXJhdGVkQ29sdW1uKyhyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09YS5nZW5lcmF0ZWRMaW5lP3IuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLG9yaWdpbmFsTGluZTphLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjphLm9yaWdpbmFsQ29sdW1uLG5hbWU6dX07dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2gobCksIm51bWJlciI9PXR5cGVvZiBsLm9yaWdpbmFsTGluZSYmdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChsKX13KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyx5LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKSx3KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpfSxuLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcj1yfSx7Ii4vYXJyYXktc2V0IjoxNDUsIi4vYmFzZTY0LXZscSI6MTQ2LCIuL2JpbmFyeS1zZWFyY2giOjE0OCwiLi9xdWljay1zb3J0IjoxNTAsIi4vdXRpbCI6MTU0fV0sMTUyOltmdW5jdGlvbihlLHQsbil7dmFyIGQ9ZSgiLi9iYXNlNjQtdmxxIiksbT1lKCIuL3V0aWwiKSxyPWUoIi4vYXJyYXktc2V0IikuQXJyYXlTZXQsaT1lKCIuL21hcHBpbmctbGlzdCIpLk1hcHBpbmdMaXN0O2Z1bmN0aW9uIGEoZSl7ZXx8KGU9e30pLHRoaXMuX2ZpbGU9bS5nZXRBcmcoZSwiZmlsZSIsbnVsbCksdGhpcy5fc291cmNlUm9vdD1tLmdldEFyZyhlLCJzb3VyY2VSb290IixudWxsKSx0aGlzLl9za2lwVmFsaWRhdGlvbj1tLmdldEFyZyhlLCJza2lwVmFsaWRhdGlvbiIsITEpLHRoaXMuX3NvdXJjZXM9bmV3IHIsdGhpcy5fbmFtZXM9bmV3IHIsdGhpcy5fbWFwcGluZ3M9bmV3IGksdGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGx9YS5wcm90b3R5cGUuX3ZlcnNpb249MyxhLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24ocil7dmFyIGk9ci5zb3VyY2VSb290LG89bmV3IGEoe2ZpbGU6ci5maWxlLHNvdXJjZVJvb3Q6aX0pO3JldHVybiByLmVhY2hNYXBwaW5nKGZ1bmN0aW9uKGUpe3ZhciB0PXtnZW5lcmF0ZWQ6e2xpbmU6ZS5nZW5lcmF0ZWRMaW5lLGNvbHVtbjplLmdlbmVyYXRlZENvbHVtbn19O251bGwhPWUuc291cmNlJiYodC5zb3VyY2U9ZS5zb3VyY2UsbnVsbCE9aSYmKHQuc291cmNlPW0ucmVsYXRpdmUoaSx0LnNvdXJjZSkpLHQub3JpZ2luYWw9e2xpbmU6ZS5vcmlnaW5hbExpbmUsY29sdW1uOmUub3JpZ2luYWxDb2x1bW59LG51bGwhPWUubmFtZSYmKHQubmFtZT1lLm5hbWUpKSxvLmFkZE1hcHBpbmcodCl9KSxyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lO251bGwhPT1pJiYodD1tLnJlbGF0aXZlKGksZSkpLG8uX3NvdXJjZXMuaGFzKHQpfHxvLl9zb3VyY2VzLmFkZCh0KTt2YXIgbj1yLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9biYmby5zZXRTb3VyY2VDb250ZW50KGUsbil9KSxvfSxhLnByb3RvdHlwZS5hZGRNYXBwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PW0uZ2V0QXJnKGUsImdlbmVyYXRlZCIpLG49bS5nZXRBcmcoZSwib3JpZ2luYWwiLG51bGwpLHI9bS5nZXRBcmcoZSwic291cmNlIixudWxsKSxpPW0uZ2V0QXJnKGUsIm5hbWUiLG51bGwpO3RoaXMuX3NraXBWYWxpZGF0aW9ufHx0aGlzLl92YWxpZGF0ZU1hcHBpbmcodCxuLHIsaSksbnVsbCE9ciYmKHI9U3RyaW5nKHIpLHRoaXMuX3NvdXJjZXMuaGFzKHIpfHx0aGlzLl9zb3VyY2VzLmFkZChyKSksbnVsbCE9aSYmKGk9U3RyaW5nKGkpLHRoaXMuX25hbWVzLmhhcyhpKXx8dGhpcy5fbmFtZXMuYWRkKGkpKSx0aGlzLl9tYXBwaW5ncy5hZGQoe2dlbmVyYXRlZExpbmU6dC5saW5lLGdlbmVyYXRlZENvbHVtbjp0LmNvbHVtbixvcmlnaW5hbExpbmU6bnVsbCE9biYmbi5saW5lLG9yaWdpbmFsQ29sdW1uOm51bGwhPW4mJm4uY29sdW1uLHNvdXJjZTpyLG5hbWU6aX0pfSxhLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtudWxsIT10aGlzLl9zb3VyY2VSb290JiYobj1tLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsbikpLG51bGwhPXQ/KHRoaXMuX3NvdXJjZXNDb250ZW50c3x8KHRoaXMuX3NvdXJjZXNDb250ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLl9zb3VyY2VzQ29udGVudHNbbS50b1NldFN0cmluZyhuKV09dCk6dGhpcy5fc291cmNlc0NvbnRlbnRzJiYoZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1ttLnRvU2V0U3RyaW5nKG4pXSwwPT09T2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGgmJih0aGlzLl9zb3VyY2VzQ29udGVudHM9bnVsbCkpfSxhLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcD1mdW5jdGlvbihpLGUsbyl7dmFyIGE9ZTtpZihudWxsPT1lKXtpZihudWxsPT1pLmZpbGUpdGhyb3cgbmV3IEVycm9yKCdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgb3IgdGhlIHNvdXJjZSBtYXBcJ3MgImZpbGUiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nKTthPWkuZmlsZX12YXIgcz10aGlzLl9zb3VyY2VSb290O251bGwhPXMmJihhPW0ucmVsYXRpdmUocyxhKSk7dmFyIHU9bmV3IHIsbD1uZXcgcjt0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5zb3VyY2U9PT1hJiZudWxsIT1lLm9yaWdpbmFsTGluZSl7dmFyIHQ9aS5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufSk7bnVsbCE9dC5zb3VyY2UmJihlLnNvdXJjZT10LnNvdXJjZSxudWxsIT1vJiYoZS5zb3VyY2U9bS5qb2luKG8sZS5zb3VyY2UpKSxudWxsIT1zJiYoZS5zb3VyY2U9bS5yZWxhdGl2ZShzLGUuc291cmNlKSksZS5vcmlnaW5hbExpbmU9dC5saW5lLGUub3JpZ2luYWxDb2x1bW49dC5jb2x1bW4sbnVsbCE9dC5uYW1lJiYoZS5uYW1lPXQubmFtZSkpfXZhciBuPWUuc291cmNlO251bGw9PW58fHUuaGFzKG4pfHx1LmFkZChuKTt2YXIgcj1lLm5hbWU7bnVsbD09cnx8bC5oYXMocil8fGwuYWRkKHIpfSx0aGlzKSx0aGlzLl9zb3VyY2VzPXUsdGhpcy5fbmFtZXM9bCxpLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1pLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9dCYmKG51bGwhPW8mJihlPW0uam9pbihvLGUpKSxudWxsIT1zJiYoZT1tLnJlbGF0aXZlKHMsZSkpLHRoaXMuc2V0U291cmNlQ29udGVudChlLHQpKX0sdGhpcyl9LGEucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4scil7aWYodCYmIm51bWJlciIhPXR5cGVvZiB0LmxpbmUmJiJudW1iZXIiIT10eXBlb2YgdC5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0IHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyBudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLiIpO2lmKCghKGUmJiJsaW5lImluIGUmJiJjb2x1bW4iaW4gZSYmMDxlLmxpbmUmJjA8PWUuY29sdW1uKXx8dHx8bnx8cikmJiEoZSYmImxpbmUiaW4gZSYmImNvbHVtbiJpbiBlJiZ0JiYibGluZSJpbiB0JiYiY29sdW1uImluIHQmJjA8ZS5saW5lJiYwPD1lLmNvbHVtbiYmMDx0LmxpbmUmJjA8PXQuY29sdW1uJiZuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFwcGluZzogIitKU09OLnN0cmluZ2lmeSh7Z2VuZXJhdGVkOmUsc291cmNlOm4sb3JpZ2luYWw6dCxuYW1lOnJ9KSl9LGEucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG4scixpPTAsbz0xLGE9MCxzPTAsdT0wLGw9MCxjPSIiLGY9dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpLHA9MCxoPWYubGVuZ3RoO3A8aDtwKyspe2lmKGU9IiIsKHQ9ZltwXSkuZ2VuZXJhdGVkTGluZSE9PW8pZm9yKGk9MDt0LmdlbmVyYXRlZExpbmUhPT1vOyllKz0iOyIsbysrO2Vsc2UgaWYoMDxwKXtpZighbS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCh0LGZbcC0xXSkpY29udGludWU7ZSs9IiwifWUrPWQuZW5jb2RlKHQuZ2VuZXJhdGVkQ29sdW1uLWkpLGk9dC5nZW5lcmF0ZWRDb2x1bW4sbnVsbCE9dC5zb3VyY2UmJihyPXRoaXMuX3NvdXJjZXMuaW5kZXhPZih0LnNvdXJjZSksZSs9ZC5lbmNvZGUoci1sKSxsPXIsZSs9ZC5lbmNvZGUodC5vcmlnaW5hbExpbmUtMS1zKSxzPXQub3JpZ2luYWxMaW5lLTEsZSs9ZC5lbmNvZGUodC5vcmlnaW5hbENvbHVtbi1hKSxhPXQub3JpZ2luYWxDb2x1bW4sbnVsbCE9dC5uYW1lJiYobj10aGlzLl9uYW1lcy5pbmRleE9mKHQubmFtZSksZSs9ZC5lbmNvZGUobi11KSx1PW4pKSxjKz1lfXJldHVybiBjfSxhLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudD1mdW5jdGlvbihlLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtpZighdGhpcy5fc291cmNlc0NvbnRlbnRzKXJldHVybiBudWxsO251bGwhPW4mJihlPW0ucmVsYXRpdmUobixlKSk7dmFyIHQ9bS50b1NldFN0cmluZyhlKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cyx0KT90aGlzLl9zb3VyY2VzQ29udGVudHNbdF06bnVsbH0sdGhpcyl9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOnRoaXMuX3ZlcnNpb24sc291cmNlczp0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxuYW1lczp0aGlzLl9uYW1lcy50b0FycmF5KCksbWFwcGluZ3M6dGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKX07cmV0dXJuIG51bGwhPXRoaXMuX2ZpbGUmJihlLmZpbGU9dGhpcy5fZmlsZSksbnVsbCE9dGhpcy5fc291cmNlUm9vdCYmKGUuc291cmNlUm9vdD10aGlzLl9zb3VyY2VSb290KSx0aGlzLl9zb3VyY2VzQ29udGVudHMmJihlLnNvdXJjZXNDb250ZW50PXRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoZS5zb3VyY2VzLGUuc291cmNlUm9vdCkpLGV9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpfSxuLlNvdXJjZU1hcEdlbmVyYXRvcj1hfSx7Ii4vYXJyYXktc2V0IjoxNDUsIi4vYmFzZTY0LXZscSI6MTQ2LCIuL21hcHBpbmctbGlzdCI6MTQ5LCIuL3V0aWwiOjE1NH1dLDE1MzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vc291cmNlLW1hcC1nZW5lcmF0b3IiKS5Tb3VyY2VNYXBHZW5lcmF0b3IscD1lKCIuL3V0aWwiKSxoPS8oXHI/XG4pLyxvPSIkJCRpc1NvdXJjZU5vZGUkJCQiO2Z1bmN0aW9uIGQoZSx0LG4scixpKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuc291cmNlQ29udGVudHM9e30sdGhpcy5saW5lPW51bGw9PWU/bnVsbDplLHRoaXMuY29sdW1uPW51bGw9PXQ/bnVsbDp0LHRoaXMuc291cmNlPW51bGw9PW4/bnVsbDpuLHRoaXMubmFtZT1udWxsPT1pP251bGw6aSx0aGlzW29dPSEwLG51bGwhPXImJnRoaXMuYWRkKHIpfWQuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXA9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPW5ldyBkLG89ZS5zcGxpdChoKSxhPTAscz1mdW5jdGlvbigpe3JldHVybiBlKCkrKGUoKXx8IiIpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gYTxvLmxlbmd0aD9vW2ErK106dm9pZCAwfX0sdT0xLGw9MCxjPW51bGw7cmV0dXJuIG4uZWFjaE1hcHBpbmcoZnVuY3Rpb24oZSl7aWYobnVsbCE9PWMpe2lmKCEodTxlLmdlbmVyYXRlZExpbmUpKXt2YXIgdD0obj1vW2FdfHwiIikuc3Vic3RyKDAsZS5nZW5lcmF0ZWRDb2x1bW4tbCk7cmV0dXJuIG9bYV09bi5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4tbCksbD1lLmdlbmVyYXRlZENvbHVtbixmKGMsdCksdm9pZChjPWUpfWYoYyxzKCkpLHUrKyxsPTB9Zm9yKDt1PGUuZ2VuZXJhdGVkTGluZTspaS5hZGQocygpKSx1Kys7aWYobDxlLmdlbmVyYXRlZENvbHVtbil7dmFyIG49b1thXXx8IiI7aS5hZGQobi5zdWJzdHIoMCxlLmdlbmVyYXRlZENvbHVtbikpLG9bYV09bi5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4pLGw9ZS5nZW5lcmF0ZWRDb2x1bW59Yz1lfSx0aGlzKSxhPG8ubGVuZ3RoJiYoYyYmZihjLHMoKSksaS5hZGQoby5zcGxpY2UoYSkuam9pbigiIikpKSxuLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9dCYmKG51bGwhPXImJihlPXAuam9pbihyLGUpKSxpLnNldFNvdXJjZUNvbnRlbnQoZSx0KSl9KSxpO2Z1bmN0aW9uIGYoZSx0KXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZS5zb3VyY2UpaS5hZGQodCk7ZWxzZXt2YXIgbj1yP3Auam9pbihyLGUuc291cmNlKTplLnNvdXJjZTtpLmFkZChuZXcgZChlLm9yaWdpbmFsTGluZSxlLm9yaWdpbmFsQ29sdW1uLG4sdCxlLm5hbWUpKX19fSxkLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5hZGQoZSl9LHRoaXMpO2Vsc2V7aWYoIWVbb10mJiJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCAiK2UpO2UmJnRoaXMuY2hpbGRyZW4ucHVzaChlKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUucHJlcGVuZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD1lLmxlbmd0aC0xOzA8PXQ7dC0tKXRoaXMucHJlcGVuZChlW3RdKTtlbHNle2lmKCFlW29dJiYic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgIitlKTt0aGlzLmNoaWxkcmVuLnVuc2hpZnQoZSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO248cjtuKyspKHQ9dGhpcy5jaGlsZHJlbltuXSlbb10/dC53YWxrKGUpOiIiIT09dCYmZSh0LHtzb3VyY2U6dGhpcy5zb3VyY2UsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1uLG5hbWU6dGhpcy5uYW1lfSl9LGQucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2lmKDA8cil7Zm9yKHQ9W10sbj0wO248ci0xO24rKyl0LnB1c2godGhpcy5jaGlsZHJlbltuXSksdC5wdXNoKGUpO3QucHVzaCh0aGlzLmNoaWxkcmVuW25dKSx0aGlzLmNoaWxkcmVuPXR9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnJlcGxhY2VSaWdodD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV07cmV0dXJuIG5bb10/bi5yZXBsYWNlUmlnaHQoZSx0KToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXT1uLnJlcGxhY2UoZSx0KTp0aGlzLmNoaWxkcmVuLnB1c2goIiIucmVwbGFjZShlLHQpKSx0aGlzfSxkLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5zb3VyY2VDb250ZW50c1twLnRvU2V0U3RyaW5nKGUpXT10fSxkLnByb3RvdHlwZS53YWxrU291cmNlQ29udGVudHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj10aGlzLmNoaWxkcmVuLmxlbmd0aDt0PG47dCsrKXRoaXMuY2hpbGRyZW5bdF1bb10mJnRoaXMuY2hpbGRyZW5bdF0ud2Fsa1NvdXJjZUNvbnRlbnRzKGUpO3ZhciByPU9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUocC5mcm9tU2V0U3RyaW5nKHJbdF0pLHRoaXMuc291cmNlQ29udGVudHNbclt0XV0pfSxkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PSIiO3JldHVybiB0aGlzLndhbGsoZnVuY3Rpb24oZSl7dCs9ZX0pLHR9LGQucHJvdG90eXBlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcD1mdW5jdGlvbihlKXt2YXIgaT17Y29kZToiIixsaW5lOjEsY29sdW1uOjB9LG89bmV3IHIoZSksYT0hMSxzPW51bGwsdT1udWxsLGw9bnVsbCxjPW51bGw7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihlLHQpe2kuY29kZSs9ZSxudWxsIT09dC5zb3VyY2UmJm51bGwhPT10LmxpbmUmJm51bGwhPT10LmNvbHVtbj8ocz09PXQuc291cmNlJiZ1PT09dC5saW5lJiZsPT09dC5jb2x1bW4mJmM9PT10Lm5hbWV8fG8uYWRkTWFwcGluZyh7c291cmNlOnQuc291cmNlLG9yaWdpbmFsOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59LGdlbmVyYXRlZDp7bGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufSxuYW1lOnQubmFtZX0pLHM9dC5zb3VyY2UsdT10LmxpbmUsbD10LmNvbHVtbixjPXQubmFtZSxhPSEwKTphJiYoby5hZGRNYXBwaW5nKHtnZW5lcmF0ZWQ6e2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn19KSxzPW51bGwsYT0hMSk7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKTEwPT09ZS5jaGFyQ29kZUF0KG4pPyhpLmxpbmUrKyxpLmNvbHVtbj0wLG4rMT09PXI/KHM9bnVsbCxhPSExKTphJiZvLmFkZE1hcHBpbmcoe3NvdXJjZTp0LnNvdXJjZSxvcmlnaW5hbDp7bGluZTp0LmxpbmUsY29sdW1uOnQuY29sdW1ufSxnZW5lcmF0ZWQ6e2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn0sbmFtZTp0Lm5hbWV9KSk6aS5jb2x1bW4rK30pLHRoaXMud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uKGUsdCl7by5zZXRTb3VyY2VDb250ZW50KGUsdCl9KSx7Y29kZTppLmNvZGUsbWFwOm99fSxuLlNvdXJjZU5vZGU9ZH0seyIuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yIjoxNTIsIi4vdXRpbCI6MTU0fV0sMTU0OltmdW5jdGlvbihlLHQsdSl7dS5nZXRBcmc9ZnVuY3Rpb24oZSx0LG4pe2lmKHQgaW4gZSlyZXR1cm4gZVt0XTtpZigzPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKX07dmFyIG49L14oPzooW1x3K1wtLl0rKTopP1wvXC8oPzooXHcrOlx3KylAKT8oW1x3Li1dKikoPzo6KFxkKykpPyguKikkLyxvPS9eZGF0YTouK1wsLiskLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUubWF0Y2gobik7cmV0dXJuIHQ/e3NjaGVtZTp0WzFdLGF1dGg6dFsyXSxob3N0OnRbM10scG9ydDp0WzRdLHBhdGg6dFs1XX06bnVsbH1mdW5jdGlvbiBjKGUpe3ZhciB0PSIiO3JldHVybiBlLnNjaGVtZSYmKHQrPWUuc2NoZW1lKyI6IiksdCs9Ii8vIixlLmF1dGgmJih0Kz1lLmF1dGgrIkAiKSxlLmhvc3QmJih0Kz1lLmhvc3QpLGUucG9ydCYmKHQrPSI6IitlLnBvcnQpLGUucGF0aCYmKHQrPWUucGF0aCksdH1mdW5jdGlvbiBhKGUpe3ZhciB0PWUsbj1sKGUpO2lmKG4pe2lmKCFuLnBhdGgpcmV0dXJuIGU7dD1uLnBhdGh9Zm9yKHZhciByLGk9dS5pc0Fic29sdXRlKHQpLG89dC5zcGxpdCgvXC8rLyksYT0wLHM9by5sZW5ndGgtMTswPD1zO3MtLSkiLiI9PT0ocj1vW3NdKT9vLnNwbGljZShzLDEpOiIuLiI9PT1yP2ErKzowPGEmJigiIj09PXI/KG8uc3BsaWNlKHMrMSxhKSxhPTApOihvLnNwbGljZShzLDIpLGEtLSkpO3JldHVybiIiPT09KHQ9by5qb2luKCIvIikpJiYodD1pPyIvIjoiLiIpLG4/KG4ucGF0aD10LGMobikpOnR9ZnVuY3Rpb24gcyhlLHQpeyIiPT09ZSYmKGU9Ii4iKSwiIj09PXQmJih0PSIuIik7dmFyIG49bCh0KSxyPWwoZSk7aWYociYmKGU9ci5wYXRofHwiLyIpLG4mJiFuLnNjaGVtZSlyZXR1cm4gciYmKG4uc2NoZW1lPXIuc2NoZW1lKSxjKG4pO2lmKG58fHQubWF0Y2gobykpcmV0dXJuIHQ7aWYociYmIXIuaG9zdCYmIXIucGF0aClyZXR1cm4gci5ob3N0PXQsYyhyKTt2YXIgaT0iLyI9PT10LmNoYXJBdCgwKT90OmEoZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QpO3JldHVybiByPyhyLnBhdGg9aSxjKHIpKTppfXUudXJsUGFyc2U9bCx1LnVybEdlbmVyYXRlPWMsdS5ub3JtYWxpemU9YSx1LmpvaW49cyx1LmlzQWJzb2x1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCl8fG4udGVzdChlKX0sdS5yZWxhdGl2ZT1mdW5jdGlvbihlLHQpeyIiPT09ZSYmKGU9Ii4iKSxlPWUucmVwbGFjZSgvXC8kLywiIik7Zm9yKHZhciBuPTA7MCE9PXQuaW5kZXhPZihlKyIvIik7KXt2YXIgcj1lLmxhc3RJbmRleE9mKCIvIik7aWYocjwwKXJldHVybiB0O2lmKChlPWUuc2xpY2UoMCxyKSkubWF0Y2goL14oW15cL10rOlwvKT9cLyokLykpcmV0dXJuIHQ7KytufXJldHVybiBBcnJheShuKzEpLmpvaW4oIi4uLyIpK3Quc3Vic3RyKGUubGVuZ3RoKzEpfTt2YXIgcj0hKCJfX3Byb3RvX18iaW4gT2JqZWN0LmNyZWF0ZShudWxsKSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBmKGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO2lmKHQ8OSlyZXR1cm4hMTtpZig5NSE9PWUuY2hhckNvZGVBdCh0LTEpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTIpfHwxMTEhPT1lLmNoYXJDb2RlQXQodC0zKXx8MTE2IT09ZS5jaGFyQ29kZUF0KHQtNCl8fDExMSE9PWUuY2hhckNvZGVBdCh0LTUpfHwxMTQhPT1lLmNoYXJDb2RlQXQodC02KXx8MTEyIT09ZS5jaGFyQ29kZUF0KHQtNyl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOCl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOSkpcmV0dXJuITE7Zm9yKHZhciBuPXQtMTA7MDw9bjtuLS0paWYoMzYhPT1lLmNoYXJDb2RlQXQobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlPT09dD8wOm51bGw9PT1lPzE6bnVsbD09PXQ/LTE6dDxlPzE6LTF9dS50b1NldFN0cmluZz1yP2k6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSk/IiQiK2U6ZX0sdS5mcm9tU2V0U3RyaW5nPXI/aTpmdW5jdGlvbihlKXtyZXR1cm4gZihlKT9lLnNsaWNlKDEpOmV9LHUuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXAoZS5zb3VyY2UsdC5zb3VyY2UpO3JldHVybiAwIT09cj9yOjAhPShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOjAhPShyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbil8fG4/cjowIT0ocj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/cjowIT0ocj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lKT9yOnAoZS5uYW1lLHQubmFtZSl9LHUuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmU7cmV0dXJuIDAhPT1yP3I6MCE9KHI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pfHxuP3I6MCE9PShyPXAoZS5zb3VyY2UsdC5zb3VyY2UpKT9yOjAhPShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOjAhPShyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbik/cjpwKGUubmFtZSx0Lm5hbWUpfSx1LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PW4/bjowIT0obj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/bjowIT09KG49cChlLnNvdXJjZSx0LnNvdXJjZSkpP246MCE9KG49ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmUpP246MCE9KG49ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uKT9uOnAoZS5uYW1lLHQubmFtZSl9LHUucGFyc2VTb3VyY2VNYXBJbnB1dD1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZShlLnJlcGxhY2UoL15cKV19J1teXG5dKlxuLywiIikpfSx1LmNvbXB1dGVTb3VyY2VVUkw9ZnVuY3Rpb24oZSx0LG4pe2lmKHQ9dHx8IiIsZSYmKCIvIiE9PWVbZS5sZW5ndGgtMV0mJiIvIiE9PXRbMF0mJihlKz0iLyIpLHQ9ZSt0KSxuKXt2YXIgcj1sKG4pO2lmKCFyKXRocm93IG5ldyBFcnJvcigic291cmNlTWFwVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWQiKTtpZihyLnBhdGgpe3ZhciBpPXIucGF0aC5sYXN0SW5kZXhPZigiLyIpOzA8PWkmJihyLnBhdGg9ci5wYXRoLnN1YnN0cmluZygwLGkrMSkpfXQ9cyhjKHIpLHQpfXJldHVybiBhKHQpfX0se31dLDE1NTpbZnVuY3Rpb24oZSx0LG4pe24uU291cmNlTWFwR2VuZXJhdG9yPWUoIi4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yIikuU291cmNlTWFwR2VuZXJhdG9yLG4uU291cmNlTWFwQ29uc3VtZXI9ZSgiLi9saWIvc291cmNlLW1hcC1jb25zdW1lciIpLlNvdXJjZU1hcENvbnN1bWVyLG4uU291cmNlTm9kZT1lKCIuL2xpYi9zb3VyY2Utbm9kZSIpLlNvdXJjZU5vZGV9LHsiLi9saWIvc291cmNlLW1hcC1jb25zdW1lciI6MTUxLCIuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvciI6MTUyLCIuL2xpYi9zb3VyY2Utbm9kZSI6MTUzfV0sMTU2OltmdW5jdGlvbihuLGUsaSl7KGZ1bmN0aW9uKHUpe3ZhciBsPW4oIi4vbGliL3JlcXVlc3QiKSxlPW4oIi4vbGliL3Jlc3BvbnNlIiksYz1uKCJ4dGVuZCIpLHQ9bigiYnVpbHRpbi1zdGF0dXMtY29kZXMiKSxmPW4oInVybCIpLHI9aTtyLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtlPSJzdHJpbmciPT10eXBlb2YgZT9mLnBhcnNlKGUpOmMoZSk7dmFyIG49LTE9PT11LmxvY2F0aW9uLnByb3RvY29sLnNlYXJjaCgvXmh0dHBzPzokLyk/Imh0dHA6IjoiIixyPWUucHJvdG9jb2x8fG4saT1lLmhvc3RuYW1lfHxlLmhvc3Qsbz1lLnBvcnQsYT1lLnBhdGh8fCIvIjtpJiYtMSE9PWkuaW5kZXhPZigiOiIpJiYoaT0iWyIraSsiXSIpLGUudXJsPShpP3IrIi8vIitpOiIiKSsobz8iOiIrbzoiIikrYSxlLm1ldGhvZD0oZS5tZXRob2R8fCJHRVQiKS50b1VwcGVyQ2FzZSgpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9O3ZhciBzPW5ldyBsKGUpO3JldHVybiB0JiZzLm9uKCJyZXNwb25zZSIsdCksc30sci5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLnJlcXVlc3QoZSx0KTtyZXR1cm4gbi5lbmQoKSxufSxyLkNsaWVudFJlcXVlc3Q9bCxyLkluY29taW5nTWVzc2FnZT1lLkluY29taW5nTWVzc2FnZSxyLkFnZW50PWZ1bmN0aW9uKCl7fSxyLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzPTQsci5nbG9iYWxBZ2VudD1uZXcgci5BZ2VudCxyLlNUQVRVU19DT0RFUz10LHIuTUVUSE9EUz1bIkNIRUNLT1VUIiwiQ09OTkVDVCIsIkNPUFkiLCJERUxFVEUiLCJHRVQiLCJIRUFEIiwiTE9DSyIsIk0tU0VBUkNIIiwiTUVSR0UiLCJNS0FDVElWSVRZIiwiTUtDT0wiLCJNT1ZFIiwiTk9USUZZIiwiT1BUSU9OUyIsIlBBVENIIiwiUE9TVCIsIlBST1BGSU5EIiwiUFJPUFBBVENIIiwiUFVSR0UiLCJQVVQiLCJSRVBPUlQiLCJTRUFSQ0giLCJTVUJTQ1JJQkUiLCJUUkFDRSIsIlVOTE9DSyIsIlVOU1VCU0NSSUJFIl19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9saWIvcmVxdWVzdCI6MTU4LCIuL2xpYi9yZXNwb25zZSI6MTU5LCJidWlsdGluLXN0YXR1cy1jb2RlcyI6NSx1cmw6MTYyLHh0ZW5kOjE2NX1dLDE1NzpbZnVuY3Rpb24oZSx0LHMpeyhmdW5jdGlvbihlKXtzLmZldGNoPWEoZS5mZXRjaCkmJmEoZS5SZWFkYWJsZVN0cmVhbSkscy53cml0YWJsZVN0cmVhbT1hKGUuV3JpdGFibGVTdHJlYW0pLHMuYWJvcnRDb250cm9sbGVyPWEoZS5BYm9ydENvbnRyb2xsZXIpLHMuYmxvYkNvbnN0cnVjdG9yPSExO3RyeXtuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEpXSkscy5ibG9iQ29uc3RydWN0b3I9ITB9Y2F0Y2goZSl7fXZhciB0O2Z1bmN0aW9uIG4oKXtpZih2b2lkIDAhPT10KXJldHVybiB0O2lmKGUuWE1MSHR0cFJlcXVlc3Qpe3Q9bmV3IGUuWE1MSHR0cFJlcXVlc3Q7dHJ5e3Qub3BlbigiR0VUIixlLlhEb21haW5SZXF1ZXN0PyIvIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIpfWNhdGNoKGUpe3Q9bnVsbH19ZWxzZSB0PW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gcihlKXt2YXIgdD1uKCk7aWYoIXQpcmV0dXJuITE7dHJ5e3JldHVybiB0LnJlc3BvbnNlVHlwZT1lLHQucmVzcG9uc2VUeXBlPT09ZX1jYXRjaChlKXt9cmV0dXJuITF9dmFyIGk9dm9pZCAwIT09ZS5BcnJheUJ1ZmZlcixvPWkmJmEoZS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9cy5hcnJheWJ1ZmZlcj1zLmZldGNofHxpJiZyKCJhcnJheWJ1ZmZlciIpLHMubXNzdHJlYW09IXMuZmV0Y2gmJm8mJnIoIm1zLXN0cmVhbSIpLHMubW96Y2h1bmtlZGFycmF5YnVmZmVyPSFzLmZldGNoJiZpJiZyKCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciIpLHMub3ZlcnJpZGVNaW1lVHlwZT1zLmZldGNofHwhIW4oKSYmYShuKCkub3ZlcnJpZGVNaW1lVHlwZSkscy52YkFycmF5PWEoZS5WQkFycmF5KSx0PW51bGx9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwxNTg6W2Z1bmN0aW9uKGEscyxlKXsoZnVuY3Rpb24odSxsLGMpe3ZhciBmPWEoIi4vY2FwYWJpbGl0eSIpLGU9YSgiaW5oZXJpdHMiKSx0PWEoIi4vcmVzcG9uc2UiKSxpPWEoInJlYWRhYmxlLXN0cmVhbSIpLHA9YSgidG8tYXJyYXlidWZmZXIiKSxuPXQuSW5jb21pbmdNZXNzYWdlLGg9dC5yZWFkeVN0YXRlczt2YXIgcj1zLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzO2kuV3JpdGFibGUuY2FsbChuKSxuLl9vcHRzPXQsbi5fYm9keT1bXSxuLl9oZWFkZXJzPXt9LHQuYXV0aCYmbi5zZXRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK25ldyBjKHQuYXV0aCkudG9TdHJpbmcoImJhc2U2NCIpKSxPYmplY3Qua2V5cyh0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7bi5zZXRIZWFkZXIoZSx0LmhlYWRlcnNbZV0pfSk7dmFyIHI9ITA7aWYoImRpc2FibGUtZmV0Y2giPT09dC5tb2RlfHwicmVxdWVzdFRpbWVvdXQiaW4gdCYmIWYuYWJvcnRDb250cm9sbGVyKWU9IShyPSExKTtlbHNlIGlmKCJwcmVmZXItc3RyZWFtaW5nIj09PXQubW9kZSllPSExO2Vsc2UgaWYoImFsbG93LXdyb25nLWNvbnRlbnQtdHlwZSI9PT10Lm1vZGUpZT0hZi5vdmVycmlkZU1pbWVUeXBlO2Vsc2V7aWYodC5tb2RlJiYiZGVmYXVsdCIhPT10Lm1vZGUmJiJwcmVmZXItZmFzdCIhPT10Lm1vZGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBvcHRzLm1vZGUiKTtlPSEwfW4uX21vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5mZXRjaCYmdD8iZmV0Y2giOmYubW96Y2h1bmtlZGFycmF5YnVmZmVyPyJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6Zi5tc3N0cmVhbT8ibXMtc3RyZWFtIjpmLmFycmF5YnVmZmVyJiZlPyJhcnJheWJ1ZmZlciI6Zi52YkFycmF5JiZlPyJ0ZXh0OnZiYXJyYXkiOiJ0ZXh0In0oZSxyKSxuLl9mZXRjaFRpbWVyPW51bGwsbi5vbigiZmluaXNoIixmdW5jdGlvbigpe24uX29uRmluaXNoKCl9KX07ZShyLGkuV3JpdGFibGUpLHIucHJvdG90eXBlLnNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTstMT09PW8uaW5kZXhPZihuKSYmKHRoaXMuX2hlYWRlcnNbbl09e25hbWU6ZSx2YWx1ZTp0fSl9LHIucHJvdG90eXBlLmdldEhlYWRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9oZWFkZXJzW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQ/dC52YWx1ZTpudWxsfSxyLnByb3RvdHlwZS5yZW1vdmVIZWFkZXI9ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuX2hlYWRlcnNbZS50b0xvd2VyQ2FzZSgpXX0sci5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdC5fZGVzdHJveWVkKXt2YXIgZT10Ll9vcHRzLHI9dC5faGVhZGVycyxuPW51bGw7IkdFVCIhPT1lLm1ldGhvZCYmIkhFQUQiIT09ZS5tZXRob2QmJihuPWYuYXJyYXlidWZmZXI/cChjLmNvbmNhdCh0Ll9ib2R5KSk6Zi5ibG9iQ29uc3RydWN0b3I/bmV3IGwuQmxvYih0Ll9ib2R5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcChlKX0pLHt0eXBlOihyWyJjb250ZW50LXR5cGUiXXx8e30pLnZhbHVlfHwiIn0pOmMuY29uY2F0KHQuX2JvZHkpLnRvU3RyaW5nKCkpO3ZhciBpPVtdO2lmKE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXS5uYW1lLG49cltlXS52YWx1ZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaChmdW5jdGlvbihlKXtpLnB1c2goW3QsZV0pfSk6aS5wdXNoKFt0LG5dKX0pLCJmZXRjaCI9PT10Ll9tb2RlKXt2YXIgbz1udWxsO2lmKGYuYWJvcnRDb250cm9sbGVyKXt2YXIgYT1uZXcgQWJvcnRDb250cm9sbGVyO289YS5zaWduYWwsdC5fZmV0Y2hBYm9ydENvbnRyb2xsZXI9YSwicmVxdWVzdFRpbWVvdXQiaW4gZSYmMCE9PWUucmVxdWVzdFRpbWVvdXQmJih0Ll9mZXRjaFRpbWVyPWwuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZW1pdCgicmVxdWVzdFRpbWVvdXQiKSx0Ll9mZXRjaEFib3J0Q29udHJvbGxlciYmdC5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKX0sZS5yZXF1ZXN0VGltZW91dCkpfWwuZmV0Y2godC5fb3B0cy51cmwse21ldGhvZDp0Ll9vcHRzLm1ldGhvZCxoZWFkZXJzOmksYm9keTpufHx2b2lkIDAsbW9kZToiY29ycyIsY3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiIsc2lnbmFsOm99KS50aGVuKGZ1bmN0aW9uKGUpe3QuX2ZldGNoUmVzcG9uc2U9ZSx0Ll9jb25uZWN0KCl9LGZ1bmN0aW9uKGUpe2wuY2xlYXJUaW1lb3V0KHQuX2ZldGNoVGltZXIpLHQuX2Rlc3Ryb3llZHx8dC5lbWl0KCJlcnJvciIsZSl9KX1lbHNle3ZhciBzPXQuX3hocj1uZXcgbC5YTUxIdHRwUmVxdWVzdDt0cnl7cy5vcGVuKHQuX29wdHMubWV0aG9kLHQuX29wdHMudXJsLCEwKX1jYXRjaChlKXtyZXR1cm4gdm9pZCB1Lm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5lbWl0KCJlcnJvciIsZSl9KX0icmVzcG9uc2VUeXBlImluIHMmJihzLnJlc3BvbnNlVHlwZT10Ll9tb2RlLnNwbGl0KCI6IilbMF0pLCJ3aXRoQ3JlZGVudGlhbHMiaW4gcyYmKHMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLCJ0ZXh0Ij09PXQuX21vZGUmJiJvdmVycmlkZU1pbWVUeXBlImluIHMmJnMub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLCJyZXF1ZXN0VGltZW91dCJpbiBlJiYocy50aW1lb3V0PWUucmVxdWVzdFRpbWVvdXQscy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt0LmVtaXQoInJlcXVlc3RUaW1lb3V0Iil9KSxpLmZvckVhY2goZnVuY3Rpb24oZSl7cy5zZXRSZXF1ZXN0SGVhZGVyKGVbMF0sZVsxXSl9KSx0Ll9yZXNwb25zZT1udWxsLHMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7c3dpdGNoKHMucmVhZHlTdGF0ZSl7Y2FzZSBoLkxPQURJTkc6Y2FzZSBoLkRPTkU6dC5fb25YSFJQcm9ncmVzcygpfX0sIm1vei1jaHVua2VkLWFycmF5YnVmZmVyIj09PXQuX21vZGUmJihzLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oKXt0Ll9vblhIUlByb2dyZXNzKCl9KSxzLm9uZXJyb3I9ZnVuY3Rpb24oKXt0Ll9kZXN0cm95ZWR8fHQuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiWEhSIGVycm9yIikpfTt0cnl7cy5zZW5kKG4pfWNhdGNoKGUpe3JldHVybiB2b2lkIHUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmVtaXQoImVycm9yIixlKX0pfX19fSxyLnByb3RvdHlwZS5fb25YSFJQcm9ncmVzcz1mdW5jdGlvbigpeyhmdW5jdGlvbihlKXt0cnl7dmFyIHQ9ZS5zdGF0dXM7cmV0dXJuIG51bGwhPT10JiYwIT09dH1jYXRjaChlKXtyZXR1cm4hMX19KSh0aGlzLl94aHIpJiYhdGhpcy5fZGVzdHJveWVkJiYodGhpcy5fcmVzcG9uc2V8fHRoaXMuX2Nvbm5lY3QoKSx0aGlzLl9yZXNwb25zZS5fb25YSFJQcm9ncmVzcygpKX0sci5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuX2Rlc3Ryb3llZHx8KHQuX3Jlc3BvbnNlPW5ldyBuKHQuX3hocix0Ll9mZXRjaFJlc3BvbnNlLHQuX21vZGUsdC5fZmV0Y2hUaW1lciksdC5fcmVzcG9uc2Uub24oImVycm9yIixmdW5jdGlvbihlKXt0LmVtaXQoImVycm9yIixlKX0pLHQuZW1pdCgicmVzcG9uc2UiLHQuX3Jlc3BvbnNlKSl9LHIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7dGhpcy5fYm9keS5wdXNoKGUpLG4oKX0sci5wcm90b3R5cGUuYWJvcnQ9ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCxsLmNsZWFyVGltZW91dCh0aGlzLl9mZXRjaFRpbWVyKSx0aGlzLl9yZXNwb25zZSYmKHRoaXMuX3Jlc3BvbnNlLl9kZXN0cm95ZWQ9ITApLHRoaXMuX3hocj90aGlzLl94aHIuYWJvcnQoKTp0aGlzLl9mZXRjaEFib3J0Q29udHJvbGxlciYmdGhpcy5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKX0sci5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZSxlPXZvaWQgMCksaS5Xcml0YWJsZS5wcm90b3R5cGUuZW5kLmNhbGwodGhpcyxlLHQsbil9LHIucHJvdG90eXBlLmZsdXNoSGVhZGVycz1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0Tm9EZWxheT1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0U29ja2V0S2VlcEFsaXZlPWZ1bmN0aW9uKCl7fTt2YXIgbz1bImFjY2VwdC1jaGFyc2V0IiwiYWNjZXB0LWVuY29kaW5nIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2QiLCJjb25uZWN0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb29raWUiLCJjb29raWUyIiwiZGF0ZSIsImRudCIsImV4cGVjdCIsImhvc3QiLCJrZWVwLWFsaXZlIiwib3JpZ2luIiwicmVmZXJlciIsInRlIiwidHJhaWxlciIsInRyYW5zZmVyLWVuY29kaW5nIiwidXBncmFkZSIsInZpYSJdfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxhKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vY2FwYWJpbGl0eSI6MTU3LCIuL3Jlc3BvbnNlIjoxNTksX3Byb2Nlc3M6MTEyLGJ1ZmZlcjo0LGluaGVyaXRzOjEwNiwicmVhZGFibGUtc3RyZWFtIjoxMjYsInRvLWFycmF5YnVmZmVyIjoxNjF9XSwxNTk6W2Z1bmN0aW9uKG4sZSxyKXsoZnVuY3Rpb24obCxjLGYpe3ZhciBwPW4oIi4vY2FwYWJpbGl0eSIpLGU9bigiaW5oZXJpdHMiKSxoPW4oInJlYWRhYmxlLXN0cmVhbSIpLHM9ci5yZWFkeVN0YXRlcz17VU5TRU5UOjAsT1BFTkVEOjEsSEVBREVSU19SRUNFSVZFRDoyLExPQURJTkc6MyxET05FOjR9LHQ9ci5JbmNvbWluZ01lc3NhZ2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZihoLlJlYWRhYmxlLmNhbGwoaSksaS5fbW9kZT1uLGkuaGVhZGVycz17fSxpLnJhd0hlYWRlcnM9W10saS50cmFpbGVycz17fSxpLnJhd1RyYWlsZXJzPVtdLGkub24oImVuZCIsZnVuY3Rpb24oKXtsLm5leHRUaWNrKGZ1bmN0aW9uKCl7aS5lbWl0KCJjbG9zZSIpfSl9KSwiZmV0Y2giPT09bil7aWYoaS5fZmV0Y2hSZXNwb25zZT10LGkudXJsPXQudXJsLGkuc3RhdHVzQ29kZT10LnN0YXR1cyxpLnN0YXR1c01lc3NhZ2U9dC5zdGF0dXNUZXh0LHQuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV09ZSxpLnJhd0hlYWRlcnMucHVzaCh0LGUpfSkscC53cml0YWJsZVN0cmVhbSl7dmFyIG89bmV3IFdyaXRhYmxlU3RyZWFtKHt3cml0ZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtpLl9kZXN0cm95ZWQ/dCgpOmkucHVzaChuZXcgZihuKSk/ZSgpOmkuX3Jlc3VtZUZldGNoPWV9KX0sY2xvc2U6ZnVuY3Rpb24oKXtjLmNsZWFyVGltZW91dChyKSxpLl9kZXN0cm95ZWR8fGkucHVzaChudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oZSl7aS5fZGVzdHJveWVkfHxpLmVtaXQoImVycm9yIixlKX19KTt0cnl7cmV0dXJuIHZvaWQgdC5ib2R5LnBpcGVUbyhvKS5jYXRjaChmdW5jdGlvbihlKXtjLmNsZWFyVGltZW91dChyKSxpLl9kZXN0cm95ZWR8fGkuZW1pdCgiZXJyb3IiLGUpfSl9Y2F0Y2goZSl7fX12YXIgYT10LmJvZHkuZ2V0UmVhZGVyKCk7IWZ1bmN0aW9uIHQoKXthLnJlYWQoKS50aGVuKGZ1bmN0aW9uKGUpe2lmKCFpLl9kZXN0cm95ZWQpe2lmKGUuZG9uZSlyZXR1cm4gYy5jbGVhclRpbWVvdXQociksdm9pZCBpLnB1c2gobnVsbCk7aS5wdXNoKG5ldyBmKGUudmFsdWUpKSx0KCl9fSkuY2F0Y2goZnVuY3Rpb24oZSl7Yy5jbGVhclRpbWVvdXQociksaS5fZGVzdHJveWVkfHxpLmVtaXQoImVycm9yIixlKX0pfSgpfWVsc2V7aWYoaS5feGhyPWUsaS5fcG9zPTAsaS51cmw9ZS5yZXNwb25zZVVSTCxpLnN0YXR1c0NvZGU9ZS5zdGF0dXMsaS5zdGF0dXNNZXNzYWdlPWUuc3RhdHVzVGV4dCxlLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvXihbXjpdKyk6XHMqKC4qKS8pO2lmKHQpe3ZhciBuPXRbMV0udG9Mb3dlckNhc2UoKTsic2V0LWNvb2tpZSI9PT1uPyh2b2lkIDA9PT1pLmhlYWRlcnNbbl0mJihpLmhlYWRlcnNbbl09W10pLGkuaGVhZGVyc1tuXS5wdXNoKHRbMl0pKTp2b2lkIDAhPT1pLmhlYWRlcnNbbl0/aS5oZWFkZXJzW25dKz0iLCAiK3RbMl06aS5oZWFkZXJzW25dPXRbMl0saS5yYXdIZWFkZXJzLnB1c2godFsxXSx0WzJdKX19KSxpLl9jaGFyc2V0PSJ4LXVzZXItZGVmaW5lZCIsIXAub3ZlcnJpZGVNaW1lVHlwZSl7dmFyIHM9aS5yYXdIZWFkZXJzWyJtaW1lLXR5cGUiXTtpZihzKXt2YXIgdT1zLm1hdGNoKC87XHMqY2hhcnNldD0oW147XSkoO3wkKS8pO3UmJihpLl9jaGFyc2V0PXVbMV0udG9Mb3dlckNhc2UoKSl9aS5fY2hhcnNldHx8KGkuX2NoYXJzZXQ9InV0Zi04Iil9fX07ZSh0LGguUmVhZGFibGUpLHQucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVzdW1lRmV0Y2g7ZSYmKHRoaXMuX3Jlc3VtZUZldGNoPW51bGwsZSgpKX0sdC5wcm90b3R5cGUuX29uWEhSUHJvZ3Jlc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5feGhyLG49bnVsbDtzd2l0Y2godC5fbW9kZSl7Y2FzZSJ0ZXh0OnZiYXJyYXkiOmlmKGUucmVhZHlTdGF0ZSE9PXMuRE9ORSlicmVhazt0cnl7bj1uZXcgYy5WQkFycmF5KGUucmVzcG9uc2VCb2R5KS50b0FycmF5KCl9Y2F0Y2goZSl7fWlmKG51bGwhPT1uKXt0LnB1c2gobmV3IGYobikpO2JyZWFrfWNhc2UidGV4dCI6dHJ5e249ZS5yZXNwb25zZVRleHR9Y2F0Y2goZSl7dC5fbW9kZT0idGV4dDp2YmFycmF5IjticmVha31pZihuLmxlbmd0aD50Ll9wb3Mpe3ZhciByPW4uc3Vic3RyKHQuX3Bvcyk7aWYoIngtdXNlci1kZWZpbmVkIj09PXQuX2NoYXJzZXQpe2Zvcih2YXIgaT1uZXcgZihyLmxlbmd0aCksbz0wO288ci5sZW5ndGg7bysrKWlbb109MjU1JnIuY2hhckNvZGVBdChvKTt0LnB1c2goaSl9ZWxzZSB0LnB1c2gocix0Ll9jaGFyc2V0KTt0Ll9wb3M9bi5sZW5ndGh9YnJlYWs7Y2FzZSJhcnJheWJ1ZmZlciI6aWYoZS5yZWFkeVN0YXRlIT09cy5ET05FfHwhZS5yZXNwb25zZSlicmVhaztuPWUucmVzcG9uc2UsdC5wdXNoKG5ldyBmKG5ldyBVaW50OEFycmF5KG4pKSk7YnJlYWs7Y2FzZSJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6aWYobj1lLnJlc3BvbnNlLGUucmVhZHlTdGF0ZSE9PXMuTE9BRElOR3x8IW4pYnJlYWs7dC5wdXNoKG5ldyBmKG5ldyBVaW50OEFycmF5KG4pKSk7YnJlYWs7Y2FzZSJtcy1zdHJlYW0iOmlmKG49ZS5yZXNwb25zZSxlLnJlYWR5U3RhdGUhPT1zLkxPQURJTkcpYnJlYWs7dmFyIGE9bmV3IGMuTVNTdHJlYW1SZWFkZXI7YS5vbnByb2dyZXNzPWZ1bmN0aW9uKCl7YS5yZXN1bHQuYnl0ZUxlbmd0aD50Ll9wb3MmJih0LnB1c2gobmV3IGYobmV3IFVpbnQ4QXJyYXkoYS5yZXN1bHQuc2xpY2UodC5fcG9zKSkpKSx0Ll9wb3M9YS5yZXN1bHQuYnl0ZUxlbmd0aCl9LGEub25sb2FkPWZ1bmN0aW9uKCl7dC5wdXNoKG51bGwpfSxhLnJlYWRBc0FycmF5QnVmZmVyKG4pfXQuX3hoci5yZWFkeVN0YXRlPT09cy5ET05FJiYibXMtc3RyZWFtIiE9PXQuX21vZGUmJnQucHVzaChudWxsKX19KS5jYWxsKHRoaXMsbigiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LG4oImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi9jYXBhYmlsaXR5IjoxNTcsX3Byb2Nlc3M6MTEyLGJ1ZmZlcjo0LGluaGVyaXRzOjEwNiwicmVhZGFibGUtc3RyZWFtIjoxMjZ9XSwxNjA6W2Z1bmN0aW9uKHUsZSxsKXsoZnVuY3Rpb24oZSx0KXt2YXIgcj11KCJwcm9jZXNzL2Jyb3dzZXIuanMiKS5uZXh0VGljayxuPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSxpPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPXt9LGE9MDtmdW5jdGlvbiBzKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9bC5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKG4uY2FsbChzZXRUaW1lb3V0LHdpbmRvdyxhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LGwuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHMobi5jYWxsKHNldEludGVydmFsLHdpbmRvdyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSxsLmNsZWFyVGltZW91dD1sLmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfSxzLnByb3RvdHlwZS51bnJlZj1zLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LHMucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdyx0aGlzLl9pZCl9LGwuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LGwudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSxsLl91bnJlZkFjdGl2ZT1sLmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7MDw9dCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX29uVGltZW91dCYmZS5fb25UaW1lb3V0KCl9LHQpKX0sbC5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbihlKXt2YXIgdD1hKyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJmkuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG9bdF09ITAscihmdW5jdGlvbigpe29bdF0mJihuP2UuYXBwbHkobnVsbCxuKTplLmNhbGwobnVsbCksbC5jbGVhckltbWVkaWF0ZSh0KSl9KSx0fSxsLmNsZWFySW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oZSl7ZGVsZXRlIG9bZV19fSkuY2FsbCh0aGlzLHUoInRpbWVycyIpLnNldEltbWVkaWF0ZSx1KCJ0aW1lcnMiKS5jbGVhckltbWVkaWF0ZSl9LHsicHJvY2Vzcy9icm93c2VyLmpzIjoxMTIsdGltZXJzOjE2MH1dLDE2MTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUoImJ1ZmZlciIpLkJ1ZmZlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKDA9PT1lLmJ5dGVPZmZzZXQmJmUuYnl0ZUxlbmd0aD09PWUuYnVmZmVyLmJ5dGVMZW5ndGgpcmV0dXJuIGUuYnVmZmVyO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmJ1ZmZlci5zbGljZSlyZXR1cm4gZS5idWZmZXIuc2xpY2UoZS5ieXRlT2Zmc2V0LGUuYnl0ZU9mZnNldCtlLmJ5dGVMZW5ndGgpfWlmKGkuaXNCdWZmZXIoZSkpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj1lLmxlbmd0aCxyPTA7cjxuO3IrKyl0W3JdPWVbcl07cmV0dXJuIHQuYnVmZmVyfXRocm93IG5ldyBFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpfX0se2J1ZmZlcjo0fV0sMTYyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBMPWUoInB1bnljb2RlIiksRj1lKCIuL3V0aWwiKTtmdW5jdGlvbiBPKCl7dGhpcy5wcm90b2NvbD1udWxsLHRoaXMuc2xhc2hlcz1udWxsLHRoaXMuYXV0aD1udWxsLHRoaXMuaG9zdD1udWxsLHRoaXMucG9ydD1udWxsLHRoaXMuaG9zdG5hbWU9bnVsbCx0aGlzLmhhc2g9bnVsbCx0aGlzLnNlYXJjaD1udWxsLHRoaXMucXVlcnk9bnVsbCx0aGlzLnBhdGhuYW1lPW51bGwsdGhpcy5wYXRoPW51bGwsdGhpcy5ocmVmPW51bGx9bi5wYXJzZT1vLG4ucmVzb2x2ZT1mdW5jdGlvbihlLHQpe3JldHVybiBvKGUsITEsITApLnJlc29sdmUodCl9LG4ucmVzb2x2ZU9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBlP28oZSwhMSwhMCkucmVzb2x2ZU9iamVjdCh0KTp0fSxuLmZvcm1hdD1mdW5jdGlvbihlKXtGLmlzU3RyaW5nKGUpJiYoZT1vKGUpKTtyZXR1cm4gZSBpbnN0YW5jZW9mIE8/ZS5mb3JtYXQoKTpPLnByb3RvdHlwZS5mb3JtYXQuY2FsbChlKX0sbi5Vcmw9Tzt2YXIgcT0vXihbYS16MC05ListXSs6KS9pLHI9LzpbMC05XSokLyxVPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLyxpPVsieyIsIn0iLCJ8IiwiXFwiLCJeIiwiYCJdLmNvbmNhdChbIjwiLCI+IiwnIicsImAiLCIgIiwiXHIiLCJcbiIsIlx0Il0pLE09WyInIl0uY29uY2F0KGkpLE49WyIlIiwiLyIsIj8iLCI7IiwiIyJdLmNvbmNhdChNKSxQPVsiLyIsIj8iLCIjIl0sST0vXlsrYS16MC05QS1aXy1dezAsNjN9JC8sej0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8saj17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxWPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LEg9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSwkPWUoInF1ZXJ5c3RyaW5nIik7ZnVuY3Rpb24gbyhlLHQsbil7aWYoZSYmRi5pc09iamVjdChlKSYmZSBpbnN0YW5jZW9mIE8pcmV0dXJuIGU7dmFyIHI9bmV3IE87cmV0dXJuIHIucGFyc2UoZSx0LG4pLHJ9Ty5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LG4pe2lmKCFGLmlzU3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgZSk7dmFyIHI9ZS5pbmRleE9mKCI/IiksaT0tMSE9PXImJnI8ZS5pbmRleE9mKCIjIik/Ij8iOiIjIixvPWUuc3BsaXQoaSk7b1swXT1vWzBdLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgYT1lPW8uam9pbihpKTtpZihhPWEudHJpbSgpLCFuJiYxPT09ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIHM9VS5leGVjKGEpO2lmKHMpcmV0dXJuIHRoaXMucGF0aD1hLHRoaXMuaHJlZj1hLHRoaXMucGF0aG5hbWU9c1sxXSxzWzJdPyh0aGlzLnNlYXJjaD1zWzJdLHRoaXMucXVlcnk9dD8kLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0JiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgdT1xLmV4ZWMoYSk7aWYodSl7dmFyIGw9KHU9dVswXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPWwsYT1hLnN1YnN0cih1Lmxlbmd0aCl9aWYobnx8dXx8YS5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIGM9Ii8vIj09PWEuc3Vic3RyKDAsMik7IWN8fHUmJlZbdV18fChhPWEuc3Vic3RyKDIpLHRoaXMuc2xhc2hlcz0hMCl9aWYoIVZbdV0mJihjfHx1JiYhSFt1XSkpe2Zvcih2YXIgZixwLGg9LTEsZD0wO2Q8UC5sZW5ndGg7ZCsrKXstMSE9PShtPWEuaW5kZXhPZihQW2RdKSkmJigtMT09PWh8fG08aCkmJihoPW0pfS0xIT09KHA9LTE9PT1oP2EubGFzdEluZGV4T2YoIkAiKTphLmxhc3RJbmRleE9mKCJAIixoKSkmJihmPWEuc2xpY2UoMCxwKSxhPWEuc2xpY2UocCsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KGYpKSxoPS0xO2ZvcihkPTA7ZDxOLmxlbmd0aDtkKyspe3ZhciBtOy0xIT09KG09YS5pbmRleE9mKE5bZF0pKSYmKC0xPT09aHx8bTxoKSYmKGg9bSl9LTE9PT1oJiYoaD1hLmxlbmd0aCksdGhpcy5ob3N0PWEuc2xpY2UoMCxoKSxhPWEuc2xpY2UoaCksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBnPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIWcpZm9yKHZhciB2PXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksYj0oZD0wLHYubGVuZ3RoKTtkPGI7ZCsrKXt2YXIgeT12W2RdO2lmKHkmJiF5Lm1hdGNoKEkpKXtmb3IodmFyIF89IiIsdz0wLEU9eS5sZW5ndGg7dzxFO3crKykxMjc8eS5jaGFyQ29kZUF0KHcpP18rPSJ4IjpfKz15W3ddO2lmKCFfLm1hdGNoKEkpKXt2YXIgQT12LnNsaWNlKDAsZCkseD12LnNsaWNlKGQrMSksaz15Lm1hdGNoKHopO2smJihBLnB1c2goa1sxXSkseC51bnNoaWZ0KGtbMl0pKSx4Lmxlbmd0aCYmKGE9Ii8iK3guam9pbigiLiIpK2EpLHRoaXMuaG9zdG5hbWU9QS5qb2luKCIuIik7YnJlYWt9fX0yNTU8dGhpcy5ob3N0bmFtZS5sZW5ndGg/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxnfHwodGhpcy5ob3N0bmFtZT1MLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBDPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLE89dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PU8rQyx0aGlzLmhyZWYrPXRoaXMuaG9zdCxnJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWFbMF0mJihhPSIvIithKSl9aWYoIWpbbF0pZm9yKGQ9MCxiPU0ubGVuZ3RoO2Q8YjtkKyspe3ZhciBTPU1bZF07aWYoLTEhPT1hLmluZGV4T2YoUykpe3ZhciBEPWVuY29kZVVSSUNvbXBvbmVudChTKTtEPT09UyYmKEQ9ZXNjYXBlKFMpKSxhPWEuc3BsaXQoUykuam9pbihEKX19dmFyIFQ9YS5pbmRleE9mKCIjIik7LTEhPT1UJiYodGhpcy5oYXNoPWEuc3Vic3RyKFQpLGE9YS5zbGljZSgwLFQpKTt2YXIgQj1hLmluZGV4T2YoIj8iKTtpZigtMSE9PUI/KHRoaXMuc2VhcmNoPWEuc3Vic3RyKEIpLHRoaXMucXVlcnk9YS5zdWJzdHIoQisxKSx0JiYodGhpcy5xdWVyeT0kLnBhcnNlKHRoaXMucXVlcnkpKSxhPWEuc2xpY2UoMCxCKSk6dCYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLGEmJih0aGlzLnBhdGhuYW1lPWEpLEhbbF0mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtDPXRoaXMucGF0aG5hbWV8fCIiO3ZhciBSPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9QytSfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxPLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1dGh8fCIiO2UmJihlPShlPWVuY29kZVVSSUNvbXBvbmVudChlKSkucmVwbGFjZSgvJTNBL2ksIjoiKSxlKz0iQCIpO3ZhciB0PXRoaXMucHJvdG9jb2x8fCIiLG49dGhpcy5wYXRobmFtZXx8IiIscj10aGlzLmhhc2h8fCIiLGk9ITEsbz0iIjt0aGlzLmhvc3Q/aT1lK3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYoaT1lKygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihpKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmRi5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz0kLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIGE9dGhpcy5zZWFyY2h8fG8mJiI/IitvfHwiIjtyZXR1cm4gdCYmIjoiIT09dC5zdWJzdHIoLTEpJiYodCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghdHx8SFt0XSkmJiExIT09aT8oaT0iLy8iKyhpfHwiIiksbiYmIi8iIT09bi5jaGFyQXQoMCkmJihuPSIvIituKSk6aXx8KGk9IiIpLHImJiIjIiE9PXIuY2hhckF0KDApJiYocj0iIyIrciksYSYmIj8iIT09YS5jaGFyQXQoMCkmJihhPSI/IithKSx0K2krKG49bi5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKX0pKSsoYT1hLnJlcGxhY2UoIiMiLCIlMjMiKSkrcn0sTy5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KG8oZSwhMSwhMCkpLmZvcm1hdCgpfSxPLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKEYuaXNTdHJpbmcoZSkpe3ZhciB0PW5ldyBPO3QucGFyc2UoZSwhMSwhMCksZT10fWZvcih2YXIgbj1uZXcgTyxyPU9iamVjdC5rZXlzKHRoaXMpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtuW29dPXRoaXNbb119aWYobi5oYXNoPWUuaGFzaCwiIj09PWUuaHJlZilyZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbjtpZihlLnNsYXNoZXMmJiFlLnByb3RvY29sKXtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgdT1hW3NdOyJwcm90b2NvbCIhPT11JiYoblt1XT1lW3VdKX1yZXR1cm4gSFtuLnByb3RvY29sXSYmbi5ob3N0bmFtZSYmIW4ucGF0aG5hbWUmJihuLnBhdGg9bi5wYXRobmFtZT0iLyIpLG4uaHJlZj1uLmZvcm1hdCgpLG59aWYoZS5wcm90b2NvbCYmZS5wcm90b2NvbCE9PW4ucHJvdG9jb2wpe2lmKCFIW2UucHJvdG9jb2xdKXtmb3IodmFyIGw9T2JqZWN0LmtleXMoZSksYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdO25bZl09ZVtmXX1yZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbn1pZihuLnByb3RvY29sPWUucHJvdG9jb2wsZS5ob3N0fHxWW2UucHJvdG9jb2xdKW4ucGF0aG5hbWU9ZS5wYXRobmFtZTtlbHNle2Zvcih2YXIgcD0oZS5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7cC5sZW5ndGgmJiEoZS5ob3N0PXAuc2hpZnQoKSk7KTtlLmhvc3R8fChlLmhvc3Q9IiIpLGUuaG9zdG5hbWV8fChlLmhvc3RuYW1lPSIiKSwiIiE9PXBbMF0mJnAudW5zaGlmdCgiIikscC5sZW5ndGg8MiYmcC51bnNoaWZ0KCIiKSxuLnBhdGhuYW1lPXAuam9pbigiLyIpfWlmKG4uc2VhcmNoPWUuc2VhcmNoLG4ucXVlcnk9ZS5xdWVyeSxuLmhvc3Q9ZS5ob3N0fHwiIixuLmF1dGg9ZS5hdXRoLG4uaG9zdG5hbWU9ZS5ob3N0bmFtZXx8ZS5ob3N0LG4ucG9ydD1lLnBvcnQsbi5wYXRobmFtZXx8bi5zZWFyY2gpe3ZhciBoPW4ucGF0aG5hbWV8fCIiLGQ9bi5zZWFyY2h8fCIiO24ucGF0aD1oK2R9cmV0dXJuIG4uc2xhc2hlcz1uLnNsYXNoZXN8fGUuc2xhc2hlcyxuLmhyZWY9bi5mb3JtYXQoKSxufXZhciBtPW4ucGF0aG5hbWUmJiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApLGc9ZS5ob3N0fHxlLnBhdGhuYW1lJiYiLyI9PT1lLnBhdGhuYW1lLmNoYXJBdCgwKSx2PWd8fG18fG4uaG9zdCYmZS5wYXRobmFtZSxiPXYseT1uLnBhdGhuYW1lJiZuLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLF89KHA9ZS5wYXRobmFtZSYmZS5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxuLnByb3RvY29sJiYhSFtuLnByb3RvY29sXSk7aWYoXyYmKG4uaG9zdG5hbWU9IiIsbi5wb3J0PW51bGwsbi5ob3N0JiYoIiI9PT15WzBdP3lbMF09bi5ob3N0OnkudW5zaGlmdChuLmhvc3QpKSxuLmhvc3Q9IiIsZS5wcm90b2NvbCYmKGUuaG9zdG5hbWU9bnVsbCxlLnBvcnQ9bnVsbCxlLmhvc3QmJigiIj09PXBbMF0/cFswXT1lLmhvc3Q6cC51bnNoaWZ0KGUuaG9zdCkpLGUuaG9zdD1udWxsKSx2PXYmJigiIj09PXBbMF18fCIiPT09eVswXSkpLGcpbi5ob3N0PWUuaG9zdHx8IiI9PT1lLmhvc3Q/ZS5ob3N0Om4uaG9zdCxuLmhvc3RuYW1lPWUuaG9zdG5hbWV8fCIiPT09ZS5ob3N0bmFtZT9lLmhvc3RuYW1lOm4uaG9zdG5hbWUsbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5LHk9cDtlbHNlIGlmKHAubGVuZ3RoKXl8fCh5PVtdKSx5LnBvcCgpLHk9eS5jb25jYXQocCksbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5O2Vsc2UgaWYoIUYuaXNOdWxsT3JVbmRlZmluZWQoZS5zZWFyY2gpKXtpZihfKW4uaG9zdG5hbWU9bi5ob3N0PXkuc2hpZnQoKSwoaz0hIShuLmhvc3QmJjA8bi5ob3N0LmluZGV4T2YoIkAiKSkmJm4uaG9zdC5zcGxpdCgiQCIpKSYmKG4uYXV0aD1rLnNoaWZ0KCksbi5ob3N0PW4uaG9zdG5hbWU9ay5zaGlmdCgpKTtyZXR1cm4gbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5LEYuaXNOdWxsKG4ucGF0aG5hbWUpJiZGLmlzTnVsbChuLnNlYXJjaCl8fChuLnBhdGg9KG4ucGF0aG5hbWU/bi5wYXRobmFtZToiIikrKG4uc2VhcmNoP24uc2VhcmNoOiIiKSksbi5ocmVmPW4uZm9ybWF0KCksbn1pZigheS5sZW5ndGgpcmV0dXJuIG4ucGF0aG5hbWU9bnVsbCxuLnNlYXJjaD9uLnBhdGg9Ii8iK24uc2VhcmNoOm4ucGF0aD1udWxsLG4uaHJlZj1uLmZvcm1hdCgpLG47Zm9yKHZhciB3PXkuc2xpY2UoLTEpWzBdLEU9KG4uaG9zdHx8ZS5ob3N0fHwxPHkubGVuZ3RoKSYmKCIuIj09PXd8fCIuLiI9PT13KXx8IiI9PT13LEE9MCx4PXkubGVuZ3RoOzA8PXg7eC0tKSIuIj09PSh3PXlbeF0pP3kuc3BsaWNlKHgsMSk6Ii4uIj09PXc/KHkuc3BsaWNlKHgsMSksQSsrKTpBJiYoeS5zcGxpY2UoeCwxKSxBLS0pO2lmKCF2JiYhYilmb3IoO0EtLTtBKXkudW5zaGlmdCgiLi4iKTshdnx8IiI9PT15WzBdfHx5WzBdJiYiLyI9PT15WzBdLmNoYXJBdCgwKXx8eS51bnNoaWZ0KCIiKSxFJiYiLyIhPT15LmpvaW4oIi8iKS5zdWJzdHIoLTEpJiZ5LnB1c2goIiIpO3ZhciBrLEM9IiI9PT15WzBdfHx5WzBdJiYiLyI9PT15WzBdLmNoYXJBdCgwKTtfJiYobi5ob3N0bmFtZT1uLmhvc3Q9Qz8iIjp5Lmxlbmd0aD95LnNoaWZ0KCk6IiIsKGs9ISEobi5ob3N0JiYwPG4uaG9zdC5pbmRleE9mKCJAIikpJiZuLmhvc3Quc3BsaXQoIkAiKSkmJihuLmF1dGg9ay5zaGlmdCgpLG4uaG9zdD1uLmhvc3RuYW1lPWsuc2hpZnQoKSkpO3JldHVybih2PXZ8fG4uaG9zdCYmeS5sZW5ndGgpJiYhQyYmeS51bnNoaWZ0KCIiKSx5Lmxlbmd0aD9uLnBhdGhuYW1lPXkuam9pbigiLyIpOihuLnBhdGhuYW1lPW51bGwsbi5wYXRoPW51bGwpLEYuaXNOdWxsKG4ucGF0aG5hbWUpJiZGLmlzTnVsbChuLnNlYXJjaCl8fChuLnBhdGg9KG4ucGF0aG5hbWU/bi5wYXRobmFtZToiIikrKG4uc2VhcmNoP24uc2VhcmNoOiIiKSksbi5hdXRoPWUuYXV0aHx8bi5hdXRoLG4uc2xhc2hlcz1uLnNsYXNoZXN8fGUuc2xhc2hlcyxuLmhyZWY9bi5mb3JtYXQoKSxufSxPLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmhvc3QsdD1yLmV4ZWMoZSk7dCYmKCI6IiE9PSh0PXRbMF0pJiYodGhpcy5wb3J0PXQuc3Vic3RyKDEpKSxlPWUuc3Vic3RyKDAsZS5sZW5ndGgtdC5sZW5ndGgpKSxlJiYodGhpcy5ob3N0bmFtZT1lKX19LHsiLi91dGlsIjoxNjMscHVueWNvZGU6MTEzLHF1ZXJ5c3RyaW5nOjExNn1dLDE2MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2lzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZX0saXNOdWxsOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0saXNOdWxsT3JVbmRlZmluZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fX0se31dLDE2NDpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUpe3RyeXtpZighbi5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHQ9bi5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXQmJiJ0cnVlIj09PVN0cmluZyh0KS50b0xvd2VyQ2FzZSgpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gZTt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7aWYocigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcih0KTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZSh0KTpjb25zb2xlLndhcm4odCksbj0hMH1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDE2NTpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT17fSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKWkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dmFyIGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eX0se31dLDE2NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3V0aWxzIikuY3JlYXRlTWFwRnJvbVN0cmluZztmdW5jdGlvbiBpKGUpe3JldHVybiByKGUsITApfXZhciBvLGEscz0vKFteXHMiJzw+Lz1dKykvLHU9Wy89L10sbD1bLyIoW14iXSopIisvLnNvdXJjZSwvJyhbXiddKiknKy8uc291cmNlLC8oW14gXHRcblxmXHIiJ2A9PD5dKykvLnNvdXJjZV0sYz0iKCg/OiIrKGE9IlsiKyhvPSJBLVphLXpcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDEzMVxcdTAxMzQtXFx1MDEzRVxcdTAxNDEtXFx1MDE0OFxcdTAxNEEtXFx1MDE3RVxcdTAxODAtXFx1MDFDM1xcdTAxQ0QtXFx1MDFGMFxcdTAxRjRcXHUwMUY1XFx1MDFGQS1cXHUwMjE3XFx1MDI1MC1cXHUwMkE4XFx1MDJCQi1cXHUwMkMxXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzQ0VcXHUwM0QwLVxcdTAzRDZcXHUwM0RBXFx1MDNEQ1xcdTAzREVcXHUwM0UwXFx1MDNFMi1cXHUwM0YzXFx1MDQwMS1cXHUwNDBDXFx1MDQwRS1cXHUwNDRGXFx1MDQ1MS1cXHUwNDVDXFx1MDQ1RS1cXHUwNDgxXFx1MDQ5MC1cXHUwNEM0XFx1MDRDN1xcdTA0QzhcXHUwNENCXFx1MDRDQ1xcdTA0RDAtXFx1MDRFQlxcdTA0RUUtXFx1MDRGNVxcdTA0RjhcXHUwNEY5XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4NlxcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjEtXFx1MDYzQVxcdTA2NDEtXFx1MDY0QVxcdTA2NzEtXFx1MDZCN1xcdTA2QkEtXFx1MDZCRVxcdTA2QzAtXFx1MDZDRVxcdTA2RDAtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA5MDUtXFx1MDkzOVxcdTA5M0RcXHUwOTU4LVxcdTA5NjFcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThCXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRTBcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNi1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCNVxcdTBCQjctXFx1MEJCOVxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDI4XFx1MEQyQS1cXHUwRDM5XFx1MEQ2MFxcdTBENjFcXHUwRTAxLVxcdTBFMkVcXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQURcXHUwRUFFXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2OVxcdTEwQTAtXFx1MTBDNVxcdTEwRDAtXFx1MTBGNlxcdTExMDBcXHUxMTAyXFx1MTEwM1xcdTExMDUtXFx1MTEwN1xcdTExMDlcXHUxMTBCXFx1MTEwQ1xcdTExMEUtXFx1MTExMlxcdTExM0NcXHUxMTNFXFx1MTE0MFxcdTExNENcXHUxMTRFXFx1MTE1MFxcdTExNTRcXHUxMTU1XFx1MTE1OVxcdTExNUYtXFx1MTE2MVxcdTExNjNcXHUxMTY1XFx1MTE2N1xcdTExNjlcXHUxMTZEXFx1MTE2RVxcdTExNzJcXHUxMTczXFx1MTE3NVxcdTExOUVcXHUxMUE4XFx1MTFBQlxcdTExQUVcXHUxMUFGXFx1MTFCN1xcdTExQjhcXHUxMUJBXFx1MTFCQy1cXHUxMUMyXFx1MTFFQlxcdTExRjBcXHUxMUY5XFx1MUUwMC1cXHUxRTlCXFx1MUVBMC1cXHUxRUY5XFx1MUYwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIxMjZcXHUyMTJBXFx1MjEyQlxcdTIxMkVcXHUyMTgwLVxcdTIxODJcXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzA0MS1cXHUzMDk0XFx1MzBBMS1cXHUzMEZBXFx1MzEwNS1cXHUzMTJDXFx1NEUwMC1cXHU5RkE1XFx1QUMwMC1cXHVEN0EzIikrIl9dWyIrbysiMC05XFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XFx1MDk2Ni1cXHUwOTZGXFx1MDlFNi1cXHUwOUVGXFx1MEE2Ni1cXHUwQTZGXFx1MEFFNi1cXHUwQUVGXFx1MEI2Ni1cXHUwQjZGXFx1MEJFNy1cXHUwQkVGXFx1MEM2Ni1cXHUwQzZGXFx1MENFNi1cXHUwQ0VGXFx1MEQ2Ni1cXHUwRDZGXFx1MEU1MC1cXHUwRTU5XFx1MEVEMC1cXHUwRUQ5XFx1MEYyMC1cXHUwRjI5XFwuXFwtX1xcdTAzMDAtXFx1MDM0NVxcdTAzNjBcXHUwMzYxXFx1MDQ4My1cXHUwNDg2XFx1MDU5MS1cXHUwNUExXFx1MDVBMy1cXHUwNUI5XFx1MDVCQi1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA2NEItXFx1MDY1MlxcdTA2NzBcXHUwNkQ2LVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA5MDEtXFx1MDkwM1xcdTA5M0NcXHUwOTNFLVxcdTA5NERcXHUwOTUxLVxcdTA5NTRcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDJcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTcwXFx1MEE3MVxcdTBBODEtXFx1MEE4M1xcdTBBQkNcXHUwQUJFLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQzXFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCODJcXHUwQjgzXFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEN1xcdTBDMDEtXFx1MEMwM1xcdTBDM0UtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM4MlxcdTBDODNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBEMDJcXHUwRDAzXFx1MEQzRS1cXHUwRDQzXFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBFMzFcXHUwRTM0LVxcdTBFM0FcXHUwRTQ3LVxcdTBFNEVcXHUwRUIxXFx1MEVCNC1cXHUwRUI5XFx1MEVCQlxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0VcXHUwRjNGXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjhCXFx1MEY5MC1cXHUwRjk1XFx1MEY5N1xcdTBGOTktXFx1MEZBRFxcdTBGQjEtXFx1MEZCN1xcdTBGQjlcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHhCN1xcdTAyRDBcXHUwMkQxXFx1MDM4N1xcdTA2NDBcXHUwRTQ2XFx1MEVDNlxcdTMwMDVcXHUzMDMxLVxcdTMwMzVcXHUzMDlEXFx1MzA5RVxcdTMwRkMtXFx1MzBGRV0qIikrIlxcOik/IithKyIpIixBPW5ldyBSZWdFeHAoIl48IitjKSx4PS9eXHMqKFwvPyk+LyxrPW5ldyBSZWdFeHAoIl48XFwvIitjKyJbXj5dKj4iKSxDPS9ePCFET0NUWVBFXHM/W14+XSs+L2ksTz0hMTsieCIucmVwbGFjZSgveCguKT8vZyxmdW5jdGlvbihlLHQpe089IiI9PT10fSk7dmFyIFM9aSgiYXJlYSxiYXNlLGJhc2Vmb250LGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnIiKSxEPWkoImEsYWJicixhY3JvbnltLGFwcGxldCxiLGJhc2Vmb250LGJkbyxiaWcsYnIsYnV0dG9uLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpZnJhbWUsaW1nLGlucHV0LGlucyxrYmQsbGFiZWwsbWFwLG5vc2NyaXB0LG9iamVjdCxxLHMsc2FtcCxzY3JpcHQsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHN2Zyx0ZXh0YXJlYSx0dCx1LHZhciIpLFQ9aSgiY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9uLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIsc291cmNlIiksQj1pKCJjaGVja2VkLGNvbXBhY3QsZGVjbGFyZSxkZWZlcixkaXNhYmxlZCxpc21hcCxtdWx0aXBsZSxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3dyYXAscmVhZG9ubHksc2VsZWN0ZWQiKSxSPWkoInNjcmlwdCxzdHlsZSIpLEw9aSgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLGRldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSxvbCxvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGl0bGUsdHIsdHJhY2ssdWwiKSxGPXt9O2Z1bmN0aW9uIHEoZSl7dmFyIHQ9cy5zb3VyY2UrIig/OlxccyooIitmdW5jdGlvbihlKXtyZXR1cm4gdS5jb25jYXQoZS5jdXN0b21BdHRyQXNzaWdufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIoPzoiK2Uuc291cmNlKyIpIn0pLmpvaW4oInwiKX0oZSkrIilbIFxcdFxcblxcZlxccl0qKD86IitsLmpvaW4oInwiKSsiKSk/IjtpZihlLmN1c3RvbUF0dHJTdXJyb3VuZCl7Zm9yKHZhciBuPVtdLHI9ZS5jdXN0b21BdHRyU3Vycm91bmQubGVuZ3RoLTE7MDw9cjtyLS0pbltyXT0iKD86KCIrZS5jdXN0b21BdHRyU3Vycm91bmRbcl1bMF0uc291cmNlKyIpXFxzKiIrdCsiXFxzKigiK2UuY3VzdG9tQXR0clN1cnJvdW5kW3JdWzFdLnNvdXJjZSsiKSkiO24ucHVzaCgiKD86Iit0KyIpIiksdD0iKD86IituLmpvaW4oInwiKSsiKSJ9cmV0dXJuIG5ldyBSZWdFeHAoIl5cXHMqIit0KX1mdW5jdGlvbiBmKGUsZil7Zm9yKHZhciBvLHQsbixyLGE9W10scz1xKGYpO2U7KXtpZih0PWUsbyYmUihvKSl7dmFyIGk9by50b0xvd2VyQ2FzZSgpLHU9RltpXXx8KEZbaV09bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pPC8iK2krIltePl0qPiIsImkiKSk7ZT1lLnJlcGxhY2UodSxmdW5jdGlvbihlLHQpe3JldHVybiJzY3JpcHQiIT09aSYmInN0eWxlIiE9PWkmJiJub3NjcmlwdCIhPT1pJiYodD10LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLGYuY2hhcnMmJmYuY2hhcnModCksIiJ9KSxFKCI8LyIraSsiPiIsaSl9ZWxzZXt2YXIgbCxjPWUuaW5kZXhPZigiPCIpO2lmKDA9PT1jKXtpZigvXjwhLS0vLnRlc3QoZSkpe3ZhciBwPWUuaW5kZXhPZigiLS1ceDNlIik7aWYoMDw9cCl7Zi5jb21tZW50JiZmLmNvbW1lbnQoZS5zdWJzdHJpbmcoNCxwKSksZT1lLnN1YnN0cmluZyhwKzMpLG49IiI7Y29udGludWV9fWlmKC9ePCFcWy8udGVzdChlKSl7dmFyIGg9ZS5pbmRleE9mKCJdPiIpO2lmKDA8PWgpe2YuY29tbWVudCYmZi5jb21tZW50KGUuc3Vic3RyaW5nKDIsaCsxKSwhMCksZT1lLnN1YnN0cmluZyhoKzIpLG49IiI7Y29udGludWV9fXZhciBkPWUubWF0Y2goQyk7aWYoZCl7Zi5kb2N0eXBlJiZmLmRvY3R5cGUoZFswXSksZT1lLnN1YnN0cmluZyhkWzBdLmxlbmd0aCksbj0iIjtjb250aW51ZX12YXIgbT1lLm1hdGNoKGspO2lmKG0pe2U9ZS5zdWJzdHJpbmcobVswXS5sZW5ndGgpLG1bMF0ucmVwbGFjZShrLEUpLG49Ii8iK21bMV0udG9Mb3dlckNhc2UoKTtjb250aW51ZX12YXIgZz1iKGUpO2lmKGcpe2U9Zy5yZXN0LF8oZyksbj1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtjb250aW51ZX1mLmNvbnRpbnVlT25QYXJzZUVycm9yJiYoYz1lLmluZGV4T2YoIjwiLDEpKX12YXIgdj1iKGU9MDw9Yz8obD1lLnN1YnN0cmluZygwLGMpLGUuc3Vic3RyaW5nKGMpKToobD1lLCIiKSk7cj12P3YudGFnTmFtZToodj1lLm1hdGNoKGspKT8iLyIrdlsxXToiIixmLmNoYXJzJiZmLmNoYXJzKGwsbixyKSxuPSIifWlmKGU9PT10KXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6ICIrZSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1lLm1hdGNoKEEpO2lmKHQpe3ZhciBuLHIsaT17dGFnTmFtZTp0WzFdLGF0dHJzOltdfTtmb3IoZT1lLnNsaWNlKHRbMF0ubGVuZ3RoKTshKG49ZS5tYXRjaCh4KSkmJihyPWUubWF0Y2gocykpOyllPWUuc2xpY2UoclswXS5sZW5ndGgpLGkuYXR0cnMucHVzaChyKTtpZihuKXJldHVybiBpLnVuYXJ5U2xhc2g9blsxXSxpLnJlc3Q9ZS5zbGljZShuWzBdLmxlbmd0aCksaX19ZnVuY3Rpb24geShlKXtpZigwPD13KGUpKXJldHVybiBFKCIiLGUpLCEwfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZS50YWdOYW1lLG49ZS51bmFyeVNsYXNoO2lmKGYuaHRtbDUmJigicCI9PT1vJiZMKHQpP0UoIiIsbyk6InRib2R5Ij09PXQ/eSgidGhlYWQiKToidGZvb3QiPT09dCYmKHkoInRib2R5Iil8fHkoInRoZWFkIikpLCJjb2wiPT09dCYmdygiY29sZ3JvdXAiKTwwJiYobz0iY29sZ3JvdXAiLGEucHVzaCh7dGFnOm8sYXR0cnM6W119KSxmLnN0YXJ0JiZmLnN0YXJ0KG8sW10sITEsIiIpKSksIWYuaHRtbDUmJiFEKHQpKWZvcig7byYmRChvKTspRSgiIixvKTtUKHQpJiZvPT09dCYmRSgiIix0KTt2YXIgcj1TKHQpfHwiaHRtbCI9PT10JiYiaGVhZCI9PT1vfHwhIW4saT1lLmF0dHJzLm1hcChmdW5jdGlvbih0KXt2YXIgbixyLGUsaSxvLGE7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbz10W2VdLHZvaWQgMCE9PShyPXRbZSsxXSk/JyInOnZvaWQgMCE9PShyPXRbZSsyXSk/IiciOih2b2lkIDA9PT0ocj10W2UrM10pJiZCKG4pJiYocj1uKSwiIil9TyYmLTE9PT10WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXRbM10mJmRlbGV0ZSB0WzNdLCIiPT09dFs0XSYmZGVsZXRlIHRbNF0sIiI9PT10WzVdJiZkZWxldGUgdFs1XSk7dmFyIHU9MTtpZihmLmN1c3RvbUF0dHJTdXJyb3VuZClmb3IodmFyIGw9MCxjPWYuY3VzdG9tQXR0clN1cnJvdW5kLmxlbmd0aDtsPGM7bCsrLHUrPTcpaWYobj10W3UrMV0pe2E9cyh1KzIpLGU9dFt1XSxpPXRbdSs2XTticmVha31yZXR1cm4hbiYmKG49dFt1XSkmJihhPXModSsxKSkse25hbWU6bix2YWx1ZTpyLGN1c3RvbUFzc2lnbjpvfHwiPSIsY3VzdG9tT3BlbjplfHwiIixjdXN0b21DbG9zZTppfHwiIixxdW90ZTphfHwiIn19KTtyfHwoYS5wdXNoKHt0YWc6dCxhdHRyczppfSksbz10LG49IiIpLGYuc3RhcnQmJmYuc3RhcnQodCxpLHIsbil9ZnVuY3Rpb24gdyhlKXt2YXIgdCxuPWUudG9Mb3dlckNhc2UoKTtmb3IodD1hLmxlbmd0aC0xOzA8PXQmJmFbdF0udGFnLnRvTG93ZXJDYXNlKCkhPT1uO3QtLSk7cmV0dXJuIHR9ZnVuY3Rpb24gRShlLHQpe3ZhciBuO2lmKDA8PShuPXQ/dyh0KTowKSl7Zm9yKHZhciByPWEubGVuZ3RoLTE7bjw9cjtyLS0pZi5lbmQmJmYuZW5kKGFbcl0udGFnLGFbcl0uYXR0cnMsbjxyfHwhZSk7YS5sZW5ndGg9bixvPW4mJmFbbi0xXS50YWd9ZWxzZSJiciI9PT10LnRvTG93ZXJDYXNlKCk/Zi5zdGFydCYmZi5zdGFydCh0LFtdLCEwLCIiKToicCI9PT10LnRvTG93ZXJDYXNlKCkmJihmLnN0YXJ0JiZmLnN0YXJ0KHQsW10sITEsIiIsITApLGYuZW5kJiZmLmVuZCh0LFtdKSl9Zi5wYXJ0aWFsTWFya3VwfHxFKCl9bi5IVE1MUGFyc2VyPWYsbi5IVE1MdG9YTUw9ZnVuY3Rpb24oZSl7dmFyIG89IiI7cmV0dXJuIG5ldyBmKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCxuKXtvKz0iPCIrZTtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbys9IiAiK3Rbcl0ubmFtZSsnPSInKyh0W3JdLnZhbHVlfHwiIikucmVwbGFjZSgvIi9nLCImIzM0OyIpKyciJztvKz0obj8iLyI6IiIpKyI+In0sZW5kOmZ1bmN0aW9uKGUpe28rPSI8LyIrZSsiPiJ9LGNoYXJzOmZ1bmN0aW9uKGUpe28rPWV9LGNvbW1lbnQ6ZnVuY3Rpb24oZSl7bys9Ilx4M2MhLS0iK2UrIi0tXHgzZSJ9LGlnbm9yZTpmdW5jdGlvbihlKXtvKz1lfX0pLG99LG4uSFRNTHRvRE9NPWZ1bmN0aW9uKGUsbyl7dmFyIGE9e2h0bWw6ITAsaGVhZDohMCxib2R5OiEwLHRpdGxlOiEwfSxzPXtsaW5rOiJoZWFkIixiYXNlOiJoZWFkIn07bz9vPW8ub3duZXJEb2N1bWVudHx8by5nZXRPd25lckRvY3VtZW50JiZvLmdldE93bmVyRG9jdW1lbnQoKXx8bzoidW5kZWZpbmVkIiE9dHlwZW9mIERPTURvY3VtZW50P289bmV3IERPTURvY3VtZW50OiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudD9vPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCIiLCIiLG51bGwpOiJ1bmRlZmluZWQiIT10eXBlb2YgQWN0aXZlWCYmKG89bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sLkRPTURvY3VtZW50IikpO3ZhciB0LG4sdT1bXTtpZighKG8uZG9jdW1lbnRFbGVtZW50fHxvLmdldERvY3VtZW50RWxlbWVudCYmby5nZXREb2N1bWVudEVsZW1lbnQoKSkmJm8uY3JlYXRlRWxlbWVudCYmKHQ9by5jcmVhdGVFbGVtZW50KCJodG1sIiksKG49by5jcmVhdGVFbGVtZW50KCJoZWFkIikpLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgidGl0bGUiKSksdC5hcHBlbmRDaGlsZChuKSx0LmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiYm9keSIpKSxvLmFwcGVuZENoaWxkKHQpKSxvLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgciBpbiBhKWFbcl09by5nZXRFbGVtZW50c0J5VGFnTmFtZShyKVswXTt2YXIgbD1hLmJvZHk7cmV0dXJuIG5ldyBmKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCxuKXtpZihhW2VdKWw9YVtlXTtlbHNle3ZhciByPW8uY3JlYXRlRWxlbWVudChlKTtmb3IodmFyIGkgaW4gdClyLnNldEF0dHJpYnV0ZSh0W2ldLm5hbWUsdFtpXS52YWx1ZSk7c1tlXSYmImJvb2xlYW4iIT10eXBlb2YgYVtzW2VdXT9hW3NbZV1dLmFwcGVuZENoaWxkKHIpOmwmJmwuYXBwZW5kQ2hpbGQmJmwuYXBwZW5kQ2hpbGQociksbnx8KHUucHVzaChyKSxsPXIpfX0sZW5kOmZ1bmN0aW9uKCl7dS5sZW5ndGgtPTEsbD11W3UubGVuZ3RoLTFdfSxjaGFyczpmdW5jdGlvbihlKXtsLmFwcGVuZENoaWxkKG8uY3JlYXRlVGV4dE5vZGUoZSkpfSxjb21tZW50OmZ1bmN0aW9uKCl7fSxpZ25vcmU6ZnVuY3Rpb24oKXt9fSksb319LHsiLi91dGlscyI6MTY4fV0sMTY3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbygpe31yLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUsdCl7dD10fHwwO2Zvcih2YXIgbj0wLHI9dGhpcy5rZXlzLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10aGlzLmtleXNbbl0sbz1pLnNsaWNlKDEpLGE9ZS5pbmRleE9mKG8sdCk7aWYoLTEhPT1hKXtmb3IoO2EhPT10JiYoZS5zcGxpY2UoYSwxKSxlLnNwbGljZSh0LDAsbykpLHQrKywtMSE9PShhPWUuaW5kZXhPZihvLHQpKTspO3JldHVybiB0aGlzW2ldLnNvcnQoZSx0KX19cmV0dXJuIGV9LG8ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24obil7dmFyIHI9dGhpcztuLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9IiQiK2U7clt0XXx8KHJbdF09W10sclt0XS5wcm9jZXNzZWQ9MCksclt0XS5wdXNoKG4pfSl9LGNyZWF0ZVNvcnRlcjpmdW5jdGlvbigpe3ZhciBpPXRoaXMsdD1uZXcgcjtyZXR1cm4gdC5rZXlzPU9iamVjdC5rZXlzKGkpLnNvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj1pW2VdLmxlbmd0aCxyPWlbdF0ubGVuZ3RoO3JldHVybiBuPHI/MTpyPG4/LTE6ZTx0Py0xOnQ8ZT8xOjB9KS5maWx0ZXIoZnVuY3Rpb24oZSl7aWYoaVtlXS5wcm9jZXNzZWQ8aVtlXS5sZW5ndGgpe3ZhciBuPWUuc2xpY2UoMSkscj1uZXcgbztyZXR1cm4gaVtlXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdDstMSE9PSh0PWUuaW5kZXhPZihuKSk7KWUuc3BsaWNlKHQsMSk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lbIiQiK2VdLnByb2Nlc3NlZCsrfSksci5hZGQoZS5zbGljZSgwKSl9KSx0W2VdPXIuY3JlYXRlU29ydGVyKCksITB9cmV0dXJuITF9KSx0fX0sdC5leHBvcnRzPW99LHt9XSwxNjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7bltlXT0xfSksdD9mdW5jdGlvbihlKXtyZXR1cm4gMT09PW5bZS50b0xvd2VyQ2FzZSgpXX06ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1uW2VdfX1uLmNyZWF0ZU1hcD1yLG4uY3JlYXRlTWFwRnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe3JldHVybiByKGUuc3BsaXQoLywvKSx0KX19LHt9XSwiaHRtbC1taW5pZmllciI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGM9ZSgiY2xlYW4tY3NzIiksZj1lKCJoZSIpLmRlY29kZSxEPWUoIi4vaHRtbHBhcnNlciIpLkhUTUxQYXJzZXIsaT1lKCJyZWxhdGV1cmwiKSxUPWUoIi4vdG9rZW5jaGFpbiIpLHM9ZSgidWdsaWZ5LWpzIikscj1lKCIuL3V0aWxzIik7ZnVuY3Rpb24gQihlKXtyZXR1cm4gZSYmZS5yZXBsYWNlKC9eWyBcblxyXHRcZl0rLywiIikucmVwbGFjZSgvWyBcblxyXHRcZl0rJC8sIiIpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUucmVwbGFjZSgvWyBcblxyXHRcZlx4QTBdKy9nLGZ1bmN0aW9uKGUpe3JldHVybiJcdCI9PT1lPyJcdCI6ZS5yZXBsYWNlKC8oXnxceEEwKylbXlx4QTBdKy9nLCIkMSAiKX0pfWZ1bmN0aW9uIFIoZSxuLHQscixpKXt2YXIgbz0iIixhPSIiO3JldHVybiBuLnByZXNlcnZlTGluZUJyZWFrcyYmKGU9ZS5yZXBsYWNlKC9eWyBcblxyXHRcZl0qP1tcblxyXVsgXG5cclx0XGZdKi8sZnVuY3Rpb24oKXtyZXR1cm4gbz0iXG4iLCIifSkucmVwbGFjZSgvWyBcblxyXHRcZl0qP1tcblxyXVsgXG5cclx0XGZdKiQvLGZ1bmN0aW9uKCl7cmV0dXJuIGE9IlxuIiwiIn0pKSx0JiYoZT1lLnJlcGxhY2UoL15bIFxuXHJcdFxmXHhBMF0rLyxmdW5jdGlvbihlKXt2YXIgdD0hbyYmbi5jb25zZXJ2YXRpdmVDb2xsYXBzZTtyZXR1cm4gdCYmIlx0Ij09PWU/Ilx0IjplLnJlcGxhY2UoL15bXlx4QTBdKy8sIiIpLnJlcGxhY2UoLyhceEEwKylbXlx4QTBdKy9nLCIkMSAiKXx8KHQ/IiAiOiIiKX0pKSxyJiYoZT1lLnJlcGxhY2UoL1sgXG5cclx0XGZceEEwXSskLyxmdW5jdGlvbihlKXt2YXIgdD0hYSYmbi5jb25zZXJ2YXRpdmVDb2xsYXBzZTtyZXR1cm4gdCYmIlx0Ij09PWU/Ilx0IjplLnJlcGxhY2UoL1teXHhBMF0rKFx4QTArKS9nLCIgJDEiKS5yZXBsYWNlKC9bXlx4QTBdKyQvLCIiKXx8KHQ/IiAiOiIiKX0pKSxpJiYoZT1wKGUpKSxvK2UrYX12YXIgbz1yLmNyZWF0ZU1hcEZyb21TdHJpbmcsTD1vKCJhLGFiYnIsYWNyb255bSxiLGJkaSxiZG8sYmlnLGJ1dHRvbixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW5zLGtiZCxsYWJlbCxtYXJrLG1hdGgsbm9icixvYmplY3QscSxycCxydCxydGMscnVieSxzLHNhbXAsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHN2Zyx0ZXh0YXJlYSx0aW1lLHR0LHUsdmFyIiksRj1vKCJhLGFiYnIsYWNyb255bSxiLGJpZyxkZWwsZW0sZm9udCxpLGlucyxrYmQsbWFyayxub2JyLHJwLHMsc2FtcCxzbWFsbCxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHR0LHUsdmFyIiksYT1vKCJjb21tZW50LGltZyxpbnB1dCx3YnIiKTtmdW5jdGlvbiBxKGUsdCxuLHIpe3ZhciBpPXQmJiFhKHQpO2kmJiFyLmNvbGxhcHNlSW5saW5lVGFnV2hpdGVzcGFjZSYmKGk9Ii8iPT09dC5jaGFyQXQoMCk/IUwodC5zbGljZSgxKSk6IUYodCkpO3ZhciBvPW4mJiFhKG4pO3JldHVybiBvJiYhci5jb2xsYXBzZUlubGluZVRhZ1doaXRlc3BhY2UmJihvPSIvIj09PW4uY2hhckF0KDApPyFGKG4uc2xpY2UoMSkpOiFMKG4pKSxSKGUscixpLG8sdCYmbil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKGVbbl0ubmFtZS50b0xvd2VyQ2FzZSgpPT09dClyZXR1cm4hMDtyZXR1cm4hMX12YXIgbD1yLmNyZWF0ZU1hcChbInRleHQvamF2YXNjcmlwdCIsInRleHQvZWNtYXNjcmlwdCIsInRleHQvanNjcmlwdCIsImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0Il0pO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIiI9PT0oZT1CKGUuc3BsaXQoLzsvLDIpWzBdKS50b0xvd2VyQ2FzZSgpKXx8bChlKX1mdW5jdGlvbiBoKGUpe3JldHVybiIiPT09KGU9QihlKS50b0xvd2VyQ2FzZSgpKXx8InRleHQvY3NzIj09PWV9ZnVuY3Rpb24gTShlLHQpe2lmKCJzdHlsZSIhPT1lKXJldHVybiExO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7aWYoInR5cGUiPT09dFtuXS5uYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGgodFtuXS52YWx1ZSl9cmV0dXJuITB9dmFyIGQ9bygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlIiksbT1vKCJ0cnVlLGZhbHNlIik7ZnVuY3Rpb24gZyhlLHQsbil7aWYoImxpbmsiIT09ZSlyZXR1cm4hMTtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspaWYoInJlbCI9PT10W3JdLm5hbWUmJnRbcl0udmFsdWU9PT1uKXJldHVybiEwfXZhciB2PW8oImltZyxzb3VyY2UiKTtmdW5jdGlvbiBiKGUsdCxuLGEscil7aWYoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmN1c3RvbUV2ZW50QXR0cmlidXRlcztpZihuKXtmb3IodmFyIHI9bi5sZW5ndGg7ci0tOylpZihuW3JdLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuL15vblthLXpdezMsfSQvLnRlc3QoZSl9KHQsYSkpcmV0dXJuIG49QihuKS5yZXBsYWNlKC9eamF2YXNjcmlwdDpccyovaSwiIiksYS5taW5pZnlKUyhuLCEwKTtpZigiY2xhc3MiPT09dClyZXR1cm4gbj1CKG4pLG49YS5zb3J0Q2xhc3NOYW1lP2Euc29ydENsYXNzTmFtZShuKTpwKG4pO2lmKGZ1bmN0aW9uKGUsdCl7cmV0dXJuL14oPzphfGFyZWF8bGlua3xiYXNlKSQvLnRlc3QodCkmJiJocmVmIj09PWV8fCJpbWciPT09dCYmL14oPzpzcmN8bG9uZ2Rlc2N8dXNlbWFwKSQvLnRlc3QoZSl8fCJvYmplY3QiPT09dCYmL14oPzpjbGFzc2lkfGNvZGViYXNlfGRhdGF8dXNlbWFwKSQvLnRlc3QoZSl8fCJxIj09PXQmJiJjaXRlIj09PWV8fCJibG9ja3F1b3RlIj09PXQmJiJjaXRlIj09PWV8fCgiaW5zIj09PXR8fCJkZWwiPT09dCkmJiJjaXRlIj09PWV8fCJmb3JtIj09PXQmJiJhY3Rpb24iPT09ZXx8ImlucHV0Ij09PXQmJigic3JjIj09PWV8fCJ1c2VtYXAiPT09ZSl8fCJoZWFkIj09PXQmJiJwcm9maWxlIj09PWV8fCJzY3JpcHQiPT09dCYmKCJzcmMiPT09ZXx8ImZvciI9PT1lKX0odCxlKSlyZXR1cm4gbj1CKG4pLGcoZSxyLCJjYW5vbmljYWwiKT9uOmEubWluaWZ5VVJMcyhuKTtpZihmdW5jdGlvbihlLHQpe3JldHVybi9eKD86YXxhcmVhfG9iamVjdHxidXR0b24pJC8udGVzdCh0KSYmInRhYmluZGV4Ij09PWV8fCJpbnB1dCI9PT10JiYoIm1heGxlbmd0aCI9PT1lfHwidGFiaW5kZXgiPT09ZSl8fCJzZWxlY3QiPT09dCYmKCJzaXplIj09PWV8fCJ0YWJpbmRleCI9PT1lKXx8InRleHRhcmVhIj09PXQmJi9eKD86cm93c3xjb2xzfHRhYmluZGV4KSQvLnRlc3QoZSl8fCJjb2xncm91cCI9PT10JiYic3BhbiI9PT1lfHwiY29sIj09PXQmJiJzcGFuIj09PWV8fCgidGgiPT09dHx8InRkIj09PXQpJiYoInJvd3NwYW4iPT09ZXx8ImNvbHNwYW4iPT09ZSl9KHQsZSkpcmV0dXJuIEIobik7aWYoInN0eWxlIj09PXQpcmV0dXJuKG49QihuKSkmJigvOyQvLnRlc3QobikmJiEvJiM/WzAtOWEtekEtWl0rOyQvLnRlc3QobikmJihuPW4ucmVwbGFjZSgvXHMqOyQvLCI7IikpLG49YS5taW5pZnlDU1MobiwiaW5saW5lIikpLG47aWYoZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3Jjc2V0Ij09PWUmJnYodCl9KHQsZSkpbj1CKG4pLnNwbGl0KC9ccyssXHMqfFxzKixccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPSIiLHI9ZS5tYXRjaCgvXHMrKFsxLTldWzAtOV0qd3xbMC05XSsoPzpcLlswLTldKyk/eCkkLyk7aWYocil7dD10LnNsaWNlKDAsLXJbMF0ubGVuZ3RoKTt2YXIgaT0rclsxXS5zbGljZSgwLC0xKSxvPXJbMV0uc2xpY2UoLTEpOzE9PWkmJiJ4Ij09PW98fChuPSIgIitpK28pfXJldHVybiBhLm1pbmlmeVVSTHModCkrbn0pLmpvaW4oIiwgIik7ZWxzZSBpZihmdW5jdGlvbihlLHQpe2lmKCJtZXRhIiE9PWUpcmV0dXJuITE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKCJuYW1lIj09PXRbbl0ubmFtZSYmInZpZXdwb3J0Ij09PXRbbl0udmFsdWUpcmV0dXJuITB9KGUscikmJiJjb250ZW50Ij09PXQpbj1uLnJlcGxhY2UoL1xzKy9nLCIiKS5yZXBsYWNlKC9bMC05XStcLlswLTldKy9nLGZ1bmN0aW9uKGUpe3JldHVybigrZSkudG9TdHJpbmcoKX0pO2Vsc2V7aWYoZnVuY3Rpb24oZSx0KXtpZigibWV0YSIhPT1lKXJldHVybiExO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZigiaHR0cC1lcXVpdiI9PT10W25dLm5hbWUudG9Mb3dlckNhc2UoKSYmImNvbnRlbnQtc2VjdXJpdHktcG9saWN5Ij09PXRbbl0udmFsdWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH0oZSxyKSYmImNvbnRlbnQiPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiBwKG4pO2lmKGEuY3VzdG9tQXR0ckNvbGxhcHNlJiZhLmN1c3RvbUF0dHJDb2xsYXBzZS50ZXN0KHQpKW49bi5yZXBsYWNlKC9cbit8XHIrfFxzezIsfS9nLCIiKTtlbHNlIGlmKCJzY3JpcHQiPT09ZSYmInR5cGUiPT09dCluPUIobi5yZXBsYWNlKC9ccyo7XHMqL2csIjsiKSk7ZWxzZSBpZihmdW5jdGlvbihlLHQsbil7cmV0dXJuIm1lZGlhIj09PW4mJihnKGUsdCwic3R5bGVzaGVldCIpfHxNKGUsdCkpfShlLHIsdCkpcmV0dXJuIG49QihuKSxhLm1pbmlmeUNTUyhuLCJtZWRpYSIpfXJldHVybiBufWZ1bmN0aW9uIE4oZSl7cmV0dXJuIi8qIGNsZWFuLWNzcyBpZ25vcmU6c3RhcnQgKi8iK2UrIi8qIGNsZWFuLWNzcyBpZ25vcmU6ZW5kICovIn1mdW5jdGlvbiBQKGUsdCl7c3dpdGNoKHQpe2Nhc2UiaW5saW5lIjpyZXR1cm4iKnsiK2UrIn0iO2Nhc2UibWVkaWEiOnJldHVybiJAbWVkaWEgIitlKyJ7YXt0b3A6MH19IjtkZWZhdWx0OnJldHVybiBlfX12YXIgST1vKCJodG1sLGhlYWQsYm9keSxjb2xncm91cCx0Ym9keSIpLHo9bygiaHRtbCxoZWFkLGJvZHksbGksZHQsZGQscCxyYixydCxydGMscnAsb3B0Z3JvdXAsb3B0aW9uLGNvbGdyb3VwLGNhcHRpb24sdGhlYWQsdGJvZHksdGZvb3QsdHIsdGQsdGgiKSxqPW8oIm1ldGEsbGluayxzY3JpcHQsc3R5bGUsdGVtcGxhdGUsbm9zY3JpcHQiKSxWPW8oImR0LGRkIiksSD1vKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxkZXRhaWxzLGRpdixkbCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLG1haW4sbWVudSxuYXYsb2wscCxwcmUsc2VjdGlvbix0YWJsZSx1bCIpLCQ9bygiYSxhdWRpbyxkZWwsaW5zLG1hcCxub3NjcmlwdCx2aWRlbyIpLEs9bygicmIscnQscnRjLHJwIiksRz1vKCJyYixydGMscnAiKSxZPW8oIm9wdGlvbixvcHRncm91cCIpLFc9bygidGJvZHksdGZvb3QiKSxRPW8oInRoZWFkLHRib2R5LHRmb290IiksWj1vKCJ0ZCx0aCIpLEo9bygiaHRtbCxoZWFkLGJvZHkiKSxYPW8oImh0bWwsYm9keSIpLGVlPW8oImhlYWQsY29sZ3JvdXAsY2FwdGlvbiIpLHRlPW8oImR0LHRoZWFkIiksbmU9bygiYSxhYmJyLGFjcm9ueW0sYWRkcmVzcyxhcHBsZXQsYXJlYSxhcnRpY2xlLGFzaWRlLGF1ZGlvLGIsYmFzZSxiYXNlZm9udCxiZGksYmRvLGJnc291bmQsYmlnLGJsaW5rLGJsb2NrcXVvdGUsYm9keSxicixidXR0b24sY2FudmFzLGNhcHRpb24sY2VudGVyLGNpdGUsY29kZSxjb2wsY29sZ3JvdXAsY29tbWFuZCxjb250ZW50LGRhdGEsZGF0YWxpc3QsZGQsZGVsLGRldGFpbHMsZGZuLGRpYWxvZyxkaXIsZGl2LGRsLGR0LGVsZW1lbnQsZW0sZW1iZWQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9udCxmb290ZXIsZm9ybSxmcmFtZSxmcmFtZXNldCxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxpLGlmcmFtZSxpbWFnZSxpbWcsaW5wdXQsaW5zLGlzaW5kZXgsa2JkLGtleWdlbixsYWJlbCxsZWdlbmQsbGksbGluayxsaXN0aW5nLG1haW4sbWFwLG1hcmssbWFycXVlZSxtZW51LG1lbnVpdGVtLG1ldGEsbWV0ZXIsbXVsdGljb2wsbmF2LG5vYnIsbm9lbWJlZCxub2ZyYW1lcyxub3NjcmlwdCxvYmplY3Qsb2wsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwLHBhcmFtLHBpY3R1cmUscGxhaW50ZXh0LHByZSxwcm9ncmVzcyxxLHJiLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzY3JpcHQsc2VjdGlvbixzZWxlY3Qsc2hhZG93LHNtYWxsLHNvdXJjZSxzcGFjZXIsc3BhbixzdHJpa2Usc3Ryb25nLHN0eWxlLHN1YixzdW1tYXJ5LHN1cCx0YWJsZSx0Ym9keSx0ZCx0ZW1wbGF0ZSx0ZXh0YXJlYSx0Zm9vdCx0aCx0aGVhZCx0aW1lLHRpdGxlLHRyLHRyYWNrLHR0LHUsdWwsdmFyLHZpZGVvLHdicix4bXAiKTt2YXIgeT1uZXcgUmVnRXhwKCJeKD86Y2xhc3N8aWR8c3R5bGV8dGl0bGV8bGFuZ3xkaXJ8b24oPzpmb2N1c3xibHVyfGNoYW5nZXxjbGlja3xkYmxjbGlja3xtb3VzZSg/OmRvd258dXB8b3Zlcnxtb3ZlfG91dCl8a2V5KD86cHJlc3N8ZG93bnx1cCkpKSQiKTtmdW5jdGlvbiByZShlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aC0xOzA8PW47bi0tKWlmKHRbbl0ubmFtZT09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIS9eKD86c2NyaXB0fHN0eWxlfHByZXx0ZXh0YXJlYSkkLy50ZXN0KGUpfWZ1bmN0aW9uIG9lKGUpe3JldHVybiEvXig/OnByZXx0ZXh0YXJlYSkkLy50ZXN0KGUpfWZ1bmN0aW9uIGFlKGUsdCxuLHIpe3ZhciBpPXIubmFtZShlLm5hbWUpLG89ZS52YWx1ZTtpZihyLmRlY29kZUVudGl0aWVzJiZvJiYobz1mKG8se2lzQXR0cmlidXRlVmFsdWU6ITB9KSksIShyLnJlbW92ZVJlZHVuZGFudEF0dHJpYnV0ZXMmJmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuPW4/QihuLnRvTG93ZXJDYXNlKCkpOiIiLCJzY3JpcHQiPT09ZSYmImxhbmd1YWdlIj09PXQmJiJqYXZhc2NyaXB0Ij09PW58fCJmb3JtIj09PWUmJiJtZXRob2QiPT09dCYmImdldCI9PT1ufHwiaW5wdXQiPT09ZSYmInR5cGUiPT09dCYmInRleHQiPT09bnx8InNjcmlwdCI9PT1lJiYiY2hhcnNldCI9PT10JiYhdShyLCJzcmMiKXx8ImEiPT09ZSYmIm5hbWUiPT09dCYmdShyLCJpZCIpfHwiYXJlYSI9PT1lJiYic2hhcGUiPT09dCYmInJlY3QiPT09bn0obixpLG8sdCl8fHIucmVtb3ZlU2NyaXB0VHlwZUF0dHJpYnV0ZXMmJiJzY3JpcHQiPT09biYmInR5cGUiPT09aSYmVShvKXx8ci5yZW1vdmVTdHlsZUxpbmtUeXBlQXR0cmlidXRlcyYmKCJzdHlsZSI9PT1ufHwibGluayI9PT1uKSYmInR5cGUiPT09aSYmaChvKXx8KG8mJihvPWIobixpLG8scix0KSksci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXMmJmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiEobiYmIS9eXHMqJC8udGVzdChuKSkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXM/ci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXModCxlKToiaW5wdXQiPT09ZSYmInZhbHVlIj09PXR8fHkudGVzdCh0KSl9KG4saSxvLHIpKSkpcmV0dXJuIHIuZGVjb2RlRW50aXRpZXMmJm8mJihvPW8ucmVwbGFjZSgvJigjP1swLTlhLXpBLVpdKzspL2csIiZhbXA7JDEiKSkse2F0dHI6ZSxuYW1lOmksdmFsdWU6b319ZnVuY3Rpb24gc2UoZSx0LG4scixpKXt2YXIgbyxhLHM9ZS5uYW1lLHU9ZS52YWx1ZSxsPWUuYXR0cixjPWwucXVvdGU7aWYodm9pZCAwPT09dXx8bi5yZW1vdmVBdHRyaWJ1dGVRdW90ZXMmJiF+dS5pbmRleE9mKGkpJiZmdW5jdGlvbihlKXtyZXR1cm4vXlteIFx0XG5cZlxyIidgPTw+XSskLy50ZXN0KGUpfSh1KSlhPSFyfHx0fHwvXC8kLy50ZXN0KHUpP3UrIiAiOnU7ZWxzZXtpZighbi5wcmV2ZW50QXR0cmlidXRlc0VzY2FwaW5nKXtpZih2b2lkIDA9PT1uLnF1b3RlQ2hhcmFjdGVyKWM9KHUubWF0Y2goLycvZyl8fFtdKS5sZW5ndGg8KHUubWF0Y2goLyIvZyl8fFtdKS5sZW5ndGg/IiciOiciJztlbHNlIGM9IiciPT09bi5xdW90ZUNoYXJhY3Rlcj8iJyI6JyInO3U9JyInPT09Yz91LnJlcGxhY2UoLyIvZywiJiMzNDsiKTp1LnJlcGxhY2UoLycvZywiJiMzOTsiKX1hPWMrdStjLHJ8fG4ucmVtb3ZlVGFnV2hpdGVzcGFjZXx8KGErPSIgIil9cmV0dXJuIHZvaWQgMD09PXV8fG4uY29sbGFwc2VCb29sZWFuQXR0cmlidXRlcyYmZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlKXx8ImRyYWdnYWJsZSI9PT1lJiYhbSh0KX0ocy50b0xvd2VyQ2FzZSgpLHUudG9Mb3dlckNhc2UoKSk/KG89cyxyfHwobys9IiAiKSk6bz1zK2wuY3VzdG9tQXNzaWduK2EsbC5jdXN0b21PcGVuK28rbC5jdXN0b21DbG9zZX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBsZShlKXtmb3IodmFyIHQ7dD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9eMFwuWzAtOV0qLywiIiksfmUuaW5kZXhPZih0KTspO3JldHVybiB0fXZhciBjZT1vKCJzY3JpcHQsc3R5bGUiKTtmdW5jdGlvbiBmZShpLGgsZSl7aC5jb2xsYXBzZVdoaXRlc3BhY2UmJihpPVIoaSxoLCEwLCEwKSk7dmFyIGQsbSxhLGcscyx2PVtdLGI9IiIseT0iIixfPVtdLHc9W10sRT1bXSxBPSIiLHg9IiIsbz1bXSx1PVtdO2k9aS5yZXBsYWNlKC88IS0tIGh0bWxtaW46aWdub3JlIC0tPihbXHNcU10qPyk8IS0tIGh0bWxtaW46aWdub3JlIC0tPi9nLGZ1bmN0aW9uKGUsdCl7aWYoIWEpe2E9bGUoaSk7dmFyIG49bmV3IFJlZ0V4cCgiXiIrYSsiKFswLTldKykkIik7aC5pZ25vcmVDdXN0b21Db21tZW50cz9oLmlnbm9yZUN1c3RvbUNvbW1lbnRzPWguaWdub3JlQ3VzdG9tQ29tbWVudHMuc2xpY2UoKTpoLmlnbm9yZUN1c3RvbUNvbW1lbnRzPVtdLGguaWdub3JlQ3VzdG9tQ29tbWVudHMucHVzaChuKX12YXIgcj0iXHgzYyEtLSIrYStvLmxlbmd0aCsiLS1ceDNlIjtyZXR1cm4gby5wdXNoKHQpLHJ9KTt2YXIgdD1oLmlnbm9yZUN1c3RvbUZyYWdtZW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc291cmNlfSk7aWYodC5sZW5ndGgpe3ZhciBuPW5ldyBSZWdFeHAoIlxccyooPzoiK3Quam9pbigifCIpKyIpK1xccyoiLCJnIik7aT1pLnJlcGxhY2UobixmdW5jdGlvbihlKXt2YXIgbix0O2d8fChnPWxlKGkpLHM9bmV3IFJlZ0V4cCgiKFxccyopIitnKyIoWzAtOV0rKSIrZysiKFxccyopIiwiZyIpLGgubWluaWZ5Q1NTJiYoaC5taW5pZnlDU1M9KHQ9aC5taW5pZnlDU1MsZnVuY3Rpb24ocixlKXtyPXIucmVwbGFjZShzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj11WytuXTtyZXR1cm4gclsxXStnK24rZytyWzJdfSk7dmFyIGk9W107cmV0dXJuKG5ldyBjKS5taW5pZnkoUChyLGUpKS53YXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXMuZXhlYyhlKTtpZih0KXt2YXIgbj1nK3RbMl0rZztyPXIucmVwbGFjZShuLE4obikpLGkucHVzaChuKX19KSxyPXQocixlKSxpLmZvckVhY2goZnVuY3Rpb24oZSl7cj1yLnJlcGxhY2UoTihlKSxlKX0pLHJ9KSksaC5taW5pZnlKUyYmKGgubWluaWZ5SlM9KG49aC5taW5pZnlKUyxmdW5jdGlvbihlLHQpe3JldHVybiBuKGUucmVwbGFjZShzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj11WytuXTtyZXR1cm4gclsxXStnK24rZytyWzJdfSksdCl9KSkpO3ZhciByPWcrdS5sZW5ndGgrZztyZXR1cm4gdS5wdXNoKC9eKFxzKilbXHNcU10qPyhccyopJC8uZXhlYyhlKSksIlx0IityKyJcdCJ9KX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGguY2FuVHJpbVdoaXRlc3BhY2UoZSx0LG9lKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBlPXYubGVuZ3RoLTE7MDxlJiYhL148W14vIV0vLnRlc3QodltlXSk7KWUtLTt2Lmxlbmd0aD1NYXRoLm1heCgwLGUpfWZ1bmN0aW9uIE8oKXtmb3IodmFyIGU9di5sZW5ndGgtMTswPGUmJiEvXjxcLy8udGVzdCh2W2VdKTspZS0tO3YubGVuZ3RoPU1hdGgubWF4KDAsZSl9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1udWxsOzA8PWUmJmsobik7ZS0tKXt2YXIgcj12W2VdLGk9ci5tYXRjaCgvXjxcLyhbXHc6LV0rKT4kLyk7aWYoaSluPWlbMV07ZWxzZSBpZigvPiQvLnRlc3Qocil8fCh2W2VdPXEocixudWxsLHQsaCkpKWJyZWFrfX1mdW5jdGlvbiBTKGUpe3ZhciB0PXYubGVuZ3RoLTE7aWYoMTx2Lmxlbmd0aCl7dmFyIG49dlt2Lmxlbmd0aC0xXTsvXig/OjwhfCQpLy50ZXN0KG4pJiYtMT09PW4uaW5kZXhPZihhKSYmdC0tfWwodCxlKX1yZXR1cm4oaC5zb3J0QXR0cmlidXRlcyYmImZ1bmN0aW9uIiE9dHlwZW9mIGguc29ydEF0dHJpYnV0ZXN8fGguc29ydENsYXNzTmFtZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGguc29ydENsYXNzTmFtZSkmJmZ1bmN0aW9uKGUscyx0LG4pe3ZhciB1PXMuc29ydEF0dHJpYnV0ZXMmJk9iamVjdC5jcmVhdGUobnVsbCksbD1zLnNvcnRDbGFzc05hbWUmJm5ldyBUO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBzLm5hbWUoZS5uYW1lKX0pfWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4hdHx8LTE9PT1lLmluZGV4T2YodCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gcihlLHQpJiZyKGUsbil9dmFyIGk9cy5sb2c7aWYocy5sb2c9dWUscy5zb3J0QXR0cmlidXRlcz0hMSxzLnNvcnRDbGFzc05hbWU9ITEsZnVuY3Rpb24gdChlKXt2YXIgbyxhO25ldyBEKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCl7dSYmKHVbZV18fCh1W2VdPW5ldyBUKSx1W2VdLmFkZChjKHQpLmZpbHRlcihmKSkpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dFtuXTtsJiZpLnZhbHVlJiYiY2xhc3MiPT09cy5uYW1lKGkubmFtZSk/bC5hZGQoQihpLnZhbHVlKS5zcGxpdCgvWyBcdFxuXGZccl0rLykuZmlsdGVyKGYpKTpzLnByb2Nlc3NTY3JpcHRzJiYidHlwZSI9PT1pLm5hbWUudG9Mb3dlckNhc2UoKSYmKG89ZSxhPWkudmFsdWUpfX0sZW5kOmZ1bmN0aW9uKCl7bz0iIn0sY2hhcnM6ZnVuY3Rpb24oZSl7cy5wcm9jZXNzU2NyaXB0cyYmY2UobykmJi0xPHMucHJvY2Vzc1NjcmlwdHMuaW5kZXhPZihhKSYmdChlKX19KX0oZmUoZSxzKSkscy5sb2c9aSx1KXt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgYSBpbiB1KW9bYV09dVthXS5jcmVhdGVTb3J0ZXIoKTtzLnNvcnRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsbil7dmFyIHQ9b1tlXTtpZih0KXt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpLGk9YyhuKTtpLmZvckVhY2goZnVuY3Rpb24oZSx0KXsocltlXXx8KHJbZV09W10pKS5wdXNoKG5bdF0pfSksdC5zb3J0KGkpLmZvckVhY2goZnVuY3Rpb24oZSx0KXtuW3RdPXJbZV0uc2hpZnQoKX0pfX19aWYobCl7dmFyIHA9bC5jcmVhdGVTb3J0ZXIoKTtzLnNvcnRDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHAuc29ydChlLnNwbGl0KC9bIFxuXGZccl0rLykpLmpvaW4oIiAiKX19fShpLGgsYSxnKSxuZXcgRChpLHtwYXJ0aWFsTWFya3VwOmUsY29udGludWVPblBhcnNlRXJyb3I6aC5jb250aW51ZU9uUGFyc2VFcnJvcixjdXN0b21BdHRyQXNzaWduOmguY3VzdG9tQXR0ckFzc2lnbixjdXN0b21BdHRyU3Vycm91bmQ6aC5jdXN0b21BdHRyU3Vycm91bmQsaHRtbDU6aC5odG1sNSxzdGFydDpmdW5jdGlvbihlLHQsbixyLGkpeyJzdmciPT09ZS50b0xvd2VyQ2FzZSgpJiYoKGg9T2JqZWN0LmNyZWF0ZShoKSkuY2FzZVNlbnNpdGl2ZT0hMCxoLmtlZXBDbG9zaW5nU2xhc2g9ITAsaC5uYW1lPXVlKSxlPWgubmFtZShlKSxGKGQ9eT1lKXx8KGI9IiIpLG09ITEsXz10O3ZhciBvPWgucmVtb3ZlT3B0aW9uYWxUYWdzO2lmKG8pe3ZhciBhPW5lKGUpO2EmJmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHRtbCI6Y2FzZSJoZWFkIjpyZXR1cm4hMDtjYXNlImJvZHkiOnJldHVybiFqKHQpO2Nhc2UiY29sZ3JvdXAiOnJldHVybiJjb2wiPT09dDtjYXNlInRib2R5IjpyZXR1cm4idHIiPT09dH1yZXR1cm4hMX0oQSxlKSYmQygpLEE9IiIsYSYmZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodG1sIjpjYXNlImhlYWQiOmNhc2UiYm9keSI6Y2FzZSJjb2xncm91cCI6Y2FzZSJjYXB0aW9uIjpyZXR1cm4hMDtjYXNlImxpIjpjYXNlIm9wdGdyb3VwIjpjYXNlInRyIjpyZXR1cm4gdD09PWU7Y2FzZSJkdCI6Y2FzZSJkZCI6cmV0dXJuIFYodCk7Y2FzZSJwIjpyZXR1cm4gSCh0KTtjYXNlInJiIjpjYXNlInJ0IjpjYXNlInJwIjpyZXR1cm4gSyh0KTtjYXNlInJ0YyI6cmV0dXJuIEcodCk7Y2FzZSJvcHRpb24iOnJldHVybiBZKHQpO2Nhc2UidGhlYWQiOmNhc2UidGJvZHkiOnJldHVybiBXKHQpO2Nhc2UidGZvb3QiOnJldHVybiJ0Ym9keSI9PT10O2Nhc2UidGQiOmNhc2UidGgiOnJldHVybiBaKHQpfXJldHVybiExfSh4LGUpJiYoTygpLG89IWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiY29sZ3JvdXAiOnJldHVybiJjb2xncm91cCI9PT1lO2Nhc2UidGJvZHkiOnJldHVybiBRKGUpfXJldHVybiExfSh4LGUpKSx4PSIifWguY29sbGFwc2VXaGl0ZXNwYWNlJiYody5sZW5ndGh8fFMoZSksbnx8KGsoZSx0KSYmIXcubGVuZ3RofHx3LnB1c2goZSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gaC5jYW5Db2xsYXBzZVdoaXRlc3BhY2UoZSx0LGllKX0oZSx0KSYmIUUubGVuZ3RofHxFLnB1c2goZSkpKTt2YXIgcz0iPCIrZSx1PXImJmgua2VlcENsb3NpbmdTbGFzaDt2LnB1c2gocyksaC5zb3J0QXR0cmlidXRlcyYmaC5zb3J0QXR0cmlidXRlcyhlLHQpO2Zvcih2YXIgbD1bXSxjPXQubGVuZ3RoLGY9ITA7MDw9LS1jOyl7dmFyIHA9YWUodFtjXSx0LGUsaCk7cCYmKGwudW5zaGlmdChzZShwLHUsaCxmLGcpKSxmPSExKX0wPGwubGVuZ3RoPyh2LnB1c2goIiAiKSx2LnB1c2guYXBwbHkodixsKSk6byYmSShlKSYmKEE9ZSksdi5wdXNoKHYucG9wKCkrKHU/Ii8iOiIiKSsiPiIpLGkmJiFoLmluY2x1ZGVBdXRvR2VuZXJhdGVkVGFncyYmKEMoKSxBPSIiKX0sZW5kOmZ1bmN0aW9uKGUsdCxuKXsic3ZnIj09PWUudG9Mb3dlckNhc2UoKSYmKGg9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpKSxlPWgubmFtZShlKSxoLmNvbGxhcHNlV2hpdGVzcGFjZSYmKHcubGVuZ3RoP2U9PT13W3cubGVuZ3RoLTFdJiZ3LnBvcCgpOlMoIi8iK2UpLEUubGVuZ3RoJiZlPT09RVtFLmxlbmd0aC0xXSYmRS5wb3AoKSk7dmFyIHI9ITE7ZT09PXkmJih5PSIiLHI9IW0pLGgucmVtb3ZlT3B0aW9uYWxUYWdzJiYociYmSihBKSYmQygpLEE9IiIsIW5lKGUpfHwheHx8dGUoeCl8fCJwIj09PXgmJiQoZSl8fE8oKSx4PXooZSk/ZToiIiksaC5yZW1vdmVFbXB0eUVsZW1lbnRzJiZyJiZmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlInRleHRhcmVhIjpyZXR1cm4hMTtjYXNlImF1ZGlvIjpjYXNlInNjcmlwdCI6Y2FzZSJ2aWRlbyI6aWYocmUoInNyYyIsdCkpcmV0dXJuITE7YnJlYWs7Y2FzZSJpZnJhbWUiOmlmKHJlKCJzcmMiLHQpfHxyZSgic3JjZG9jIix0KSlyZXR1cm4hMTticmVhaztjYXNlIm9iamVjdCI6aWYocmUoImRhdGEiLHQpKXJldHVybiExO2JyZWFrO2Nhc2UiYXBwbGV0IjppZihyZSgiY29kZSIsdCkpcmV0dXJuITF9cmV0dXJuITB9KGUsdCk/KEMoKSx4PUE9IiIpOihuJiYhaC5pbmNsdWRlQXV0b0dlbmVyYXRlZFRhZ3M/eD0iIjp2LnB1c2goIjwvIitlKyI+IiksZD0iLyIrZSxMKGUpP3ImJihiKz0ifCIpOmI9IiIpfSxjaGFyczpmdW5jdGlvbih0LGUsbil7aWYoZT0iIj09PWU/ImNvbW1lbnQiOmUsbj0iIj09PW4/ImNvbW1lbnQiOm4saC5kZWNvZGVFbnRpdGllcyYmdCYmIWNlKHkpJiYodD1mKHQpKSxoLmNvbGxhcHNlV2hpdGVzcGFjZSl7aWYoIXcubGVuZ3RoKXtpZigiY29tbWVudCI9PT1lKXt2YXIgcj12W3YubGVuZ3RoLTFdO2lmKC0xPT09ci5pbmRleE9mKGEpJiYocnx8KGU9ZCksMTx2Lmxlbmd0aCYmKCFyfHwhaC5jb25zZXJ2YXRpdmVDb2xsYXBzZSYmLyAkLy50ZXN0KGIpKSkpe3ZhciBpPXYubGVuZ3RoLTI7dltpXT12W2ldLnJlcGxhY2UoL1xzKyQvLGZ1bmN0aW9uKGUpe3JldHVybiB0PWUrdCwiIn0pfX1pZihlKWlmKCIvbm9iciI9PT1lfHwid2JyIj09PWUpe2lmKC9eXHMvLnRlc3QodCkpe2Zvcih2YXIgbz12Lmxlbmd0aC0xOzA8byYmMCE9PXZbb10ubGFzdEluZGV4T2YoIjwiK2UpOylvLS07bChvLTEsImJyIil9fWVsc2UgRigiLyI9PT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmUpJiYodD1SKHQsaCwvKD86XnxccykkLy50ZXN0KGIpKSk7ISh0PWV8fG4/cSh0LGUsbixoKTpSKHQsaCwhMCwhMCkpJiYvXHMkLy50ZXN0KGIpJiZlJiYiLyI9PT1lLmNoYXJBdCgwKSYmbCh2Lmxlbmd0aC0xLG4pfUUubGVuZ3RofHwiaHRtbCI9PT1ufHxlJiZufHwodD1SKHQsaCwhMSwhMSwhMCkpfWgucHJvY2Vzc1NjcmlwdHMmJmNlKHkpJiYodD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKWlmKCJ0eXBlIj09PW5bcl0ubmFtZS50b0xvd2VyQ2FzZSgpJiYtMTx0LnByb2Nlc3NTY3JpcHRzLmluZGV4T2YobltyXS52YWx1ZSkpcmV0dXJuIGZlKGUsdCk7cmV0dXJuIGV9KHQsaCxfKSksZnVuY3Rpb24oZSx0KXtpZigic2NyaXB0IiE9PWUpcmV0dXJuITE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKCJ0eXBlIj09PXRbbl0ubmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBVKHRbbl0udmFsdWUpO3JldHVybiEwfSh5LF8pJiYodD1oLm1pbmlmeUpTKHQpKSxNKHksXykmJih0PWgubWluaWZ5Q1NTKHQpKSxoLnJlbW92ZU9wdGlvbmFsVGFncyYmdCYmKCgiaHRtbCI9PT1BfHwiYm9keSI9PT1BJiYhL15ccy8udGVzdCh0KSkmJkMoKSxBPSIiLChYKHgpfHxlZSh4KSYmIS9eXHMvLnRlc3QodCkpJiZPKCkseD0iIiksZD0vXlxzKiQvLnRlc3QodCk/ZToiY29tbWVudCIsaC5kZWNvZGVFbnRpdGllcyYmdCYmIWNlKHkpJiYodD10LnJlcGxhY2UoLyYoKD86SWFjdXRlfGFhY3V0ZXx1YWN1dGV8cGx1c21ufE90aWxkZXxvdGlsZGV8YWdyYXZlfEFncmF2ZXxZYWN1dGV8eWFjdXRlfE9zbGFzaHxvc2xhc2h8YXRpbGRlfEF0aWxkZXxicnZiYXJ8Y2NlZGlsfENjZWRpbHxPZ3JhdmV8Y3VycmVufGRpdmlkZXxlYWN1dGV8RWFjdXRlfG9ncmF2ZXxPYWN1dGV8ZWdyYXZlfEVncmF2ZXxVZ3JhdmV8ZnJhYzEyfGZyYWMxNHxmcmFjMzR8dWdyYXZlfG9hY3V0ZXxpYWN1dGV8TnRpbGRlfG50aWxkZXxVYWN1dGV8bWlkZG90fGlncmF2ZXxJZ3JhdmV8aXF1ZXN0fEFhY3V0ZXxjZWRpbHxsYXF1b3xtaWNyb3xpZXhjbHxJY2lyY3xpY2lyY3xhY2lyY3xVY2lyY3xFY2lyY3xvY2lyY3xPY2lyY3xlY2lyY3x1Y2lyY3xBcmluZ3xhcmluZ3xBRWxpZ3xhZWxpZ3xhY3V0ZXxwb3VuZHxyYXF1b3xBY2lyY3x0aW1lc3xUSE9STnxzemxpZ3x0aG9ybnxDT1BZfGF1bWx8b3JkZnxvcmRtfFV1bWx8bWFjcnx1dW1sfEF1bWx8b3VtbHxPdW1sfHBhcmF8bmJzcHxldW1sfHF1b3R8UVVPVHxFdW1sfHl1bWx8Y2VudHxzZWN0fGNvcHl8c3VwMXxzdXAyfHN1cDN8aXVtbHxJdW1sfEVUSHxzaHl8cmVnfG5vdHx5ZW58YW1wfEFNUHxSRUd8dW1sfGV0aHxkZWd8Z3R8R1R8TFR8bHQpKD8hOyl8KD86Iz9bMC05YS16QS1aXSs7KSkvZywiJmFtcCQxIikucmVwbGFjZSgvPC9nLCImbHQ7IikpLHMmJmguY29sbGFwc2VXaGl0ZXNwYWNlJiZ3Lmxlbmd0aCYmKHQ9dC5yZXBsYWNlKHMsZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1WytuXVswXX0pKSxiKz10LHQmJihtPSEwKSx2LnB1c2godCl9LGNvbW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyI8ISI6Ilx4M2MhLS0iLHI9dD8iPiI6Ii0tXHgzZSI7ZT1mdW5jdGlvbihlKXtyZXR1cm4vXlxbaWZcc1teXF1dK118XFtlbmRpZl0kLy50ZXN0KGUpfShlKT9uK2Z1bmN0aW9uKGUsaSl7cmV0dXJuIGkucHJvY2Vzc0NvbmRpdGlvbmFsQ29tbWVudHM/ZS5yZXBsYWNlKC9eKFxbaWZcc1teXF1dK10+KShbXHNcU10qPykoPCFcW2VuZGlmXSkkLyxmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdCtmZShuLGksITApK3J9KTplfShlLGgpK3I6aC5yZW1vdmVDb21tZW50cz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dC5pZ25vcmVDdXN0b21Db21tZW50cy5sZW5ndGg7bjxyO24rKylpZih0Lmlnbm9yZUN1c3RvbUNvbW1lbnRzW25dLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9KGUsaCk/Ilx4M2MhLS0iK2UrIi0tXHgzZSI6IiI6bitlK3IsaC5yZW1vdmVPcHRpb25hbFRhZ3MmJmUmJih4PUE9IiIpLHYucHVzaChlKX0sZG9jdHlwZTpmdW5jdGlvbihlKXt2LnB1c2goaC51c2VTaG9ydERvY3R5cGU/IjwhZG9jdHlwZSIrKGgucmVtb3ZlVGFnV2hpdGVzcGFjZT8iIjoiICIpKyJodG1sPiI6cChlKSl9fSksaC5yZW1vdmVPcHRpb25hbFRhZ3MmJihKKEEpJiZDKCkseCYmIXRlKHgpJiZPKCkpLGguY29sbGFwc2VXaGl0ZXNwYWNlJiZTKCJiciIpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89dC5tYXhMaW5lTGVuZ3RoO2lmKG8pe2Zvcih2YXIgYT0iIixzPVtdO2UubGVuZ3RoOyl7dmFyIHU9YS5sZW5ndGgsbD1lWzBdLmluZGV4T2YoIlxuIik7bDwwP2ErPXIobihlLnNoaWZ0KCkpKTooYSs9cihuKGVbMF0uc2xpY2UoMCxsKSkpLGVbMF09ZVswXS5zbGljZShsKzEpKSwwPHUmJmEubGVuZ3RoPm8/KHMucHVzaChhLnNsaWNlKDAsdSkpLGE9YS5zbGljZSh1KSk6MDw9bCYmKHMucHVzaChhKSxhPSIiKX1hJiZzLnB1c2goYSksaT1zLmpvaW4oIlxuIil9ZWxzZSBpPXIobihlLmpvaW4oIiIpKSk7cmV0dXJuIHQuY29sbGFwc2VXaGl0ZXNwYWNlP1IoaSx0LCEwLCEwKTppfSh2LGgscz9mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHMsZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dVsrbl1bMF07cmV0dXJuIGguY29sbGFwc2VXaGl0ZXNwYWNlPygiXHQiIT09dCYmKGk9dCtpKSwiXHQiIT09ciYmKGkrPXIpLFIoaSx7cHJlc2VydmVMaW5lQnJlYWtzOmgucHJlc2VydmVMaW5lQnJlYWtzLGNvbnNlcnZhdGl2ZUNvbGxhcHNlOiFoLnRyaW1DdXN0b21GcmFnbWVudHN9LC9eWyBcblxyXHRcZl0vLnRlc3QoaSksL1sgXG5cclx0XGZdJC8udGVzdChpKSkpOml9KX06dWUsYT9mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlx4M2MhLS0iK2ErIihbMC05XSspLS1ceDNlIiwiZyIpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9bK3RdfSl9OnVlKX1uLm1pbmlmeT1mdW5jdGlvbihlLHQpe3ZhciBuPURhdGUubm93KCkscj1mZShlLHQ9ZnVuY3Rpb24odCl7dmFyIGE9e25hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sY2FuQ29sbGFwc2VXaGl0ZXNwYWNlOmllLGNhblRyaW1XaGl0ZXNwYWNlOm9lLGh0bWw1OiEwLGlnbm9yZUN1c3RvbUNvbW1lbnRzOlsvXiEvXSxpZ25vcmVDdXN0b21GcmFnbWVudHM6Wy88JVtcc1xTXSo/JT4vLC88XD9bXHNcU10qP1w/Pi9dLGluY2x1ZGVBdXRvR2VuZXJhdGVkVGFnczohMCxsb2c6dWUsbWluaWZ5Q1NTOnVlLG1pbmlmeUpTOnVlLG1pbmlmeVVSTHM6dWV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPXRbZV07aWYoImNhc2VTZW5zaXRpdmUiPT09ZSlvJiYoYS5uYW1lPXVlKTtlbHNlIGlmKCJsb2ciPT09ZSkiZnVuY3Rpb24iPT10eXBlb2YgbyYmKGEubG9nPW8pO2Vsc2UgaWYoIm1pbmlmeUNTUyI9PT1lJiYiZnVuY3Rpb24iIT10eXBlb2Ygbyl7aWYoIW8pcmV0dXJuOyJvYmplY3QiIT10eXBlb2YgbyYmKG89e30pLGEubWluaWZ5Q1NTPWZ1bmN0aW9uKGUsdCl7ZT1lLnJlcGxhY2UoLyh1cmxccypcKFxzKikoInwnfCkoLio/KVwyKFxzKlwpKS9naSxmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiB0K24rYS5taW5pZnlVUkxzKHIpK24raX0pO3ZhciBuPW5ldyBjKG8pLm1pbmlmeShQKGUsdCkpO3JldHVybiAwPG4uZXJyb3JzLmxlbmd0aD8obi5lcnJvcnMuZm9yRWFjaChhLmxvZyksZSk6ZnVuY3Rpb24oZSx0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSJpbmxpbmUiOm49ZS5tYXRjaCgvXlwqXHsoW1xzXFNdKilcfSQvKTticmVhaztjYXNlIm1lZGlhIjpuPWUubWF0Y2goL15AbWVkaWEgKFtcc1xTXSo/KVxzKntbXHNcU10qfSQvKX1yZXR1cm4gbj9uWzFdOmV9KG4uc3R5bGVzLHQpfX1lbHNlIGlmKCJtaW5pZnlKUyI9PT1lJiYiZnVuY3Rpb24iIT10eXBlb2Ygbyl7aWYoIW8pcmV0dXJuOyJvYmplY3QiIT10eXBlb2YgbyYmKG89e30pLChvLnBhcnNlfHwoby5wYXJzZT17fSkpLmJhcmVfcmV0dXJucz0hMSxhLm1pbmlmeUpTPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5tYXRjaCgvXlxzKjwhLS0uKi8pLHI9bj9lLnNsaWNlKG5bMF0ubGVuZ3RoKS5yZXBsYWNlKC9cblxzKi0tPlxzKiQvLCIiKTplO28ucGFyc2UuYmFyZV9yZXR1cm5zPXQ7dmFyIGk9cy5taW5pZnkocixvKTtyZXR1cm4gaS5lcnJvcj8oYS5sb2coaS5lcnJvciksZSk6aS5jb2RlLnJlcGxhY2UoLzskLywiIil9fWVsc2UgaWYoIm1pbmlmeVVSTHMiPT09ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIG8pe2lmKCFvKXJldHVybjsic3RyaW5nIj09dHlwZW9mIG8/bz17c2l0ZTpvfToib2JqZWN0IiE9dHlwZW9mIG8mJihvPXt9KSxhLm1pbmlmeVVSTHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpLnJlbGF0ZSh0LG8pfWNhdGNoKGUpe3JldHVybiBhLmxvZyhlKSx0fX19ZWxzZSBhW2VdPW99KSxhfSh0fHx7fSkpO3JldHVybiB0LmxvZygibWluaWZpZWQgaW46ICIrKERhdGUubm93KCktbikrIm1zIikscn19LHsiLi9odG1scGFyc2VyIjoxNjYsIi4vdG9rZW5jaGFpbiI6MTY3LCIuL3V0aWxzIjoxNjgsImNsZWFuLWNzcyI6NixoZToxMDMscmVsYXRldXJsOjEyOSwidWdsaWZ5LWpzIjoidWdsaWZ5LWpzIn1dLCJ1Z2xpZnktanMiOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHUpeyFmdW5jdGlvbihkKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZS5zcGxpdCgiIil9ZnVuY3Rpb24gdGUoZSx0KXtyZXR1cm4gMDw9dC5pbmRleE9mKGUpfWZ1bmN0aW9uIEcoZSx0KXtmb3IodmFyIG49dC5sZW5ndGg7MDw9LS1uOylpZihlKHRbbl0pKXJldHVybiB0W25dfWZ1bmN0aW9uIHQoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzdGFjayIse2dldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpO2UubmFtZT10aGlzLm5hbWU7dHJ5e3Rocm93IGV9Y2F0Y2goZSl7cmV0dXJuIGUuc3RhY2t9fX0pfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLmRlZnM9dH1mdW5jdGlvbiAkKGUsdCxuKXshMD09PWUmJihlPXt9KTt2YXIgcj1lfHx7fTtpZihuKWZvcih2YXIgaSBpbiByKWlmKHVlKHIsaSkmJiF1ZSh0LGkpKXRocm93IG5ldyBvKCJgIitpKyJgIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb24iLHQpO2Zvcih2YXIgaSBpbiB0KXVlKHQsaSkmJihyW2ldPWUmJnVlKGUsaSk/ZVtpXTp0W2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBuKGUsdCl7dmFyIG49MDtmb3IodmFyIHIgaW4gdCl1ZSh0LHIpJiYoZVtyXT10W3JdLG4rKyk7cmV0dXJuIG59ZnVuY3Rpb24gbmUoKXt9ZnVuY3Rpb24gcmUoKXtyZXR1cm4hMX1mdW5jdGlvbiBpZSgpe3JldHVybiEwfWZ1bmN0aW9uIEQoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiBUKCl7cmV0dXJuIG51bGx9KChvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLnByb3RvdHlwZS5uYW1lPSJEZWZhdWx0c0Vycm9yIix0KG8pO3ZhciBvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUobixyLGkpe3ZhciBvLGE9W10scz1bXTtmdW5jdGlvbiBlKCl7dmFyIGU9cihuW29dLG8pLHQ9ZSBpbnN0YW5jZW9mIGY7cmV0dXJuIHQmJihlPWUudiksZSBpbnN0YW5jZW9mIGw/KGU9ZS52KWluc3RhbmNlb2YgYz9zLnB1c2guYXBwbHkocyxpP2Uudi5zbGljZSgpLnJldmVyc2UoKTplLnYpOnMucHVzaChlKTplIT09dSYmKGUgaW5zdGFuY2VvZiBjP2EucHVzaC5hcHBseShhLGk/ZS52LnNsaWNlKCkucmV2ZXJzZSgpOmUudik6YS5wdXNoKGUpKSx0fWlmKEFycmF5LmlzQXJyYXkobikpaWYoaSl7Zm9yKG89bi5sZW5ndGg7MDw9LS1vJiYhZSgpOyk7YS5yZXZlcnNlKCkscy5yZXZlcnNlKCl9ZWxzZSBmb3Iobz0wO288bi5sZW5ndGgmJiFlKCk7KytvKTtlbHNlIGZvcihvIGluIG4paWYodWUobixvKSYmZSgpKWJyZWFrO3JldHVybiBzLmNvbmNhdChhKX1lLmF0X3RvcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGwoZSl9LGUuc3BsaWNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYyhlKX0sZS5sYXN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZihlKX07dmFyIHU9ZS5za2lwPXt9O2Z1bmN0aW9uIGwoZSl7dGhpcy52PWV9ZnVuY3Rpb24gYyhlKXt0aGlzLnY9ZX1mdW5jdGlvbiBmKGUpe3RoaXMudj1lfXJldHVybiBlfSgpO2Z1bmN0aW9uIGcoZSx0KXtpZihlLmluZGV4T2YodCk8MClyZXR1cm4gZS5wdXNoKHQpfWZ1bmN0aW9uIEIoZSxuKXtyZXR1cm4gZS5yZXBsYWNlKC9ceyguKz8pXH0vZyxmdW5jdGlvbihlLHQpe3JldHVybiBuJiZuW3RdfSl9ZnVuY3Rpb24gUihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTswPD1uJiZlLnNwbGljZShuLDEpfWZ1bmN0aW9uIGFlKGUpe0FycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIiAiKSk7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ITB9KSx0fWZ1bmN0aW9uIHNlKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoOzA8PS0tbjspaWYoIXQoZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3NpemU9MH1mdW5jdGlvbiB1ZShlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1mdW5jdGlvbiBGKGUpe2Zvcih2YXIgdCxuPWUucGFyZW50KC0xKSxyPTA7dD1lLnBhcmVudChyKyspO249dCl7aWYoIkNhbGwiPT10LlRZUEUpe2lmKHQuZXhwcmVzc2lvbj09PW4pY29udGludWV9ZWxzZSBpZih0IGluc3RhbmNlb2YgdHQpe2lmKHQubGVmdD09PW4pY29udGludWV9ZWxzZSBpZih0IGluc3RhbmNlb2YgbnQpe2lmKHQuY29uZGl0aW9uPT09biljb250aW51ZX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBXZSl7aWYodC5leHByZXNzaW9uPT09biljb250aW51ZX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBZZSl7aWYodC5leHByZXNzaW9uc1swXT09PW4pY29udGludWV9ZWxzZXtpZih0IGluc3RhbmNlb2YgY2UpcmV0dXJuIHQuYm9keT09PW47aWYodCBpbnN0YW5jZW9mIGV0JiZ0LmV4cHJlc3Npb249PT1uKWNvbnRpbnVlfXJldHVybiExfX1mdW5jdGlvbiByKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPWxlKTt2YXIgaT10PXQ/dC5zcGxpdCgvXHMrLyk6W107ciYmci5QUk9QUyYmKHQ9dC5jb25jYXQoci5QUk9QUykpO3ZhciBvPVsicmV0dXJuIGZ1bmN0aW9uIEFTVF8iLGUsIihwcm9wcyl7IiwiaWYocHJvcHMpeyJdO3QuZm9yRWFjaChmdW5jdGlvbihlKXtvLnB1c2goInRoaXMuIixlLCI9cHJvcHMuIixlLCI7Iil9KTt2YXIgYT1yJiZuZXcgcjsoYSYmYS5pbml0aWFsaXplfHxuJiZuLmluaXRpYWxpemUpJiZvLnB1c2goInRoaXMuaW5pdGlhbGl6ZSgpOyIpLG8ucHVzaCgifX0iKTt2YXIgcz1uZXcgRnVuY3Rpb24oby5qb2luKCIiKSkoKTtpZihhJiYocy5wcm90b3R5cGU9YSxzLkJBU0U9ciksciYmci5TVUJDTEFTU0VTLnB1c2gocyksKHMucHJvdG90eXBlLkNUT1I9cykuUFJPUFM9dHx8bnVsbCxzLlNFTEZfUFJPUFM9aSxzLlNVQkNMQVNTRVM9W10sZSYmKHMucHJvdG90eXBlLlRZUEU9cy5UWVBFPWUpLG4pZm9yKHZhciB1IGluIG4pdWUobix1KSYmKC9eXCQvLnRlc3QodSk/c1t1LnN1YnN0cigxKV09blt1XTpzLnByb3RvdHlwZVt1XT1uW3VdKTtyZXR1cm4gcy5ERUZNRVRIT0Q9ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3RvdHlwZVtlXT10fSx2b2lkIDAhPT1kJiYoZFsiQVNUXyIrZV09cyksc31MLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpfHwrK3RoaXMuX3NpemUsdGhpcy5fdmFsdWVzWyIkIitlXT10LHRoaXN9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLmdldChlKS5wdXNoKHQpOnRoaXMuc2V0KGUsW3RdKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ZhbHVlc1siJCIrZV19LGRlbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJigtLXRoaXMuX3NpemUsZGVsZXRlIHRoaXMuX3ZhbHVlc1siJCIrZV0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4iJCIrZSBpbiB0aGlzLl92YWx1ZXN9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuX3ZhbHVlcyllKHRoaXMuX3ZhbHVlc1t0XSx0LnN1YnN0cigxKSl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sbWFwOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzLl92YWx1ZXMpdC5wdXNoKGUodGhpcy5fdmFsdWVzW25dLG4uc3Vic3RyKDEpKSk7cmV0dXJuIHR9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IEw7Zm9yKHZhciB0IGluIHRoaXMuX3ZhbHVlcyllLl92YWx1ZXNbdF09dGhpcy5fdmFsdWVzW3RdO3JldHVybiBlLl9zaXplPXRoaXMuX3NpemUsZX0sdG9PYmplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVzfX0sTC5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBMO3JldHVybiB0Ll9zaXplPW4odC5fdmFsdWVzLGUpLHR9O3ZhciBPPXIoIlRva2VuIiwidHlwZSB2YWx1ZSBsaW5lIGNvbCBwb3MgZW5kbGluZSBlbmRjb2wgZW5kcG9zIG5sYiBjb21tZW50c19iZWZvcmUgY29tbWVudHNfYWZ0ZXIgZmlsZSByYXciLHt9LG51bGwpLGxlPXIoIk5vZGUiLCJzdGFydCBlbmQiLHtfY2xvbmU6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0LnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSl7aWYoZSE9PXQpcmV0dXJuIGUuY2xvbmUoITApfSkpfXJldHVybiBuZXcgdGhpcy5DVE9SKHRoaXMpfSxjbG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2xvbmUoZSl9LCRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIG9mIGFsbCBBU1Qgbm9kZXMiLCRwcm9wZG9jOntzdGFydDoiW0FTVF9Ub2tlbl0gVGhlIGZpcnN0IHRva2VuIG9mIHRoaXMgbm9kZSIsZW5kOiJbQVNUX1Rva2VuXSBUaGUgbGFzdCB0b2tlbiBvZiB0aGlzIG5vZGUifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyl9LHdhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3dhbGsoZSl9fSxudWxsKTtsZS53YXJuPWZ1bmN0aW9uKGUsdCl7bGUud2Fybl9mdW5jdGlvbiYmbGUud2Fybl9mdW5jdGlvbihCKGUsdCkpfTt2YXIgY2U9cigiU3RhdGVtZW50IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBvZiBhbGwgc3RhdGVtZW50cyJ9KSxmZT1yKCJEZWJ1Z2dlciIsbnVsbCx7JGRvY3VtZW50YXRpb246IlJlcHJlc2VudHMgYSBkZWJ1Z2dlciBzdGF0ZW1lbnQifSxjZSkscGU9cigiRGlyZWN0aXZlIiwidmFsdWUgcXVvdGUiLHskZG9jdW1lbnRhdGlvbjonUmVwcmVzZW50cyBhIGRpcmVjdGl2ZSwgbGlrZSAidXNlIHN0cmljdCI7JywkcHJvcGRvYzp7dmFsdWU6IltzdHJpbmddIFRoZSB2YWx1ZSBvZiB0aGlzIGRpcmVjdGl2ZSBhcyBhIHBsYWluIHN0cmluZyAoaXQncyBub3QgYW4gQVNUX1N0cmluZyEpIixxdW90ZToiW3N0cmluZ10gdGhlIG9yaWdpbmFsIHF1b3RlIGNoYXJhY3RlciJ9fSxjZSksaGU9cigiU2ltcGxlU3RhdGVtZW50IiwiYm9keSIseyRkb2N1bWVudGF0aW9uOiJBIHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIGFuIGV4cHJlc3Npb24sIGkuZS4gYSA9IDEgKyAyIiwkcHJvcGRvYzp7Ym9keToiW0FTVF9Ob2RlXSBhbiBleHByZXNzaW9uIG5vZGUgKHNob3VsZCBub3QgYmUgaW5zdGFuY2VvZiBBU1RfU3RhdGVtZW50KSJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5ib2R5Ll93YWxrKGUpfSl9fSxjZSk7ZnVuY3Rpb24gcShlLHQpe3ZhciBuPWUuYm9keTtuIGluc3RhbmNlb2YgY2U/bi5fd2Fsayh0KTpuLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fd2Fsayh0KX0pfXZhciBkZT1yKCJCbG9jayIsImJvZHkiLHskZG9jdW1lbnRhdGlvbjoiQSBib2R5IG9mIHN0YXRlbWVudHMgKHVzdWFsbHkgYnJhY2VkKSIsJHByb3Bkb2M6e2JvZHk6IltBU1RfU3RhdGVtZW50Kl0gYW4gYXJyYXkgb2Ygc3RhdGVtZW50cyJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7cSh0aGlzLGUpfSl9fSxjZSksbWU9cigiQmxvY2tTdGF0ZW1lbnQiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGJsb2NrIHN0YXRlbWVudCJ9LGRlKSxnZT1yKCJFbXB0eVN0YXRlbWVudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBlbXB0eSBzdGF0ZW1lbnQgKGVtcHR5IGJsb2NrIG9yIHNpbXBseSBhIHNlbWljb2xvbikifSxjZSksdj1yKCJTdGF0ZW1lbnRXaXRoQm9keSIsImJvZHkiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRlbWVudHMgdGhhdCBjb250YWluIG9uZSBuZXN0ZWQgYm9keTogYEZvcmAsIGBGb3JJbmAsIGBEb2AsIGBXaGlsZWAsIGBXaXRoYCIsJHByb3Bkb2M6e2JvZHk6IltBU1RfU3RhdGVtZW50XSB0aGUgYm9keTsgdGhpcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQsIGV2ZW4gaWYgaXQncyBhbiBBU1RfRW1wdHlTdGF0ZW1lbnQifX0sY2UpLHZlPXIoIkxhYmVsZWRTdGF0ZW1lbnQiLCJsYWJlbCIseyRkb2N1bWVudGF0aW9uOiJTdGF0ZW1lbnQgd2l0aCBhIGxhYmVsIiwkcHJvcGRvYzp7bGFiZWw6IltBU1RfTGFiZWxdIGEgbGFiZWwgZGVmaW5pdGlvbiJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX0sY2xvbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY2xvbmUoZSk7aWYoZSl7dmFyIG49dC5sYWJlbCxyPXRoaXMubGFiZWw7dC53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgTGUmJmUubGFiZWwmJmUubGFiZWwudGhlZGVmPT09ciYmKGUubGFiZWwudGhlZGVmPW4pLnJlZmVyZW5jZXMucHVzaChlKX0pKX1yZXR1cm4gdH19LHYpLGJlPXIoIkl0ZXJhdGlvblN0YXRlbWVudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkludGVybmFsIGNsYXNzLiAgQWxsIGxvb3BzIGluaGVyaXQgZnJvbSBpdC4ifSx2KSx5ZT1yKCJEV0xvb3AiLCJjb25kaXRpb24iLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgZG8vd2hpbGUgc3RhdGVtZW50cyIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSB0aGUgbG9vcCBjb25kaXRpb24uICBTaG91bGQgbm90IGJlIGluc3RhbmNlb2YgQVNUX1N0YXRlbWVudCJ9fSxiZSksX2U9cigiRG8iLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGBkb2Agc3RhdGVtZW50Iixfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuYm9keS5fd2FsayhlKSx0aGlzLmNvbmRpdGlvbi5fd2FsayhlKX0pfX0seWUpLHdlPXIoIldoaWxlIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgd2hpbGVgIHN0YXRlbWVudCIsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmNvbmRpdGlvbi5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LHllKSxFZT1yKCJGb3IiLCJpbml0IGNvbmRpdGlvbiBzdGVwIix7JGRvY3VtZW50YXRpb246IkEgYGZvcmAgc3RhdGVtZW50IiwkcHJvcGRvYzp7aW5pdDoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIGluaXRpYWxpemF0aW9uIGNvZGUsIG9yIG51bGwgaWYgZW1wdHkiLGNvbmRpdGlvbjoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIHRlcm1pbmF0aW9uIGNsYXVzZSwgb3IgbnVsbCBpZiBlbXB0eSIsc3RlcDoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIHVwZGF0ZSBjbGF1c2UsIG9yIG51bGwgaWYgZW1wdHkifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuaW5pdCYmdGhpcy5pbml0Ll93YWxrKGUpLHRoaXMuY29uZGl0aW9uJiZ0aGlzLmNvbmRpdGlvbi5fd2FsayhlKSx0aGlzLnN0ZXAmJnRoaXMuc3RlcC5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LGJlKSxBZT1yKCJGb3JJbiIsImluaXQgb2JqZWN0Iix7JGRvY3VtZW50YXRpb246IkEgYGZvciAuLi4gaW5gIHN0YXRlbWVudCIsJHByb3Bkb2M6e2luaXQ6IltBU1RfTm9kZV0gdGhlIGBmb3IvaW5gIGluaXRpYWxpemF0aW9uIGNvZGUiLG9iamVjdDoiW0FTVF9Ob2RlXSB0aGUgb2JqZWN0IHRoYXQgd2UncmUgbG9vcGluZyB0aHJvdWdoIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmluaXQuX3dhbGsoZSksdGhpcy5vYmplY3QuX3dhbGsoZSksdGhpcy5ib2R5Ll93YWxrKGUpfSl9fSxiZSkseGU9cigiV2l0aCIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgd2l0aGAgc3RhdGVtZW50IiwkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSB0aGUgYHdpdGhgIGV4cHJlc3Npb24ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbi5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LHYpLGtlPXIoIlNjb3BlIiwidmFyaWFibGVzIGZ1bmN0aW9ucyB1c2VzX3dpdGggdXNlc19ldmFsIHBhcmVudF9zY29wZSBlbmNsb3NlZCBjbmFtZSIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBhbGwgc3RhdGVtZW50cyBpbnRyb2R1Y2luZyBhIGxleGljYWwgc2NvcGUiLCRwcm9wZG9jOnt2YXJpYWJsZXM6IltPYmplY3QvU10gYSBtYXAgb2YgbmFtZSAtPiBTeW1ib2xEZWYgZm9yIGFsbCB2YXJpYWJsZXMvZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBzY29wZSIsZnVuY3Rpb25zOiJbT2JqZWN0L1NdIGxpa2UgYHZhcmlhYmxlc2AsIGJ1dCBvbmx5IGxpc3RzIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIsdXNlc193aXRoOiJbYm9vbGVhbi9TXSB0ZWxscyB3aGV0aGVyIHRoaXMgc2NvcGUgdXNlcyB0aGUgYHdpdGhgIHN0YXRlbWVudCIsdXNlc19ldmFsOiJbYm9vbGVhbi9TXSB0ZWxscyB3aGV0aGVyIHRoaXMgc2NvcGUgY29udGFpbnMgYSBkaXJlY3QgY2FsbCB0byB0aGUgZ2xvYmFsIGBldmFsYCIscGFyZW50X3Njb3BlOiJbQVNUX1Njb3BlPy9TXSBsaW5rIHRvIHRoZSBwYXJlbnQgc2NvcGUiLGVuY2xvc2VkOiJbU3ltYm9sRGVmKi9TXSBhIGxpc3Qgb2YgYWxsIHN5bWJvbCBkZWZpbml0aW9ucyB0aGF0IGFyZSBhY2Nlc3NlZCBmcm9tIHRoaXMgc2NvcGUgb3IgYW55IHN1YnNjb3BlcyIsY25hbWU6IltpbnRlZ2VyL1NdIGN1cnJlbnQgaW5kZXggZm9yIG1hbmdsaW5nIHZhcmlhYmxlcyAodXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBtYW5nbGVyKSJ9LGNsb25lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Nsb25lKGUpO3JldHVybiB0aGlzLnZhcmlhYmxlcyYmKHQudmFyaWFibGVzPXRoaXMudmFyaWFibGVzLmNsb25lKCkpLHRoaXMuZnVuY3Rpb25zJiYodC5mdW5jdGlvbnM9dGhpcy5mdW5jdGlvbnMuY2xvbmUoKSksdGhpcy5lbmNsb3NlZCYmKHQuZW5jbG9zZWQ9dGhpcy5lbmNsb3NlZC5zbGljZSgpKSx0fSxwaW5uZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51c2VzX2V2YWx8fHRoaXMudXNlc193aXRofX0sZGUpLENlPXIoIlRvcGxldmVsIiwiZ2xvYmFscyIseyRkb2N1bWVudGF0aW9uOiJUaGUgdG9wbGV2ZWwgc2NvcGUiLCRwcm9wZG9jOntnbG9iYWxzOiJbT2JqZWN0L1NdIGEgbWFwIG9mIG5hbWUgLT4gU3ltYm9sRGVmIGZvciBhbGwgdW5kZWNsYXJlZCBuYW1lcyJ9LHdyYXBfY29tbW9uanM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ib2R5LG49IihmdW5jdGlvbihleHBvcnRzKXsnJE9SSUcnO30pKHR5cGVvZiAiK2UrIj09J3VuZGVmaW5lZCc/KCIrZSsiPXt9KToiK2UrIik7IjtyZXR1cm4gbj0obj1ZdChuKSkudHJhbnNmb3JtKG5ldyBXdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgcGUmJiIkT1JJRyI9PWUudmFsdWUpcmV0dXJuIG9lLnNwbGljZSh0KX0pKX0sd3JhcF9lbmNsb3NlOmZ1bmN0aW9uKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIpO3ZhciB0PWUuaW5kZXhPZigiOiIpO3Q8MCYmKHQ9ZS5sZW5ndGgpO3ZhciBuPXRoaXMuYm9keTtyZXR1cm4gWXQoWyIoZnVuY3Rpb24oIixlLnNsaWNlKDAsdCksJyl7IiRPUklHIn0pKCcsZS5zbGljZSh0KzEpLCIpIl0uam9pbigiIikpLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHBlJiYiJE9SSUciPT1lLnZhbHVlKXJldHVybiBvZS5zcGxpY2Uobil9KSl9fSxrZSksT2U9cigiTGFtYmRhIiwibmFtZSBhcmduYW1lcyB1c2VzX2FyZ3VtZW50cyIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBmdW5jdGlvbnMiLCRwcm9wZG9jOntuYW1lOiJbQVNUX1N5bWJvbERlY2xhcmF0aW9uP10gdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiIsYXJnbmFtZXM6IltBU1RfU3ltYm9sRnVuYXJnKl0gYXJyYXkgb2YgZnVuY3Rpb24gYXJndW1lbnRzIix1c2VzX2FyZ3VtZW50czoiW2Jvb2xlYW4vU10gdGVsbHMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2VzIHRoZSBhcmd1bWVudHMgYXJyYXkifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMubmFtZSYmdGhpcy5uYW1lLl93YWxrKHQpLHRoaXMuYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSkscSh0aGlzLHQpfSl9fSxrZSksU2U9cigiQWNjZXNzb3IiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIHNldHRlci9nZXR0ZXIgZnVuY3Rpb24uICBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIGFsd2F5cyBudWxsLiJ9LE9lKSxEZT1yKCJGdW5jdGlvbiIsImlubGluZWQiLHskZG9jdW1lbnRhdGlvbjoiQSBmdW5jdGlvbiBleHByZXNzaW9uIn0sT2UpLFRlPXIoIkRlZnVuIiwiaW5saW5lZCIseyRkb2N1bWVudGF0aW9uOiJBIGZ1bmN0aW9uIGRlZmluaXRpb24ifSxPZSksVT1yKCJKdW1wIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3Ig4oCcanVtcHPigJ0gKGZvciBub3cgdGhhdCdzIGByZXR1cm5gLCBgdGhyb3dgLCBgYnJlYWtgIGFuZCBgY29udGludWVgKSJ9LGNlKSxCZT1yKCJFeGl0IiwidmFsdWUiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3Ig4oCcZXhpdHPigJ0gKGByZXR1cm5gIGFuZCBgdGhyb3dgKSIsJHByb3Bkb2M6e3ZhbHVlOiJbQVNUX05vZGU/XSB0aGUgdmFsdWUgcmV0dXJuZWQgb3IgdGhyb3duIGJ5IHRoaXMgc3RhdGVtZW50OyBjb3VsZCBiZSBudWxsIGZvciBBU1RfUmV0dXJuIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsdGhpcy52YWx1ZSYmZnVuY3Rpb24oKXt0aGlzLnZhbHVlLl93YWxrKGUpfSl9fSxVKSxSZT1yKCJSZXR1cm4iLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGByZXR1cm5gIHN0YXRlbWVudCJ9LEJlKSxLPXIoIlRocm93IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgdGhyb3dgIHN0YXRlbWVudCJ9LEJlKSxMZT1yKCJMb29wQ29udHJvbCIsImxhYmVsIix7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGxvb3AgY29udHJvbCBzdGF0ZW1lbnRzIChgYnJlYWtgIGFuZCBgY29udGludWVgKSIsJHByb3Bkb2M6e2xhYmVsOiJbQVNUX0xhYmVsUmVmP10gdGhlIGxhYmVsLCBvciBudWxsIGlmIG5vbmUifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyx0aGlzLmxhYmVsJiZmdW5jdGlvbigpe3RoaXMubGFiZWwuX3dhbGsoZSl9KX19LFUpLEZlPXIoIkJyZWFrIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgYnJlYWtgIHN0YXRlbWVudCJ9LExlKSxxZT1yKCJDb250aW51ZSIsbnVsbCx7JGRvY3VtZW50YXRpb246IkEgYGNvbnRpbnVlYCBzdGF0ZW1lbnQifSxMZSksVWU9cigiSWYiLCJjb25kaXRpb24gYWx0ZXJuYXRpdmUiLHskZG9jdW1lbnRhdGlvbjoiQSBgaWZgIHN0YXRlbWVudCIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSB0aGUgYGlmYCBjb25kaXRpb24iLGFsdGVybmF0aXZlOiJbQVNUX1N0YXRlbWVudD9dIHRoZSBgZWxzZWAgcGFydCwgb3IgbnVsbCBpZiBub3QgcHJlc2VudCJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5jb25kaXRpb24uX3dhbGsoZSksdGhpcy5ib2R5Ll93YWxrKGUpLHRoaXMuYWx0ZXJuYXRpdmUmJnRoaXMuYWx0ZXJuYXRpdmUuX3dhbGsoZSl9KX19LHYpLE1lPXIoIlN3aXRjaCIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgc3dpdGNoYCBzdGF0ZW1lbnQiLCRwcm9wZG9jOntleHByZXNzaW9uOiJbQVNUX05vZGVdIHRoZSBgc3dpdGNoYCDigJxkaXNjcmltaW5hbnTigJ0ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbi5fd2FsayhlKSxxKHRoaXMsZSl9KX19LGRlKSxNPXIoIlN3aXRjaEJyYW5jaCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGBzd2l0Y2hgIGJyYW5jaGVzIn0sZGUpLE5lPXIoIkRlZmF1bHQiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGBkZWZhdWx0YCBzd2l0Y2ggYnJhbmNoIn0sTSksUGU9cigiQ2FzZSIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgY2FzZWAgc3dpdGNoIGJyYW5jaCIsJHByb3Bkb2M6e2V4cHJlc3Npb246IltBU1RfTm9kZV0gdGhlIGBjYXNlYCBleHByZXNzaW9uIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSkscSh0aGlzLGUpfSl9fSxNKSxJZT1yKCJUcnkiLCJiY2F0Y2ggYmZpbmFsbHkiLHskZG9jdW1lbnRhdGlvbjoiQSBgdHJ5YCBzdGF0ZW1lbnQiLCRwcm9wZG9jOntiY2F0Y2g6IltBU1RfQ2F0Y2g/XSB0aGUgY2F0Y2ggYmxvY2ssIG9yIG51bGwgaWYgbm90IHByZXNlbnQiLGJmaW5hbGx5OiJbQVNUX0ZpbmFsbHk/XSB0aGUgZmluYWxseSBibG9jaywgb3IgbnVsbCBpZiBub3QgcHJlc2VudCJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7cSh0aGlzLGUpLHRoaXMuYmNhdGNoJiZ0aGlzLmJjYXRjaC5fd2FsayhlKSx0aGlzLmJmaW5hbGx5JiZ0aGlzLmJmaW5hbGx5Ll93YWxrKGUpfSl9fSxkZSksemU9cigiQ2F0Y2giLCJhcmduYW1lIix7JGRvY3VtZW50YXRpb246IkEgYGNhdGNoYCBub2RlOyBvbmx5IG1ha2VzIHNlbnNlIGFzIHBhcnQgb2YgYSBgdHJ5YCBzdGF0ZW1lbnQiLCRwcm9wZG9jOnthcmduYW1lOiJbQVNUX1N5bWJvbENhdGNoXSBzeW1ib2wgZm9yIHRoZSBleGNlcHRpb24ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuYXJnbmFtZS5fd2FsayhlKSxxKHRoaXMsZSl9KX19LGRlKSxqZT1yKCJGaW5hbGx5IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgZmluYWxseWAgbm9kZTsgb25seSBtYWtlcyBzZW5zZSBhcyBwYXJ0IG9mIGEgYHRyeWAgc3RhdGVtZW50In0sZGUpLFZlPXIoIkRlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgYHZhcmAgbm9kZXMgKHZhcmlhYmxlIGRlY2xhcmF0aW9ucy9pbml0aWFsaXphdGlvbnMpIiwkcHJvcGRvYzp7ZGVmaW5pdGlvbnM6IltBU1RfVmFyRGVmKl0gYXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19LGNlKSxIZT1yKCJWYXIiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGB2YXJgIHN0YXRlbWVudCJ9LFZlKSwkZT1yKCJWYXJEZWYiLCJuYW1lIHZhbHVlIix7JGRvY3VtZW50YXRpb246IkEgdmFyaWFibGUgZGVjbGFyYXRpb247IG9ubHkgYXBwZWFycyBpbiBhIEFTVF9EZWZpbml0aW9ucyBub2RlIiwkcHJvcGRvYzp7bmFtZToiW0FTVF9TeW1ib2xWYXJdIG5hbWUgb2YgdGhlIHZhcmlhYmxlIix2YWx1ZToiW0FTVF9Ob2RlP10gaW5pdGlhbGl6ZXIsIG9yIG51bGwgb2YgdGhlcmUncyBubyBpbml0aWFsaXplciJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5uYW1lLl93YWxrKGUpLHRoaXMudmFsdWUmJnRoaXMudmFsdWUuX3dhbGsoZSl9KX19KSxLZT1yKCJDYWxsIiwiZXhwcmVzc2lvbiBhcmdzIix7JGRvY3VtZW50YXRpb246IkEgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uIiwkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSBleHByZXNzaW9uIHRvIGludm9rZSBhcyBmdW5jdGlvbiIsYXJnczoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgYXJndW1lbnRzIn0sX3dhbGs6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsodCksdGhpcy5hcmdzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fd2Fsayh0KX0pfSl9fSksR2U9cigiTmV3IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gb2JqZWN0IGluc3RhbnRpYXRpb24uICBEZXJpdmVzIGZyb20gYSBmdW5jdGlvbiBjYWxsIHNpbmNlIGl0IGhhcyBleGFjdGx5IHRoZSBzYW1lIHByb3BlcnRpZXMifSxLZSksWWU9cigiU2VxdWVuY2UiLCJleHByZXNzaW9ucyIseyRkb2N1bWVudGF0aW9uOiJBIHNlcXVlbmNlIGV4cHJlc3Npb24gKGNvbW1hLXNlcGFyYXRlZCBleHByZXNzaW9ucykiLCRwcm9wZG9jOntleHByZXNzaW9uczoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgZXhwcmVzc2lvbnMgKGF0IGxlYXN0IHR3bykifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19KSxXZT1yKCJQcm9wQWNjZXNzIiwiZXhwcmVzc2lvbiBwcm9wZXJ0eSIseyRkb2N1bWVudGF0aW9uOidCYXNlIGNsYXNzIGZvciBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbnMsIGkuZS4gYGEuZm9vYCBvciBgYVsiZm9vIl1gJywkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSB0aGUg4oCcY29udGFpbmVy4oCdIGV4cHJlc3Npb24iLHByb3BlcnR5OiJbQVNUX05vZGV8c3RyaW5nXSB0aGUgcHJvcGVydHkgdG8gYWNjZXNzLiAgRm9yIEFTVF9Eb3QgdGhpcyBpcyBhbHdheXMgYSBwbGFpbiBzdHJpbmcsIHdoaWxlIGZvciBBU1RfU3ViIGl0J3MgYW4gYXJiaXRyYXJ5IEFTVF9Ob2RlIn19KSxRZT1yKCJEb3QiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGRvdHRlZCBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbiIsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSl9KX19LFdlKSxaZT1yKCJTdWIiLG51bGwseyRkb2N1bWVudGF0aW9uOidJbmRleC1zdHlsZSBwcm9wZXJ0eSBhY2Nlc3MsIGkuZS4gYGFbImZvbyJdYCcsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSksdGhpcy5wcm9wZXJ0eS5fd2FsayhlKX0pfX0sV2UpLEplPXIoIlVuYXJ5Iiwib3BlcmF0b3IgZXhwcmVzc2lvbiIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciB1bmFyeSBleHByZXNzaW9ucyIsJHByb3Bkb2M6e29wZXJhdG9yOiJbc3RyaW5nXSB0aGUgb3BlcmF0b3IiLGV4cHJlc3Npb246IltBU1RfTm9kZV0gZXhwcmVzc2lvbiB0aGF0IHRoaXMgdW5hcnkgb3BlcmF0b3IgYXBwbGllcyB0byJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5leHByZXNzaW9uLl93YWxrKGUpfSl9fSksWGU9cigiVW5hcnlQcmVmaXgiLG51bGwseyRkb2N1bWVudGF0aW9uOiJVbmFyeSBwcmVmaXggZXhwcmVzc2lvbiwgaS5lLiBgdHlwZW9mIGlgIG9yIGArK2lgIn0sSmUpLGV0PXIoIlVuYXJ5UG9zdGZpeCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlVuYXJ5IHBvc3RmaXggZXhwcmVzc2lvbiwgaS5lLiBgaSsrYCJ9LEplKSx0dD1yKCJCaW5hcnkiLCJvcGVyYXRvciBsZWZ0IHJpZ2h0Iix7JGRvY3VtZW50YXRpb246IkJpbmFyeSBleHByZXNzaW9uLCBpLmUuIGBhICsgYmAiLCRwcm9wZG9jOntsZWZ0OiJbQVNUX05vZGVdIGxlZnQtaGFuZCBzaWRlIGV4cHJlc3Npb24iLG9wZXJhdG9yOiJbc3RyaW5nXSB0aGUgb3BlcmF0b3IiLHJpZ2h0OiJbQVNUX05vZGVdIHJpZ2h0LWhhbmQgc2lkZSBleHByZXNzaW9uIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmxlZnQuX3dhbGsoZSksdGhpcy5yaWdodC5fd2FsayhlKX0pfX0pLG50PXIoIkNvbmRpdGlvbmFsIiwiY29uZGl0aW9uIGNvbnNlcXVlbnQgYWx0ZXJuYXRpdmUiLHskZG9jdW1lbnRhdGlvbjoiQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiB1c2luZyB0aGUgdGVybmFyeSBvcGVyYXRvciwgaS5lLiBgYSA/IGIgOiBjYCIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSIsY29uc2VxdWVudDoiW0FTVF9Ob2RlXSIsYWx0ZXJuYXRpdmU6IltBU1RfTm9kZV0ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuY29uZGl0aW9uLl93YWxrKGUpLHRoaXMuY29uc2VxdWVudC5fd2FsayhlKSx0aGlzLmFsdGVybmF0aXZlLl93YWxrKGUpfSl9fSkscnQ9cigiQXNzaWduIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gYXNzaWdubWVudCBleHByZXNzaW9uIOKAlCBgYSA9IGIgKyA1YCJ9LHR0KSxpdD1yKCJBcnJheSIsImVsZW1lbnRzIix7JGRvY3VtZW50YXRpb246IkFuIGFycmF5IGxpdGVyYWwiLCRwcm9wZG9jOntlbGVtZW50czoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgZWxlbWVudHMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19KSxvdD1yKCJPYmplY3QiLCJwcm9wZXJ0aWVzIix7JGRvY3VtZW50YXRpb246IkFuIG9iamVjdCBsaXRlcmFsIiwkcHJvcGRvYzp7cHJvcGVydGllczoiW0FTVF9PYmplY3RQcm9wZXJ0eSpdIGFycmF5IG9mIHByb3BlcnRpZXMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuX3dhbGsodCl9KX0pfX0pLGF0PXIoIk9iamVjdFByb3BlcnR5Iiwia2V5IHZhbHVlIix7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGxpdGVyYWwgb2JqZWN0IHByb3BlcnRpZXMiLCRwcm9wZG9jOntrZXk6IltzdHJpbmd8QVNUX1N5bWJvbEFjY2Vzc29yXSBwcm9wZXJ0eSBuYW1lLiBGb3IgT2JqZWN0S2V5VmFsIHRoaXMgaXMgYSBzdHJpbmcuIEZvciBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoaXMgaXMgYW4gQVNUX1N5bWJvbEFjY2Vzc29yLiIsdmFsdWU6IltBU1RfTm9kZV0gcHJvcGVydHkgdmFsdWUuICBGb3IgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGlzIGlzIGFuIEFTVF9BY2Nlc3Nvci4ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMudmFsdWUuX3dhbGsoZSl9KX19KSxzdD1yKCJPYmplY3RLZXlWYWwiLCJxdW90ZSIseyRkb2N1bWVudGF0aW9uOiJBIGtleTogdmFsdWUgb2JqZWN0IHByb3BlcnR5IiwkcHJvcGRvYzp7cXVvdGU6IltzdHJpbmddIHRoZSBvcmlnaW5hbCBxdW90ZSBjaGFyYWN0ZXIifX0sYXQpLFk9cigiT2JqZWN0U2V0dGVyIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gb2JqZWN0IHNldHRlciBwcm9wZXJ0eSJ9LGF0KSxXPXIoIk9iamVjdEdldHRlciIsbnVsbCx7JGRvY3VtZW50YXRpb246IkFuIG9iamVjdCBnZXR0ZXIgcHJvcGVydHkifSxhdCksdXQ9cigiU3ltYm9sIiwic2NvcGUgbmFtZSB0aGVkZWYiLHskcHJvcGRvYzp7bmFtZToiW3N0cmluZ10gbmFtZSBvZiB0aGlzIHN5bWJvbCIsc2NvcGU6IltBU1RfU2NvcGUvU10gdGhlIGN1cnJlbnQgc2NvcGUgKG5vdCBuZWNlc3NhcmlseSB0aGUgZGVmaW5pdGlvbiBzY29wZSkiLHRoZWRlZjoiW1N5bWJvbERlZi9TXSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHN5bWJvbCJ9LCRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBhbGwgc3ltYm9scyJ9KSxRPXIoIlN5bWJvbEFjY2Vzc29yIixudWxsLHskZG9jdW1lbnRhdGlvbjoiVGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSBhY2Nlc3NvciAoc2V0dGVyL2dldHRlciBmdW5jdGlvbikifSx1dCksbHQ9cigiU3ltYm9sRGVjbGFyYXRpb24iLCJpbml0Iix7JGRvY3VtZW50YXRpb246IkEgZGVjbGFyYXRpb24gc3ltYm9sIChzeW1ib2wgaW4gdmFyLCBmdW5jdGlvbiBuYW1lIG9yIGFyZ3VtZW50LCBzeW1ib2wgaW4gY2F0Y2gpIn0sdXQpLGN0PXIoIlN5bWJvbFZhciIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBkZWZpbmluZyBhIHZhcmlhYmxlIn0sbHQpLGZ0PXIoIlN5bWJvbEZ1bmFyZyIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBmdW5jdGlvbiBhcmd1bWVudCJ9LGN0KSxwdD1yKCJTeW1ib2xEZWZ1biIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBkZWZpbmluZyBhIGZ1bmN0aW9uIn0sbHQpLGh0PXIoIlN5bWJvbExhbWJkYSIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBmdW5jdGlvbiBleHByZXNzaW9uIn0sbHQpLGR0PXIoIlN5bWJvbENhdGNoIixudWxsLHskZG9jdW1lbnRhdGlvbjoiU3ltYm9sIG5hbWluZyB0aGUgZXhjZXB0aW9uIGluIGNhdGNoIn0sbHQpLFo9cigiTGFiZWwiLCJyZWZlcmVuY2VzIix7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBsYWJlbCAoZGVjbGFyYXRpb24pIiwkcHJvcGRvYzp7cmVmZXJlbmNlczoiW0FTVF9Mb29wQ29udHJvbCpdIGEgbGlzdCBvZiBub2RlcyByZWZlcnJpbmcgdG8gdGhpcyBsYWJlbCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLnJlZmVyZW5jZXM9W10sdGhpcy50aGVkZWY9dGhpc319LHV0KSxtdD1yKCJTeW1ib2xSZWYiLG51bGwseyRkb2N1bWVudGF0aW9uOiJSZWZlcmVuY2UgdG8gc29tZSBzeW1ib2wgKG5vdCBkZWZpbml0aW9uL2RlY2xhcmF0aW9uKSJ9LHV0KSxKPXIoIkxhYmVsUmVmIixudWxsLHskZG9jdW1lbnRhdGlvbjoiUmVmZXJlbmNlIHRvIGEgbGFiZWwgc3ltYm9sIn0sdXQpLGd0PXIoIlRoaXMiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYHRoaXNgIHN5bWJvbCJ9LHV0KSx2dD1yKCJDb25zdGFudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdGFudHMiLGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9fSksYnQ9cigiU3RyaW5nIiwidmFsdWUgcXVvdGUiLHskZG9jdW1lbnRhdGlvbjoiQSBzdHJpbmcgbGl0ZXJhbCIsJHByb3Bkb2M6e3ZhbHVlOiJbc3RyaW5nXSB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmciLHF1b3RlOiJbc3RyaW5nXSB0aGUgb3JpZ2luYWwgcXVvdGUgY2hhcmFjdGVyIn19LHZ0KSx5dD1yKCJOdW1iZXIiLCJ2YWx1ZSBsaXRlcmFsIix7JGRvY3VtZW50YXRpb246IkEgbnVtYmVyIGxpdGVyYWwiLCRwcm9wZG9jOnt2YWx1ZToiW251bWJlcl0gdGhlIG51bWVyaWMgdmFsdWUiLGxpdGVyYWw6IltzdHJpbmddIG51bWVyaWMgdmFsdWUgYXMgc3RyaW5nIChvcHRpb25hbCkifX0sdnQpLF90PXIoIlJlZ0V4cCIsInZhbHVlIix7JGRvY3VtZW50YXRpb246IkEgcmVnZXhwIGxpdGVyYWwiLCRwcm9wZG9jOnt2YWx1ZToiW1JlZ0V4cF0gdGhlIGFjdHVhbCByZWdleHAifX0sdnQpLGE9cigiQXRvbSIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGF0b21zIn0sdnQpLHd0PXIoIk51bGwiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYG51bGxgIGF0b20iLHZhbHVlOm51bGx9LGEpLEV0PXIoIk5hTiIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBpbXBvc3NpYmxlIHZhbHVlIix2YWx1ZTpOYU59LGEpLEF0PXIoIlVuZGVmaW5lZCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBgdW5kZWZpbmVkYCB2YWx1ZSIsdmFsdWU6dm9pZCAwfSxhKSx4dD1yKCJIb2xlIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBob2xlIGluIGFuIGFycmF5Iix2YWx1ZTp2b2lkIDB9LGEpLGt0PXIoIkluZmluaXR5IixudWxsLHskZG9jdW1lbnRhdGlvbjoiVGhlIGBJbmZpbml0eWAgdmFsdWUiLHZhbHVlOjEvMH0sYSksQ3Q9cigiQm9vbGVhbiIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGJvb2xlYW5zIn0sYSksT3Q9cigiRmFsc2UiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYGZhbHNlYCBhdG9tIix2YWx1ZTohMX0sQ3QpLFN0PXIoIlRydWUiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYHRydWVgIGF0b20iLHZhbHVlOiEwfSxDdCk7ZnVuY3Rpb24gRHQoZSl7dGhpcy52aXNpdD1lLHRoaXMuc3RhY2s9W10sdGhpcy5kaXJlY3RpdmVzPU9iamVjdC5jcmVhdGUobnVsbCl9RHQucHJvdG90eXBlPXtfdmlzaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2goZSk7dmFyIG49dGhpcy52aXNpdChlLHQ/ZnVuY3Rpb24oKXt0LmNhbGwoZSl9Om5lKTtyZXR1cm4hbiYmdCYmdC5jYWxsKGUpLHRoaXMucG9wKCksbn0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTItKGV8fDApXX0scHVzaDpmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgT2U/dGhpcy5kaXJlY3RpdmVzPU9iamVjdC5jcmVhdGUodGhpcy5kaXJlY3RpdmVzKTplIGluc3RhbmNlb2YgcGUmJiF0aGlzLmRpcmVjdGl2ZXNbZS52YWx1ZV0mJih0aGlzLmRpcmVjdGl2ZXNbZS52YWx1ZV09ZSksdGhpcy5zdGFjay5wdXNoKGUpfSxwb3A6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpaW5zdGFuY2VvZiBPZSYmKHRoaXMuZGlyZWN0aXZlcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5kaXJlY3RpdmVzKSl9LHNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX0sZmluZF9wYXJlbnQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3RhY2ssbj10Lmxlbmd0aDswPD0tLW47KXt2YXIgcj10W25dO2lmKHIgaW5zdGFuY2VvZiBlKXJldHVybiByfX0saGFzX2RpcmVjdGl2ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpcmVjdGl2ZXNbZV07aWYodClyZXR1cm4gdDt2YXIgbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKG4gaW5zdGFuY2VvZiBrZSlmb3IodmFyIHI9MDtyPG4uYm9keS5sZW5ndGg7KytyKXt2YXIgaT1uLmJvZHlbcl07aWYoIShpIGluc3RhbmNlb2YgcGUpKWJyZWFrO2lmKGkudmFsdWU9PWUpcmV0dXJuIGl9fSxsb29wY29udHJvbF90YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGFjaztpZihlLmxhYmVsKWZvcih2YXIgbj10Lmxlbmd0aDswPD0tLW47KXtpZigocj10W25dKWluc3RhbmNlb2YgdmUmJnIubGFiZWwubmFtZT09ZS5sYWJlbC5uYW1lKXJldHVybiByLmJvZHl9ZWxzZSBmb3Iobj10Lmxlbmd0aDswPD0tLW47KXt2YXIgcjtpZigocj10W25dKWluc3RhbmNlb2YgYmV8fGUgaW5zdGFuY2VvZiBGZSYmciBpbnN0YW5jZW9mIE1lKXJldHVybiByfX0saW5fYm9vbGVhbl9jb250ZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5zZWxmKCksbj0wO2U9dGhpcy5wYXJlbnQobik7bisrKXtpZihlIGluc3RhbmNlb2YgaGV8fGUgaW5zdGFuY2VvZiBudCYmZS5jb25kaXRpb249PT10fHxlIGluc3RhbmNlb2YgeWUmJmUuY29uZGl0aW9uPT09dHx8ZSBpbnN0YW5jZW9mIEVlJiZlLmNvbmRpdGlvbj09PXR8fGUgaW5zdGFuY2VvZiBVZSYmZS5jb25kaXRpb249PT10fHxlIGluc3RhbmNlb2YgWGUmJiIhIj09ZS5vcGVyYXRvciYmZS5leHByZXNzaW9uPT09dClyZXR1cm4hMDtpZighKGUgaW5zdGFuY2VvZiB0dCYmKCImJiI9PWUub3BlcmF0b3J8fCJ8fCI9PWUub3BlcmF0b3IpfHxlIGluc3RhbmNlb2YgbnR8fGUudGFpbF9ub2RlKCk9PT10KSlyZXR1cm4hMTt0PWV9fX07dmFyIFg9ImJyZWFrIGNhc2UgY2F0Y2ggY29uc3QgY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkZWxldGUgZG8gZWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiBpZiBpbiBpbnN0YW5jZW9mIG5ldyByZXR1cm4gc3dpdGNoIHRocm93IHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCIsUz0iZmFsc2UgbnVsbCB0cnVlIixiPSJhYnN0cmFjdCBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZW51bSBleHBvcnQgZXh0ZW5kcyBmaW5hbCBmbG9hdCBnb3RvIGltcGxlbWVudHMgaW1wb3J0IGludCBpbnRlcmZhY2UgbGV0IGxvbmcgbmF0aXZlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHNob3J0IHN0YXRpYyBzdXBlciBzeW5jaHJvbml6ZWQgdGhpcyB0aHJvd3MgdHJhbnNpZW50IHZvbGF0aWxlIHlpZWxkICIrUysiICIrWCxOPSJyZXR1cm4gbmV3IGRlbGV0ZSB0aHJvdyBlbHNlIGNhc2UiO1g9YWUoWCksYj1hZShiKSxOPWFlKE4pLFM9YWUoUyk7dmFyIFA9YWUoZSgiKy0qJiU9PD4hP3x+XiIpKSxJPS9eMHhbMC05YS1mXSskL2ksej0vXjBbMC03XSskLyxqPWFlKFsiaW4iLCJpbnN0YW5jZW9mIiwidHlwZW9mIiwibmV3Iiwidm9pZCIsImRlbGV0ZSIsIisrIiwiLS0iLCIrIiwiLSIsIiEiLCJ+IiwiJiIsInwiLCJeIiwiKiIsIi8iLCIlIiwiPj4iLCI8PCIsIj4+PiIsIjwiLCI+IiwiPD0iLCI+PSIsIj09IiwiPT09IiwiIT0iLCIhPT0iLCI/IiwiPSIsIis9IiwiLT0iLCIvPSIsIio9IiwiJT0iLCI+Pj0iLCI8PD0iLCI+Pj49IiwifD0iLCJePSIsIiY9IiwiJiYiLCJ8fCJdKSxWPWFlKGUoIiDCoFxuXHJcdFxmXHbigIvigIDigIHigILigIPigITigIXigIbigIfigIjigInigIpcdTIwMjhcdTIwMjnigK/igZ/jgIBcdWZlZmYiKSksSD1hZShlKCJcblxyXHUyMDI4XHUyMDI5IikpLGVlPWFlKGUoIlt7KCw7OiIpKSxUdD1hZShlKCJbXXt9KCksOzoiKSksaT17bGV0dGVyOm5ldyBSZWdFeHAoIltcXHUwMDQxLVxcdTAwNUFcXHUwMDYxLVxcdTAwN0FcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjJcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXSIpLGRpZ2l0Om5ldyBSZWdFeHAoIltcXHUwMDMwLVxcdTAwMzlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTldIiksbm9uX3NwYWNpbmdfbWFyazpuZXcgUmVnRXhwKCJbXFx1MDMwMC1cXHUwMzZGXFx1MDQ4My1cXHUwNDg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDYxMC1cXHUwNjFBXFx1MDY0Qi1cXHUwNjVFXFx1MDY3MFxcdTA2RDYtXFx1MDZEQ1xcdTA2REYtXFx1MDZFNFxcdTA2RTdcXHUwNkU4XFx1MDZFQS1cXHUwNkVEXFx1MDcxMVxcdTA3MzAtXFx1MDc0QVxcdTA3QTYtXFx1MDdCMFxcdTA3RUItXFx1MDdGM1xcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA5MDAtXFx1MDkwMlxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUUyXFx1MDlFM1xcdTBBMDFcXHUwQTAyXFx1MEEzQ1xcdTBBNDFcXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MVxcdTBBODJcXHUwQUJDXFx1MEFDMS1cXHUwQUM1XFx1MEFDN1xcdTBBQzhcXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxXFx1MEIzQ1xcdTBCM0ZcXHUwQjQxLVxcdTBCNDRcXHUwQjREXFx1MEI1NlxcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQzBcXHUwQkNEXFx1MEMzRS1cXHUwQzQwXFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDQkNcXHUwQ0JGXFx1MENDNlxcdTBDQ0NcXHUwQ0NEXFx1MENFMlxcdTBDRTNcXHUwRDQxLVxcdTBENDRcXHUwRDREXFx1MEQ2MlxcdTBENjNcXHUwRENBXFx1MEREMi1cXHUwREQ0XFx1MERENlxcdTBFMzFcXHUwRTM0LVxcdTBFM0FcXHUwRTQ3LVxcdTBFNEVcXHUwRUIxXFx1MEVCNC1cXHUwRUI5XFx1MEVCQlxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNzEtXFx1MEY3RVxcdTBGODAtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY5MC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkQtXFx1MTAzMFxcdTEwMzItXFx1MTAzN1xcdTEwMzlcXHUxMDNBXFx1MTAzRFxcdTEwM0VcXHUxMDU4XFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNzEtXFx1MTA3NFxcdTEwODJcXHUxMDg1XFx1MTA4NlxcdTEwOERcXHUxMDlEXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN0I3LVxcdTE3QkRcXHUxN0M2XFx1MTdDOS1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MjJcXHUxOTI3XFx1MTkyOFxcdTE5MzJcXHUxOTM5LVxcdTE5M0JcXHUxQTE3XFx1MUExOFxcdTFBNTZcXHUxQTU4LVxcdTFBNUVcXHUxQTYwXFx1MUE2MlxcdTFBNjUtXFx1MUE2Q1xcdTFBNzMtXFx1MUE3Q1xcdTFBN0ZcXHUxQjAwLVxcdTFCMDNcXHUxQjM0XFx1MUIzNi1cXHUxQjNBXFx1MUIzQ1xcdTFCNDJcXHUxQjZCLVxcdTFCNzNcXHUxQjgwXFx1MUI4MVxcdTFCQTItXFx1MUJBNVxcdTFCQThcXHUxQkE5XFx1MUMyQy1cXHUxQzMzXFx1MUMzNlxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRTBcXHUxQ0UyLVxcdTFDRThcXHUxQ0VEXFx1MURDMC1cXHUxREU2XFx1MURGRC1cXHUxREZGXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2RlxcdUE2N0NcXHVBNjdEXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODI1XFx1QTgyNlxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTFcXHVBOTgwLVxcdUE5ODJcXHVBOUIzXFx1QTlCNi1cXHVBOUI5XFx1QTlCQ1xcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBQjBcXHVBQUIyLVxcdUFBQjRcXHVBQUI3XFx1QUFCOFxcdUFBQkVcXHVBQUJGXFx1QUFDMVxcdUFCRTVcXHVBQkU4XFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZdIiksc3BhY2VfY29tYmluaW5nX21hcms6bmV3IFJlZ0V4cCgiW1xcdTA5MDNcXHUwOTNFLVxcdTA5NDBcXHUwOTQ5LVxcdTA5NENcXHUwOTRFXFx1MDk4MlxcdTA5ODNcXHUwOUJFLVxcdTA5QzBcXHUwOUM3XFx1MDlDOFxcdTA5Q0JcXHUwOUNDXFx1MDlEN1xcdTBBMDNcXHUwQTNFLVxcdTBBNDBcXHUwQTgzXFx1MEFCRS1cXHUwQUMwXFx1MEFDOVxcdTBBQ0JcXHUwQUNDXFx1MEIwMlxcdTBCMDNcXHUwQjNFXFx1MEI0MFxcdTBCNDdcXHUwQjQ4XFx1MEI0QlxcdTBCNENcXHUwQjU3XFx1MEJCRVxcdTBCQkZcXHUwQkMxXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDQ1xcdTBCRDdcXHUwQzAxLVxcdTBDMDNcXHUwQzQxLVxcdTBDNDRcXHUwQzgyXFx1MEM4M1xcdTBDQkVcXHUwQ0MwLVxcdTBDQzRcXHUwQ0M3XFx1MENDOFxcdTBDQ0FcXHUwQ0NCXFx1MENENVxcdTBDRDZcXHUwRDAyXFx1MEQwM1xcdTBEM0UtXFx1MEQ0MFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0Q1xcdTBENTdcXHUwRDgyXFx1MEQ4M1xcdTBEQ0YtXFx1MEREMVxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEYzRVxcdTBGM0ZcXHUwRjdGXFx1MTAyQlxcdTEwMkNcXHUxMDMxXFx1MTAzOFxcdTEwM0JcXHUxMDNDXFx1MTA1NlxcdTEwNTdcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDgzXFx1MTA4NFxcdTEwODctXFx1MTA4Q1xcdTEwOEZcXHUxMDlBLVxcdTEwOUNcXHUxN0I2XFx1MTdCRS1cXHUxN0M1XFx1MTdDN1xcdTE3QzhcXHUxOTIzLVxcdTE5MjZcXHUxOTI5LVxcdTE5MkJcXHUxOTMwXFx1MTkzMVxcdTE5MzMtXFx1MTkzOFxcdTE5QjAtXFx1MTlDMFxcdTE5QzhcXHUxOUM5XFx1MUExOS1cXHUxQTFCXFx1MUE1NVxcdTFBNTdcXHUxQTYxXFx1MUE2M1xcdTFBNjRcXHUxQTZELVxcdTFBNzJcXHUxQjA0XFx1MUIzNVxcdTFCM0JcXHUxQjNELVxcdTFCNDFcXHUxQjQzXFx1MUI0NFxcdTFCODJcXHUxQkExXFx1MUJBNlxcdTFCQTdcXHUxQkFBXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGMlxcdUE4MjNcXHVBODI0XFx1QTgyN1xcdUE4ODBcXHVBODgxXFx1QThCNC1cXHVBOEMzXFx1QTk1MlxcdUE5NTNcXHVBOTgzXFx1QTlCNFxcdUE5QjVcXHVBOUJBXFx1QTlCQlxcdUE5QkQtXFx1QTlDMFxcdUFBMkZcXHVBQTMwXFx1QUEzM1xcdUFBMzRcXHVBQTREXFx1QUE3QlxcdUFCRTNcXHVBQkU0XFx1QUJFNlxcdUFCRTdcXHVBQkU5XFx1QUJFQVxcdUFCRUNdIiksY29ubmVjdG9yX3B1bmN0dWF0aW9uOm5ldyBSZWdFeHAoIltcXHUwMDVGXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRjNGXSIpfTtmdW5jdGlvbiBCdChlKXtyZXR1cm4gOTc8PWUmJmU8PTEyMnx8NjU8PWUmJmU8PTkwfHwxNzA8PWUmJmkubGV0dGVyLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLmNoYXJDb2RlQXQoMCkpLDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBMdChlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPWUuY2hhckNvZGVBdCgwKSksNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiA0ODw9ZSYmZTw9NTd9ZnVuY3Rpb24gZihlKXtyZXR1cm4hYltlXSYmL15bYS16XyRdW2EtejAtOV8kXSokL2kudGVzdChlKX1mdW5jdGlvbiBxdChlKXtyZXR1cm4gMzY9PWV8fDk1PT1lfHxCdChlKX1mdW5jdGlvbiBVdChlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHF0KHQpfHxGdCh0KXx8ODIwND09dHx8ODIwNT09dHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGkubm9uX3NwYWNpbmdfbWFyay50ZXN0KGUpfHxpLnNwYWNlX2NvbWJpbmluZ19tYXJrLnRlc3QoZSl9KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4gaS5jb25uZWN0b3JfcHVuY3R1YXRpb24udGVzdChlKX0oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiBpLmRpZ2l0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9KHQpfWZ1bmN0aW9uIE10KGUpe3JldHVybi9eW2Etel8kXVthLXowLTlfJF0qJC9pLnRlc3QoZSl9ZnVuY3Rpb24gTnQoZSx0LG4scixpKXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLmZpbGVuYW1lPXQsdGhpcy5saW5lPW4sdGhpcy5jb2w9cix0aGlzLnBvcz1pfWZ1bmN0aW9uIFB0KGUsdCxuLHIsaSl7dGhyb3cgbmV3IE50KGUsdCxuLHIsaSl9ZnVuY3Rpb24gSXQoZSx0LG4pe3JldHVybiBlLnR5cGU9PXQmJihudWxsPT1ufHxlLnZhbHVlPT1uKX0oKE50LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU50KS5wcm90b3R5cGUubmFtZT0iU3ludGF4RXJyb3IiLHQoTnQpO3ZhciB6dD17fTtmdW5jdGlvbiBqdChpLG8sYSxzKXt2YXIgdT17dGV4dDppLGZpbGVuYW1lOm8scG9zOjAsdG9rcG9zOjAsbGluZToxLHRva2xpbmU6MCxjb2w6MCx0b2tjb2w6MCxuZXdsaW5lX2JlZm9yZTohMSxyZWdleF9hbGxvd2VkOiExLGNvbW1lbnRzX2JlZm9yZTpbXSxkaXJlY3RpdmVzOnt9LGRpcmVjdGl2ZV9zdGFjazpbXX07ZnVuY3Rpb24gbCgpe3JldHVybiB1LnRleHQuY2hhckF0KHUucG9zKX1mdW5jdGlvbiBjKGUsdCl7dmFyIG49dS50ZXh0LmNoYXJBdCh1LnBvcysrKTtpZihlJiYhbil0aHJvdyB6dDtyZXR1cm4gSFtuXT8odS5uZXdsaW5lX2JlZm9yZT11Lm5ld2xpbmVfYmVmb3JlfHwhdCwrK3UubGluZSx1LmNvbD0wLHR8fCJcciIhPW58fCJcbiIhPWwoKXx8KCsrdS5wb3Msbj0iXG4iKSk6Kyt1LmNvbCxufWZ1bmN0aW9uIGYoZSl7Zm9yKDswPGUtLTspYygpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIHUudGV4dC5zdWJzdHIodS5wb3MsZS5sZW5ndGgpPT1lfWZ1bmN0aW9uIGgoKXt1LnRva2xpbmU9dS5saW5lLHUudG9rY29sPXUuY29sLHUudG9rcG9zPXUucG9zfXZhciBkPSExO2Z1bmN0aW9uIG0oZSx0LG4pe3UucmVnZXhfYWxsb3dlZD0ib3BlcmF0b3IiPT1lJiYhSHRbdF18fCJrZXl3b3JkIj09ZSYmTlt0XXx8InB1bmMiPT1lJiZlZVt0XSwicHVuYyI9PWUmJiIuIj09dD9kPSEwOm58fChkPSExKTt2YXIgcj17dHlwZTplLHZhbHVlOnQsbGluZTp1LnRva2xpbmUsY29sOnUudG9rY29sLHBvczp1LnRva3BvcyxlbmRsaW5lOnUubGluZSxlbmRjb2w6dS5jb2wsZW5kcG9zOnUucG9zLG5sYjp1Lm5ld2xpbmVfYmVmb3JlLGZpbGU6b307cmV0dXJuL14oPzpudW18c3RyaW5nfHJlZ2V4cCkkL2kudGVzdChlKSYmKHIucmF3PWkuc3Vic3RyaW5nKHIucG9zLHIuZW5kcG9zKSksbnx8KHIuY29tbWVudHNfYmVmb3JlPXUuY29tbWVudHNfYmVmb3JlLHIuY29tbWVudHNfYWZ0ZXI9dS5jb21tZW50c19iZWZvcmU9W10pLHUubmV3bGluZV9iZWZvcmU9ITEsbmV3IE8ocil9ZnVuY3Rpb24gZygpe2Zvcig7VltsKCldOyljKCl9ZnVuY3Rpb24gdihlKXtQdChlLG8sdS50b2tsaW5lLHUudG9rY29sLHUudG9rcG9zKX1mdW5jdGlvbiBiKHIpe3ZhciBpPSExLG89ITEsYT0hMSxzPSIuIj09cixlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPSIiLHI9MDsodD1sKCkpJiZlKHQscisrKTspbis9YygpO3JldHVybiBufShmdW5jdGlvbihlLHQpe3ZhciBuPWUuY2hhckNvZGVBdCgwKTtzd2l0Y2gobil7Y2FzZSAxMjA6Y2FzZSA4ODpyZXR1cm4hYSYmKGE9ITApO2Nhc2UgMTAxOmNhc2UgNjk6cmV0dXJuISFhfHwhaSYmKGk9bz0hMCk7Y2FzZSA0NTpyZXR1cm4gb3x8MD09dCYmIXI7Y2FzZSA0MzpyZXR1cm4gbztjYXNlIG89ITEsNDY6cmV0dXJuIShzfHxhfHxpKSYmKHM9ITApfXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gRnQoZSl8fEJ0KGUpfShuKX0pO3ImJihlPXIrZSksei50ZXN0KGUpJiZDLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmdigiTGVnYWN5IG9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIpO3ZhciB0PWZ1bmN0aW9uKGUpe2lmKEkudGVzdChlKSlyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMiksMTYpO2lmKHoudGVzdChlKSlyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMSksOCk7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gdD09ZT90OnZvaWQgMH0oZSk7aWYoIWlzTmFOKHQpKXJldHVybiBtKCJudW0iLHQpO3YoIkludmFsaWQgc3ludGF4OiAiK2UpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9YyghMCxlKTtzd2l0Y2godC5jaGFyQ29kZUF0KDApKXtjYXNlIDExMDpyZXR1cm4iXG4iO2Nhc2UgMTE0OnJldHVybiJcciI7Y2FzZSAxMTY6cmV0dXJuIlx0IjtjYXNlIDk4OnJldHVybiJcYiI7Y2FzZSAxMTg6cmV0dXJuIlx2IjtjYXNlIDEwMjpyZXR1cm4iXGYiO2Nhc2UgMTIwOnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4oMikpO2Nhc2UgMTE3OnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4oNCkpO2Nhc2UgMTA6cmV0dXJuIiI7Y2FzZSAxMzppZigiXG4iPT1sKCkpcmV0dXJuIGMoITAsZSksIiJ9cmV0dXJuIjAiPD10JiZ0PD0iNyI/ZnVuY3Rpb24oZSl7dmFyIHQ9bCgpOyIwIjw9dCYmdDw9IjciJiYoZSs9YyghMCkpWzBdPD0iMyImJiIwIjw9KHQ9bCgpKSYmdDw9IjciJiYoZSs9YyghMCkpO2lmKCIwIj09PWUpcmV0dXJuIlwwIjswPGUubGVuZ3RoJiZDLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmdigiTGVnYWN5IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSw4KSl9KHQpOnR9ZnVuY3Rpb24gbihlKXtmb3IodmFyIHQ9MDswPGU7LS1lKXt2YXIgbj1wYXJzZUludChjKCEwKSwxNik7aXNOYU4obikmJnYoIkludmFsaWQgaGV4LWNoYXJhY3RlciBwYXR0ZXJuIGluIHN0cmluZyIpLHQ9dDw8NHxufXJldHVybiB0fXZhciBfPXQoIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnQiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1jKCksbj0iIjs7KXt2YXIgcj1jKCEwLCEwKTtpZigiXFwiPT1yKXI9eSghMCk7ZWxzZSBpZihIW3JdKXYoIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnQiKTtlbHNlIGlmKHI9PXQpYnJlYWs7bis9cn12YXIgaT1tKCJzdHJpbmciLG4pO3JldHVybiBpLnF1b3RlPWUsaX0pO2Z1bmN0aW9uIHcoZSl7dmFyIHQsbj11LnJlZ2V4X2FsbG93ZWQscj1mdW5jdGlvbigpe2Zvcih2YXIgZT11LnRleHQsdD11LnBvcyxuPXUudGV4dC5sZW5ndGg7dDxuOysrdCl7dmFyIHI9ZVt0XTtpZihIW3JdKXJldHVybiB0fXJldHVybi0xfSgpO3JldHVybi0xPT1yPyh0PXUudGV4dC5zdWJzdHIodS5wb3MpLHUucG9zPXUudGV4dC5sZW5ndGgpOih0PXUudGV4dC5zdWJzdHJpbmcodS5wb3MsciksdS5wb3M9ciksdS5jb2w9dS50b2tjb2wrKHUucG9zLXUudG9rcG9zKSx1LmNvbW1lbnRzX2JlZm9yZS5wdXNoKG0oZSx0LCEwKSksdS5yZWdleF9hbGxvd2VkPW4sQ312YXIgZT10KCJVbnRlcm1pbmF0ZWQgbXVsdGlsaW5lIGNvbW1lbnQiLGZ1bmN0aW9uKCl7dmFyIGU9dS5yZWdleF9hbGxvd2VkLHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj11LnRleHQuaW5kZXhPZihlLHUucG9zKTtpZih0JiYtMT09bil0aHJvdyB6dDtyZXR1cm4gbn0oIiovIiwhMCksbj11LnRleHQuc3Vic3RyaW5nKHUucG9zLHQpLnJlcGxhY2UoL1xyXG58XHJ8XHUyMDI4fFx1MjAyOS9nLCJcbiIpO3JldHVybiBmKG4ubGVuZ3RoKzIpLHUuY29tbWVudHNfYmVmb3JlLnB1c2gobSgiY29tbWVudDIiLG4sITApKSx1LnJlZ2V4X2FsbG93ZWQ9ZSxDfSk7ZnVuY3Rpb24gRSgpe2Zvcih2YXIgZSx0LG49ITEscj0iIixpPSExO251bGwhPShlPWwoKSk7KWlmKG4pInUiIT1lJiZ2KCJFeHBlY3RpbmcgVW5pY29kZUVzY2FwZVNlcXVlbmNlIC0tIHVYWFhYIiksVXQoZT15KCkpfHx2KCJVbmljb2RlIGNoYXI6ICIrZS5jaGFyQ29kZUF0KDApKyIgaXMgbm90IHZhbGlkIGluIGlkZW50aWZpZXIiKSxyKz1lLG49ITE7ZWxzZSBpZigiXFwiPT1lKWk9bj0hMCxjKCk7ZWxzZXtpZighVXQoZSkpYnJlYWs7cis9YygpfXJldHVybiBYW3JdJiZpJiYodD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkscj0iXFx1IisiMDAwMCIuc3Vic3RyKHQubGVuZ3RoKSt0K3Iuc2xpY2UoMSkpLHJ9dmFyIEE9dCgiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ITEscj0hMTt0PWMoITApOylpZihIW3RdKXYoIlVuZXhwZWN0ZWQgbGluZSB0ZXJtaW5hdG9yIik7ZWxzZSBpZihuKWUrPSJcXCIrdCxuPSExO2Vsc2UgaWYoIlsiPT10KXI9ITAsZSs9dDtlbHNlIGlmKCJdIj09dCYmcilyPSExLGUrPXQ7ZWxzZXtpZigiLyI9PXQmJiFyKWJyZWFrOyJcXCI9PXQ/bj0hMDplKz10fXZhciBpPUUoKTt0cnl7dmFyIG89bmV3IFJlZ0V4cChlLGkpO3JldHVybiBvLnJhd19zb3VyY2U9ZSxtKCJyZWdleHAiLG8pfWNhdGNoKGUpe3YoZS5tZXNzYWdlKX19KTtmdW5jdGlvbiB4KGUpe3JldHVybiBtKCJvcGVyYXRvciIsZnVuY3Rpb24gZSh0KXtpZighbCgpKXJldHVybiB0O3ZhciBuPXQrbCgpO3JldHVybiBqW25dPyhjKCksZShuKSk6dH0oZXx8YygpKSl9ZnVuY3Rpb24gaygpe3N3aXRjaChjKCksbCgpKXtjYXNlIi8iOnJldHVybiBjKCksdygiY29tbWVudDEiKTtjYXNlIioiOnJldHVybiBjKCksZSgpfXJldHVybiB1LnJlZ2V4X2FsbG93ZWQ/QSgiIik6eCgiLyIpfWZ1bmN0aW9uIHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUpfWNhdGNoKGUpe2lmKGUhPT16dCl0aHJvdyBlO3YodCl9fX1mdW5jdGlvbiBDKGUpe2lmKG51bGwhPWUpcmV0dXJuIEEoZSk7Zm9yKHMmJjA9PXUucG9zJiZwKCIjISIpJiYoaCgpLGYoMiksdygiY29tbWVudDUiKSk7Oyl7aWYoZygpLGgoKSxhKXtpZihwKCJceDNjIS0tIikpe2YoNCksdygiY29tbWVudDMiKTtjb250aW51ZX1pZihwKCItLVx4M2UiKSYmdS5uZXdsaW5lX2JlZm9yZSl7ZigzKSx3KCJjb21tZW50NCIpO2NvbnRpbnVlfX12YXIgdD1sKCk7aWYoIXQpcmV0dXJuIG0oImVvZiIpO3ZhciBuPXQuY2hhckNvZGVBdCgwKTtzd2l0Y2gobil7Y2FzZSAzNDpjYXNlIDM5OnJldHVybiBfKHQpO2Nhc2UgNDY6cmV0dXJuIGMoKSxGdChsKCkuY2hhckNvZGVBdCgwKSk/YigiLiIpOm0oInB1bmMiLCIuIik7Y2FzZSA0Nzp2YXIgcj1rKCk7aWYocj09PUMpY29udGludWU7cmV0dXJuIHJ9aWYoRnQobikpcmV0dXJuIGIoKTtpZihUdFt0XSlyZXR1cm4gbSgicHVuYyIsYygpKTtpZihQW3RdKXJldHVybiB4KCk7aWYoOTI9PW58fHF0KG4pKXJldHVybiB2b2lkIDAsaT1FKCksZD9tKCJuYW1lIixpKTpTW2ldP20oImF0b20iLGkpOlhbaV0/altpXT9tKCJvcGVyYXRvciIsaSk6bSgia2V5d29yZCIsaSk6bSgibmFtZSIsaSk7YnJlYWt9dmFyIGk7digiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyIrdCsiJyIpfXJldHVybiBDLmNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih1PWUpLHV9LEMuYWRkX2RpcmVjdGl2ZT1mdW5jdGlvbihlKXt1LmRpcmVjdGl2ZV9zdGFja1t1LmRpcmVjdGl2ZV9zdGFjay5sZW5ndGgtMV0ucHVzaChlKSx2b2lkIDA9PT11LmRpcmVjdGl2ZXNbZV0/dS5kaXJlY3RpdmVzW2VdPTE6dS5kaXJlY3RpdmVzW2VdKyt9LEMucHVzaF9kaXJlY3RpdmVzX3N0YWNrPWZ1bmN0aW9uKCl7dS5kaXJlY3RpdmVfc3RhY2sucHVzaChbXSl9LEMucG9wX2RpcmVjdGl2ZXNfc3RhY2s9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dS5kaXJlY3RpdmVfc3RhY2tbdS5kaXJlY3RpdmVfc3RhY2subGVuZ3RoLTFdLHQ9MDt0PGUubGVuZ3RoO3QrKyl1LmRpcmVjdGl2ZXNbZVt0XV0tLTt1LmRpcmVjdGl2ZV9zdGFjay5wb3AoKX0sQy5oYXNfZGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiAwPHUuZGlyZWN0aXZlc1tlXX0sQ312YXIgVnQ9YWUoWyJ0eXBlb2YiLCJ2b2lkIiwiZGVsZXRlIiwiLS0iLCIrKyIsIiEiLCJ+IiwiLSIsIisiXSksSHQ9YWUoWyItLSIsIisrIl0pLCR0PWFlKFsiPSIsIis9IiwiLT0iLCIvPSIsIio9IiwiJT0iLCI+Pj0iLCI8PD0iLCI+Pj49IiwifD0iLCJePSIsIiY9Il0pLEt0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pZm9yKHZhciByPWVbbl0saT0wO2k8ci5sZW5ndGg7KytpKXRbcltpXV09bisxO3JldHVybiB0fShbWyJ8fCJdLFsiJiYiXSxbInwiXSxbIl4iXSxbIiYiXSxbIj09IiwiPT09IiwiIT0iLCIhPT0iXSxbIjwiLCI+IiwiPD0iLCI+PSIsImluIiwiaW5zdGFuY2VvZiJdLFsiPj4iLCI8PCIsIj4+PiJdLFsiKyIsIi0iXSxbIioiLCIvIiwiJSJdXSx7fSksR3Q9YWUoWyJhdG9tIiwibnVtIiwic3RyaW5nIiwicmVnZXhwIiwibmFtZSJdKTtmdW5jdGlvbiBZdChlLHUpe3U9JCh1LHtiYXJlX3JldHVybnM6ITEsZXhwcmVzc2lvbjohMSxmaWxlbmFtZTpudWxsLGh0bWw1X2NvbW1lbnRzOiEwLHNoZWJhbmc6ITAsc3RyaWN0OiExLHRvcGxldmVsOm51bGx9LCEwKTt2YXIgbD17aW5wdXQ6InN0cmluZyI9PXR5cGVvZiBlP2p0KGUsdS5maWxlbmFtZSx1Lmh0bWw1X2NvbW1lbnRzLHUuc2hlYmFuZyk6ZSx0b2tlbjpudWxsLHByZXY6bnVsbCxwZWVrZWQ6bnVsbCxpbl9mdW5jdGlvbjowLGluX2RpcmVjdGl2ZXM6ITAsaW5fbG9vcDowLGxhYmVsczpbXX07ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBJdChsLnRva2VuLGUsdCl9ZnVuY3Rpb24gZigpe3JldHVybiBsLnBlZWtlZHx8KGwucGVla2VkPWwuaW5wdXQoKSl9ZnVuY3Rpb24gcCgpe3JldHVybiBsLnByZXY9bC50b2tlbixsLnBlZWtlZD8obC50b2tlbj1sLnBlZWtlZCxsLnBlZWtlZD1udWxsKTpsLnRva2VuPWwuaW5wdXQoKSxsLmluX2RpcmVjdGl2ZXM9bC5pbl9kaXJlY3RpdmVzJiYoInN0cmluZyI9PWwudG9rZW4udHlwZXx8YygicHVuYyIsIjsiKSksbC50b2tlbn1mdW5jdGlvbiBoKCl7cmV0dXJuIGwucHJldn1mdW5jdGlvbiBkKGUsdCxuLHIpe3ZhciBpPWwuaW5wdXQuY29udGV4dCgpO1B0KGUsaS5maWxlbmFtZSxudWxsIT10P3Q6aS50b2tsaW5lLG51bGwhPW4/bjppLnRva2NvbCxudWxsIT1yP3I6aS50b2twb3MpfWZ1bmN0aW9uIG4oZSx0KXtkKHQsZS5saW5lLGUuY29sKX1mdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUrKHZvaWQgMD09PXQ/IiI6IiDCqyIrdCsiwrsiKX1mdW5jdGlvbiBtKGUpe251bGw9PWUmJihlPWwudG9rZW4pLG4oZSwiVW5leHBlY3RlZCB0b2tlbjogIityKGUudHlwZSxlLnZhbHVlKSl9ZnVuY3Rpb24gZyhlLHQpe2lmKGMoZSx0KSlyZXR1cm4gcCgpO24obC50b2tlbiwiVW5leHBlY3RlZCB0b2tlbjogIityKGwudG9rZW4udHlwZSxsLnRva2VuLnZhbHVlKSsiLCBleHBlY3RlZDogIityKGUsdCkpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGcoInB1bmMiLGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUubmxifHwhc2UoZS5jb21tZW50c19iZWZvcmUsZnVuY3Rpb24oZSl7cmV0dXJuIWUubmxifSl9ZnVuY3Rpb24geSgpe3JldHVybiF1LnN0cmljdCYmKGMoImVvZiIpfHxjKCJwdW5jIiwifSIpfHxiKGwudG9rZW4pKX1mdW5jdGlvbiBfKGUpe2MoInB1bmMiLCI7Iik/cCgpOmV8fHkoKXx8ZygicHVuYyIsIjsiKX1mdW5jdGlvbiB3KCl7digiKCIpO3ZhciBlPVYoITApO3JldHVybiB2KCIpIiksZX1mdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWwudG9rZW4sdD1yLmFwcGx5KG51bGwsYXJndW1lbnRzKSxuPWgoKTtyZXR1cm4gdC5zdGFydD1lLHQuZW5kPW4sdH19ZnVuY3Rpb24gRSgpeyhjKCJvcGVyYXRvciIsIi8iKXx8Yygib3BlcmF0b3IiLCIvPSIpKSYmKGwucGVla2VkPW51bGwsbC50b2tlbj1sLmlucHV0KGwudG9rZW4udmFsdWUuc3Vic3RyKDEpKSl9bC50b2tlbj1wKCk7dmFyIEE9dChmdW5jdGlvbihlKXtzd2l0Y2goRSgpLGwudG9rZW4udHlwZSl7Y2FzZSJzdHJpbmciOmlmKGwuaW5fZGlyZWN0aXZlcyl7dmFyIHQ9ZigpOy0xPT1sLnRva2VuLnJhdy5pbmRleE9mKCJcXCIpJiYoSXQodCwicHVuYyIsIjsiKXx8SXQodCwicHVuYyIsIn0iKXx8Yih0KXx8SXQodCwiZW9mIikpP2wuaW5wdXQuYWRkX2RpcmVjdGl2ZShsLnRva2VuLnZhbHVlKTpsLmluX2RpcmVjdGl2ZXM9ITF9dmFyIG49bC5pbl9kaXJlY3RpdmVzLHI9eCgpO3JldHVybiBuP25ldyBwZShyLmJvZHkpOnI7Y2FzZSJudW0iOmNhc2UicmVnZXhwIjpjYXNlIm9wZXJhdG9yIjpjYXNlImF0b20iOnJldHVybiB4KCk7Y2FzZSJuYW1lIjpyZXR1cm4gSXQoZigpLCJwdW5jIiwiOiIpP2Z1bmN0aW9uKCl7dmFyIHQ9VShaKTtzZShsLmxhYmVscyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT10Lm5hbWV9KXx8ZCgiTGFiZWwgIit0Lm5hbWUrIiBkZWZpbmVkIHR3aWNlIik7digiOiIpLGwubGFiZWxzLnB1c2godCk7dmFyIGU9QSgpO2wubGFiZWxzLnBvcCgpLGUgaW5zdGFuY2VvZiBiZXx8dC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIHFlJiYoZT1lLmxhYmVsLnN0YXJ0LGQoIkNvbnRpbnVlIGxhYmVsIGAiK3QubmFtZSsiYCByZWZlcnMgdG8gbm9uLUl0ZXJhdGlvblN0YXRlbWVudC4iLGUubGluZSxlLmNvbCxlLnBvcykpfSk7cmV0dXJuIG5ldyB2ZSh7Ym9keTplLGxhYmVsOnR9KX0oKTp4KCk7Y2FzZSJwdW5jIjpzd2l0Y2gobC50b2tlbi52YWx1ZSl7Y2FzZSJ7IjpyZXR1cm4gbmV3IG1lKHtzdGFydDpsLnRva2VuLGJvZHk6TygpLGVuZDpoKCl9KTtjYXNlIlsiOmNhc2UiKCI6cmV0dXJuIHgoKTtjYXNlIjsiOnJldHVybiBsLmluX2RpcmVjdGl2ZXM9ITEscCgpLG5ldyBnZTtkZWZhdWx0Om0oKX1jYXNlImtleXdvcmQiOnN3aXRjaChsLnRva2VuLnZhbHVlKXtjYXNlImJyZWFrIjpyZXR1cm4gcCgpLGsoRmUpO2Nhc2UiY29udGludWUiOnJldHVybiBwKCksayhxZSk7Y2FzZSJkZWJ1Z2dlciI6cmV0dXJuIHAoKSxfKCksbmV3IGZlO2Nhc2UiZG8iOnAoKTt2YXIgaT1IKEEpO2coImtleXdvcmQiLCJ3aGlsZSIpO3ZhciBvPXcoKTtyZXR1cm4gXyghMCksbmV3IF9lKHtib2R5OmksY29uZGl0aW9uOm99KTtjYXNlIndoaWxlIjpyZXR1cm4gcCgpLG5ldyB3ZSh7Y29uZGl0aW9uOncoKSxib2R5OkgoQSl9KTtjYXNlImZvciI6cmV0dXJuIHAoKSxmdW5jdGlvbigpe3YoIigiKTt2YXIgZT1udWxsO2lmKCFjKCJwdW5jIiwiOyIpJiYoZT1jKCJrZXl3b3JkIiwidmFyIik/KHAoKSxEKCEwKSk6VighMCwhMCksYygib3BlcmF0b3IiLCJpbiIpKSlyZXR1cm4gZSBpbnN0YW5jZW9mIEhlPzE8ZS5kZWZpbml0aW9ucy5sZW5ndGgmJmQoIk9ubHkgb25lIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFsbG93ZWQgaW4gZm9yLi5pbiBsb29wIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpOnooZSl8fGQoIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLi5pbiBsb29wIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpLHAoKSxmdW5jdGlvbihlKXt2YXIgdD1WKCEwKTtyZXR1cm4gdigiKSIpLG5ldyBBZSh7aW5pdDplLG9iamVjdDp0LGJvZHk6SChBKX0pfShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7digiOyIpO3ZhciB0PWMoInB1bmMiLCI7Iik/bnVsbDpWKCEwKTt2KCI7Iik7dmFyIG49YygicHVuYyIsIikiKT9udWxsOlYoITApO3JldHVybiB2KCIpIiksbmV3IEVlKHtpbml0OmUsY29uZGl0aW9uOnQsc3RlcDpuLGJvZHk6SChBKX0pfShlKX0oKTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4hZSYmbC5pbnB1dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJmQoIkluIHN0cmljdCBtb2RlIGNvZGUsIGZ1bmN0aW9ucyBjYW4gb25seSBiZSBkZWNsYXJlZCBhdCB0b3AgbGV2ZWwgb3IgaW1tZWRpYXRlbHkgd2l0aGluIGFub3RoZXIgZnVuY3Rpb24uIikscCgpLEMoVGUpO2Nhc2UiaWYiOnJldHVybiBwKCksZnVuY3Rpb24oKXt2YXIgZT13KCksdD1BKCksbj1udWxsO2MoImtleXdvcmQiLCJlbHNlIikmJihwKCksbj1BKCkpO3JldHVybiBuZXcgVWUoe2NvbmRpdGlvbjplLGJvZHk6dCxhbHRlcm5hdGl2ZTpufSl9KCk7Y2FzZSJyZXR1cm4iOjAhPWwuaW5fZnVuY3Rpb258fHUuYmFyZV9yZXR1cm5zfHxkKCIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uIikscCgpO3ZhciBhPW51bGw7cmV0dXJuIGMoInB1bmMiLCI7Iik/cCgpOnkoKXx8KGE9VighMCksXygpKSxuZXcgUmUoe3ZhbHVlOmF9KTtjYXNlInN3aXRjaCI6cmV0dXJuIHAoKSxuZXcgTWUoe2V4cHJlc3Npb246dygpLGJvZHk6SChTKX0pO2Nhc2UidGhyb3ciOnAoKSxiKGwudG9rZW4pJiZkKCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgJ3Rocm93JyIpO2E9VighMCk7cmV0dXJuIF8oKSxuZXcgSyh7dmFsdWU6YX0pO2Nhc2UidHJ5IjpyZXR1cm4gcCgpLGZ1bmN0aW9uKCl7dmFyIGU9TygpLHQ9bnVsbCxuPW51bGw7aWYoYygia2V5d29yZCIsImNhdGNoIikpe3ZhciByPWwudG9rZW47cCgpLHYoIigiKTt2YXIgaT1VKGR0KTt2KCIpIiksdD1uZXcgemUoe3N0YXJ0OnIsYXJnbmFtZTppLGJvZHk6TygpLGVuZDpoKCl9KX1pZihjKCJrZXl3b3JkIiwiZmluYWxseSIpKXt2YXIgcj1sLnRva2VuO3AoKSxuPW5ldyBqZSh7c3RhcnQ6cixib2R5Ok8oKSxlbmQ6aCgpfSl9dHx8bnx8ZCgiTWlzc2luZyBjYXRjaC9maW5hbGx5IGJsb2NrcyIpO3JldHVybiBuZXcgSWUoe2JvZHk6ZSxiY2F0Y2g6dCxiZmluYWxseTpufSl9KCk7Y2FzZSJ2YXIiOnAoKTt2YXIgcz1EKCk7cmV0dXJuIF8oKSxzO2Nhc2Uid2l0aCI6cmV0dXJuIGwuaW5wdXQuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiZkKCJTdHJpY3QgbW9kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCIpLHAoKSxuZXcgeGUoe2V4cHJlc3Npb246dygpLGJvZHk6QSgpfSl9fW0oKX0pO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIG5ldyBoZSh7Ym9keTooZT1WKCEwKSxfKCksZSl9KX1mdW5jdGlvbiBrKGUpe3ZhciB0LG49bnVsbDt5KCl8fChuPVUoSiwhMCkpLG51bGwhPW4/KCh0PUcoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09bi5uYW1lfSxsLmxhYmVscykpfHxkKCJVbmRlZmluZWQgbGFiZWwgIituLm5hbWUpLG4udGhlZGVmPXQpOjA9PWwuaW5fbG9vcCYmZChlLlRZUEUrIiBub3QgaW5zaWRlIGEgbG9vcCBvciBzd2l0Y2giKSxfKCk7dmFyIHI9bmV3IGUoe2xhYmVsOm59KTtyZXR1cm4gdCYmdC5yZWZlcmVuY2VzLnB1c2gocikscn12YXIgQz1mdW5jdGlvbihlKXt2YXIgdD1lPT09VGUsbj1jKCJuYW1lIik/VSh0P3B0Omh0KTpudWxsO3QmJiFuJiZnKCJuYW1lIiksIW58fGU9PT1TZXx8biBpbnN0YW5jZW9mIGx0fHxtKGgoKSksdigiKCIpO2Zvcih2YXIgcj1bXSxpPSEwOyFjKCJwdW5jIiwiKSIpOylpP2k9ITE6digiLCIpLHIucHVzaChVKGZ0KSk7cCgpO3ZhciBvPWwuaW5fbG9vcCxhPWwubGFiZWxzOysrbC5pbl9mdW5jdGlvbixsLmluX2RpcmVjdGl2ZXM9ITAsbC5pbnB1dC5wdXNoX2RpcmVjdGl2ZXNfc3RhY2soKSxsLmluX2xvb3A9MCxsLmxhYmVscz1bXTt2YXIgcz1PKCEwKTtyZXR1cm4gbC5pbnB1dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJihuJiZxKG4pLHIuZm9yRWFjaChxKSksbC5pbnB1dC5wb3BfZGlyZWN0aXZlc19zdGFjaygpLC0tbC5pbl9mdW5jdGlvbixsLmluX2xvb3A9byxsLmxhYmVscz1hLG5ldyBlKHtuYW1lOm4sYXJnbmFtZXM6cixib2R5OnN9KX07ZnVuY3Rpb24gTyhlKXt2KCJ7Iik7Zm9yKHZhciB0PVtdOyFjKCJwdW5jIiwifSIpOyljKCJlb2YiKSYmZygicHVuYyIsIn0iKSx0LnB1c2goQShlKSk7cmV0dXJuIHAoKSx0fWZ1bmN0aW9uIFMoKXt2KCJ7Iik7Zm9yKHZhciBlLHQ9W10sbj1udWxsLHI9bnVsbDshYygicHVuYyIsIn0iKTspYygiZW9mIikmJmcoInB1bmMiLCJ9IiksYygia2V5d29yZCIsImNhc2UiKT8ociYmKHIuZW5kPWgoKSksbj1bXSxyPW5ldyBQZSh7c3RhcnQ6KGU9bC50b2tlbixwKCksZSksZXhwcmVzc2lvbjpWKCEwKSxib2R5Om59KSx0LnB1c2gociksdigiOiIpKTpjKCJrZXl3b3JkIiwiZGVmYXVsdCIpPyhyJiYoci5lbmQ9aCgpKSxuPVtdLHI9bmV3IE5lKHtzdGFydDooZT1sLnRva2VuLHAoKSx2KCI6IiksZSksYm9keTpufSksdC5wdXNoKHIpKToobnx8bSgpLG4ucHVzaChBKCkpKTtyZXR1cm4gciYmKHIuZW5kPWgoKSkscCgpLHR9dmFyIEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIZSh7c3RhcnQ6aCgpLGRlZmluaXRpb25zOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTt0LnB1c2gobmV3ICRlKHtzdGFydDpsLnRva2VuLG5hbWU6VShjdCksdmFsdWU6Yygib3BlcmF0b3IiLCI9Iik/KHAoKSxWKCExLGUpKTpudWxsLGVuZDpoKCl9KSksYygicHVuYyIsIiwiKTspcCgpO3JldHVybiB0fShlKSxlbmQ6aCgpfSl9O3ZhciBzPWZ1bmN0aW9uKGUpe2lmKGMoIm9wZXJhdG9yIiwibmV3IikpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWwudG9rZW47Zygib3BlcmF0b3IiLCJuZXciKTt2YXIgbixyPXMoITEpO249YygicHVuYyIsIigiKT8ocCgpLFQoIikiKSk6W107dmFyIGk9bmV3IEdlKHtzdGFydDp0LGV4cHJlc3Npb246cixhcmdzOm4sZW5kOmgoKX0pO3JldHVybiBNKGkpLE4oaSxlKX0oZSk7dmFyIHQ9bC50b2tlbjtpZihjKCJwdW5jIikpe3N3aXRjaCh0LnZhbHVlKXtjYXNlIigiOnAoKTt2YXIgbj1WKCEwKSxyPXQuY29tbWVudHNfYmVmb3JlLmxlbmd0aDtpZihbXS51bnNoaWZ0LmFwcGx5KG4uc3RhcnQuY29tbWVudHNfYmVmb3JlLHQuY29tbWVudHNfYmVmb3JlKSx0LmNvbW1lbnRzX2JlZm9yZT1uLnN0YXJ0LmNvbW1lbnRzX2JlZm9yZSwwPT0odC5jb21tZW50c19iZWZvcmVfbGVuZ3RoPXIpJiYwPHQuY29tbWVudHNfYmVmb3JlLmxlbmd0aCl7dmFyIGk9dC5jb21tZW50c19iZWZvcmVbMF07aS5ubGJ8fChpLm5sYj10Lm5sYix0Lm5sYj0hMSl9dC5jb21tZW50c19hZnRlcj1uLnN0YXJ0LmNvbW1lbnRzX2FmdGVyLG4uc3RhcnQ9dCx2KCIpIik7dmFyIG89aCgpO3JldHVybiBvLmNvbW1lbnRzX2JlZm9yZT1uLmVuZC5jb21tZW50c19iZWZvcmUsW10ucHVzaC5hcHBseShuLmVuZC5jb21tZW50c19hZnRlcixvLmNvbW1lbnRzX2FmdGVyKSxvLmNvbW1lbnRzX2FmdGVyPW4uZW5kLmNvbW1lbnRzX2FmdGVyLG4uZW5kPW8sbiBpbnN0YW5jZW9mIEtlJiZNKG4pLE4obixlKTtjYXNlIlsiOnJldHVybiBOKEIoKSxlKTtjYXNlInsiOnJldHVybiBOKFIoKSxlKX1tKCl9aWYoYygia2V5d29yZCIsImZ1bmN0aW9uIikpe3AoKTt2YXIgYT1DKERlKTtyZXR1cm4gYS5zdGFydD10LGEuZW5kPWgoKSxOKGEsZSl9aWYoR3RbbC50b2tlbi50eXBlXSlyZXR1cm4gTihmdW5jdGlvbigpe3ZhciBlLHQ9bC50b2tlbjtzd2l0Y2godC50eXBlKXtjYXNlIm5hbWUiOmU9RihtdCk7YnJlYWs7Y2FzZSJudW0iOmU9bmV3IHl0KHtzdGFydDp0LGVuZDp0LHZhbHVlOnQudmFsdWV9KTticmVhaztjYXNlInN0cmluZyI6ZT1uZXcgYnQoe3N0YXJ0OnQsZW5kOnQsdmFsdWU6dC52YWx1ZSxxdW90ZTp0LnF1b3RlfSk7YnJlYWs7Y2FzZSJyZWdleHAiOmU9bmV3IF90KHtzdGFydDp0LGVuZDp0LHZhbHVlOnQudmFsdWV9KTticmVhaztjYXNlImF0b20iOnN3aXRjaCh0LnZhbHVlKXtjYXNlImZhbHNlIjplPW5ldyBPdCh7c3RhcnQ6dCxlbmQ6dH0pO2JyZWFrO2Nhc2UidHJ1ZSI6ZT1uZXcgU3Qoe3N0YXJ0OnQsZW5kOnR9KTticmVhaztjYXNlIm51bGwiOmU9bmV3IHd0KHtzdGFydDp0LGVuZDp0fSl9fXJldHVybiBwKCksZX0oKSxlKTttKCl9O2Z1bmN0aW9uIFQoZSx0LG4pe2Zvcih2YXIgcj0hMCxpPVtdOyFjKCJwdW5jIixlKSYmKHI/cj0hMTp2KCIsIiksIXR8fCFjKCJwdW5jIixlKSk7KWMoInB1bmMiLCIsIikmJm4/aS5wdXNoKG5ldyB4dCh7c3RhcnQ6bC50b2tlbixlbmQ6bC50b2tlbn0pKTppLnB1c2goVighMSkpO3JldHVybiBwKCksaX12YXIgQj10KGZ1bmN0aW9uKCl7cmV0dXJuIHYoIlsiKSxuZXcgaXQoe2VsZW1lbnRzOlQoIl0iLCF1LnN0cmljdCwhMCl9KX0pLGE9dChmdW5jdGlvbigpe3JldHVybiBDKFNlKX0pLFI9dChmdW5jdGlvbigpe3YoInsiKTtmb3IodmFyIGU9ITAsdD1bXTshYygicHVuYyIsIn0iKSYmKGU/ZT0hMTp2KCIsIiksdS5zdHJpY3R8fCFjKCJwdW5jIiwifSIpKTspe3ZhciBuPWwudG9rZW4scj1uLnR5cGUsaT1MKCk7aWYoIm5hbWUiPT1yJiYhYygicHVuYyIsIjoiKSl7dmFyIG89bmV3IFEoe3N0YXJ0OmwudG9rZW4sbmFtZToiIitMKCksZW5kOmgoKX0pO2lmKCJnZXQiPT1pKXt0LnB1c2gobmV3IFcoe3N0YXJ0Om4sa2V5Om8sdmFsdWU6YSgpLGVuZDpoKCl9KSk7Y29udGludWV9aWYoInNldCI9PWkpe3QucHVzaChuZXcgWSh7c3RhcnQ6bixrZXk6byx2YWx1ZTphKCksZW5kOmgoKX0pKTtjb250aW51ZX19digiOiIpLHQucHVzaChuZXcgc3Qoe3N0YXJ0Om4scXVvdGU6bi5xdW90ZSxrZXk6IiIraSx2YWx1ZTpWKCExKSxlbmQ6aCgpfSkpfXJldHVybiBwKCksbmV3IG90KHtwcm9wZXJ0aWVzOnR9KX0pO2Z1bmN0aW9uIEwoKXt2YXIgZT1sLnRva2VuO3N3aXRjaChlLnR5cGUpe2Nhc2Uib3BlcmF0b3IiOlhbZS52YWx1ZV18fG0oKTtjYXNlIm51bSI6Y2FzZSJzdHJpbmciOmNhc2UibmFtZSI6Y2FzZSJrZXl3b3JkIjpjYXNlImF0b20iOnJldHVybiBwKCksZS52YWx1ZTtkZWZhdWx0Om0oKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1sLnRva2VuLnZhbHVlO3JldHVybiBuZXcoInRoaXMiPT10P2d0OmUpKHtuYW1lOlN0cmluZyh0KSxzdGFydDpsLnRva2VuLGVuZDpsLnRva2VufSl9ZnVuY3Rpb24gcShlKXsiYXJndW1lbnRzIiE9ZS5uYW1lJiYiZXZhbCIhPWUubmFtZXx8ZCgiVW5leHBlY3RlZCAiK2UubmFtZSsiIGluIHN0cmljdCBtb2RlIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpfWZ1bmN0aW9uIFUoZSx0KXtpZighYygibmFtZSIpKXJldHVybiB0fHxkKCJOYW1lIGV4cGVjdGVkIiksbnVsbDt2YXIgbj1GKGUpO3JldHVybiBsLmlucHV0Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmbiBpbnN0YW5jZW9mIGx0JiZxKG4pLHAoKSxufWZ1bmN0aW9uIE0oZSl7Zm9yKHZhciB0PWUuc3RhcnQsbj10LmNvbW1lbnRzX2JlZm9yZSxyPXVlKHQsImNvbW1lbnRzX2JlZm9yZV9sZW5ndGgiKT90LmNvbW1lbnRzX2JlZm9yZV9sZW5ndGg6bi5sZW5ndGg7MDw9LS1yOyl7dmFyIGk9bltyXTtpZigvW0AjXV9fUFVSRV9fLy50ZXN0KGkudmFsdWUpKXtlLnB1cmU9aTticmVha319fXZhciBOPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zdGFydDtpZihjKCJwdW5jIiwiLiIpKXJldHVybiBwKCksTihuZXcgUWUoe3N0YXJ0Om4sZXhwcmVzc2lvbjplLHByb3BlcnR5OmZ1bmN0aW9uKCl7YygibmFtZSIpfHxnKCJuYW1lIik7dmFyIGU9bC50b2tlbi52YWx1ZTtyZXR1cm4gcCgpLGV9KCksZW5kOmgoKX0pLHQpO2lmKGMoInB1bmMiLCJbIikpe3AoKTt2YXIgcj1WKCEwKTtyZXR1cm4gdigiXSIpLE4obmV3IFplKHtzdGFydDpuLGV4cHJlc3Npb246ZSxwcm9wZXJ0eTpyLGVuZDpoKCl9KSx0KX1pZih0JiZjKCJwdW5jIiwiKCIpKXtwKCk7dmFyIGk9bmV3IEtlKHtzdGFydDpuLGV4cHJlc3Npb246ZSxhcmdzOlQoIikiKSxlbmQ6aCgpfSk7cmV0dXJuIE0oaSksTihpLCEwKX1yZXR1cm4gZX0sUD1mdW5jdGlvbihlKXt2YXIgdD1sLnRva2VuO2lmKGMoIm9wZXJhdG9yIikmJlZ0W3QudmFsdWVdKXtwKCksRSgpO3ZhciBuPWkoWGUsdCxQKGUpKTtyZXR1cm4gbi5zdGFydD10LG4uZW5kPWgoKSxufWZvcih2YXIgcj1zKGUpO2MoIm9wZXJhdG9yIikmJkh0W2wudG9rZW4udmFsdWVdJiYhYihsLnRva2VuKTspKHI9aShldCxsLnRva2VuLHIpKS5zdGFydD10LHIuZW5kPWwudG9rZW4scCgpO3JldHVybiByfTtmdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj10LnZhbHVlO3N3aXRjaChyKXtjYXNlIisrIjpjYXNlIi0tIjp6KG4pfHxkKCJJbnZhbGlkIHVzZSBvZiAiK3IrIiBvcGVyYXRvciIsdC5saW5lLHQuY29sLHQucG9zKTticmVhaztjYXNlImRlbGV0ZSI6biBpbnN0YW5jZW9mIG10JiZsLmlucHV0Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmZCgiQ2FsbGluZyBkZWxldGUgb24gZXhwcmVzc2lvbiBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIsbi5zdGFydC5saW5lLG4uc3RhcnQuY29sLG4uc3RhcnQucG9zKX1yZXR1cm4gbmV3IGUoe29wZXJhdG9yOnIsZXhwcmVzc2lvbjpufSl9dmFyIEk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWMoIm9wZXJhdG9yIik/bC50b2tlbi52YWx1ZTpudWxsOyJpbiI9PXImJm4mJihyPW51bGwpO3ZhciBpPW51bGwhPXI/S3Rbcl06bnVsbDtpZihudWxsIT1pJiZ0PGkpe3AoKTt2YXIgbz1JKFAoITApLGksbik7cmV0dXJuIEkobmV3IHR0KHtzdGFydDplLnN0YXJ0LGxlZnQ6ZSxvcGVyYXRvcjpyLHJpZ2h0Om8sZW5kOm8uZW5kfSksdCxuKX1yZXR1cm4gZX07dmFyIG89ZnVuY3Rpb24oZSl7dmFyIHQ9bC50b2tlbixuPWZ1bmN0aW9uKGUpe3JldHVybiBJKFAoITApLDAsZSl9KGUpO2lmKGMoIm9wZXJhdG9yIiwiPyIpKXtwKCk7dmFyIHI9VighMSk7cmV0dXJuIHYoIjoiKSxuZXcgbnQoe3N0YXJ0OnQsY29uZGl0aW9uOm4sY29uc2VxdWVudDpyLGFsdGVybmF0aXZlOlYoITEsZSksZW5kOmgoKX0pfXJldHVybiBufTtmdW5jdGlvbiB6KGUpe3JldHVybiBlIGluc3RhbmNlb2YgV2V8fGUgaW5zdGFuY2VvZiBtdH12YXIgaj1mdW5jdGlvbihlKXt2YXIgdD1sLnRva2VuLG49byhlKSxyPWwudG9rZW4udmFsdWU7aWYoYygib3BlcmF0b3IiKSYmJHRbcl0pe2lmKHoobikpcmV0dXJuIHAoKSxuZXcgcnQoe3N0YXJ0OnQsbGVmdDpuLG9wZXJhdG9yOnIscmlnaHQ6aihlKSxlbmQ6aCgpfSk7ZCgiSW52YWxpZCBhc3NpZ25tZW50Iil9cmV0dXJuIG59LFY9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bC50b2tlbixyPVtdO3IucHVzaChqKHQpKSxlJiZjKCJwdW5jIiwiLCIpOylwKCksZT0hMDtyZXR1cm4gMT09ci5sZW5ndGg/clswXTpuZXcgWWUoe3N0YXJ0Om4sZXhwcmVzc2lvbnM6cixlbmQ6ZigpfSl9O2Z1bmN0aW9uIEgoZSl7KytsLmluX2xvb3A7dmFyIHQ9ZSgpO3JldHVybi0tbC5pbl9sb29wLHR9cmV0dXJuIHUuZXhwcmVzc2lvbj8oRSgpLFYoITApKTpmdW5jdGlvbigpe3ZhciBlPWwudG9rZW4sdD1bXTtmb3IobC5pbnB1dC5wdXNoX2RpcmVjdGl2ZXNfc3RhY2soKTshYygiZW9mIik7KXQucHVzaChBKCEwKSk7bC5pbnB1dC5wb3BfZGlyZWN0aXZlc19zdGFjaygpO3ZhciBuPWgoKSxyPXUudG9wbGV2ZWw7cmV0dXJuIHI/KHIuYm9keT1yLmJvZHkuY29uY2F0KHQpLHIuZW5kPW4pOnI9bmV3IENlKHtzdGFydDplLGJvZHk6dCxlbmQ6bn0pLHJ9KCl9ZnVuY3Rpb24gV3QoZSx0KXtEdC5jYWxsKHRoaXMpLHRoaXMuYmVmb3JlPWUsdGhpcy5hZnRlcj10fWZ1bmN0aW9uIHMoZSx0LG4pe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5vcmlnPVt0XSx0aGlzLmluaXQ9bix0aGlzLmVsaW1pbmF0ZWQ9MCx0aGlzLnNjb3BlPWUsdGhpcy5yZWZlcmVuY2VzPVtdLHRoaXMucmVwbGFjZWQ9MCx0aGlzLmdsb2JhbD0hMSx0aGlzLm1hbmdsZWRfbmFtZT1udWxsLHRoaXMudW5kZWNsYXJlZD0hMSx0aGlzLmlkPXMubmV4dF9pZCsrfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1lLm5hbWVzX2luX3VzZTtpZighbil7ZS5uYW1lc19pbl91c2U9bj1PYmplY3QuY3JlYXRlKGUubWFuZ2xlZF9uYW1lc3x8bnVsbCksZS5jbmFtZV9ob2xlcz1bXTt2YXIgcj10LmNhY2hlJiZ0LmNhY2hlLnByb3BzO2UuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtlLnVubWFuZ2xlYWJsZSh0KSYmKG5bZS5uYW1lXT0hMCksZS5nbG9iYWwmJnImJnIuaGFzKGUubmFtZSkmJihuW3IuZ2V0KGUubmFtZSldPSEwKX0pfXJldHVybiBufWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGU9JChlLHtldmFsOiExLGllODohMSxrZWVwX2ZuYW1lczohMSxyZXNlcnZlZDpbXSx0b3BsZXZlbDohMX0pLEFycmF5LmlzQXJyYXkoZS5yZXNlcnZlZCl8fChlLnJlc2VydmVkPVtdKSxnKGUucmVzZXJ2ZWQsImFyZ3VtZW50cyIpLGUucmVzZXJ2ZWQuaGFzPWFlKGUucmVzZXJ2ZWQpLGV9V3QucHJvdG90eXBlPW5ldyBEdCxmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIG9lKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNmb3JtKHQsITApfSl9ZShsZSxuZSksZSh2ZSxmdW5jdGlvbihlLHQpe2UubGFiZWw9ZS5sYWJlbC50cmFuc2Zvcm0odCksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKGhlLGZ1bmN0aW9uKGUsdCl7ZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKGRlLGZ1bmN0aW9uKGUsdCl7ZS5ib2R5PW4oZS5ib2R5LHQpfSksZShfZSxmdW5jdGlvbihlLHQpe2UuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpLGUuY29uZGl0aW9uPWUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KX0pLGUod2UsZnVuY3Rpb24oZSx0KXtlLmNvbmRpdGlvbj1lLmNvbmRpdGlvbi50cmFuc2Zvcm0odCksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKEVlLGZ1bmN0aW9uKGUsdCl7ZS5pbml0JiYoZS5pbml0PWUuaW5pdC50cmFuc2Zvcm0odCkpLGUuY29uZGl0aW9uJiYoZS5jb25kaXRpb249ZS5jb25kaXRpb24udHJhbnNmb3JtKHQpKSxlLnN0ZXAmJihlLnN0ZXA9ZS5zdGVwLnRyYW5zZm9ybSh0KSksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKEFlLGZ1bmN0aW9uKGUsdCl7ZS5pbml0PWUuaW5pdC50cmFuc2Zvcm0odCksZS5vYmplY3Q9ZS5vYmplY3QudHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpfSksZSh4ZSxmdW5jdGlvbihlLHQpe2UuZXhwcmVzc2lvbj1lLmV4cHJlc3Npb24udHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpfSksZShCZSxmdW5jdGlvbihlLHQpe2UudmFsdWUmJihlLnZhbHVlPWUudmFsdWUudHJhbnNmb3JtKHQpKX0pLGUoTGUsZnVuY3Rpb24oZSx0KXtlLmxhYmVsJiYoZS5sYWJlbD1lLmxhYmVsLnRyYW5zZm9ybSh0KSl9KSxlKFVlLGZ1bmN0aW9uKGUsdCl7ZS5jb25kaXRpb249ZS5jb25kaXRpb24udHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpLGUuYWx0ZXJuYXRpdmUmJihlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKHQpKX0pLGUoTWUsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KSxlLmJvZHk9bihlLmJvZHksdCl9KSxlKFBlLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCksZS5ib2R5PW4oZS5ib2R5LHQpfSksZShJZSxmdW5jdGlvbihlLHQpe2UuYm9keT1uKGUuYm9keSx0KSxlLmJjYXRjaCYmKGUuYmNhdGNoPWUuYmNhdGNoLnRyYW5zZm9ybSh0KSksZS5iZmluYWxseSYmKGUuYmZpbmFsbHk9ZS5iZmluYWxseS50cmFuc2Zvcm0odCkpfSksZSh6ZSxmdW5jdGlvbihlLHQpe2UuYXJnbmFtZT1lLmFyZ25hbWUudHJhbnNmb3JtKHQpLGUuYm9keT1uKGUuYm9keSx0KX0pLGUoVmUsZnVuY3Rpb24oZSx0KXtlLmRlZmluaXRpb25zPW4oZS5kZWZpbml0aW9ucyx0KX0pLGUoJGUsZnVuY3Rpb24oZSx0KXtlLm5hbWU9ZS5uYW1lLnRyYW5zZm9ybSh0KSxlLnZhbHVlJiYoZS52YWx1ZT1lLnZhbHVlLnRyYW5zZm9ybSh0KSl9KSxlKE9lLGZ1bmN0aW9uKGUsdCl7ZS5uYW1lJiYoZS5uYW1lPWUubmFtZS50cmFuc2Zvcm0odCkpLGUuYXJnbmFtZXM9bihlLmFyZ25hbWVzLHQpLGUuYm9keT1uKGUuYm9keSx0KX0pLGUoS2UsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KSxlLmFyZ3M9bihlLmFyZ3MsdCl9KSxlKFllLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9ucz1uKGUuZXhwcmVzc2lvbnMsdCl9KSxlKFFlLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCl9KSxlKFplLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCksZS5wcm9wZXJ0eT1lLnByb3BlcnR5LnRyYW5zZm9ybSh0KX0pLGUoSmUsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KX0pLGUodHQsZnVuY3Rpb24oZSx0KXtlLmxlZnQ9ZS5sZWZ0LnRyYW5zZm9ybSh0KSxlLnJpZ2h0PWUucmlnaHQudHJhbnNmb3JtKHQpfSksZShudCxmdW5jdGlvbihlLHQpe2UuY29uZGl0aW9uPWUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KSxlLmNvbnNlcXVlbnQ9ZS5jb25zZXF1ZW50LnRyYW5zZm9ybSh0KSxlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKHQpfSksZShpdCxmdW5jdGlvbihlLHQpe2UuZWxlbWVudHM9bihlLmVsZW1lbnRzLHQpfSksZShvdCxmdW5jdGlvbihlLHQpe2UucHJvcGVydGllcz1uKGUucHJvcGVydGllcyx0KX0pLGUoYXQsZnVuY3Rpb24oZSx0KXtlLnZhbHVlPWUudmFsdWUudHJhbnNmb3JtKHQpfSl9KGZ1bmN0aW9uKGUsaSl7ZS5ERUZNRVRIT0QoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBlLnB1c2godGhpcyksZS5iZWZvcmUmJihuPWUuYmVmb3JlKHRoaXMsaSx0KSksdm9pZCAwPT09biYmKGkobj10aGlzLGUpLGUuYWZ0ZXImJnZvaWQgMCE9PShyPWUuYWZ0ZXIobix0KSkmJihuPXIpKSxlLnBvcCgpLG59KX0pLHMubmV4dF9pZD0xLHMucHJvdG90eXBlPXt1bm1hbmdsZWFibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fChlPXt9KSx0aGlzLmdsb2JhbCYmIWUudG9wbGV2ZWx8fHRoaXMudW5kZWNsYXJlZHx8IWUuZXZhbCYmdGhpcy5zY29wZS5waW5uZWQoKXx8ZS5rZWVwX2ZuYW1lcyYmKHRoaXMub3JpZ1swXWluc3RhbmNlb2YgaHR8fHRoaXMub3JpZ1swXWluc3RhbmNlb2YgcHQpfSxtYW5nbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYWNoZSYmZS5jYWNoZS5wcm9wcztpZih0aGlzLmdsb2JhbCYmdCYmdC5oYXModGhpcy5uYW1lKSl0aGlzLm1hbmdsZWRfbmFtZT10LmdldCh0aGlzLm5hbWUpO2Vsc2UgaWYoIXRoaXMubWFuZ2xlZF9uYW1lJiYhdGhpcy51bm1hbmdsZWFibGUoZSkpe3ZhciBuOyhuPXRoaXMucmVkZWZpbmVkKCkpP3RoaXMubWFuZ2xlZF9uYW1lPW4ubWFuZ2xlZF9uYW1lfHxuLm5hbWU6dGhpcy5tYW5nbGVkX25hbWU9ZnVuY3Rpb24oZSxyLHQpe3ZhciBuLGk9YyhlLHIpLG89ZS5jbmFtZV9ob2xlcyxhPU9iamVjdC5jcmVhdGUobnVsbCkscz1bZV07dC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY29wZTtkb3tpZighKHMuaW5kZXhPZih0KTwwKSlicmVhaztmb3IodmFyIG4gaW4gYyh0LHIpKWFbbl09ITA7cy5wdXNoKHQpfXdoaWxlKHQ9dC5wYXJlbnRfc2NvcGUpfSk7Zm9yKHZhciB1PTAsbD1vLmxlbmd0aDt1PGw7dSsrKWlmKG49bShvW3VdKSwhYVtuXSlyZXR1cm4gby5zcGxpY2UodSwxKSxlLm5hbWVzX2luX3VzZVtuXT0hMCxuO2Zvcig7OylpZihuPW0oKytlLmNuYW1lKSwhaVtuXSYmZihuKSYmIXIucmVzZXJ2ZWQuaGFzW25dKXtpZighYVtuXSlicmVhaztvLnB1c2goZS5jbmFtZSl9cmV0dXJuIGUubmFtZXNfaW5fdXNlW25dPSEwLG59KHRoaXMuc2NvcGUsZSx0aGlzKSx0aGlzLmdsb2JhbCYmdCYmdC5zZXQodGhpcy5uYW1lLHRoaXMubWFuZ2xlZF9uYW1lKX19LHJlZGVmaW5lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZnVuJiZ0aGlzLmRlZnVuLnZhcmlhYmxlcy5nZXQodGhpcy5uYW1lKX19LENlLkRFRk1FVEhPRCgiZmlndXJlX291dF9zY29wZSIsZnVuY3Rpb24oYSl7YT0kKGEse2NhY2hlOm51bGwsaWU4OiExfSk7dmFyIG89dGhpcyxzPW8ucGFyZW50X3Njb3BlPW51bGwsdT1udWxsLGw9bmV3IER0KGZ1bmN0aW9uKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHplKXt2YXIgbj1zO3JldHVybihzPW5ldyBrZShlKSkuaW5pdF9zY29wZV92YXJzKG4pLHQoKSxzPW4sITB9aWYoZSBpbnN0YW5jZW9mIGtlKXtlLmluaXRfc2NvcGVfdmFycyhzKTtuPXM7dmFyIHI9dTtyZXR1cm4gdT1zPWUsdCgpLHM9bix1PXIsITB9aWYoZSBpbnN0YW5jZW9mIHhlKWZvcih2YXIgaT1zO2k7aT1pLnBhcmVudF9zY29wZSlpLnVzZXNfd2l0aD0hMDtlbHNlIGlmKGUgaW5zdGFuY2VvZiB1dCYmKGUuc2NvcGU9cyksZSBpbnN0YW5jZW9mIFomJigoZS50aGVkZWY9ZSkucmVmZXJlbmNlcz1bXSksZSBpbnN0YW5jZW9mIHB0KShlLnNjb3BlPXUucGFyZW50X3Njb3BlLnJlc29sdmUoKSkuZGVmX2Z1bmN0aW9uKGUsdSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgaHQpe3ZhciBvPXUuZGVmX2Z1bmN0aW9uKGUsImFyZ3VtZW50cyI9PWUubmFtZT92b2lkIDA6dSk7YS5pZTgmJihvLmRlZnVuPXUucGFyZW50X3Njb3BlLnJlc29sdmUoKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgY3Qpe2lmKHUuZGVmX3ZhcmlhYmxlKGUsIlN5bWJvbFZhciI9PWUuVFlQRT9udWxsOnZvaWQgMCksdSE9PXMpe2UubWFya19lbmNsb3NlZChhKTtvPXMuZmluZF92YXJpYWJsZShlKTtlLnRoZWRlZiE9PW8mJihlLnRoZWRlZj1vKSxlLnJlZmVyZW5jZShhKX19ZWxzZSBlIGluc3RhbmNlb2YgZHQmJihzLmRlZl92YXJpYWJsZShlKS5kZWZ1bj11KX0pO28ud2FsayhsKSxvLmdsb2JhbHM9bmV3IEw7bD1uZXcgRHQoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIExlKXJldHVybiBlLmxhYmVsJiZlLmxhYmVsLnRoZWRlZi5yZWZlcmVuY2VzLnB1c2goZSksITA7aWYoZSBpbnN0YW5jZW9mIG10KXt2YXIgdD1lLm5hbWU7aWYoImV2YWwiPT10JiZsLnBhcmVudCgpaW5zdGFuY2VvZiBLZSlmb3IodmFyIG49ZS5zY29wZTtuJiYhbi51c2VzX2V2YWw7bj1uLnBhcmVudF9zY29wZSluLnVzZXNfZXZhbD0hMDt2YXIgcj1lLnNjb3BlLmZpbmRfdmFyaWFibGUodCk7cmV0dXJuIHI/ci5zY29wZSBpbnN0YW5jZW9mIE9lJiYiYXJndW1lbnRzIj09dCYmKHIuc2NvcGUudXNlc19hcmd1bWVudHM9ITApOnI9by5kZWZfZ2xvYmFsKGUpLGUudGhlZGVmPXIsZS5yZWZlcmVuY2UoYSksITB9aWYoZSBpbnN0YW5jZW9mIGR0KXt2YXIgaT1lLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTtpZihpKWZvcihuPWUuc2NvcGU7biYmKGcobi5lbmNsb3NlZCxpKSxuIT09aS5zY29wZSk7bj1uLnBhcmVudF9zY29wZSk7cmV0dXJuITB9fSk7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWUubmFtZSxyPWUudGhlZGVmLGk9dC5maW5kX3ZhcmlhYmxlKG4pfHxvLmdsb2JhbHMuZ2V0KG4pfHx0LmRlZl92YXJpYWJsZShlKTtyLm9yaWcuY29uY2F0KHIucmVmZXJlbmNlcykuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRoZWRlZj1pLGUucmVmZXJlbmNlKGEpfSl9by53YWxrKGwpLGEuaWU4JiZvLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBkdClyZXR1cm4gbihlLGUudGhlZGVmLmRlZnVuKSwhMDtpZihlIGluc3RhbmNlb2YgaHQpe3ZhciB0PWUudGhlZGVmO3JldHVybiBuKGUsZS5zY29wZS5wYXJlbnRfc2NvcGUpLGUudGhlZGVmLmluaXQ9dC5pbml0LCEwfX0pKX0pLENlLkRFRk1FVEhPRCgiZGVmX2dsb2JhbCIsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nbG9iYWxzLG49ZS5uYW1lO2lmKHQuaGFzKG4pKXJldHVybiB0LmdldChuKTt2YXIgcj1uZXcgcyh0aGlzLGUpO3JldHVybiByLnVuZGVjbGFyZWQ9ITAsci5nbG9iYWw9ITAsdC5zZXQobixyKSxyfSksa2UuREVGTUVUSE9EKCJpbml0X3Njb3BlX3ZhcnMiLGZ1bmN0aW9uKGUpe3RoaXMudmFyaWFibGVzPW5ldyBMLHRoaXMuZnVuY3Rpb25zPW5ldyBMLHRoaXMudXNlc193aXRoPSExLHRoaXMudXNlc19ldmFsPSExLHRoaXMucGFyZW50X3Njb3BlPWUsdGhpcy5lbmNsb3NlZD1bXSx0aGlzLmNuYW1lPS0xfSksT2UuREVGTUVUSE9EKCJpbml0X3Njb3BlX3ZhcnMiLGZ1bmN0aW9uKCl7a2UucHJvdG90eXBlLmluaXRfc2NvcGVfdmFycy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy51c2VzX2FyZ3VtZW50cz0hMSx0aGlzLmRlZl92YXJpYWJsZShuZXcgZnQoe25hbWU6ImFyZ3VtZW50cyIsc3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9KSl9KSx1dC5ERUZNRVRIT0QoIm1hcmtfZW5jbG9zZWQiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmRlZmluaXRpb24oKSxuPXRoaXMuc2NvcGU7biYmKGcobi5lbmNsb3NlZCx0KSxlLmtlZXBfZm5hbWVzJiZuLmZ1bmN0aW9ucy5lYWNoKGZ1bmN0aW9uKGUpe2codC5zY29wZS5lbmNsb3NlZCxlKX0pLG4hPT10LnNjb3BlKTtuPW4ucGFyZW50X3Njb3BlKTt9KSx1dC5ERUZNRVRIT0QoInJlZmVyZW5jZSIsZnVuY3Rpb24oZSl7dGhpcy5kZWZpbml0aW9uKCkucmVmZXJlbmNlcy5wdXNoKHRoaXMpLHRoaXMubWFya19lbmNsb3NlZChlKX0pLGtlLkRFRk1FVEhPRCgiZmluZF92YXJpYWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB1dCYmKGU9ZS5uYW1lKSx0aGlzLnZhcmlhYmxlcy5nZXQoZSl8fHRoaXMucGFyZW50X3Njb3BlJiZ0aGlzLnBhcmVudF9zY29wZS5maW5kX3ZhcmlhYmxlKGUpfSksa2UuREVGTUVUSE9EKCJkZWZfZnVuY3Rpb24iLGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5kZWZfdmFyaWFibGUoZSx0KTtyZXR1cm4oIW4uaW5pdHx8bi5pbml0IGluc3RhbmNlb2YgVGUpJiYobi5pbml0PXQpLHRoaXMuZnVuY3Rpb25zLnNldChlLm5hbWUsbiksbn0pLGtlLkRFRk1FVEhPRCgiZGVmX3ZhcmlhYmxlIixmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMudmFyaWFibGVzLmdldChlLm5hbWUpO3JldHVybiBuPyhuLm9yaWcucHVzaChlKSxuLmluaXQmJihuLnNjb3BlIT09ZS5zY29wZXx8bi5pbml0IGluc3RhbmNlb2YgRGUpJiYobi5pbml0PXQpKToobj1uZXcgcyh0aGlzLGUsdCksdGhpcy52YXJpYWJsZXMuc2V0KGUubmFtZSxuKSxuLmdsb2JhbD0hdGhpcy5wYXJlbnRfc2NvcGUpLGUudGhlZGVmPW59KSxPZS5ERUZNRVRIT0QoInJlc29sdmUiLEQpLGtlLkRFRk1FVEhPRCgicmVzb2x2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnRfc2NvcGV9KSxDZS5ERUZNRVRIT0QoInJlc29sdmUiLEQpLHV0LkRFRk1FVEhPRCgidW5tYW5nbGVhYmxlIixmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRlZmluaXRpb24oKTtyZXR1cm4hdHx8dC51bm1hbmdsZWFibGUoZSl9KSxaLkRFRk1FVEhPRCgidW5tYW5nbGVhYmxlIixyZSksdXQuREVGTUVUSE9EKCJ1bnJlZmVyZW5jZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGVmaW5pdGlvbigpLnJlZmVyZW5jZXMubGVuZ3RoJiYhdGhpcy5zY29wZS5waW5uZWQoKX0pLHV0LkRFRk1FVEhPRCgiZGVmaW5pdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aGVkZWZ9KSx1dC5ERUZNRVRIT0QoImdsb2JhbCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZpbml0aW9uKCkuZ2xvYmFsfSksQ2UuREVGTUVUSE9EKCJtYW5nbGVfbmFtZXMiLGZ1bmN0aW9uKHMpe3M9cChzKTt2YXIgdT0tMTtpZihzLmNhY2hlJiZzLmNhY2hlLnByb3BzKXt2YXIgdD10aGlzLm1hbmdsZWRfbmFtZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtzLmNhY2hlLnByb3BzLmVhY2goZnVuY3Rpb24oZSl7dFtlXT0hMH0pfXZhciBsPVtdLGU9bmV3IER0KGZ1bmN0aW9uKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHZlKXt2YXIgbj11O3JldHVybiB0KCksdT1uLCEwfWlmKGUgaW5zdGFuY2VvZiBrZSlyZXR1cm4gdCgpLHMuY2FjaGUmJmUgaW5zdGFuY2VvZiBDZSYmZS5nbG9iYWxzLmVhY2goYyksZS52YXJpYWJsZXMuZWFjaChjKSwhMDtpZihlIGluc3RhbmNlb2YgWil7Zm9yKHZhciByOyFmKHI9bSgrK3UpKTspO3JldHVybiBlLm1hbmdsZWRfbmFtZT1yLCEwfWlmKCFzLmllOCYmZSBpbnN0YW5jZW9mIHplKXt2YXIgaT1lLmFyZ25hbWUuZGVmaW5pdGlvbigpLG89aS5yZWRlZmluZWQoKTtyZXR1cm4gbyYmKGwucHVzaChpKSxhKGUuYXJnbmFtZSksaS5yZWZlcmVuY2VzLmZvckVhY2goYSkpLHQoKSxvfHxjKGkpLCEwfWZ1bmN0aW9uIGEoZSl7ZS50aGVkZWY9byxlLnJlZmVyZW5jZShzKSxlLnRoZWRlZj1pfX0pO2Z1bmN0aW9uIGMoZSl7cy5yZXNlcnZlZC5oYXNbZS5uYW1lXXx8ZS5tYW5nbGUocyl9dGhpcy53YWxrKGUpLGwuZm9yRWFjaChjKX0pLENlLkRFRk1FVEhPRCgiZmluZF9jb2xsaWRpbmdfbmFtZXMiLGZ1bmN0aW9uKG4pe3ZhciByPW4uY2FjaGUmJm4uY2FjaGUucHJvcHMsdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBuLnJlc2VydmVkLmZvckVhY2goaSksdGhpcy5nbG9iYWxzLmVhY2gobyksdGhpcy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2Yga2UmJmUudmFyaWFibGVzLmVhY2gobyksZSBpbnN0YW5jZW9mIGR0JiZvKGUuZGVmaW5pdGlvbigpKX0pKSx0O2Z1bmN0aW9uIGkoZSl7dFtlXT0hMH1mdW5jdGlvbiBvKGUpe3ZhciB0PWUubmFtZTtpZihlLmdsb2JhbCYmciYmci5oYXModCkpdD1yLmdldCh0KTtlbHNlIGlmKCFlLnVubWFuZ2xlYWJsZShuKSlyZXR1cm47aSh0KX19KSxDZS5ERUZNRVRIT0QoImV4cGFuZF9uYW1lcyIsZnVuY3Rpb24obil7bS5yZXNldCgpLG0uc29ydCgpLG49cChuKTt2YXIgcj10aGlzLmZpbmRfY29sbGlkaW5nX25hbWVzKG4pLGk9MDtmdW5jdGlvbiB0KHQpe2lmKCEodC5nbG9iYWwmJm4uY2FjaGV8fHQudW5tYW5nbGVhYmxlKG4pfHxuLnJlc2VydmVkLmhhc1t0Lm5hbWVdKSl7dmFyIGU9dC5yZWRlZmluZWQoKTt0Lm5hbWU9ZT9lLm5hbWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU7ZT1tKGkrKykscltlXXx8IWYoZSk7KTtyZXR1cm4gZX0oKSx0Lm9yaWcuZm9yRWFjaChmdW5jdGlvbihlKXtlLm5hbWU9dC5uYW1lfSksdC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5uYW1lPXQubmFtZX0pfX10aGlzLmdsb2JhbHMuZWFjaCh0KSx0aGlzLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBrZSYmZS52YXJpYWJsZXMuZWFjaCh0KSxlIGluc3RhbmNlb2YgZHQmJnQoZS5kZWZpbml0aW9uKCkpfSkpfSksbGUuREVGTUVUSE9EKCJ0YWlsX25vZGUiLEQpLFllLkRFRk1FVEhPRCgidGFpbF9ub2RlIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cHJlc3Npb25zW3RoaXMuZXhwcmVzc2lvbnMubGVuZ3RoLTFdfSksQ2UuREVGTUVUSE9EKCJjb21wdXRlX2NoYXJfZnJlcXVlbmN5IixmdW5jdGlvbihuKXtuPXAobiksbS5yZXNldCgpO3RyeXtsZS5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wcmludChlLHQpLHRoaXMgaW5zdGFuY2VvZiB1dCYmIXRoaXMudW5tYW5nbGVhYmxlKG4pP20uY29uc2lkZXIodGhpcy5uYW1lLC0xKTpuLnByb3BlcnRpZXMmJih0aGlzIGluc3RhbmNlb2YgUWU/bS5jb25zaWRlcih0aGlzLnByb3BlcnR5LC0xKTp0aGlzIGluc3RhbmNlb2YgWmUmJmZ1bmN0aW9uIGUodCl7dCBpbnN0YW5jZW9mIGJ0P20uY29uc2lkZXIodC52YWx1ZSwtMSk6dCBpbnN0YW5jZW9mIG50PyhlKHQuY29uc2VxdWVudCksZSh0LmFsdGVybmF0aXZlKSk6dCBpbnN0YW5jZW9mIFllJiZlKHQudGFpbF9ub2RlKCkpfSh0aGlzLnByb3BlcnR5KSl9LG0uY29uc2lkZXIodGhpcy5wcmludF90b19zdHJpbmcoKSwxKX1maW5hbGx5e2xlLnByb3RvdHlwZS5wcmludD1sZS5wcm90b3R5cGUuX3ByaW50fW0uc29ydCgpfSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUubGVuZ3RoO248cjtuKyspe3ZhciBpPWVbbl07dC5wdXNoKGkpLG9baV09LS4wMSpufXJldHVybiB0fXZhciByLGksdD1lKCIwMTIzNDU2Nzg5Iiksbj1lKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJF8iKTtmdW5jdGlvbiBhKCl7aT1PYmplY3QuY3JlYXRlKG8pfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gaVt0XS1pW2VdfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9IiIsbj01NDtmb3IoZSsrO3QrPXJbLS1lJW5dLGU9TWF0aC5mbG9vcihlL24pLG49NjQsMDxlOyk7cmV0dXJuIHR9cmV0dXJuIHUuY29uc2lkZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpW2Vbbl1dKz10fSx1LnNvcnQ9ZnVuY3Rpb24oKXtyPW4uc29ydChzKS5jb25jYXQodC5zb3J0KHMpKX0sKHUucmVzZXQ9YSkoKSx1fSgpLFF0PS9eJHxbO3tdW1xzXG5dKiQvO2Z1bmN0aW9uIFp0KGUpe3JldHVybiJjb21tZW50MiI9PWUudHlwZSYmL0BwcmVzZXJ2ZXxAbGljZW5zZXxAY2Nfb24vaS50ZXN0KGUudmFsdWUpfWZ1bmN0aW9uIEp0KHMpe3ZhciBlPSFzO3M9JChzLHthc2NpaV9vbmx5OiExLGJlYXV0aWZ5OiExLGJyYWNlczohMSxjb21tZW50czohMSxpZTg6ITEsaW5kZW50X2xldmVsOjQsaW5kZW50X3N0YXJ0OjAsaW5saW5lX3NjcmlwdDohMCxrZWVwX3F1b3RlZF9wcm9wczohMSxtYXhfbGluZV9sZW46ITEscHJlYW1ibGU6bnVsbCxwcmVzZXJ2ZV9saW5lOiExLHF1b3RlX2tleXM6ITEscXVvdGVfc3R5bGU6MCxzZW1pY29sb25zOiEwLHNoZWJhbmc6ITAsc291cmNlX21hcDpudWxsLHdlYmtpdDohMSx3aWR0aDo4MCx3cmFwX2lpZmU6ITF9LCEwKTt2YXIgdT1yZTtpZihzLmNvbW1lbnRzKXt2YXIgdD1zLmNvbW1lbnRzO2lmKCJzdHJpbmciPT10eXBlb2Ygcy5jb21tZW50cyYmL15cLy4qXC9bYS16QS1aXSokLy50ZXN0KHMuY29tbWVudHMpKXt2YXIgbj1zLmNvbW1lbnRzLmxhc3RJbmRleE9mKCIvIik7dD1uZXcgUmVnRXhwKHMuY29tbWVudHMuc3Vic3RyKDEsbi0xKSxzLmNvbW1lbnRzLnN1YnN0cihuKzEpKX11PXQgaW5zdGFuY2VvZiBSZWdFeHA/ZnVuY3Rpb24oZSl7cmV0dXJuImNvbW1lbnQ1IiE9ZS50eXBlJiZ0LnRlc3QoZS52YWx1ZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiJjb21tZW50NSIhPWUudHlwZSYmdCh0aGlzLGUpfToic29tZSI9PT10P1p0OmllfXZhciBpPTAsbz0wLGE9MSxsPTAsYz0iIixmPXMuYXNjaWlfb25seT9mdW5jdGlvbihlLG4pe3JldHVybiBlLnJlcGxhY2UoL1tcdTAwMDAtXHUwMDFmXHUwMDdmLVx1ZmZmZl0vZyxmdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO2lmKHQubGVuZ3RoPD0yJiYhbil7Zm9yKDt0Lmxlbmd0aDwyOyl0PSIwIit0O3JldHVybiJcXHgiK3R9Zm9yKDt0Lmxlbmd0aDw0Oyl0PSIwIit0O3JldHVybiJcXHUiK3R9KX06ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSIiLG49MCxyPWUubGVuZ3RoO248cjtuKyspUnQoZVtuXSkmJiFMdChlW24rMV0pfHxMdChlW25dKSYmIVJ0KGVbbi0xXSk/dCs9IlxcdSIrZS5jaGFyQ29kZUF0KG4pLnRvU3RyaW5nKDE2KTp0Kz1lW25dO3JldHVybiB0fTtmdW5jdGlvbiBwKGUsdCl7dmFyIG49ZnVuY3Rpb24obixlKXt2YXIgcj0wLGk9MDtmdW5jdGlvbiB0KCl7cmV0dXJuIiciK24ucmVwbGFjZSgvXHgyNy9nLCJcXCciKSsiJyJ9ZnVuY3Rpb24gbygpe3JldHVybiciJytuLnJlcGxhY2UoL1x4MjIvZywnXFwiJykrJyInfXN3aXRjaChuPW4ucmVwbGFjZSgvW1xcXGJcZlxuXHJcdlx0XHgyMlx4MjdcdTIwMjhcdTIwMjlcMFx1ZmVmZl0vZyxmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlJyInOnJldHVybisrciwnIic7Y2FzZSInIjpyZXR1cm4rK2ksIiciO2Nhc2UiXFwiOnJldHVybiJcXFxcIjtjYXNlIlxuIjpyZXR1cm4iXFxuIjtjYXNlIlxyIjpyZXR1cm4iXFxyIjtjYXNlIlx0IjpyZXR1cm4iXFx0IjtjYXNlIlxiIjpyZXR1cm4iXFxiIjtjYXNlIlxmIjpyZXR1cm4iXFxmIjtjYXNlIlx2IjpyZXR1cm4gcy5pZTg/IlxceDBCIjoiXFx2IjtjYXNlIlx1MjAyOCI6cmV0dXJuIlxcdTIwMjgiO2Nhc2UiXHUyMDI5IjpyZXR1cm4iXFx1MjAyOSI7Y2FzZSJcdWZlZmYiOnJldHVybiJcXHVmZWZmIjtjYXNlIlwwIjpyZXR1cm4vWzAtOV0vLnRlc3Qobi5jaGFyQXQodCsxKSk/IlxceDAwIjoiXFwwIn1yZXR1cm4gZX0pLG49ZihuKSxzLnF1b3RlX3N0eWxlKXtjYXNlIDE6cmV0dXJuIHQoKTtjYXNlIDI6cmV0dXJuIG8oKTtjYXNlIDM6cmV0dXJuIiciPT1lP3QoKTpvKCk7ZGVmYXVsdDpyZXR1cm4gaTxyP3QoKTpvKCl9fShlLHQpO3JldHVybiBzLmlubGluZV9zY3JpcHQmJihuPShuPShuPW4ucmVwbGFjZSgvPFx4MmYoc2NyaXB0KShbPlwvXHRcblxmXHIgXSkvZ2ksIjxcXC8kMSQyIikpLnJlcGxhY2UoL1x4M2MhLS0vZywiXFx4M2MhLS0iKSkucmVwbGFjZSgvLS1ceDNlL2csIi0tXFx4M2UiKSksbn1mdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbiBlKHQsbil7aWYobjw9MClyZXR1cm4iIjtpZigxPT1uKXJldHVybiB0O3ZhciByPWUodCxuPj4xKTtyZXR1cm4gcis9ciwxJm4/cit0OnJ9KCIgIixzLmluZGVudF9zdGFydCtpLWUqcy5pbmRlbnRfbGV2ZWwpfXZhciBoLGQsbT0hMSxnPTAsdj0hMCxiPSExLHk9ITEsXz0hMSx3PSExLEU9LTEsQT0iIix4PXMuc291cmNlX21hcCYmW10saz14P2Z1bmN0aW9uKHQsbil7eC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubGluZSs9dCxlLmNvbCs9bn0pfTpuZSxDPXg/ZnVuY3Rpb24oKXt4LmZvckVhY2goZnVuY3Rpb24odCl7dHJ5e3Muc291cmNlX21hcC5hZGQodC50b2tlbi5maWxlLHQubGluZSx0LmNvbCx0LnRva2VuLmxpbmUsdC50b2tlbi5jb2wsdC5uYW1lfHwibmFtZSIhPXQudG9rZW4udHlwZT90Lm5hbWU6dC50b2tlbi52YWx1ZSl9Y2F0Y2goZSl7bGUud2FybigiQ291bGRuJ3QgZmlndXJlIG91dCBtYXBwaW5nIGZvciB7ZmlsZX06e2xpbmV9LHtjb2x9IOKGkiB7Y2xpbmV9LHtjY29sfSBbe25hbWV9XSIse2ZpbGU6dC50b2tlbi5maWxlLGxpbmU6dC50b2tlbi5saW5lLGNvbDp0LnRva2VuLmNvbCxjbGluZTp0LmxpbmUsY2NvbDp0LmNvbCxuYW1lOnQubmFtZXx8IiJ9KX19KSx4PVtdfTpuZTtmdW5jdGlvbiBPKGUpe3ZhciB0PWMubGFzdEluZGV4T2YoIlxuIik7Zzx0JiYoZz10KTt2YXIgbj1jLnNsaWNlKDAsZykscj1jLnNsaWNlKGcpO2ZvcihrKGUsci5sZW5ndGgtbyksYSs9ZSxsKz1lLG89ci5sZW5ndGgsYz1uO2UtLTspYys9IlxuIjtjKz1yfXZhciBTPXMubWF4X2xpbmVfbGVuP2Z1bmN0aW9uKCl7dj9vPnMubWF4X2xpbmVfbGVuJiZsZS53YXJuKCJPdXRwdXQgZXhjZWVkcyB7bWF4X2xpbmVfbGVufSBjaGFyYWN0ZXJzIixzKToobz5zLm1heF9saW5lX2xlbiYmTygxKSx2PSEwLEMoKSl9Om5lLEQ9YWUoIiggWyArICogLyAtICwgLiIpO2Z1bmN0aW9uIFQoZSl7dmFyIHQ9KGU9U3RyaW5nKGUpKS5jaGFyQXQoMCk7XyYmdCYmKF89ITEsIlxuIiE9dCYmKFQoIlxuIiksUigpKSksdyYmdCYmKHc9ITEsL1tcczt9KV0vLnRlc3QodCl8fEIoKSksRT0tMTt2YXIgbj1BLmNoYXJBdChBLmxlbmd0aC0xKTt5JiYoeT0hMSwoIjoiPT1uJiYifSI9PXR8fCghdHx8Ijt9Ii5pbmRleE9mKHQpPDApJiYiOyIhPW4pJiYocy5zZW1pY29sb25zfHxEW3RdPyhjKz0iOyIsbysrLGwrKyk6KFMoKSxjKz0iXG4iLGwrKyxhKyssbz0wLC9eXHMrJC8udGVzdChlKSYmKHk9ITApKSxzLmJlYXV0aWZ5fHwoYj0hMSkpKSxiJiYoKFV0KG4pJiYoVXQodCl8fCJcXCI9PXQpfHwiLyI9PXQmJnQ9PW58fCgiKyI9PXR8fCItIj09dCkmJnQ9PUEpJiYoYys9IiAiLG8rKyxsKyspLGI9ITEpLGgmJih4LnB1c2goe3Rva2VuOmgsbmFtZTpkLGxpbmU6YSxjb2w6b30pLGg9ITEsdiYmQygpKSxjKz1lLG09IigiPT1lW2UubGVuZ3RoLTFdLGwrPWUubGVuZ3RoO3ZhciByPWUuc3BsaXQoL1xyP1xuLyksaT1yLmxlbmd0aC0xO2ErPWksbys9clswXS5sZW5ndGgsMDxpJiYoUygpLG89cltpXS5sZW5ndGgpLEE9ZX12YXIgQj1zLmJlYXV0aWZ5P2Z1bmN0aW9uKCl7VCgiICIpfTpmdW5jdGlvbigpe2I9ITB9LFI9cy5iZWF1dGlmeT9mdW5jdGlvbihlKXtzLmJlYXV0aWZ5JiZUKHIoZT8uNTowKSl9Om5lLEw9cy5iZWF1dGlmeT9mdW5jdGlvbihlLHQpeyEwPT09ZSYmKGU9TigpKTt2YXIgbj1pO2k9ZTt2YXIgcj10KCk7cmV0dXJuIGk9bixyfTpmdW5jdGlvbihlLHQpe3JldHVybiB0KCl9LEY9cy5tYXhfbGluZV9sZW58fHMucHJlc2VydmVfbGluZT9mdW5jdGlvbigpe1MoKSxnPWMubGVuZ3RoLHY9ITF9Om5lLHE9cy5iZWF1dGlmeT9mdW5jdGlvbigpe2lmKEU8MClyZXR1cm4gVCgiXG4iKTsiXG4iIT1jW0VdJiYoYz1jLnNsaWNlKDAsRSkrIlxuIitjLnNsaWNlKEUpLGwrKyxhKyspLEUrK306RixVPXMuYmVhdXRpZnk/ZnVuY3Rpb24oKXtUKCI7Iil9OmZ1bmN0aW9uKCl7eT0hMH07ZnVuY3Rpb24gTSgpe3k9ITEsVCgiOyIpfWZ1bmN0aW9uIE4oKXtyZXR1cm4gaStzLmluZGVudF9sZXZlbH1mdW5jdGlvbiBQKCl7cmV0dXJuIHZ8fFMoKSxjfWZ1bmN0aW9uIEkoKXt2YXIgZT1jLmxhc3RJbmRleE9mKCJcbiIpO3JldHVybi9eICokLy50ZXN0KGMuc2xpY2UoZSsxKSl9dmFyIHo9W107cmV0dXJue2dldDpQLHRvU3RyaW5nOlAsaW5kZW50OlIsaW5kZW50YXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gaX0sY3VycmVudF93aWR0aDpmdW5jdGlvbigpe3JldHVybiBvLWl9LHNob3VsZF9icmVhazpmdW5jdGlvbigpe3JldHVybiBzLndpZHRoJiZ0aGlzLmN1cnJlbnRfd2lkdGgoKT49cy53aWR0aH0saGFzX3BhcmVuczpmdW5jdGlvbigpe3JldHVybiBtfSxuZXdsaW5lOnEscHJpbnQ6VCxzcGFjZTpCLGNvbW1hOmZ1bmN0aW9uKCl7RigpLFQoIiwiKSxGKCksQigpfSxjb2xvbjpmdW5jdGlvbigpe1QoIjoiKSxCKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gQX0sc2VtaWNvbG9uOlUsZm9yY2Vfc2VtaWNvbG9uOk0sdG9fdXRmODpmLHByaW50X25hbWU6ZnVuY3Rpb24oZSl7VChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksZT1mKGUsITApfShlKSl9LHByaW50X3N0cmluZzpmdW5jdGlvbihlLHQsbil7dmFyIHI9cChlLHQpOyEwPT09biYmLTE9PT1yLmluZGV4T2YoIlxcIikmJihRdC50ZXN0KGMpfHxNKCksTSgpKSxUKHIpfSxlbmNvZGVfc3RyaW5nOnAsbmV4dF9pbmRlbnQ6Tix3aXRoX2luZGVudDpMLHdpdGhfYmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIFQoInsiKSxxKCksTChOKCksZnVuY3Rpb24oKXt0PWUoKX0pLFIoKSxUKCJ9IiksdH0sd2l0aF9wYXJlbnM6ZnVuY3Rpb24oZSl7VCgiKCIpLEYoKTt2YXIgdD1lKCk7cmV0dXJuIEYoKSxUKCIpIiksdH0sd2l0aF9zcXVhcmU6ZnVuY3Rpb24oZSl7VCgiWyIpLEYoKTt2YXIgdD1lKCk7cmV0dXJuIEYoKSxUKCJdIiksdH0sYWRkX21hcHBpbmc6eD9mdW5jdGlvbihlLHQpe2g9ZSxkPXR9Om5lLG9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0scHJlcGVuZF9jb21tZW50czplP25lOmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsdD1lLnN0YXJ0O2lmKHQmJighdC5jb21tZW50c19iZWZvcmV8fHQuY29tbWVudHNfYmVmb3JlLl9kdW1wZWQhPT1yKSl7dmFyIGk9dC5jb21tZW50c19iZWZvcmU7aWYoaXx8KGk9dC5jb21tZW50c19iZWZvcmU9W10pLGkuX2R1bXBlZD1yLGUgaW5zdGFuY2VvZiBCZSYmZS52YWx1ZSl7dmFyIG89bmV3IER0KGZ1bmN0aW9uKGUpe3ZhciB0PW8ucGFyZW50KCk7aWYoISh0IGluc3RhbmNlb2YgQmV8fHQgaW5zdGFuY2VvZiB0dCYmdC5sZWZ0PT09ZXx8IkNhbGwiPT10LlRZUEUmJnQuZXhwcmVzc2lvbj09PWV8fHQgaW5zdGFuY2VvZiBudCYmdC5jb25kaXRpb249PT1lfHx0IGluc3RhbmNlb2YgUWUmJnQuZXhwcmVzc2lvbj09PWV8fHQgaW5zdGFuY2VvZiBZZSYmdC5leHByZXNzaW9uc1swXT09PWV8fHQgaW5zdGFuY2VvZiBaZSYmdC5leHByZXNzaW9uPT09ZXx8dCBpbnN0YW5jZW9mIGV0KSlyZXR1cm4hMDt2YXIgbj1lLnN0YXJ0LmNvbW1lbnRzX2JlZm9yZTtuJiZuLl9kdW1wZWQhPT1yJiYobi5fZHVtcGVkPXIsaT1pLmNvbmNhdChuKSl9KTtvLnB1c2goZSksZS52YWx1ZS53YWxrKG8pfWlmKDA9PWwpezA8aS5sZW5ndGgmJnMuc2hlYmFuZyYmImNvbW1lbnQ1Ij09aVswXS50eXBlJiYoVCgiIyEiK2kuc2hpZnQoKS52YWx1ZSsiXG4iKSxSKCkpO3ZhciBuPXMucHJlYW1ibGU7biYmVChuLnJlcGxhY2UoL1xyXG4/fFtcblx1MjAyOFx1MjAyOV18XHMqJC9nLCJcbiIpKX1pZigwIT0oaT1pLmZpbHRlcih1LGUpKS5sZW5ndGgpe3ZhciBhPUkoKTtpLmZvckVhY2goZnVuY3Rpb24oZSx0KXthfHwoZS5ubGI/KFQoIlxuIiksUigpLGE9ITApOjA8dCYmQigpKSwvY29tbWVudFsxMzRdLy50ZXN0KGUudHlwZSk/KFQoIi8vIitlLnZhbHVlLnJlcGxhY2UoL1tAI11fX1BVUkVfXy9nLCIgIikrIlxuIiksUigpLGE9ITApOiJjb21tZW50MiI9PWUudHlwZSYmKFQoIi8qIitlLnZhbHVlLnJlcGxhY2UoL1tAI11fX1BVUkVfXy9nLCIgIikrIiovIiksYT0hMSl9KSxhfHwodC5ubGI/KFQoIlxuIiksUigpKTpCKCkpfX19LGFwcGVuZF9jb21tZW50czplfHx1PT09cmU/bmU6ZnVuY3Rpb24oZSxuKXt2YXIgdD1lLmVuZDtpZih0KXt2YXIgcj10W24/ImNvbW1lbnRzX2JlZm9yZSI6ImNvbW1lbnRzX2FmdGVyIl07aWYociYmci5fZHVtcGVkIT09dGhpcyYmKGUgaW5zdGFuY2VvZiBjZXx8c2UocixmdW5jdGlvbihlKXtyZXR1cm4hL2NvbW1lbnRbMTM0XS8udGVzdChlLnR5cGUpfSkpKXtyLl9kdW1wZWQ9dGhpczt2YXIgaT1jLmxlbmd0aDtyLmZpbHRlcih1LGUpLmZvckVhY2goZnVuY3Rpb24oZSx0KXt3PSExLF8/KFQoIlxuIiksUigpLF89ITEpOmUubmxiJiYoMDx0fHwhSSgpKT8oVCgiXG4iKSxSKCkpOigwPHR8fCFuKSYmQigpLC9jb21tZW50WzEzNF0vLnRlc3QoZS50eXBlKT8oVCgiLy8iK2UudmFsdWUucmVwbGFjZSgvW0AjXV9fUFVSRV9fL2csIiAiKSksXz0hMCk6ImNvbW1lbnQyIj09ZS50eXBlJiYoVCgiLyoiK2UudmFsdWUucmVwbGFjZSgvW0AjXV9fUFVSRV9fL2csIiAiKSsiKi8iKSx3PSEwKX0pLGMubGVuZ3RoPmkmJihFPWkpfX19LGxpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY29sOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHBvczpmdW5jdGlvbigpe3JldHVybiBsfSxwdXNoX25vZGU6ZnVuY3Rpb24oZSl7ei5wdXNoKGUpfSxwb3Bfbm9kZTpzLnByZXNlcnZlX2xpbmU/ZnVuY3Rpb24oKXt2YXIgZT16LnBvcCgpO2Uuc3RhcnQmJmUuc3RhcnQubGluZT5hJiZPKGUuc3RhcnQubGluZS1hKX06ZnVuY3Rpb24oKXt6LnBvcCgpfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHpbei5sZW5ndGgtMi0oZXx8MCldfX19ZnVuY3Rpb24gWHQoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBYdCkpcmV0dXJuIG5ldyBYdChlLHQpO1d0LmNhbGwodGhpcyx0aGlzLmJlZm9yZSx0aGlzLmFmdGVyKSx0aGlzLm9wdGlvbnM9JChlLHthcmd1bWVudHM6IXQsYXNzaWdubWVudHM6IXQsYm9vbGVhbnM6IXQsY29sbGFwc2VfdmFyczohdCxjb21wYXJpc29uczohdCxjb25kaXRpb25hbHM6IXQsZGVhZF9jb2RlOiF0LGRpcmVjdGl2ZXM6IXQsZHJvcF9jb25zb2xlOiExLGRyb3BfZGVidWdnZXI6IXQsZXZhbHVhdGU6IXQsZXhwcmVzc2lvbjohMSxnbG9iYWxfZGVmczohMSxob2lzdF9mdW5zOiExLGhvaXN0X3Byb3BzOiF0LGhvaXN0X3ZhcnM6ITEsaWU4OiExLGlmX3JldHVybjohdCxpbmxpbmU6IXQsam9pbl92YXJzOiF0LGtlZXBfZmFyZ3M6ITAsa2VlcF9mbmFtZXM6ITEsa2VlcF9pbmZpbml0eTohMSxsb29wczohdCxuZWdhdGVfaWlmZTohdCxwYXNzZXM6MSxwcm9wZXJ0aWVzOiF0LHB1cmVfZ2V0dGVyczohdCYmInN0cmljdCIscHVyZV9mdW5jczpudWxsLHJlZHVjZV9mdW5jczohdCxyZWR1Y2VfdmFyczohdCxzZXF1ZW5jZXM6IXQsc2lkZV9lZmZlY3RzOiF0LHN3aXRjaGVzOiF0LHRvcF9yZXRhaW46bnVsbCx0b3BsZXZlbDohKCFlfHwhZS50b3BfcmV0YWluKSx0eXBlb2ZzOiF0LHVuc2FmZTohMSx1bnNhZmVfY29tcHM6ITEsdW5zYWZlX0Z1bmN0aW9uOiExLHVuc2FmZV9tYXRoOiExLHVuc2FmZV9wcm90bzohMSx1bnNhZmVfcmVnZXhwOiExLHVuc2FmZV91bmRlZmluZWQ6ITEsdW51c2VkOiF0LHdhcm5pbmdzOiExfSwhMCk7dmFyIG49dGhpcy5vcHRpb25zLmdsb2JhbF9kZWZzO2lmKCJvYmplY3QiPT10eXBlb2Ygbilmb3IodmFyIHIgaW4gbikvXkAvLnRlc3QocikmJnVlKG4scikmJihuW3Iuc2xpY2UoMSldPVl0KG5bcl0se2V4cHJlc3Npb246ITB9KSk7ITA9PT10aGlzLm9wdGlvbnMuaW5saW5lJiYodGhpcy5vcHRpb25zLmlubGluZT0zKTt2YXIgaT10aGlzLm9wdGlvbnMucHVyZV9mdW5jczsiZnVuY3Rpb24iPT10eXBlb2YgaT90aGlzLnB1cmVfZnVuY3M9aToic3RyaW5nIj09dHlwZW9mIGk/dGhpcy5wdXJlX2Z1bmNzPWZ1bmN0aW9uKGUpe3JldHVybiBpIT09ZS5leHByZXNzaW9uLnByaW50X3RvX3N0cmluZygpfTpBcnJheS5pc0FycmF5KGkpP3RoaXMucHVyZV9mdW5jcz1mdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleE9mKGUuZXhwcmVzc2lvbi5wcmludF90b19zdHJpbmcoKSk8MH06dGhpcy5wdXJlX2Z1bmNzPWllO3ZhciBvPXRoaXMub3B0aW9ucy50b3BfcmV0YWluO28gaW5zdGFuY2VvZiBSZWdFeHA/dGhpcy50b3BfcmV0YWluPWZ1bmN0aW9uKGUpe3JldHVybiBvLnRlc3QoZS5uYW1lKX06ImZ1bmN0aW9uIj09dHlwZW9mIG8/dGhpcy50b3BfcmV0YWluPW86byYmKCJzdHJpbmciPT10eXBlb2YgbyYmKG89by5zcGxpdCgvLC8pKSx0aGlzLnRvcF9yZXRhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PW8uaW5kZXhPZihlLm5hbWUpfSk7dmFyIGE9dGhpcy5vcHRpb25zLnRvcGxldmVsO3RoaXMudG9wbGV2ZWw9InN0cmluZyI9PXR5cGVvZiBhP3tmdW5jczovZnVuY3MvLnRlc3QoYSksdmFyczovdmFycy8udGVzdChhKX06e2Z1bmNzOmEsdmFyczphfTt2YXIgcz10aGlzLm9wdGlvbnMuc2VxdWVuY2VzO3RoaXMuc2VxdWVuY2VzX2xpbWl0PTE9PXM/ODAwOjB8cyx0aGlzLndhcm5pbmdzX3Byb2R1Y2VkPXt9fWZ1bmN0aW9uIHkoZSx0KXtlLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgWWU/eShlLnRhaWxfbm9kZSgpLHQpOmUgaW5zdGFuY2VvZiBidD90KGUudmFsdWUpOmUgaW5zdGFuY2VvZiBudCYmKHkoZS5jb25zZXF1ZW50LHQpLHkoZS5hbHRlcm5hdGl2ZSx0KSksITB9KSl9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPSh0PSQodCx7YnVpbHRpbnM6ITEsY2FjaGU6bnVsbCxkZWJ1ZzohMSxrZWVwX3F1b3RlZDohMSxvbmx5X2NhY2hlOiExLHJlZ2V4Om51bGwscmVzZXJ2ZWQ6bnVsbH0sITApKS5yZXNlcnZlZDtBcnJheS5pc0FycmF5KG4pfHwobj1bXSksdC5idWlsdGluc3x8ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtnKHQsZSl9WyJudWxsIiwidHJ1ZSIsImZhbHNlIiwiSW5maW5pdHkiLCItSW5maW5pdHkiLCJ1bmRlZmluZWQiXS5mb3JFYWNoKG4pLFtBcnJheSxCb29sZWFuLERhdGUsRXJyb3IsRnVuY3Rpb24sTWF0aCxOdW1iZXIsT2JqZWN0LFJlZ0V4cCxTdHJpbmddLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKG4pLGUucHJvdG90eXBlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlLnByb3RvdHlwZSkubWFwKG4pfSl9KG4pO3ZhciByLGk9LTE7dC5jYWNoZT8ocj10LmNhY2hlLnByb3BzKS5lYWNoKGZ1bmN0aW9uKGUpe2cobixlKX0pOnI9bmV3IEw7dmFyIG8sYT10LnJlZ2V4LHM9ITEhPT10LmRlYnVnO3MmJihvPSEwPT09dC5kZWJ1Zz8iIjp0LmRlYnVnKTt2YXIgdT1bXSxsPVtdO3JldHVybiBlLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBzdD9wKGUua2V5KTplIGluc3RhbmNlb2YgYXQ/cChlLmtleS5uYW1lKTplIGluc3RhbmNlb2YgUWU/cChlLnByb3BlcnR5KTplIGluc3RhbmNlb2YgWmU/eShlLnByb3BlcnR5LHApOmUgaW5zdGFuY2VvZiBLZSYmIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSI9PWUuZXhwcmVzc2lvbi5wcmludF90b19zdHJpbmcoKSYmeShlLmFyZ3NbMV0scCl9KSksZS50cmFuc2Zvcm0obmV3IFd0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBzdD9lLmtleT1oKGUua2V5KTplIGluc3RhbmNlb2YgYXQ/ZS5rZXkubmFtZT1oKGUua2V5Lm5hbWUpOmUgaW5zdGFuY2VvZiBRZT9lLnByb3BlcnR5PWgoZS5wcm9wZXJ0eSk6IXQua2VlcF9xdW90ZWQmJmUgaW5zdGFuY2VvZiBaZT9lLnByb3BlcnR5PWQoZS5wcm9wZXJ0eSk6ZSBpbnN0YW5jZW9mIEtlJiYiT2JqZWN0LmRlZmluZVByb3BlcnR5Ij09ZS5leHByZXNzaW9uLnByaW50X3RvX3N0cmluZygpJiYoZS5hcmdzWzFdPWQoZS5hcmdzWzFdKSl9KSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4hKDA8PWwuaW5kZXhPZihlKSkmJighKDA8PW4uaW5kZXhPZihlKSkmJih0Lm9ubHlfY2FjaGU/ci5oYXMoZSk6IS9eLT9bMC05XSsoXC5bMC05XSspPyhlWystXVswLTldKyk/JC8udGVzdChlKSkpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIShhJiYhYS50ZXN0KGUpKSYmKCEoMDw9bi5pbmRleE9mKGUpKSYmKHIuaGFzKGUpfHwwPD11LmluZGV4T2YoZSkpKX1mdW5jdGlvbiBwKGUpe2MoZSkmJmcodSxlKSxmKGUpfHxnKGwsZSl9ZnVuY3Rpb24gaChlKXtpZighZihlKSlyZXR1cm4gZTt2YXIgdD1yLmdldChlKTtpZighdCl7aWYocyl7dmFyIG49Il8kIitlKyIkIitvKyJfIjtjKG4pJiYodD1uKX1pZighdClmb3IoOyFjKHQ9bSgrK2kpKTspO3Iuc2V0KGUsdCl9cmV0dXJuIHR9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50cmFuc2Zvcm0obmV3IFd0KGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBZZSl7dmFyIHQ9ZS5leHByZXNzaW9ucy5sZW5ndGgtMTtlLmV4cHJlc3Npb25zW3RdPWQoZS5leHByZXNzaW9uc1t0XSl9ZWxzZSBlIGluc3RhbmNlb2YgYnQ/ZS52YWx1ZT1oKGUudmFsdWUpOmUgaW5zdGFuY2VvZiBudCYmKGUuY29uc2VxdWVudD1kKGUuY29uc2VxdWVudCksZS5hbHRlcm5hdGl2ZT1kKGUuYWx0ZXJuYXRpdmUpKTtyZXR1cm4gZX0pKX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2UuREVGTUVUSE9EKCJfY29kZWdlbiIsdCl9dmFyIG89ITEsYT1udWxsLHM9bnVsbDtmdW5jdGlvbiBuKGUsdCl7QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7bihlLHQpfSk6ZS5ERUZNRVRIT0QoIm5lZWRzX3BhcmVucyIsdCl9ZnVuY3Rpb24gcihlLG4scix0KXt2YXIgaT1lLmxlbmd0aC0xO289dCxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXshMCE9PW98fGUgaW5zdGFuY2VvZiBwZXx8ZSBpbnN0YW5jZW9mIGdlfHxlIGluc3RhbmNlb2YgaGUmJmUuYm9keSBpbnN0YW5jZW9mIGJ0fHwobz0hMSksZSBpbnN0YW5jZW9mIGdlfHwoci5pbmRlbnQoKSxlLnByaW50KHIpLHQ9PWkmJm58fChyLm5ld2xpbmUoKSxuJiZyLm5ld2xpbmUoKSkpLCEwPT09byYmZSBpbnN0YW5jZW9mIGhlJiZlLmJvZHkgaW5zdGFuY2VvZiBidCYmKG89ITEpfSksbz0hMX1mdW5jdGlvbiBpKGUsdCl7dC5wcmludCgieyIpLHQud2l0aF9pbmRlbnQodC5uZXh0X2luZGVudCgpLGZ1bmN0aW9uKCl7dC5hcHBlbmRfY29tbWVudHMoZSwhMCl9KSx0LnByaW50KCJ9Iil9ZnVuY3Rpb24gdShlLHQsbil7MDxlLmJvZHkubGVuZ3RoP3Qud2l0aF9ibG9jayhmdW5jdGlvbigpe3IoZS5ib2R5LCExLHQsbil9KTppKGUsdCl9ZnVuY3Rpb24gbChlLHQsbil7ZS5wcmludCh0KSxuJiYoZS5zcGFjZSgpLG4ucHJpbnQoZSkpLGUuc2VtaWNvbG9uKCl9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHI9ITE7biYmZS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIShyfHxlIGluc3RhbmNlb2Yga2UpfHwoZSBpbnN0YW5jZW9mIHR0JiYiaW4iPT1lLm9wZXJhdG9yP3I9ITA6dm9pZCAwKX0pKSxlLnByaW50KHQscil9ZnVuY3Rpb24gZihlLHQsbil7bi5vcHRpb24oInF1b3RlX2tleXMiKT9uLnByaW50X3N0cmluZyhlKToiIisgK2U9PWUmJjA8PWU/bi5wcmludChkKGUpKTooYltlXT8hbi5vcHRpb24oImllOCIpOk10KGUpKT90JiZuLm9wdGlvbigia2VlcF9xdW90ZWRfcHJvcHMiKT9uLnByaW50X3N0cmluZyhlLHQpOm4ucHJpbnRfbmFtZShlKTpuLnByaW50X3N0cmluZyhlLHQpfWZ1bmN0aW9uIHAoZSx0KXt0Lm9wdGlvbigiYnJhY2VzIik/bShlLHQpOiFlfHxlIGluc3RhbmNlb2YgZ2U/dC5mb3JjZV9zZW1pY29sb24oKTplLnByaW50KHQpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gMDxlLmFyZ3MubGVuZ3RofHx0Lm9wdGlvbigiYmVhdXRpZnkiKX1mdW5jdGlvbiBkKGUpe3ZhciB0LG4scixpPWUudG9TdHJpbmcoMTApLnJlcGxhY2UoL14wXC4vLCIuIikucmVwbGFjZSgiZSsiLCJlIiksbz1baV07cmV0dXJuIE1hdGguZmxvb3IoZSk9PT1lJiYoZTwwP28ucHVzaCgiLTB4IisoLWUpLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpKTpvLnB1c2goIjB4IitlLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpKSksKHQ9L15cLjArLy5leGVjKGkpKT8obj10WzBdLmxlbmd0aCxyPWkuc2xpY2Uobiksby5wdXNoKHIrImUtIisoci5sZW5ndGgrbi0xKSkpOih0PS8wKyQvLmV4ZWMoaSkpPyhuPXRbMF0ubGVuZ3RoLG8ucHVzaChpLnNsaWNlKDAsLW4pKyJlIituKSk6KHQ9L14oXGQpXC4oXGQrKWUoLT9cZCspJC8uZXhlYyhpKSkmJm8ucHVzaCh0WzFdK3RbMl0rImUiKyh0WzNdLXRbMl0ubGVuZ3RoKSksZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMF0sbj10Lmxlbmd0aCxyPTE7cjxlLmxlbmd0aDsrK3IpZVtyXS5sZW5ndGg8biYmKG49KHQ9ZVtyXSkubGVuZ3RoKTtyZXR1cm4gdH0obyl9ZnVuY3Rpb24gbShlLHQpeyFlfHxlIGluc3RhbmNlb2YgZ2U/dC5wcmludCgie30iKTplIGluc3RhbmNlb2YgbWU/ZS5wcmludCh0KTp0LndpdGhfYmxvY2soZnVuY3Rpb24oKXt0LmluZGVudCgpLGUucHJpbnQodCksdC5uZXdsaW5lKCl9KX1mdW5jdGlvbiB0KGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuREVGTUVUSE9EKCJhZGRfc291cmNlX21hcCIsdCl9KX1sZS5ERUZNRVRIT0QoInByaW50IixmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLl9jb2RlZ2VuO2Z1bmN0aW9uIGkoKXtlLnByZXBlbmRfY29tbWVudHMobiksbi5hZGRfc291cmNlX21hcChlKSxyKG4sZSksZS5hcHBlbmRfY29tbWVudHMobil9biBpbnN0YW5jZW9mIGtlP2E9bjohcyYmbiBpbnN0YW5jZW9mIHBlJiYidXNlIGFzbSI9PW4udmFsdWUmJihzPWEpLGUucHVzaF9ub2RlKG4pLHR8fG4ubmVlZHNfcGFyZW5zKGUpP2Uud2l0aF9wYXJlbnMoaSk6aSgpLGUucG9wX25vZGUoKSxuPT09cyYmKHM9bnVsbCl9KSxsZS5ERUZNRVRIT0QoIl9wcmludCIsbGUucHJvdG90eXBlLnByaW50KSxsZS5ERUZNRVRIT0QoInByaW50X3RvX3N0cmluZyIsZnVuY3Rpb24oZSl7dmFyIHQ9SnQoZSk7cmV0dXJuIHRoaXMucHJpbnQodCksdC5nZXQoKX0pLG4obGUscmUpLG4oRGUsZnVuY3Rpb24oZSl7aWYoIWUuaGFzX3BhcmVucygpJiZGKGUpKXJldHVybiEwO3ZhciB0O2lmKGUub3B0aW9uKCJ3ZWJraXQiKSYmKCh0PWUucGFyZW50KCkpaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcykpcmV0dXJuITA7aWYoZS5vcHRpb24oIndyYXBfaWlmZSIpJiYoKHQ9ZS5wYXJlbnQoKSlpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT10aGlzKSlyZXR1cm4hMH0pLG4ob3QsZnVuY3Rpb24oZSl7cmV0dXJuIWUuaGFzX3BhcmVucygpJiZGKGUpfSksbihKZSxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO3JldHVybiB0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbj09PXRoaXN8fHQgaW5zdGFuY2VvZiBLZSYmdC5leHByZXNzaW9uPT09dGhpc30pLG4oWWUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtyZXR1cm4gdCBpbnN0YW5jZW9mIEtlfHx0IGluc3RhbmNlb2YgSmV8fHQgaW5zdGFuY2VvZiB0dHx8dCBpbnN0YW5jZW9mICRlfHx0IGluc3RhbmNlb2YgV2V8fHQgaW5zdGFuY2VvZiBpdHx8dCBpbnN0YW5jZW9mIGF0fHx0IGluc3RhbmNlb2YgbnR9KSxuKHR0LGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT10aGlzKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBKZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIHR0KXt2YXIgbj10Lm9wZXJhdG9yLHI9S3Rbbl0saT10aGlzLm9wZXJhdG9yLG89S3RbaV07aWYobzxyfHxyPT1vJiZ0aGlzPT09dC5yaWdodClyZXR1cm4hMH19KSxuKFdlLGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEdlJiZ0LmV4cHJlc3Npb249PT10aGlzKXt2YXIgbj0hMTtyZXR1cm4gdGhpcy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIShufHxlIGluc3RhbmNlb2Yga2UpfHwoZSBpbnN0YW5jZW9mIEtlP249ITA6dm9pZCAwKX0pKSxufX0pLG4oS2UsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtpZih0IGluc3RhbmNlb2YgR2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpcmV0dXJuITA7aWYoZS5vcHRpb24oIndlYmtpdCIpKXt2YXIgbj1lLnBhcmVudCgxKTtyZXR1cm4gdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgRGUmJnQgaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcyYmbiBpbnN0YW5jZW9mIHJ0JiZuLmxlZnQ9PT10fX0pLG4oR2UsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtpZighaCh0aGlzLGUpJiYodCBpbnN0YW5jZW9mIFdlfHx0IGluc3RhbmNlb2YgS2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpKXJldHVybiEwfSksbih5dCxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO2lmKHQgaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcyl7dmFyIG49dGhpcy5nZXRWYWx1ZSgpO2lmKG48MHx8L14wLy50ZXN0KGQobikpKXJldHVybiEwfX0pLG4oW3J0LG50XSxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO3JldHVybiB0IGluc3RhbmNlb2YgSmV8fCh0IGluc3RhbmNlb2YgdHQmJiEodCBpbnN0YW5jZW9mIHJ0KXx8KHQgaW5zdGFuY2VvZiBLZSYmdC5leHByZXNzaW9uPT09dGhpc3x8KHQgaW5zdGFuY2VvZiBudCYmdC5jb25kaXRpb249PT10aGlzfHwodCBpbnN0YW5jZW9mIFdlJiZ0LmV4cHJlc3Npb249PT10aGlzfHx2b2lkIDApKSkpfSksZShwZSxmdW5jdGlvbihlLHQpe3QucHJpbnRfc3RyaW5nKGUudmFsdWUsZS5xdW90ZSksdC5zZW1pY29sb24oKX0pLGUoZmUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJkZWJ1Z2dlciIpLHQuc2VtaWNvbG9uKCl9KSx2LkRFRk1FVEhPRCgiX2RvX3ByaW50X2JvZHkiLGZ1bmN0aW9uKGUpe3AodGhpcy5ib2R5LGUpfSksZShjZSxmdW5jdGlvbihlLHQpe2UuYm9keS5wcmludCh0KSx0LnNlbWljb2xvbigpfSksZShDZSxmdW5jdGlvbihlLHQpe3IoZS5ib2R5LCEwLHQsITApLHQucHJpbnQoIiIpfSksZSh2ZSxmdW5jdGlvbihlLHQpe2UubGFiZWwucHJpbnQodCksdC5jb2xvbigpLGUuYm9keS5wcmludCh0KX0pLGUoaGUsZnVuY3Rpb24oZSx0KXtlLmJvZHkucHJpbnQodCksdC5zZW1pY29sb24oKX0pLGUobWUsZnVuY3Rpb24oZSx0KXt1KGUsdCl9KSxlKGdlLGZ1bmN0aW9uKGUsdCl7dC5zZW1pY29sb24oKX0pLGUoX2UsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJkbyIpLHQuc3BhY2UoKSxtKGUuYm9keSx0KSx0LnNwYWNlKCksdC5wcmludCgid2hpbGUiKSx0LnNwYWNlKCksdC53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuY29uZGl0aW9uLnByaW50KHQpfSksdC5zZW1pY29sb24oKX0pLGUod2UsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ3aGlsZSIpLHQuc3BhY2UoKSx0LndpdGhfcGFyZW5zKGZ1bmN0aW9uKCl7ZS5jb25kaXRpb24ucHJpbnQodCl9KSx0LnNwYWNlKCksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoRWUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJmb3IiKSx0LnNwYWNlKCksdC53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuaW5pdD8oZS5pbml0IGluc3RhbmNlb2YgVmU/ZS5pbml0LnByaW50KHQpOmMoZS5pbml0LHQsITApLHQucHJpbnQoIjsiKSx0LnNwYWNlKCkpOnQucHJpbnQoIjsiKSxlLmNvbmRpdGlvbj8oZS5jb25kaXRpb24ucHJpbnQodCksdC5wcmludCgiOyIpLHQuc3BhY2UoKSk6dC5wcmludCgiOyIpLGUuc3RlcCYmZS5zdGVwLnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxlKEFlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgiZm9yIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmluaXQucHJpbnQodCksdC5zcGFjZSgpLHQucHJpbnQoImluIiksdC5zcGFjZSgpLGUub2JqZWN0LnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxlKHhlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgid2l0aCIpLHQuc3BhY2UoKSx0LndpdGhfcGFyZW5zKGZ1bmN0aW9uKCl7ZS5leHByZXNzaW9uLnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxPZS5ERUZNRVRIT0QoIl9kb19wcmludCIsZnVuY3Rpb24obixlKXt2YXIgdD10aGlzO2V8fG4ucHJpbnQoImZ1bmN0aW9uIiksdC5uYW1lJiYobi5zcGFjZSgpLHQubmFtZS5wcmludChuKSksbi53aXRoX3BhcmVucyhmdW5jdGlvbigpe3QuYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3QmJm4uY29tbWEoKSxlLnByaW50KG4pfSl9KSxuLnNwYWNlKCksdSh0LG4sITApfSksZShPZSxmdW5jdGlvbihlLHQpe2UuX2RvX3ByaW50KHQpfSksZShSZSxmdW5jdGlvbihlLHQpe2wodCwicmV0dXJuIixlLnZhbHVlKX0pLGUoSyxmdW5jdGlvbihlLHQpe2wodCwidGhyb3ciLGUudmFsdWUpfSksZShGZSxmdW5jdGlvbihlLHQpe2wodCwiYnJlYWsiLGUubGFiZWwpfSksZShxZSxmdW5jdGlvbihlLHQpe2wodCwiY29udGludWUiLGUubGFiZWwpfSksZShVZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImlmIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmNvbmRpdGlvbi5wcmludCh0KX0pLHQuc3BhY2UoKSxlLmFsdGVybmF0aXZlPyhmdW5jdGlvbihlLHQpe3ZhciBuPWUuYm9keTtpZih0Lm9wdGlvbigiYnJhY2VzIil8fHQub3B0aW9uKCJpZTgiKSYmbiBpbnN0YW5jZW9mIF9lKXJldHVybiBtKG4sdCk7aWYoIW4pcmV0dXJuIHQuZm9yY2Vfc2VtaWNvbG9uKCk7Zm9yKDs7KWlmKG4gaW5zdGFuY2VvZiBVZSl7aWYoIW4uYWx0ZXJuYXRpdmUpcmV0dXJuIG0oZS5ib2R5LHQpO249bi5hbHRlcm5hdGl2ZX1lbHNle2lmKCEobiBpbnN0YW5jZW9mIHYpKWJyZWFrO249bi5ib2R5fXAoZS5ib2R5LHQpfShlLHQpLHQuc3BhY2UoKSx0LnByaW50KCJlbHNlIiksdC5zcGFjZSgpLGUuYWx0ZXJuYXRpdmUgaW5zdGFuY2VvZiBVZT9lLmFsdGVybmF0aXZlLnByaW50KHQpOnAoZS5hbHRlcm5hdGl2ZSx0KSk6ZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoTWUsZnVuY3Rpb24oZSxuKXtuLnByaW50KCJzd2l0Y2giKSxuLnNwYWNlKCksbi53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuZXhwcmVzc2lvbi5wcmludChuKX0pLG4uc3BhY2UoKTt2YXIgcj1lLmJvZHkubGVuZ3RoLTE7cjwwP2koZSxuKTpuLndpdGhfYmxvY2soZnVuY3Rpb24oKXtlLmJvZHkuZm9yRWFjaChmdW5jdGlvbihlLHQpe24uaW5kZW50KCEwKSxlLnByaW50KG4pLHQ8ciYmMDxlLmJvZHkubGVuZ3RoJiZuLm5ld2xpbmUoKX0pfSl9KSxNLkRFRk1FVEhPRCgiX2RvX3ByaW50X2JvZHkiLGZ1bmN0aW9uKHQpe3QubmV3bGluZSgpLHRoaXMuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuaW5kZW50KCksZS5wcmludCh0KSx0Lm5ld2xpbmUoKX0pfSksZShOZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImRlZmF1bHQ6IiksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoUGUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJjYXNlIiksdC5zcGFjZSgpLGUuZXhwcmVzc2lvbi5wcmludCh0KSx0LnByaW50KCI6IiksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoSWUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ0cnkiKSx0LnNwYWNlKCksdShlLHQpLGUuYmNhdGNoJiYodC5zcGFjZSgpLGUuYmNhdGNoLnByaW50KHQpKSxlLmJmaW5hbGx5JiYodC5zcGFjZSgpLGUuYmZpbmFsbHkucHJpbnQodCkpfSksZSh6ZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImNhdGNoIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmFyZ25hbWUucHJpbnQodCl9KSx0LnNwYWNlKCksdShlLHQpfSksZShqZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImZpbmFsbHkiKSx0LnNwYWNlKCksdShlLHQpfSksZShIZSxmdW5jdGlvbihlLG4pe24ucHJpbnQoInZhciIpLG4uc3BhY2UoKSxlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0JiZuLmNvbW1hKCksZS5wcmludChuKX0pO3ZhciB0PW4ucGFyZW50KCk7KHQmJnQuaW5pdCE9PWV8fCEodCBpbnN0YW5jZW9mIEVlfHx0IGluc3RhbmNlb2YgQWUpKSYmbi5zZW1pY29sb24oKX0pLGUoJGUsZnVuY3Rpb24oZSx0KXtpZihlLm5hbWUucHJpbnQodCksZS52YWx1ZSl7dC5zcGFjZSgpLHQucHJpbnQoIj0iKSx0LnNwYWNlKCk7dmFyIG49dC5wYXJlbnQoMSkscj1uIGluc3RhbmNlb2YgRWV8fG4gaW5zdGFuY2VvZiBBZTtjKGUudmFsdWUsdCxyKX19KSxlKEtlLGZ1bmN0aW9uKGUsbil7ZS5leHByZXNzaW9uLnByaW50KG4pLGUgaW5zdGFuY2VvZiBHZSYmIWgoZSxuKXx8KChlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBLZXx8ZS5leHByZXNzaW9uIGluc3RhbmNlb2YgT2UpJiZuLmFkZF9tYXBwaW5nKGUuc3RhcnQpLG4ud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbihlLHQpe3QmJm4uY29tbWEoKSxlLnByaW50KG4pfSl9KSl9KSxlKEdlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgibmV3IiksdC5zcGFjZSgpLEtlLnByb3RvdHlwZS5fY29kZWdlbihlLHQpfSksZShZZSxmdW5jdGlvbihlLG4pe2UuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlLHQpezA8dCYmKG4uY29tbWEoKSxuLnNob3VsZF9icmVhaygpJiYobi5uZXdsaW5lKCksbi5pbmRlbnQoKSkpLGUucHJpbnQobil9KX0pLGUoUWUsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cHJlc3Npb247bi5wcmludCh0KTt2YXIgcj1lLnByb3BlcnR5O3Qub3B0aW9uKCJpZTgiKSYmYltyXT8odC5wcmludCgiWyIpLHQuYWRkX21hcHBpbmcoZS5lbmQpLHQucHJpbnRfc3RyaW5nKHIpLHQucHJpbnQoIl0iKSk6KG4gaW5zdGFuY2VvZiB5dCYmMDw9bi5nZXRWYWx1ZSgpJiYoL1t4YS1mLildL2kudGVzdCh0Lmxhc3QoKSl8fHQucHJpbnQoIi4iKSksdC5wcmludCgiLiIpLHQuYWRkX21hcHBpbmcoZS5lbmQpLHQucHJpbnRfbmFtZShyKSl9KSxlKFplLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uLnByaW50KHQpLHQucHJpbnQoIlsiKSxlLnByb3BlcnR5LnByaW50KHQpLHQucHJpbnQoIl0iKX0pLGUoWGUsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm9wZXJhdG9yO3QucHJpbnQobiksKC9eW2Etel0vaS50ZXN0KG4pfHwvWystXSQvLnRlc3QobikmJmUuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFhlJiYvXlsrLV0vLnRlc3QoZS5leHByZXNzaW9uLm9wZXJhdG9yKSkmJnQuc3BhY2UoKSxlLmV4cHJlc3Npb24ucHJpbnQodCl9KSxlKGV0LGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uLnByaW50KHQpLHQucHJpbnQoZS5vcGVyYXRvcil9KSxlKHR0LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5vcGVyYXRvcjtlLmxlZnQucHJpbnQodCksIj4iPT1uWzBdJiZlLmxlZnQgaW5zdGFuY2VvZiBldCYmIi0tIj09ZS5sZWZ0Lm9wZXJhdG9yP3QucHJpbnQoIiAiKTp0LnNwYWNlKCksdC5wcmludChuKSwoIjwiPT1ufHwiPDwiPT1uKSYmZS5yaWdodCBpbnN0YW5jZW9mIFhlJiYiISI9PWUucmlnaHQub3BlcmF0b3ImJmUucmlnaHQuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFhlJiYiLS0iPT1lLnJpZ2h0LmV4cHJlc3Npb24ub3BlcmF0b3I/dC5wcmludCgiICIpOnQuc3BhY2UoKSxlLnJpZ2h0LnByaW50KHQpfSksZShudCxmdW5jdGlvbihlLHQpe2UuY29uZGl0aW9uLnByaW50KHQpLHQuc3BhY2UoKSx0LnByaW50KCI/IiksdC5zcGFjZSgpLGUuY29uc2VxdWVudC5wcmludCh0KSx0LnNwYWNlKCksdC5jb2xvbigpLGUuYWx0ZXJuYXRpdmUucHJpbnQodCl9KSxlKGl0LGZ1bmN0aW9uKHQscil7ci53aXRoX3NxdWFyZShmdW5jdGlvbigpe3ZhciBlPXQuZWxlbWVudHMsbj1lLmxlbmd0aDswPG4mJnIuc3BhY2UoKSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0JiZyLmNvbW1hKCksZS5wcmludChyKSx0PT09bi0xJiZlIGluc3RhbmNlb2YgeHQmJnIuY29tbWEoKX0pLDA8biYmci5zcGFjZSgpfSl9KSxlKG90LGZ1bmN0aW9uKGUsbil7MDxlLnByb3BlcnRpZXMubGVuZ3RoP24ud2l0aF9ibG9jayhmdW5jdGlvbigpe2UucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dCYmKG4ucHJpbnQoIiwiKSxuLm5ld2xpbmUoKSksbi5pbmRlbnQoKSxlLnByaW50KG4pfSksbi5uZXdsaW5lKCl9KTppKGUsbil9KSxlKHN0LGZ1bmN0aW9uKGUsdCl7ZihlLmtleSxlLnF1b3RlLHQpLHQuY29sb24oKSxlLnZhbHVlLnByaW50KHQpfSksYXQuREVGTUVUSE9EKCJfcHJpbnRfZ2V0dGVyX3NldHRlciIsZnVuY3Rpb24oZSx0KXt0LnByaW50KGUpLHQuc3BhY2UoKSxmKHRoaXMua2V5Lm5hbWUsdGhpcy5xdW90ZSx0KSx0aGlzLnZhbHVlLl9kb19wcmludCh0LCEwKX0pLGUoWSxmdW5jdGlvbihlLHQpe2UuX3ByaW50X2dldHRlcl9zZXR0ZXIoInNldCIsdCl9KSxlKFcsZnVuY3Rpb24oZSx0KXtlLl9wcmludF9nZXR0ZXJfc2V0dGVyKCJnZXQiLHQpfSksZSh1dCxmdW5jdGlvbihlLHQpe3ZhciBuPWUuZGVmaW5pdGlvbigpO3QucHJpbnRfbmFtZShuP24ubWFuZ2xlZF9uYW1lfHxuLm5hbWU6ZS5uYW1lKX0pLGUoeHQsbmUpLGUoZ3QsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ0aGlzIil9KSxlKHZ0LGZ1bmN0aW9uKGUsdCl7dC5wcmludChlLmdldFZhbHVlKCkpfSksZShidCxmdW5jdGlvbihlLHQpe3QucHJpbnRfc3RyaW5nKGUuZ2V0VmFsdWUoKSxlLnF1b3RlLG8pfSksZSh5dCxmdW5jdGlvbihlLHQpe3MmJmUuc3RhcnQmJm51bGwhPWUuc3RhcnQucmF3P3QucHJpbnQoZS5zdGFydC5yYXcpOnQucHJpbnQoZChlLmdldFZhbHVlKCkpKX0pLGUoX3QsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldFZhbHVlKCkscj1uLnRvU3RyaW5nKCk7bi5yYXdfc291cmNlJiYocj0iLyIrbi5yYXdfc291cmNlK3Iuc2xpY2Uoci5sYXN0SW5kZXhPZigiLyIpKSkscj10LnRvX3V0ZjgociksdC5wcmludChyKTt2YXIgaT10LnBhcmVudCgpO2kgaW5zdGFuY2VvZiB0dCYmL15pbi8udGVzdChpLm9wZXJhdG9yKSYmaS5sZWZ0PT09ZSYmdC5wcmludCgiICIpfSksdChbbGUsdmUsQ2VdLG5lKSx0KFtpdCxtZSx6ZSx2dCxmZSxWZSxwZSxqZSxVLE9lLEdlLG90LHYsdXQsTWUsTSxJZV0sZnVuY3Rpb24oZSl7ZS5hZGRfbWFwcGluZyh0aGlzLnN0YXJ0KX0pLHQoW1csWV0sZnVuY3Rpb24oZSl7ZS5hZGRfbWFwcGluZyh0aGlzLnN0YXJ0LHRoaXMua2V5Lm5hbWUpfSksdChbYXRdLGZ1bmN0aW9uKGUpe2UuYWRkX21hcHBpbmcodGhpcy5zdGFydCx0aGlzLmtleSl9KX0oKSxuKFh0LnByb3RvdHlwZT1uZXcgV3Qse29wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zW2VdfSxleHBvc2VkOmZ1bmN0aW9uKGUpe2lmKGUuZ2xvYmFsKWZvcih2YXIgdD0wLG49ZS5vcmlnLmxlbmd0aDt0PG47dCsrKWlmKCF0aGlzLnRvcGxldmVsW2Uub3JpZ1t0XWluc3RhbmNlb2YgcHQ/ImZ1bmNzIjoidmFycyJdKXJldHVybiEwO3JldHVybiExfSxjb21wcmVzczpmdW5jdGlvbihlKXtlPWUucmVzb2x2ZV9kZWZpbmVzKHRoaXMpLHRoaXMub3B0aW9uKCJleHByZXNzaW9uIikmJmUucHJvY2Vzc19leHByZXNzaW9uKCEwKTtmb3IodmFyIHQ9K3RoaXMub3B0aW9ucy5wYXNzZXN8fDEsbj0xLzAscj0hMSxpPXtpZTg6dGhpcy5vcHRpb24oImllOCIpfSxvPTA7bzx0O28rKylpZihlLmZpZ3VyZV9vdXRfc2NvcGUoaSksKDA8b3x8dGhpcy5vcHRpb24oInJlZHVjZV92YXJzIikpJiZlLnJlc2V0X29wdF9mbGFncyh0aGlzKSxlPWUudHJhbnNmb3JtKHRoaXMpLDE8dCl7dmFyIGE9MDtpZihlLndhbGsobmV3IER0KGZ1bmN0aW9uKCl7YSsrfSkpLHRoaXMuaW5mbygicGFzcyAiK28rIjogbGFzdF9jb3VudDogIituKyIsIGNvdW50OiAiK2EpLGE8biluPWEscj0hMTtlbHNle2lmKHIpYnJlYWs7cj0hMH19cmV0dXJuIHRoaXMub3B0aW9uKCJleHByZXNzaW9uIikmJmUucHJvY2Vzc19leHByZXNzaW9uKCExKSxlfSxpbmZvOmZ1bmN0aW9uKCl7InZlcmJvc2UiPT10aGlzLm9wdGlvbnMud2FybmluZ3MmJmxlLndhcm4uYXBwbHkobGUsYXJndW1lbnRzKX0sd2FybjpmdW5jdGlvbihlLHQpe2lmKHRoaXMub3B0aW9ucy53YXJuaW5ncyl7dmFyIG49QihlLHQpO24gaW4gdGhpcy53YXJuaW5nc19wcm9kdWNlZHx8KHRoaXMud2FybmluZ3NfcHJvZHVjZWRbbl09ITAsbGUud2Fybi5hcHBseShsZSxhcmd1bWVudHMpKX19LGNsZWFyX3dhcm5pbmdzOmZ1bmN0aW9uKCl7dGhpcy53YXJuaW5nc19wcm9kdWNlZD17fX0sYmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtpZihlLl9zcXVlZXplZClyZXR1cm4gZTt2YXIgcj1lIGluc3RhbmNlb2Yga2U7ciYmKGUuaG9pc3RfcHJvcGVydGllcyh0aGlzKSxlLmhvaXN0X2RlY2xhcmF0aW9ucyh0aGlzKSksdChlLHRoaXMpLHQoZSx0aGlzKTt2YXIgaT1lLm9wdGltaXplKHRoaXMpO3JldHVybiByJiYoaS5kcm9wX3VudXNlZCh0aGlzKSx0KGksdGhpcykpLGk9PT1lJiYoaS5fc3F1ZWV6ZWQ9ITApLGl9fSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gZyhlLHQpe2lmKCEoKHQ9ZCh0KSlpbnN0YW5jZW9mIGxlKSl7dmFyIG47aWYoZSBpbnN0YW5jZW9mIGl0KXt2YXIgcj1lLmVsZW1lbnRzO2lmKCJsZW5ndGgiPT10KXJldHVybiBQKHIubGVuZ3RoLGUpOyJudW1iZXIiPT10eXBlb2YgdCYmdCBpbiByJiYobj1yW3RdKX1lbHNlIGlmKGUgaW5zdGFuY2VvZiBvdCl7dD0iIit0O2Zvcih2YXIgaT1lLnByb3BlcnRpZXMsbz1pLmxlbmd0aDswPD0tLW87KXtpZighKGlbb11pbnN0YW5jZW9mIHN0KSlyZXR1cm47bnx8aVtvXS5rZXkhPT10fHwobj1pW29dLnZhbHVlKX19cmV0dXJuIG4gaW5zdGFuY2VvZiBtdCYmbi5maXhlZF92YWx1ZSgpfHxufX1mdW5jdGlvbiBZKGUsdCxuLHIsaSxvKXt2YXIgYT10LnBhcmVudChpKSxzPWVlKG4sYSk7aWYocylyZXR1cm4gcztpZighbyYmYSBpbnN0YW5jZW9mIEtlJiZhLmV4cHJlc3Npb249PT1uJiYhYS5pc19leHByX3B1cmUoZSkmJighKHIgaW5zdGFuY2VvZiBEZSl8fCEoYSBpbnN0YW5jZW9mIEdlKSYmci5jb250YWluc190aGlzKCkpKXJldHVybiEwO2lmKGEgaW5zdGFuY2VvZiBpdClyZXR1cm4gWShlLHQsYSxhLGkrMSk7aWYoYSBpbnN0YW5jZW9mIHN0JiZuPT09YS52YWx1ZSl7dmFyIHU9dC5wYXJlbnQoaSsxKTtyZXR1cm4gWShlLHQsdSx1LGkrMil9aWYoYSBpbnN0YW5jZW9mIFdlJiZhLmV4cHJlc3Npb249PT1uKXt2YXIgbD1nKHIsYS5wcm9wZXJ0eSk7cmV0dXJuIW8mJlkoZSx0LGEsbCxpKzEpfX1mdW5jdGlvbiBXKGUpe2lmKGUgaW5zdGFuY2VvZiBndClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuIGUuZGVmaW5pdGlvbigpLm9yaWdbMF1pbnN0YW5jZW9mIGh0O2lmKGUgaW5zdGFuY2VvZiBXZSl7aWYoKGU9ZS5leHByZXNzaW9uKWluc3RhbmNlb2YgbXQpe2lmKGUuaXNfaW1tdXRhYmxlKCkpcmV0dXJuITE7ZT1lLmZpeGVkX3ZhbHVlKCl9cmV0dXJuIWV8fCghIWUuaXNfY29uc3RhbnQoKXx8VyhlKSl9cmV0dXJuITF9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbixyPTA7KG49ZS5wYXJlbnQocisrKSkmJiEobiBpbnN0YW5jZW9mIGtlKTspaWYobiBpbnN0YW5jZW9mIHplKXtuPW4uYXJnbmFtZS5kZWZpbml0aW9uKCkuc2NvcGU7YnJlYWt9cmV0dXJuIG4uZmluZF92YXJpYWJsZSh0KX1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gbnx8KG49e30pLHQmJihuLnN0YXJ0fHwobi5zdGFydD10LnN0YXJ0KSxuLmVuZHx8KG4uZW5kPXQuZW5kKSksbmV3IGUobil9ZnVuY3Rpb24gTihlLHQpe3JldHVybiAxPT10Lmxlbmd0aD90WzBdOlEoWWUsZSx7ZXhwcmVzc2lvbnM6dC5yZWR1Y2UoaCxbXSl9KX1mdW5jdGlvbiBQKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIFEoYnQsdCx7dmFsdWU6ZX0pO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNOYU4oZSk/UShFdCx0KTppc0Zpbml0ZShlKT8xL2U8MD9RKFhlLHQse29wZXJhdG9yOiItIixleHByZXNzaW9uOlEoeXQsdCx7dmFsdWU6LWV9KX0pOlEoeXQsdCx7dmFsdWU6ZX0pOmU8MD9RKFhlLHQse29wZXJhdG9yOiItIixleHByZXNzaW9uOlEoa3QsdCl9KTpRKGt0LHQpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFEoZT9TdDpPdCx0KTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIFEoQXQsdCk7ZGVmYXVsdDppZihudWxsPT09ZSlyZXR1cm4gUSh3dCx0LHt2YWx1ZTpudWxsfSk7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUShfdCx0LHt2YWx1ZTplfSk7dGhyb3cgbmV3IEVycm9yKEIoIkNhbid0IGhhbmRsZSBjb25zdGFudCBvZiB0eXBlOiB7dHlwZX0iLHt0eXBlOnR5cGVvZiBlfSkpfX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBXZXx8ZS5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJmoodCkmJiJldmFsIj09dC5uYW1lfWZ1bmN0aW9uIFooZSx0LG4scil7cmV0dXJuIHQgaW5zdGFuY2VvZiBYZSYmImRlbGV0ZSI9PXQub3BlcmF0b3J8fCJDYWxsIj09dC5UWVBFJiZ0LmV4cHJlc3Npb249PT1uJiZhKGUscik/TihuLFtRKHl0LG4se3ZhbHVlOjB9KSxyXSk6cn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBZZT9lLnB1c2guYXBwbHkoZSx0LmV4cHJlc3Npb25zKTplLnB1c2godCksZX1mdW5jdGlvbiBfKGUpe2lmKG51bGw9PT1lKXJldHVybltdO2lmKGUgaW5zdGFuY2VvZiBtZSlyZXR1cm4gZS5ib2R5O2lmKGUgaW5zdGFuY2VvZiBnZSlyZXR1cm5bXTtpZihlIGluc3RhbmNlb2YgY2UpcmV0dXJuW2VdO3Rocm93IG5ldyBFcnJvcigiQ2FuJ3QgY29udmVydCB0aGluZyB0byBzdGF0ZW1lbnQgYXJyYXkiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBudWxsPT09ZXx8KGUgaW5zdGFuY2VvZiBnZXx8ZSBpbnN0YW5jZW9mIG1lJiYwPT1lLmJvZHkubGVuZ3RoKX1mdW5jdGlvbiB3KGUpe3JldHVybiBlIGluc3RhbmNlb2YgYmUmJmUuYm9keSBpbnN0YW5jZW9mIG1lP2UuYm9keTplfWZ1bmN0aW9uIEooZSl7Zm9yKDtlIGluc3RhbmNlb2YgV2U7KWU9ZS5leHByZXNzaW9uO3JldHVybiBlfWZ1bmN0aW9uIHooZSl7cmV0dXJuIkNhbGwiPT1lLlRZUEUmJihlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBEZXx8eihlLmV4cHJlc3Npb24pKX1mdW5jdGlvbiBqKGUpe3JldHVybiBlIGluc3RhbmNlb2YgbXQmJmUuZGVmaW5pdGlvbigpLnVuZGVjbGFyZWR9ZShsZSxmdW5jdGlvbihlLHQpe3JldHVybiBlfSksbGUuREVGTUVUSE9EKCJlcXVpdmFsZW50X3RvIixmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5UWVBFPT1lLlRZUEUmJnRoaXMucHJpbnRfdG9fc3RyaW5nKCk9PWUucHJpbnRfdG9fc3RyaW5nKCl9KSxrZS5ERUZNRVRIT0QoInByb2Nlc3NfZXhwcmVzc2lvbiIsZnVuY3Rpb24ocixpKXt2YXIgbz10aGlzLGE9bmV3IFd0KGZ1bmN0aW9uKGUpe2lmKHImJmUgaW5zdGFuY2VvZiBoZSlyZXR1cm4gUShSZSxlLHt2YWx1ZTplLmJvZHl9KTtpZighciYmZSBpbnN0YW5jZW9mIFJlKXtpZihpKXt2YXIgdD1lLnZhbHVlJiZlLnZhbHVlLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShpLCEwKTtyZXR1cm4gdD9RKGhlLGUse2JvZHk6dH0pOlEoZ2UsZSl9cmV0dXJuIFEoaGUsZSx7Ym9keTplLnZhbHVlfHxRKFhlLGUse29wZXJhdG9yOiJ2b2lkIixleHByZXNzaW9uOlEoeXQsZSx7dmFsdWU6MH0pfSl9KX1pZihlIGluc3RhbmNlb2YgT2UmJmUhPT1vKXJldHVybiBlO2lmKGUgaW5zdGFuY2VvZiBkZSl7dmFyIG49ZS5ib2R5Lmxlbmd0aC0xOzA8PW4mJihlLmJvZHlbbl09ZS5ib2R5W25dLnRyYW5zZm9ybShhKSl9ZWxzZSBlIGluc3RhbmNlb2YgVWU/KGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKGEpLGUuYWx0ZXJuYXRpdmUmJihlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKGEpKSk6ZSBpbnN0YW5jZW9mIHhlJiYoZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0oYSkpO3JldHVybiBlfSk7by50cmFuc2Zvcm0oYSl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUsdCxuKXtuLmFzc2lnbm1lbnRzPTAsbi5jaGFpbmVkPSExLG4uZGlyZWN0X2FjY2Vzcz0hMSxuLmVzY2FwZWQ9ITEsbi5maXhlZD0hbi5zY29wZS5waW5uZWQoKSYmIXQuZXhwb3NlZChuKSYmIShuLmluaXQgaW5zdGFuY2VvZiBEZSYmbi5pbml0IT09bi5zY29wZSkmJm4uaW5pdCxuLmZpeGVkIGluc3RhbmNlb2YgVGUmJiFzZShuLnJlZmVyZW5jZXMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY29wZTtkb3tpZihuLnNjb3BlPT09dClyZXR1cm4hMH13aGlsZSh0IGluc3RhbmNlb2YgRGUmJih0PXQucGFyZW50X3Njb3BlKSl9KSYmKGUuZGVmdW5faWRzW24uaWRdPSExKSxuLnJlY3Vyc2l2ZV9yZWZzPTAsbi5yZWZlcmVuY2VzPVtdLG4uc2hvdWxkX3JlcGxhY2U9dm9pZCAwLG4uc2luZ2xlX3VzZT12b2lkIDB9ZnVuY3Rpb24gYSh0LG4sZSl7ZS52YXJpYWJsZXMuZWFjaChmdW5jdGlvbihlKXtyKHQsbixlKSxudWxsPT09ZS5maXhlZD8oZS5zYWZlX2lkcz10LnNhZmVfaWRzLGYodCxlLCEwKSk6ZS5maXhlZCYmKHQubG9vcF9pZHNbZS5pZF09dC5pbl9sb29wLGYodCxlLCEwKSl9KSxlLm1heV9jYWxsX3RoaXM9ZnVuY3Rpb24oKXtlLm1heV9jYWxsX3RoaXM9bmUsZS5jb250YWluc190aGlzKCkmJmUuZnVuY3Rpb25zLmVhY2goZnVuY3Rpb24oZSl7ZS5pbml0IGluc3RhbmNlb2YgVGUmJiEoZS5pZCBpbiB0LmRlZnVuX2lkcykmJih0LmRlZnVuX2lkc1tlLmlkXT0hMSl9KX19ZnVuY3Rpb24gcyh0LG4pe2lmKG4uaWQgaW4gdC5kZWZ1bl9pZHMpe3ZhciBlPXQuZGVmdW5faWRzW24uaWRdO2lmKCFlKXJldHVybjt2YXIgcj10LmRlZnVuX3Zpc2l0ZWRbbi5pZF07aWYoZT09PXQuc2FmZV9pZHMpe2lmKCFyKXJldHVybiBuLmZpeGVkfWVsc2Ugcj9uLmluaXQuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtuLmluaXQudmFyaWFibGVzLmdldChlLm5hbWUpIT09ZSYmKHAodCxlKXx8KGUuZml4ZWQ9ITEpKX0pOnQuZGVmdW5faWRzW24uaWRdPSExfWVsc2V7aWYoIXQuaW5fbG9vcClyZXR1cm4gdC5kZWZ1bl9pZHNbbi5pZF09dC5zYWZlX2lkcyxuLmZpeGVkO3QuZGVmdW5faWRzW24uaWRdPSExfX1mdW5jdGlvbiB1KHQsZSl7ZS5mdW5jdGlvbnMuZWFjaChmdW5jdGlvbihlKXtlLmluaXQgaW5zdGFuY2VvZiBUZSYmIXQuZGVmdW5fdmlzaXRlZFtlLmlkXSYmKHQuZGVmdW5faWRzW2UuaWRdPXQuc2FmZV9pZHMsZS5pbml0LndhbGsodCkpfSl9ZnVuY3Rpb24gbChlKXtlLnNhZmVfaWRzPU9iamVjdC5jcmVhdGUoZS5zYWZlX2lkcyl9ZnVuY3Rpb24gYyhlKXtlLnNhZmVfaWRzPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnNhZmVfaWRzKX1mdW5jdGlvbiBmKGUsdCxuKXtlLnNhZmVfaWRzW3QuaWRdPW59ZnVuY3Rpb24gcChlLHQpe2lmKCJtIj09dC5zaW5nbGVfdXNlKXJldHVybiExO2lmKGUuc2FmZV9pZHNbdC5pZF0pe2lmKG51bGw9PXQuZml4ZWQpe3ZhciBuPXQub3JpZ1swXTtpZihuIGluc3RhbmNlb2YgZnR8fCJhcmd1bWVudHMiPT1uLm5hbWUpcmV0dXJuITE7dC5maXhlZD1RKEF0LG4pfXJldHVybiEwfXJldHVybiB0LmZpeGVkIGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gaChlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09dC5maXhlZHx8KG51bGw9PT10LmZpeGVkJiZ0LnNhZmVfaWRzPyh0LnNhZmVfaWRzW3QuaWRdPSExLGRlbGV0ZSB0LnNhZmVfaWRzLCEwKTohIXVlKGUuc2FmZV9pZHMsdC5pZCkmJighIXAoZSx0KSYmKCExIT09dC5maXhlZCYmKCEobnVsbCE9dC5maXhlZCYmKCFyfHx0LnJlZmVyZW5jZXMubGVuZ3RoPnQuYXNzaWdubWVudHMpKSYmKHQuZml4ZWQgaW5zdGFuY2VvZiBUZT9yIGluc3RhbmNlb2YgbGUmJnQuZml4ZWQucGFyZW50X3Njb3BlPT09bjpzZSh0Lm9yaWcsZnVuY3Rpb24oZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgcHR8fGUgaW5zdGFuY2VvZiBodCl9KSkpKSkpfWZ1bmN0aW9uIGQoZSx0LG4scixpLG8sYSl7dmFyIHM9ZS5wYXJlbnQobyk7aWYoIWl8fCFpLmlzX2NvbnN0YW50KCkpe2lmKHMgaW5zdGFuY2VvZiBydCYmIj0iPT1zLm9wZXJhdG9yJiZyPT09cy5yaWdodHx8cyBpbnN0YW5jZW9mIEtlJiYociE9PXMuZXhwcmVzc2lvbnx8cyBpbnN0YW5jZW9mIEdlKXx8cyBpbnN0YW5jZW9mIEJlJiZyPT09cy52YWx1ZSYmci5zY29wZSE9PXQuc2NvcGV8fHMgaW5zdGFuY2VvZiAkZSYmcj09PXMudmFsdWUpcmV0dXJuISgxPGEpfHxpJiZpLmlzX2NvbnN0YW50X2V4cHJlc3Npb24obil8fChhPTEpLHZvaWQoKCF0LmVzY2FwZWR8fHQuZXNjYXBlZD5hKSYmKHQuZXNjYXBlZD1hKSk7aWYocyBpbnN0YW5jZW9mIGl0fHxzIGluc3RhbmNlb2YgdHQmJlhbcy5vcGVyYXRvcl18fHMgaW5zdGFuY2VvZiBudCYmciE9PXMuY29uZGl0aW9ufHxzIGluc3RhbmNlb2YgWWUmJnI9PT1zLnRhaWxfbm9kZSgpKWQoZSx0LG4scyxzLG8rMSxhKTtlbHNlIGlmKHMgaW5zdGFuY2VvZiBzdCYmcj09PXMudmFsdWUpe3ZhciB1PWUucGFyZW50KG8rMSk7ZChlLHQsbix1LHUsbysyLGEpfWVsc2UgaWYocyBpbnN0YW5jZW9mIFdlJiZyPT09cy5leHByZXNzaW9uJiYoZChlLHQsbixzLGk9ZyhpLHMucHJvcGVydHkpLG8rMSxhKzEpLGkpKXJldHVybjswPG98fHMgaW5zdGFuY2VvZiBZZSYmciE9PXMudGFpbF9ub2RlKCl8fHMgaW5zdGFuY2VvZiBoZXx8KHQuZGlyZWN0X2FjY2Vzcz0hMCl9fWZ1bmN0aW9uIG0oZSl7aWYoZSBpbnN0YW5jZW9mIFplKXt2YXIgdD1lLmV4cHJlc3Npb24sbj1lLnByb3BlcnR5O3QgaW5zdGFuY2VvZiBtdCYmImFyZ3VtZW50cyI9PXQubmFtZSYmbiBpbnN0YW5jZW9mIHl0JiYodC5kZWZpbml0aW9uKCkucmVhc3NpZ25lZD0hMCl9fWUobGUsbmUpO3ZhciBuPW5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdXQpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3QmJihlIGluc3RhbmNlb2YgbXQmJnQucmVmZXJlbmNlcy5wdXNoKGUpLHQuZml4ZWQ9ITEpfX0pO2UoU2UsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsKGUpLGEoZSxuLHRoaXMpLHQoKSxjKGUpLHUoZSx0aGlzKSwhMH0pLGUocnQsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT1yLmxlZnQ7aWYoaSBpbnN0YW5jZW9mIG10KXt2YXIgbz1pLmRlZmluaXRpb24oKSxhPWgoZSxvLGkuc2NvcGUsci5yaWdodCk7by5hc3NpZ25tZW50cysrO3ZhciBzPW8uZml4ZWQ7aWYoc3x8Ij0iPT1yLm9wZXJhdG9yKXt2YXIgdT0iPSI9PXIub3BlcmF0b3IsbD11P3IucmlnaHQ6cjtpZighWShuLGUscixsLDApJiYodXx8KG8uY2hhaW5lZD0hMCksby5maXhlZD11P2Z1bmN0aW9uKCl7cmV0dXJuIHIucmlnaHR9OmZ1bmN0aW9uKCl7cmV0dXJuIFEodHQscix7b3BlcmF0b3I6ci5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OnMgaW5zdGFuY2VvZiBsZT9zOnMoKSxyaWdodDpyLnJpZ2h0fSl9LGEpKXJldHVybiBvLnJlZmVyZW5jZXMucHVzaChpKSxmKGUsbywhMSksci5yaWdodC53YWxrKGUpLGYoZSxvLCEwKSxkKGUsbyxpLnNjb3BlLHIsbCwwLDEpLCEwfX1lbHNlIG0oaSl9KSxlKHR0LGZ1bmN0aW9uKGUpe2lmKFhbdGhpcy5vcGVyYXRvcl0pcmV0dXJuIHRoaXMubGVmdC53YWxrKGUpLGwoZSksdGhpcy5yaWdodC53YWxrKGUpLGMoZSksITB9KSxlKEtlLGZ1bmN0aW9uKGUsdCl7ZS5maW5kX3BhcmVudChrZSkubWF5X2NhbGxfdGhpcygpO3ZhciBuPXRoaXMuZXhwcmVzc2lvbjtpZihuIGluc3RhbmNlb2YgbXQpe3ZhciByPW4uZGVmaW5pdGlvbigpO2lmKHIuZml4ZWQgaW5zdGFuY2VvZiBUZSl7dmFyIGk9cyhlLHIpO2lmKGkpcmV0dXJuIHQoKSxpLndhbGsoZSksITB9fX0pLGUoUGUsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSksdGhpcy5leHByZXNzaW9uLndhbGsoZSksYyhlKSxsKGUpLHEodGhpcyxlKSxjKGUpLCEwfSksZShudCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb25kaXRpb24ud2FsayhlKSxsKGUpLHRoaXMuY29uc2VxdWVudC53YWxrKGUpLGMoZSksbChlKSx0aGlzLmFsdGVybmF0aXZlLndhbGsoZSksYyhlKSwhMH0pLGUoTmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlKSx0KCksYyhlKSwhMH0pLGUoVGUsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMubmFtZS5kZWZpbml0aW9uKCkuaWQ7cmV0dXJuIGUuZGVmdW5fdmlzaXRlZFtyXXx8ZS5kZWZ1bl9pZHNbcl0hPT1lLnNhZmVfaWRzfHwoZS5kZWZ1bl92aXNpdGVkW3JdPSEwLHRoaXMuaW5saW5lZD0hMSxsKGUpLGEoZSxuLHRoaXMpLHQoKSxjKGUpLHUoZSx0aGlzKSksITB9KSxlKF9lLGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5fbG9vcDtyZXR1cm4gZS5pbl9sb29wPXRoaXMsbChlKSx0aGlzLmJvZHkud2FsayhlKSx4KHRoaXMpJiYoYyhlKSxsKGUpKSx0aGlzLmNvbmRpdGlvbi53YWxrKGUpLGMoZSksZS5pbl9sb29wPXQsITB9KSxlKEVlLGZ1bmN0aW9uKGUpe3RoaXMuaW5pdCYmdGhpcy5pbml0LndhbGsoZSk7dmFyIHQ9ZS5pbl9sb29wO3JldHVybiBlLmluX2xvb3A9dGhpcyxsKGUpLHRoaXMuY29uZGl0aW9uJiZ0aGlzLmNvbmRpdGlvbi53YWxrKGUpLHRoaXMuYm9keS53YWxrKGUpLHRoaXMuc3RlcCYmKHgodGhpcykmJihjKGUpLGwoZSkpLHRoaXMuc3RlcC53YWxrKGUpKSxjKGUpLGUuaW5fbG9vcD10LCEwfSksZShBZSxmdW5jdGlvbihlKXt0aGlzLmluaXQud2FsayhuKSx0aGlzLm9iamVjdC53YWxrKGUpO3ZhciB0PWUuaW5fbG9vcDtyZXR1cm4gZS5pbl9sb29wPXRoaXMsbChlKSx0aGlzLmJvZHkud2FsayhlKSxjKGUpLGUuaW5fbG9vcD10LCEwfSksZShEZSxmdW5jdGlvbihyLGUsdCl7dmFyIGksbz10aGlzO3JldHVybiBvLmlubGluZWQ9ITEsbChyKSxhKHIsdCxvKSwhby5uYW1lJiYoaT1yLnBhcmVudCgpKWluc3RhbmNlb2YgS2UmJmkuZXhwcmVzc2lvbj09PW8mJm8uYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPWUuZGVmaW5pdGlvbigpO3ZvaWQgMCE9PW4uZml4ZWR8fG8udXNlc19hcmd1bWVudHMmJiFyLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKT9uLmZpeGVkPSExOihuLmZpeGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYXJnc1t0XXx8UShBdCxpKX0sci5sb29wX2lkc1tuLmlkXT1yLmluX2xvb3AsZihyLG4sITApKX0pLGUoKSxjKHIpLHUocixvKSwhMH0pLGUoVWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLndhbGsoZSksbChlKSx0aGlzLmJvZHkud2FsayhlKSxjKGUpLHRoaXMuYWx0ZXJuYXRpdmUmJihsKGUpLHRoaXMuYWx0ZXJuYXRpdmUud2FsayhlKSxjKGUpKSwhMH0pLGUodmUsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSksdGhpcy5ib2R5LndhbGsoZSksYyhlKSwhMH0pLGUoZHQsZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb24oKS5maXhlZD0hMX0pLGUobXQsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10aGlzLmRlZmluaXRpb24oKTtpZihvLnJlZmVyZW5jZXMucHVzaCh0aGlzKSwxPT1vLnJlZmVyZW5jZXMubGVuZ3RoJiYhby5maXhlZCYmby5vcmlnWzBdaW5zdGFuY2VvZiBwdCYmKGUubG9vcF9pZHNbby5pZF09ZS5pbl9sb29wKSx2b2lkIDAhPT1vLmZpeGVkJiZwKGUsbyk/by5maXhlZCYmKChyPXRoaXMuZml4ZWRfdmFsdWUoKSlpbnN0YW5jZW9mIE9lJiYkKGUsbyk/by5yZWN1cnNpdmVfcmVmcysrOnImJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5vcHRpb24oInVudXNlZCIpJiYhbi5zY29wZS5waW5uZWQoKSYmbi5yZWZlcmVuY2VzLmxlbmd0aC1uLnJlY3Vyc2l2ZV9yZWZzPT0xJiZlLmxvb3BfaWRzW24uaWRdPT09ZS5pbl9sb29wfShlLG4sbyk/by5zaW5nbGVfdXNlPXIgaW5zdGFuY2VvZiBPZSYmIXIucGlubmVkKCl8fG8uc2NvcGU9PT10aGlzLnNjb3BlJiZyLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oKTpvLnNpbmdsZV91c2U9ITEsWShuLGUsdGhpcyxyLDAsZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYoZS5pc19jb25zdGFudCgpfHxlIGluc3RhbmNlb2YgT2V8fGUgaW5zdGFuY2VvZiBndCl9KHIpKSYmKG8uc2luZ2xlX3VzZT9vLnNpbmdsZV91c2U9Im0iOm8uZml4ZWQ9ITEpKTpvLmZpeGVkPSExLGQoZSxvLHRoaXMuc2NvcGUsdGhpcyxyLDAsMSksby5maXhlZCBpbnN0YW5jZW9mIFRlJiYhKChpPWUucGFyZW50KCkpaW5zdGFuY2VvZiBLZSYmaS5leHByZXNzaW9uPT09dGhpcykpe3ZhciBhPXMoZSxvKTthJiZhLndhbGsoZSl9fSksZShDZSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZ2xvYmFscy5lYWNoKGZ1bmN0aW9uKGUpe3IodCxuLGUpfSksbCh0KSxhKHQsbix0aGlzKSxlKCksYyh0KSx1KHQsdGhpcyksITB9KSxlKEllLGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpLHEodGhpcyxlKSxjKGUpLHRoaXMuYmNhdGNoJiYobChlKSx0aGlzLmJjYXRjaC53YWxrKGUpLGMoZSkpLHRoaXMuYmZpbmFsbHkmJnRoaXMuYmZpbmFsbHkud2FsayhlKSwhMH0pLGUoSmUsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCIrKyI9PW4ub3BlcmF0b3J8fCItLSI9PW4ub3BlcmF0b3Ipe3ZhciByPW4uZXhwcmVzc2lvbjtpZihyIGluc3RhbmNlb2YgbXQpe3ZhciBpPXIuZGVmaW5pdGlvbigpLG89aChlLGksci5zY29wZSwhMCk7aS5hc3NpZ25tZW50cysrO3ZhciBhPWkuZml4ZWQ7aWYoYSYmKGkuY2hhaW5lZD0hMCxpLmZpeGVkPWZ1bmN0aW9uKCl7cmV0dXJuIFEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OlEoWGUsbix7b3BlcmF0b3I6IisiLGV4cHJlc3Npb246YSBpbnN0YW5jZW9mIGxlP2E6YSgpfSkscmlnaHQ6USh5dCxuLHt2YWx1ZToxfSl9KX0sbykpcmV0dXJuIGkucmVmZXJlbmNlcy5wdXNoKHIpLGYoZSxpLCEwKSwhMH1lbHNlIG0ocil9fSksZSgkZSxmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLm5hbWUuZGVmaW5pdGlvbigpO2lmKG4udmFsdWUpe2lmKGgoZSxyLG4ubmFtZS5zY29wZSxuLnZhbHVlKSlyZXR1cm4gci5maXhlZD1mdW5jdGlvbigpe3JldHVybiBuLnZhbHVlfSxlLmxvb3BfaWRzW3IuaWRdPWUuaW5fbG9vcCxmKGUsciwhMSksdCgpLGYoZSxyLCEwKSwhMDtyLmZpeGVkPSExfX0pLGUod2UsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmluX2xvb3A7cmV0dXJuIGUuaW5fbG9vcD10aGlzLGwoZSksdCgpLGMoZSksZS5pbl9sb29wPW4sITB9KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgicmVkdWNlX3ZhcnMiLHQpfSksQ2UuREVGTUVUSE9EKCJyZXNldF9vcHRfZmxhZ3MiLGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBEdChuLm9wdGlvbigicmVkdWNlX3ZhcnMiKT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9zcXVlZXplZD0hMSxlLl9vcHRpbWl6ZWQ9ITEsZS5yZWR1Y2VfdmFycyhyLHQsbil9OmZ1bmN0aW9uKGUpe2UuX3NxdWVlemVkPSExLGUuX29wdGltaXplZD0hMX0pO3IuZGVmdW5faWRzPU9iamVjdC5jcmVhdGUobnVsbCksci5kZWZ1bl92aXNpdGVkPU9iamVjdC5jcmVhdGUobnVsbCksci5pbl9sb29wPW51bGwsci5sb29wX2lkcz1PYmplY3QuY3JlYXRlKG51bGwpLHIuc2FmZV9pZHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndhbGsocil9KSx1dC5ERUZNRVRIT0QoImZpeGVkX3ZhbHVlIixmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVmaW5pdGlvbigpLmZpeGVkO3JldHVybiFlfHxlIGluc3RhbmNlb2YgbGU/ZTplKCl9KSxtdC5ERUZNRVRIT0QoImlzX2ltbXV0YWJsZSIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRlZmluaXRpb24oKS5vcmlnO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgaHR9KTt2YXIgdD1hZSgiQXJyYXkgQm9vbGVhbiBjbGVhckludGVydmFsIGNsZWFyVGltZW91dCBjb25zb2xlIERhdGUgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCBlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IEVycm9yIGVzY2FwZSBldmFsIEV2YWxFcnJvciBGdW5jdGlvbiBpc0Zpbml0ZSBpc05hTiBKU09OIE1hdGggTnVtYmVyIHBhcnNlRmxvYXQgcGFyc2VJbnQgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBSZWdFeHAgT2JqZWN0IHNldEludGVydmFsIHNldFRpbWVvdXQgU3RyaW5nIFN5bnRheEVycm9yIFR5cGVFcnJvciB1bmVzY2FwZSBVUklFcnJvciIpO210LkRFRk1FVEhPRCgiaXNfZGVjbGFyZWQiLGZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmRlZmluaXRpb24oKS51bmRlY2xhcmVkfHxlLm9wdGlvbigidW5zYWZlIikmJnRbdGhpcy5uYW1lXX0pO3ZhciBuLHIsVj1hZSgiSW5maW5pdHkgTmFOIHVuZGVmaW5lZCIpO2Z1bmN0aW9uIGkoZSx1KXt2YXIgSCwkLEs7IWZ1bmN0aW9uKCl7dmFyIGU9dS5zZWxmKCksdD0wO2Rve2lmKGUgaW5zdGFuY2VvZiB6ZXx8ZSBpbnN0YW5jZW9mIGplKXQrKztlbHNlIGlmKGUgaW5zdGFuY2VvZiBiZSlIPSEwO2Vsc2V7aWYoZSBpbnN0YW5jZW9mIGtlKXtLPWU7YnJlYWt9ZSBpbnN0YW5jZW9mIEllJiYoJD0hMCl9fXdoaWxlKGU9dS5wYXJlbnQodCsrKSl9KCk7Zm9yKHZhciBHLHQ9MTA7Rz0hMSxpKGUpLHUub3B0aW9uKCJkZWFkX2NvZGUiKSYmbyhlLHUpLHUub3B0aW9uKCJpZl9yZXR1cm4iKSYmcihlLHUpLDA8dS5zZXF1ZW5jZXNfbGltaXQmJihhKGUsdSkscyhlLHUpKSx1Lm9wdGlvbigiam9pbl92YXJzIikmJmYoZSksdS5vcHRpb24oImNvbGxhcHNlX3ZhcnMiKSYmbihlLHUpLEcmJjA8dC0tOyk7ZnVuY3Rpb24gbihuLHUpe2lmKEsucGlubmVkKCkpcmV0dXJuIG47Zm9yKHZhciBsLGUsdCxjPVtdLG89bi5sZW5ndGgsYT1uZXcgV3QoZnVuY3Rpb24oZSl7aWYoaylyZXR1cm4gZTtpZigheClyZXR1cm4gZSE9PWlbc10/ZTorK3M8aS5sZW5ndGg/QihlKTooeD0hMCwoaD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1hLnBhcmVudChuKTtpZihpIGluc3RhbmNlb2YgcnQpcmV0dXJuIHImJiEoaS5sZWZ0IGluc3RhbmNlb2YgV2V8fGkubGVmdC5uYW1lIGluIHkpP2UoaSxuKzEscik6dDtpZihpIGluc3RhbmNlb2YgdHQpcmV0dXJuIXJ8fFhbaS5vcGVyYXRvcl0mJmkubGVmdCE9PXQ/dDplKGksbisxLHIpO2lmKGkgaW5zdGFuY2VvZiBLZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgUGUpcmV0dXJuIHQ7aWYoaSBpbnN0YW5jZW9mIG50KXJldHVybiByJiZpLmNvbmRpdGlvbj09PXQ/ZShpLG4rMSxyKTp0O2lmKGkgaW5zdGFuY2VvZiBWZSlyZXR1cm4gZShpLG4rMSwhMCk7aWYoaSBpbnN0YW5jZW9mIEJlKXJldHVybiByP2UoaSxuKzEscik6dDtpZihpIGluc3RhbmNlb2YgVWUpcmV0dXJuIHImJmkuY29uZGl0aW9uPT09dD9lKGksbisxLHIpOnQ7aWYoaSBpbnN0YW5jZW9mIGJlKXJldHVybiB0O2lmKGkgaW5zdGFuY2VvZiBXZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgWWUpcmV0dXJuIGUoaSxuKzEsaS50YWlsX25vZGUoKSE9PXQpO2lmKGkgaW5zdGFuY2VvZiBoZSlyZXR1cm4gZShpLG4rMSwhMCk7aWYoaSBpbnN0YW5jZW9mIE1lKXJldHVybiB0O2lmKGkgaW5zdGFuY2VvZiBKZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgJGUpcmV0dXJuIHQ7cmV0dXJuIG51bGx9KGUsMCkpPT09ZSYmKGs9ITApLGUpO3ZhciB0LG49YS5wYXJlbnQoKTtpZihmdW5jdGlvbihlLHQpe2lmKHQgaW5zdGFuY2VvZiBFZSlyZXR1cm4gZSE9PXQuaW5pdDtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuIj0iIT1lLm9wZXJhdG9yJiZtLmVxdWl2YWxlbnRfdG8oZS5sZWZ0KTtpZihlIGluc3RhbmNlb2YgS2UpcmV0dXJuIG0gaW5zdGFuY2VvZiBXZSYmbS5lcXVpdmFsZW50X3RvKGUuZXhwcmVzc2lvbik7cmV0dXJuIGUgaW5zdGFuY2VvZiBmZXx8KGUgaW5zdGFuY2VvZiBiZT8hKGUgaW5zdGFuY2VvZiBFZSk6ZSBpbnN0YW5jZW9mIExlfHxlIGluc3RhbmNlb2YgSWV8fGUgaW5zdGFuY2VvZiB4ZXx8IXcmJmUgaW5zdGFuY2VvZiBtdCYmIWUuaXNfZGVjbGFyZWQodSkpfShlLG4pKXJldHVybiBrPSEwLGU7aWYoIWQmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0dD9YW3Qub3BlcmF0b3JdJiZ0LmxlZnQhPT1lOnQgaW5zdGFuY2VvZiBudD90LmNvbmRpdGlvbiE9PWU6dCBpbnN0YW5jZW9mIFVlJiZ0LmNvbmRpdGlvbiE9PWV9KGUsbikmJihkPW4pLCFPfHxlIGluc3RhbmNlb2YgbHR8fCEodiYmbS5lcXVpdmFsZW50X3RvKGUpfHxiJiYodD1iKGUsdGhpcykpKSlyZXR1cm4oZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgS2UpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIEJlKXJldHVybiBnfHxtIGluc3RhbmNlb2YgV2V8fGoobSk7aWYoZSBpbnN0YW5jZW9mIERlKXJldHVybiB1Lm9wdGlvbigiaWU4IikmJmUubmFtZSYmZS5uYW1lLm5hbWUgaW4geTtpZihlIGluc3RhbmNlb2YgV2UpcmV0dXJuIGd8fGUuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKHUpO2lmKGUgaW5zdGFuY2VvZiBtdClyZXR1cm4geihlLHQpPyF0fHwiPSIhPXQub3BlcmF0b3J8fHQubGVmdCE9PWU6ZyYmaihlKTtpZihlIGluc3RhbmNlb2YgZ3QpcmV0dXJuIHooZSx0KTtpZihlIGluc3RhbmNlb2YgJGUpcmV0dXJuISFlLnZhbHVlJiYoZS5uYW1lLm5hbWUgaW4geXx8ZyYmaihlLm5hbWUpKTt2YXIgbj1lZShlLmxlZnQsZSk7aWYobiYmbi5uYW1lIGluIHkpcmV0dXJuITA7aWYobiBpbnN0YW5jZW9mIFdlKXJldHVybiEwfShlLG4pfHxFKGUpKSYmKGg9ZSlpbnN0YW5jZW9mIGtlJiYoaz0hMCksQihlKTtpZihkJiYodHx8IV98fCF3KSlyZXR1cm4gaz0hMCxlO2lmKGVlKGUsbikpcmV0dXJuIHAmJkMrKyxlO2lmKEMrKyxwJiZmIGluc3RhbmNlb2YgJGUpcmV0dXJuIGU7aWYoRz1rPSEwLHUuaW5mbygiQ29sbGFwc2luZyB7bmFtZX0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7bmFtZTplLnByaW50X3RvX3N0cmluZygpLGZpbGU6ZS5zdGFydC5maWxlLGxpbmU6ZS5zdGFydC5saW5lLGNvbDplLnN0YXJ0LmNvbH0pLGYgaW5zdGFuY2VvZiBldClyZXR1cm4gUShYZSxmLGYpO2lmKGYgaW5zdGFuY2VvZiAkZSl7dmFyIHI9Zi5uYW1lLmRlZmluaXRpb24oKTtyZXR1cm4gci5yZWZlcmVuY2VzLmxlbmd0aC1yLnJlcGxhY2VkIT0xfHx1LmV4cG9zZWQocik/UShydCxmLHtvcGVyYXRvcjoiPSIsbGVmdDpRKG10LGYubmFtZSxmLm5hbWUpLHJpZ2h0OmYudmFsdWV9KTooci5yZXBsYWNlZCsrLFoodSxuLGUsZi52YWx1ZSkpfXJldHVybiBmLndyaXRlX29ubHk9ITEsZn0sZnVuY3Rpb24oZSl7a3x8KGg9PT1lJiYoaz0hMCksZD09PWUmJihkPW51bGwpKX0pLHI9bmV3IFd0KGZ1bmN0aW9uKGUpe3JldHVybiBrP2U6eD9lIGluc3RhbmNlb2YgbXQmJmUubmFtZT09VC5uYW1lPygtLUN8fChrPSEwKSxlZShlLHIucGFyZW50KCkpP2U6KFQucmVwbGFjZWQrKyxwLnJlcGxhY2VkLS0sZi52YWx1ZS5jbG9uZSgpKSk6ZSBpbnN0YW5jZW9mIE5lfHxlIGluc3RhbmNlb2Yga2U/ZTp2b2lkIDA6ZSE9PWlbc10/ZTorK3M8aS5sZW5ndGg/dm9pZCAwOih4PSEwLGUpfSk7MDw9LS1vOyl7MD09byYmdS5vcHRpb24oInVudXNlZCIpJiZSKCk7dmFyIGk9W107Zm9yKEwobltvXSk7MDxjLmxlbmd0aDspe2k9Yy5wb3AoKTt2YXIgcz0wLGY9aVtpLmxlbmd0aC0xXSxwPW51bGwsaD1udWxsLGQ9bnVsbCxtPUYoZiksZz1tJiZtLmhhc19zaWRlX2VmZmVjdHModSksdj1tJiYhZyYmIVcobSksYj1xKGYgaW5zdGFuY2VvZiBydCYmIj0iPT1mLm9wZXJhdG9yJiZmLnJpZ2h0KTtpZih2fHxiKXt2YXIgeT1NKGYpLF89KHQ9dm9pZCAwLCh0PUooZT1tKSlpbnN0YW5jZW9mIG10JiZ0LmRlZmluaXRpb24oKS5zY29wZT09PUsmJiEoSCYmKHQubmFtZSBpbiB5JiZ5W3QubmFtZV0hPT1lfHxmIGluc3RhbmNlb2YgSmV8fGYgaW5zdGFuY2VvZiBydCYmIj0iIT1mLm9wZXJhdG9yKSkpO2d8fChnPVAoZikpO3ZhciB3PUkoKSxFPWYubWF5X3Rocm93KHUpPyQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzX3NpZGVfZWZmZWN0cyh1KX06VjpyZSxBPWYubmFtZSBpbnN0YW5jZW9mIGZ0LHg9QSxrPSExLEM9MCxPPSFsfHwheDtpZighTyl7Zm9yKHZhciBTPXUuc2VsZigpLmFyZ25hbWVzLmxhc3RJbmRleE9mKGYubmFtZSkrMTshayYmUzxsLmxlbmd0aDtTKyspbFtTXS50cmFuc2Zvcm0oYSk7Tz0hMH1mb3IodmFyIEQ9bzshayYmRDxuLmxlbmd0aDtEKyspbltEXS50cmFuc2Zvcm0oYSk7aWYocCl7dmFyIFQ9Zi5uYW1lLmRlZmluaXRpb24oKTtpZihrJiZULnJlZmVyZW5jZXMubGVuZ3RoLVQucmVwbGFjZWQ+QylDPSExO2Vsc2V7az0hMSxzPTAseD1BO2ZvcihEPW87IWsmJkQ8bi5sZW5ndGg7RCsrKW5bRF0udHJhbnNmb3JtKHIpO3Auc2luZ2xlX3VzZT0hMX19QyYmIU4oZikmJm4uc3BsaWNlKG8sMSl9fX1mdW5jdGlvbiBCKGUpe2lmKGUgaW5zdGFuY2VvZiBrZSlyZXR1cm4gZTtpZihlIGluc3RhbmNlb2YgTWUpe2UuZXhwcmVzc2lvbj1lLmV4cHJlc3Npb24udHJhbnNmb3JtKGEpO2Zvcih2YXIgdD0wLG49ZS5ib2R5Lmxlbmd0aDshayYmdDxuO3QrKyl7dmFyIHI9ZS5ib2R5W3RdO2lmKHIgaW5zdGFuY2VvZiBQZSl7aWYoIXgpe2lmKHIhPT1pW3NdKWNvbnRpbnVlO3MrK31pZihyLmV4cHJlc3Npb249ci5leHByZXNzaW9uLnRyYW5zZm9ybShhKSwhdylicmVha319cmV0dXJuIGs9ITAsZX19ZnVuY3Rpb24gUigpe3ZhciBlLG49dS5zZWxmKCk7aWYobiBpbnN0YW5jZW9mIERlJiYhbi5uYW1lJiYhbi51c2VzX2FyZ3VtZW50cyYmIW4ucGlubmVkKCkmJihlPXUucGFyZW50KCkpaW5zdGFuY2VvZiBLZSYmZS5leHByZXNzaW9uPT09bil7dmFyIHI9dS5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0Iik7ciYmIXRlKHIsbi5ib2R5KSYmKHI9ITEpO3ZhciB0PW4uYXJnbmFtZXMubGVuZ3RoO2w9ZS5hcmdzLnNsaWNlKHQpO2Zvcih2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpLG89dDswPD0tLW87KXt2YXIgYT1uLmFyZ25hbWVzW29dLHM9ZS5hcmdzW29dO2wudW5zaGlmdChRKCRlLGEse25hbWU6YSx2YWx1ZTpzfSkpLGEubmFtZSBpbiBpfHwoaVthLm5hbWVdPSEwLHM/cyBpbnN0YW5jZW9mIE9lJiZzLnBpbm5lZCgpP3M9bnVsbDpzLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2lmKCFzKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiBtdCYmbi52YXJpYWJsZXMuaGFzKGUubmFtZSkpe3ZhciB0PWUuZGVmaW5pdGlvbigpLnNjb3BlO2lmKHQhPT1LKWZvcig7dD10LnBhcmVudF9zY29wZTspaWYodD09PUspcmV0dXJuITA7cz1udWxsfXJldHVybiBlIGluc3RhbmNlb2YgZ3QmJihyfHwhdGhpcy5maW5kX3BhcmVudChrZSkpPyEocz1udWxsKTp2b2lkIDB9KSk6cz1RKEF0LGEpLnRyYW5zZm9ybSh1KSxzJiZjLnVuc2hpZnQoW1EoJGUsYSx7bmFtZTphLHZhbHVlOnN9KV0pKX19fWZ1bmN0aW9uIEwoZSl7aWYoaS5wdXNoKGUpLGUgaW5zdGFuY2VvZiBydCljLnB1c2goaS5zbGljZSgpKSxMKGUubGVmdCksTChlLnJpZ2h0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiB0dClMKGUubGVmdCksTChlLnJpZ2h0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBLZSlMKGUuZXhwcmVzc2lvbiksZS5hcmdzLmZvckVhY2goTCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgUGUpTChlLmV4cHJlc3Npb24pO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG50KUwoZS5jb25kaXRpb24pLEwoZS5jb25zZXF1ZW50KSxMKGUuYWx0ZXJuYXRpdmUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFZlKWUuZGVmaW5pdGlvbnMuZm9yRWFjaChMKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBRZSlMKGUuZXhwcmVzc2lvbik7ZWxzZSBpZihlIGluc3RhbmNlb2YgeWUpTChlLmNvbmRpdGlvbiksZS5ib2R5IGluc3RhbmNlb2YgZGV8fEwoZS5ib2R5KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBCZSllLnZhbHVlJiZMKGUudmFsdWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEVlKWUuaW5pdCYmTChlLmluaXQpLGUuY29uZGl0aW9uJiZMKGUuY29uZGl0aW9uKSxlLnN0ZXAmJkwoZS5zdGVwKSxlLmJvZHkgaW5zdGFuY2VvZiBkZXx8TChlLmJvZHkpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEFlKUwoZS5vYmplY3QpLGUuYm9keSBpbnN0YW5jZW9mIGRlfHxMKGUuYm9keSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgVWUpTChlLmNvbmRpdGlvbiksZS5ib2R5IGluc3RhbmNlb2YgZGV8fEwoZS5ib2R5KSwhZS5hbHRlcm5hdGl2ZXx8ZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGRlfHxMKGUuYWx0ZXJuYXRpdmUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFllKWUuZXhwcmVzc2lvbnMuZm9yRWFjaChMKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBoZSlMKGUuYm9keSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgWmUpTChlLmV4cHJlc3Npb24pLEwoZS5wcm9wZXJ0eSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgTWUpTChlLmV4cHJlc3Npb24pLGUuYm9keS5mb3JFYWNoKEwpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEplKSIrKyI9PWUub3BlcmF0b3J8fCItLSI9PWUub3BlcmF0b3I/Yy5wdXNoKGkuc2xpY2UoKSk6TChlLmV4cHJlc3Npb24pO2Vsc2UgaWYoZSBpbnN0YW5jZW9mICRlJiZlLnZhbHVlKXt2YXIgdD1lLm5hbWUuZGVmaW5pdGlvbigpO3QucmVmZXJlbmNlcy5sZW5ndGg+dC5yZXBsYWNlZCYmYy5wdXNoKGkuc2xpY2UoKSksTChlLnZhbHVlKX1pLnBvcCgpfWZ1bmN0aW9uIEYoZSl7aWYoIShlIGluc3RhbmNlb2YgJGUpKXJldHVybiBlW2UgaW5zdGFuY2VvZiBydD8ibGVmdCI6ImV4cHJlc3Npb24iXTt2YXIgdD1lLm5hbWUuZGVmaW5pdGlvbigpO2lmKHRlKGUubmFtZSx0Lm9yaWcpKXt2YXIgbj10LnJlZmVyZW5jZXMubGVuZ3RoLXQucmVwbGFjZWQ7cmV0dXJuIDE8dC5vcmlnLmxlbmd0aC10LmVsaW1pbmF0ZWQmJiEoZS5uYW1lIGluc3RhbmNlb2YgZnQpfHwoMTxuP2Z1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7aWYodCBpbnN0YW5jZW9mIG10JiYiYXJndW1lbnRzIiE9dC5uYW1lKXt2YXIgbj10LmRlZmluaXRpb24oKTtpZighbi51bmRlY2xhcmVkKXJldHVybiBwPW59fShlKTohdS5leHBvc2VkKHQpKT9RKG10LGUubmFtZSxlLm5hbWUpOnZvaWQgMH19ZnVuY3Rpb24gcSh0KXtpZighdClyZXR1cm4hMTtpZih0IGluc3RhbmNlb2YgbXQpe3ZhciBlPXQuZXZhbHVhdGUodSk7cmV0dXJuIGU9PT10P2k6VShlLGkpfWlmKHQgaW5zdGFuY2VvZiBndClyZXR1cm4gaTtpZih0LmlzX3RydXRoeSgpKXJldHVybiBVKCEwLHJlKTtpZih0LmlzX2NvbnN0YW50KCkpcmV0dXJuIFUodC5ldmFsdWF0ZSh1KSxpKTtpZighKG0gaW5zdGFuY2VvZiBtdCkpcmV0dXJuITE7aWYoIWZ1bmN0aW9uIGUodCl7cmV0dXJuISh0IGluc3RhbmNlb2YgaXQpJiYodCBpbnN0YW5jZW9mIHR0JiZYW3Qub3BlcmF0b3JdP2UodC5sZWZ0KSYmZSh0LnJpZ2h0KTohKHQgaW5zdGFuY2VvZiBLZSkmJih0IGluc3RhbmNlb2YgbnQ/ZSh0LmNvbnNlcXVlbnQpJiZlKHQuYWx0ZXJuYXRpdmUpOiEodCBpbnN0YW5jZW9mIG90fHx0Lmhhc19zaWRlX2VmZmVjdHModSkpKSl9KHQpKXJldHVybiExO3ZhciBuLHI9bS5kZWZpbml0aW9uKCk7cmV0dXJuIHQud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYobilyZXR1cm4hMDtlIGluc3RhbmNlb2YgbXQmJmUuZGVmaW5pdGlvbigpPT09ciYmKG49ITApfSkpLCFuJiZpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQuZXF1aXZhbGVudF90byhlKX19ZnVuY3Rpb24gVShuLHIpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQuaW5fYm9vbGVhbl9jb250ZXh0KCkpe2lmKG4mJmUuaXNfdHJ1dGh5KCkmJiFlLmhhc19zaWRlX2VmZmVjdHModSkpcmV0dXJuITA7aWYoZS5pc19jb25zdGFudCgpKXJldHVybiFlLmV2YWx1YXRlKHUpPT0hbn1yZXR1cm4gcihlKX19ZnVuY3Rpb24gTShlKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2YgaW5zdGFuY2VvZiAkZSYmKG5bZi5uYW1lLm5hbWVdPW0pO3ZhciByPW5ldyBEdChmdW5jdGlvbihlKXt2YXIgdD1KKGUpOyh0IGluc3RhbmNlb2YgbXR8fHQgaW5zdGFuY2VvZiBndCkmJihuW3QubmFtZV09blt0Lm5hbWVdfHxZKHUscixlLGUsMCkpfSk7cmV0dXJuIGUud2FsayhyKSxufWZ1bmN0aW9uIE4ocil7aWYoci5uYW1lIGluc3RhbmNlb2YgZnQpe3ZhciBlPXUuc2VsZigpLmFyZ25hbWVzLmluZGV4T2Yoci5uYW1lKSx0PXUucGFyZW50KCkuYXJncztyZXR1cm4gdFtlXSYmKHRbZV09USh5dCx0W2VdLHt2YWx1ZTowfSkpLCEwfXZhciBpPSExO3JldHVybiBuW29dLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBpP2U6ZT09PXJ8fGUuYm9keT09PXI/ZSBpbnN0YW5jZW9mICRlPyhpPSEwLGUudmFsdWU9bnVsbCxlKTpuPyhpPSEwLG9lLnNraXApOnRoaXMucGFyZW50KCk/dm9pZCAwOihpPSEwLG51bGwpOnZvaWQgMH0sZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFllKXN3aXRjaChlLmV4cHJlc3Npb25zLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gZS5leHByZXNzaW9uc1swXX19KSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBKZSkmJmZ1bmN0aW9uKGUpe3JldHVybiBlW2UgaW5zdGFuY2VvZiBydD8icmlnaHQiOiJ2YWx1ZSJdfShlKS5oYXNfc2lkZV9lZmZlY3RzKHUpfWZ1bmN0aW9uIEkoKXtpZihnKXJldHVybiExO2lmKHApcmV0dXJuITA7aWYobSBpbnN0YW5jZW9mIG10KXt2YXIgZT1tLmRlZmluaXRpb24oKTtpZihlLnJlZmVyZW5jZXMubGVuZ3RoLWUucmVwbGFjZWQ9PShmIGluc3RhbmNlb2YgJGU/MToyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB6KGUsdCl7dmFyIG49eVtlLm5hbWVdO2lmKG4pcmV0dXJuIG4hPT1tPyEodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT1lKTp2b2lkKGI9ITEpfWZ1bmN0aW9uIGooZSl7dmFyIHQ9ZS5kZWZpbml0aW9uKCk7cmV0dXJuISgxPT10Lm9yaWcubGVuZ3RoJiZ0Lm9yaWdbMF1pbnN0YW5jZW9mIHB0KSYmKHQuc2NvcGUhPT1LfHwhc2UodC5yZWZlcmVuY2VzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjb3BlLnJlc29sdmUoKT09PUt9KSl9ZnVuY3Rpb24gVihlLHQpe2lmKGUgaW5zdGFuY2VvZiBydClyZXR1cm4gVihlLmxlZnQsITApO2lmKGUgaW5zdGFuY2VvZiBKZSlyZXR1cm4gVihlLmV4cHJlc3Npb24sITApO2lmKGUgaW5zdGFuY2VvZiAkZSlyZXR1cm4gZS52YWx1ZSYmVihlLnZhbHVlKTtpZih0KXtpZihlIGluc3RhbmNlb2YgUWUpcmV0dXJuIFYoZS5leHByZXNzaW9uLCEwKTtpZihlIGluc3RhbmNlb2YgWmUpcmV0dXJuIFYoZS5leHByZXNzaW9uLCEwKTtpZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuIGUuZGVmaW5pdGlvbigpLnNjb3BlIT09S31yZXR1cm4hMX19ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KXt2YXIgcj1lW25dO3IgaW5zdGFuY2VvZiBtZT8oRz0hMCxpKHIuYm9keSksW10uc3BsaWNlLmFwcGx5KGUsW24sMV0uY29uY2F0KHIuYm9keSkpLG4rPXIuYm9keS5sZW5ndGgpOnIgaW5zdGFuY2VvZiBnZT8oRz0hMCxlLnNwbGljZShuLDEpKTpyIGluc3RhbmNlb2YgcGU/dC5pbmRleE9mKHIudmFsdWUpPDA/KG4rKyx0LnB1c2goci52YWx1ZSkpOihHPSEwLGUuc3BsaWNlKG4sMSkpOm4rK319ZnVuY3Rpb24gcihpLG4pe2Zvcih2YXIgcj1uLnNlbGYoKSxlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7MDw9LS1uOyl7dmFyIHI9ZVtuXTtpZihyIGluc3RhbmNlb2YgVWUmJnIuYm9keSBpbnN0YW5jZW9mIFJlJiYxPCsrdClyZXR1cm4hMH1yZXR1cm4hMX0oaSksbz1yIGluc3RhbmNlb2YgT2UsdD1pLmxlbmd0aDswPD0tLXQ7KXt2YXIgYT1pW3RdLHM9dih0KSx1PWlbc107aWYobyYmIXUmJmEgaW5zdGFuY2VvZiBSZSl7aWYoIWEudmFsdWUpe0c9ITAsaS5zcGxpY2UodCwxKTtjb250aW51ZX1pZihhLnZhbHVlIGluc3RhbmNlb2YgWGUmJiJ2b2lkIj09YS52YWx1ZS5vcGVyYXRvcil7Rz0hMCxpW3RdPVEoaGUsYSx7Ym9keTphLnZhbHVlLmV4cHJlc3Npb259KTtjb250aW51ZX19aWYoYSBpbnN0YW5jZW9mIFVlKXt2YXIgbDtpZihkKGw9QShhLmJvZHkpKSl7bC5sYWJlbCYmUihsLmxhYmVsLnRoZWRlZi5yZWZlcmVuY2VzLGwpLEc9ITAsKGE9YS5jbG9uZSgpKS5jb25kaXRpb249YS5jb25kaXRpb24ubmVnYXRlKG4pO3ZhciBjPWcoYS5ib2R5LGwpO2EuYm9keT1RKG1lLGEse2JvZHk6XyhhLmFsdGVybmF0aXZlKS5jb25jYXQobSgpKX0pLGEuYWx0ZXJuYXRpdmU9UShtZSxhLHtib2R5OmN9KSxpW3RdPWEudHJhbnNmb3JtKG4pO2NvbnRpbnVlfWlmKGwmJiFhLmFsdGVybmF0aXZlJiZhLmJvZHkgaW5zdGFuY2VvZiBtZSYmdSBpbnN0YW5jZW9mIFUpe3ZhciBmPWEuY29uZGl0aW9uLm5lZ2F0ZShuKTtpZihmLnByaW50X3RvX3N0cmluZygpLmxlbmd0aDw9YS5jb25kaXRpb24ucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoKXtHPSEwLChhPWEuY2xvbmUoKSkuY29uZGl0aW9uPWYsaVtzXT1hLmJvZHksYS5ib2R5PXUsaVt0XT1hLnRyYW5zZm9ybShuKTtjb250aW51ZX19aWYoZChsPUEoYS5hbHRlcm5hdGl2ZSkpKXtsLmxhYmVsJiZSKGwubGFiZWwudGhlZGVmLnJlZmVyZW5jZXMsbCksRz0hMCwoYT1hLmNsb25lKCkpLmJvZHk9UShtZSxhLmJvZHkse2JvZHk6XyhhLmJvZHkpLmNvbmNhdChtKCkpfSk7Yz1nKGEuYWx0ZXJuYXRpdmUsbCk7YS5hbHRlcm5hdGl2ZT1RKG1lLGEuYWx0ZXJuYXRpdmUse2JvZHk6Y30pLGlbdF09YS50cmFuc2Zvcm0obik7Y29udGludWV9fWlmKGEgaW5zdGFuY2VvZiBVZSYmYS5ib2R5IGluc3RhbmNlb2YgUmUpe3ZhciBwPWEuYm9keS52YWx1ZTtpZighcCYmIWEuYWx0ZXJuYXRpdmUmJihvJiYhdXx8dSBpbnN0YW5jZW9mIFJlJiYhdS52YWx1ZSkpe0c9ITAsaVt0XT1RKGhlLGEuY29uZGl0aW9uLHtib2R5OmEuY29uZGl0aW9ufSk7Y29udGludWV9aWYocCYmIWEuYWx0ZXJuYXRpdmUmJnUgaW5zdGFuY2VvZiBSZSYmdS52YWx1ZSl7Rz0hMCwoYT1hLmNsb25lKCkpLmFsdGVybmF0aXZlPXUsaS5zcGxpY2UodCwxLGEudHJhbnNmb3JtKG4pKSxpLnNwbGljZShzLDEpO2NvbnRpbnVlfWlmKHAmJiFhLmFsdGVybmF0aXZlJiYoIXUmJm8mJmV8fHUgaW5zdGFuY2VvZiBSZSkpe0c9ITAsKGE9YS5jbG9uZSgpKS5hbHRlcm5hdGl2ZT11fHxRKFJlLGEse3ZhbHVlOm51bGx9KSxpLnNwbGljZSh0LDEsYS50cmFuc2Zvcm0obikpLHUmJmkuc3BsaWNlKHMsMSk7Y29udGludWV9dmFyIGg9aVtiKHQpXTtpZihuLm9wdGlvbigic2VxdWVuY2VzIikmJm8mJiFhLmFsdGVybmF0aXZlJiZoIGluc3RhbmNlb2YgVWUmJmguYm9keSBpbnN0YW5jZW9mIFJlJiZ2KHMpPT1pLmxlbmd0aCYmdSBpbnN0YW5jZW9mIGhlKXtHPSEwLChhPWEuY2xvbmUoKSkuYWx0ZXJuYXRpdmU9UShtZSx1LHtib2R5Olt1LFEoUmUsdSx7dmFsdWU6bnVsbH0pXX0pLGkuc3BsaWNlKHQsMSxhLnRyYW5zZm9ybShuKSksaS5zcGxpY2UocywxKTtjb250aW51ZX19fWZ1bmN0aW9uIGQoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZSBpbnN0YW5jZW9mIExlP24ubG9vcGNvbnRyb2xfdGFyZ2V0KGUpOm51bGw7cmV0dXJuIGUgaW5zdGFuY2VvZiBSZSYmbyYmZnVuY3Rpb24oZSl7cmV0dXJuIWV8fGUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yfShlLnZhbHVlKXx8ZSBpbnN0YW5jZW9mIHFlJiZyPT09dyh0KXx8ZSBpbnN0YW5jZW9mIEZlJiZ0IGluc3RhbmNlb2YgbWUmJnI9PT10fWZ1bmN0aW9uIG0oKXt2YXIgZT1pLnNsaWNlKHQrMSk7cmV0dXJuIGkubGVuZ3RoPXQrMSxlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBUZSl8fChpLnB1c2goZSksITEpfSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPV8oZSkuc2xpY2UoMCwtMSk7cmV0dXJuIHQudmFsdWUmJm4ucHVzaChRKGhlLHQudmFsdWUse2JvZHk6dC52YWx1ZS5leHByZXNzaW9ufSkpLG59ZnVuY3Rpb24gdihlKXtmb3IodmFyIHQ9ZSsxLG49aS5sZW5ndGg7dDxuO3QrKyl7dmFyIHI9aVt0XTtpZighKHIgaW5zdGFuY2VvZiBIZSYmeShyKSkpYnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gYihlKXtmb3IodmFyIHQ9ZTswPD0tLXQ7KXt2YXIgbj1pW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhlJiZ5KG4pKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gbyh0LG4pe2Zvcih2YXIgZSxyPW4uc2VsZigpLGk9MCxvPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXt2YXIgcz10W2ldO2lmKHMgaW5zdGFuY2VvZiBMZSl7dmFyIHU9bi5sb29wY29udHJvbF90YXJnZXQocyk7cyBpbnN0YW5jZW9mIEZlJiYhKHUgaW5zdGFuY2VvZiBiZSkmJncodSk9PT1yfHxzIGluc3RhbmNlb2YgcWUmJncodSk9PT1yP3MubGFiZWwmJlIocy5sYWJlbC50aGVkZWYucmVmZXJlbmNlcyxzKTp0W28rK109c31lbHNlIHRbbysrXT1zO2lmKEEocykpe2U9dC5zbGljZShpKzEpO2JyZWFrfX10Lmxlbmd0aD1vLEc9byE9YSxlJiZlLmZvckVhY2goZnVuY3Rpb24oZSl7RShuLGUsdCl9KX1mdW5jdGlvbiB5KGUpe3JldHVybiBzZShlLmRlZmluaXRpb25zLGZ1bmN0aW9uKGUpe3JldHVybiFlLnZhbHVlfSl9ZnVuY3Rpb24gYSh0LGUpe2lmKCEodC5sZW5ndGg8Mikpe2Zvcih2YXIgbj1bXSxyPTAsaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7dmFyIGE9dFtpXTtpZihhIGluc3RhbmNlb2YgaGUpe24ubGVuZ3RoPj1lLnNlcXVlbmNlc19saW1pdCYmdSgpO3ZhciBzPWEuYm9keTswPG4ubGVuZ3RoJiYocz1zLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKSkscyYmaChuLHMpfWVsc2UgYSBpbnN0YW5jZW9mIFZlJiZ5KGEpfHxhIGluc3RhbmNlb2YgVGV8fHUoKSx0W3IrK109YX11KCksKHQubGVuZ3RoPXIpIT1vJiYoRz0hMCl9ZnVuY3Rpb24gdSgpe2lmKG4ubGVuZ3RoKXt2YXIgZT1OKG5bMF0sbik7dFtyKytdPVEoaGUsZSx7Ym9keTplfSksbj1bXX19fWZ1bmN0aW9uIHAoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBtZSkpcmV0dXJuIGU7Zm9yKHZhciBuPW51bGwscj0wLGk9ZS5ib2R5Lmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmJvZHlbcl07aWYobyBpbnN0YW5jZW9mIEhlJiZ5KG8pKXQucHVzaChvKTtlbHNle2lmKG4pcmV0dXJuITE7bj1vfX1yZXR1cm4gbn1mdW5jdGlvbiBzKGUsbil7ZnVuY3Rpb24gdChlKXtpLS0sRz0hMDt2YXIgdD1yLmJvZHk7cmV0dXJuIE4odCxbdCxlXSkudHJhbnNmb3JtKG4pfWZvcih2YXIgcixpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgYT1lW29dO2lmKHIpaWYoYSBpbnN0YW5jZW9mIEJlKWEudmFsdWU9dChhLnZhbHVlfHxRKEF0LGEpLnRyYW5zZm9ybShuKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgRWUpe2lmKCEoYS5pbml0IGluc3RhbmNlb2YgVmUpKXt2YXIgcz0hMTtyLmJvZHkud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISEoc3x8ZSBpbnN0YW5jZW9mIGtlKXx8KGUgaW5zdGFuY2VvZiB0dCYmImluIj09ZS5vcGVyYXRvcj9zPSEwOnZvaWQgMCl9KSksc3x8KGEuaW5pdD9hLmluaXQ9dChhLmluaXQpOihhLmluaXQ9ci5ib2R5LGktLSxHPSEwKSl9fWVsc2UgYSBpbnN0YW5jZW9mIEFlP2Eub2JqZWN0PXQoYS5vYmplY3QpOmEgaW5zdGFuY2VvZiBVZT9hLmNvbmRpdGlvbj10KGEuY29uZGl0aW9uKTphIGluc3RhbmNlb2YgTWU/YS5leHByZXNzaW9uPXQoYS5leHByZXNzaW9uKTphIGluc3RhbmNlb2YgeGUmJihhLmV4cHJlc3Npb249dChhLmV4cHJlc3Npb24pKTtpZihuLm9wdGlvbigiY29uZGl0aW9uYWxzIikmJmEgaW5zdGFuY2VvZiBVZSl7dmFyIHU9W10sbD1wKGEuYm9keSx1KSxjPXAoYS5hbHRlcm5hdGl2ZSx1KTtpZighMSE9PWwmJiExIT09YyYmMDx1Lmxlbmd0aCl7dmFyIGY9dS5sZW5ndGg7dS5wdXNoKFEoVWUsYSx7Y29uZGl0aW9uOmEuY29uZGl0aW9uLGJvZHk6bHx8UShnZSxhLmJvZHkpLGFsdGVybmF0aXZlOmN9KSksdS51bnNoaWZ0KGksMSksW10uc3BsaWNlLmFwcGx5KGUsdSksbys9ZixpKz1mKzEsRz0hKHI9bnVsbCk7Y29udGludWV9fWVbaSsrXT1hLHI9YSBpbnN0YW5jZW9mIGhlP2E6bnVsbH1lLmxlbmd0aD1pfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbjtpZih0IGluc3RhbmNlb2YgcnQ/bj1bdF06dCBpbnN0YW5jZW9mIFllJiYobj10LmV4cHJlc3Npb25zLnNsaWNlKCkpLG4pe2lmKGUgaW5zdGFuY2VvZiBWZSl7dmFyIHI9ZS5kZWZpbml0aW9uc1tlLmRlZmluaXRpb25zLmxlbmd0aC0xXTtpZihjKHIubmFtZSxyLnZhbHVlLG4pKXJldHVybiBufWZvcih2YXIgaT1uLmxlbmd0aC0xOzA8PS0taTspe3ZhciBvPW5baV07aWYobyBpbnN0YW5jZW9mIHJ0JiYoIj0iPT1vLm9wZXJhdG9yJiZvLmxlZnQgaW5zdGFuY2VvZiBtdCkpe3ZhciBhPW4uc2xpY2UoaSsxKTtpZihjKG8ubGVmdCxvLnJpZ2h0LGEpKXJldHVybiBuLnNsaWNlKDAsaSsxKS5jb25jYXQoYSl9fX19ZnVuY3Rpb24gYyhlLHQsbil7aWYodCBpbnN0YW5jZW9mIG90KXt2YXIgcj0hMTtkb3t2YXIgaT1uWzBdO2lmKCEoaSBpbnN0YW5jZW9mIHJ0KSlicmVhaztpZigiPSIhPWkub3BlcmF0b3IpYnJlYWs7aWYoIShpLmxlZnQgaW5zdGFuY2VvZiBXZSkpYnJlYWs7dmFyIG89aS5sZWZ0LmV4cHJlc3Npb247aWYoIShvIGluc3RhbmNlb2YgbXQpKWJyZWFrO2lmKGUubmFtZSE9by5uYW1lKWJyZWFrO2lmKCFpLnJpZ2h0LmlzX2NvbnN0YW50X2V4cHJlc3Npb24oSykpYnJlYWs7dmFyIGE9aS5sZWZ0LnByb3BlcnR5O2lmKGEgaW5zdGFuY2VvZiBsZSYmKGE9YS5ldmFsdWF0ZSh1KSksYSBpbnN0YW5jZW9mIGxlKWJyZWFrO2E9IiIrYTt2YXIgcz11Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5rZXkhPWEmJmUua2V5Lm5hbWUhPWF9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmtleS5uYW1lIT1hfTtpZighc2UodC5wcm9wZXJ0aWVzLHMpKWJyZWFrO3QucHJvcGVydGllcy5wdXNoKFEoc3QsaSx7a2V5OmEsdmFsdWU6aS5yaWdodH0pKSxuLnNoaWZ0KCkscj0hMH13aGlsZShuLmxlbmd0aCk7cmV0dXJuIHJ9fWZ1bmN0aW9uIGYocil7Zm9yKHZhciBlLHQ9MCxpPS0xLG49ci5sZW5ndGg7dDxuO3QrKyl7dmFyIG89clt0XSxhPXJbaV07aWYobyBpbnN0YW5jZW9mIFZlKWEmJmEuVFlQRT09by5UWVBFPyhhLmRlZmluaXRpb25zPWEuZGVmaW5pdGlvbnMuY29uY2F0KG8uZGVmaW5pdGlvbnMpLEc9ITApOmUmJmUuVFlQRT09by5UWVBFJiZ5KG8pPyhlLmRlZmluaXRpb25zPWUuZGVmaW5pdGlvbnMuY29uY2F0KG8uZGVmaW5pdGlvbnMpLEc9ITApOmU9clsrK2ldPW87ZWxzZSBpZihvIGluc3RhbmNlb2YgQmUpby52YWx1ZT11KG8udmFsdWUpO2Vsc2UgaWYobyBpbnN0YW5jZW9mIEVlKXsocz1sKGEsby5pbml0KSk/KEc9ITAsby5pbml0PXMubGVuZ3RoP04oby5pbml0LHMpOm51bGwsclsrK2ldPW8pOmEgaW5zdGFuY2VvZiBIZSYmKCFvLmluaXR8fG8uaW5pdC5UWVBFPT1hLlRZUEUpPyhvLmluaXQmJihhLmRlZmluaXRpb25zPWEuZGVmaW5pdGlvbnMuY29uY2F0KG8uaW5pdC5kZWZpbml0aW9ucykpLG8uaW5pdD1hLHJbaV09byxHPSEwKTplJiZvLmluaXQmJmUuVFlQRT09by5pbml0LlRZUEUmJnkoby5pbml0KT8oZS5kZWZpbml0aW9ucz1lLmRlZmluaXRpb25zLmNvbmNhdChvLmluaXQuZGVmaW5pdGlvbnMpLG8uaW5pdD1udWxsLHJbKytpXT1vLEc9ITApOnJbKytpXT1vfWVsc2UgaWYobyBpbnN0YW5jZW9mIEFlKW8ub2JqZWN0PXUoby5vYmplY3QpO2Vsc2UgaWYobyBpbnN0YW5jZW9mIFVlKW8uY29uZGl0aW9uPXUoby5jb25kaXRpb24pO2Vsc2UgaWYobyBpbnN0YW5jZW9mIGhlKXt2YXIgcztpZihzPWwoYSxvLmJvZHkpKXtpZihHPSEwLCFzLmxlbmd0aCljb250aW51ZTtvLmJvZHk9TihvLmJvZHkscyl9clsrK2ldPW99ZWxzZSBvIGluc3RhbmNlb2YgTWU/by5leHByZXNzaW9uPXUoby5leHByZXNzaW9uKTpvIGluc3RhbmNlb2YgeGU/by5leHByZXNzaW9uPXUoby5leHByZXNzaW9uKTpyWysraV09b31mdW5jdGlvbiB1KGUpe3JbKytpXT1vO3ZhciB0PWwoYSxlKTtpZighdClyZXR1cm4gZTtHPSEwO3ZhciBuPWUudGFpbF9ub2RlKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV0hPT1uJiZ0LnB1c2gobi5sZWZ0KSxOKGUsdCl9ci5sZW5ndGg9aSsxfX1mdW5jdGlvbiBFKHQsZSxuKXtlIGluc3RhbmNlb2YgVGV8fHQud2FybigiRHJvcHBpbmcgdW5yZWFjaGFibGUgY29kZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLGUud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBWZT8odC53YXJuKCJEZWNsYXJhdGlvbnMgaW4gdW5yZWFjaGFibGUgY29kZSEgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLnN0YXJ0KSxlLnJlbW92ZV9pbml0aWFsaXplcnMoKSxuLnB1c2goZSksITApOmUgaW5zdGFuY2VvZiBUZT8obi5wdXNoKGUpLCEwKTplIGluc3RhbmNlb2Yga2V8fHZvaWQgMH0pKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdnQ/ZS5nZXRWYWx1ZSgpOmUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yJiZlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiB2dD92b2lkIDA6ZX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGUuaXNfdW5kZWZpbmVkfHxlIGluc3RhbmNlb2YgQXR8fGUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yJiYhZS5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHModCl9KG49ZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfdHJ1dGh5Iix0KX0pKGxlLHJlKSxuKGl0LGllKSxuKHJ0LGZ1bmN0aW9uKCl7cmV0dXJuIj0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX3RydXRoeSgpfSksbihPZSxpZSksbihvdCxpZSksbihfdCxpZSksbihZZSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhaWxfbm9kZSgpLmlzX3RydXRoeSgpfSksbihtdCxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZml4ZWRfdmFsdWUoKTtpZighZSlyZXR1cm4hMTt0aGlzLmlzX3RydXRoeT1yZTt2YXIgdD1lLmlzX3RydXRoeSgpO3JldHVybiBkZWxldGUgdGhpcy5pc190cnV0aHksdH0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuL3N0cmljdC8udGVzdChlLm9wdGlvbigicHVyZV9nZXR0ZXJzIikpfWxlLkRFRk1FVEhPRCgibWF5X3Rocm93X29uX2FjY2VzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIWUub3B0aW9uKCJwdXJlX2dldHRlcnMiKXx8dGhpcy5fZG90X3Rocm93KGUpfSksZShsZSxyKSxlKGl0LHJlKSxlKHJ0LGZ1bmN0aW9uKGUpe3JldHVybiI9Ij09dGhpcy5vcGVyYXRvciYmdGhpcy5yaWdodC5fZG90X3Rocm93KGUpfSksZSh0dCxmdW5jdGlvbihlKXtyZXR1cm4oIiYmIj09dGhpcy5vcGVyYXRvcnx8Inx8Ij09dGhpcy5vcGVyYXRvcikmJih0aGlzLmxlZnQuX2RvdF90aHJvdyhlKXx8dGhpcy5yaWdodC5fZG90X3Rocm93KGUpKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5fZG90X3Rocm93KGUpfHx0aGlzLmFsdGVybmF0aXZlLl9kb3RfdGhyb3coZSl9KSxlKHZ0LHJlKSxlKFFlLGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIG10JiYodD10LmZpeGVkX3ZhbHVlKCkpLCEodCBpbnN0YW5jZW9mIE9lJiYicHJvdG90eXBlIj09dGhpcy5wcm9wZXJ0eSl9KSxlKE9lLHJlKSxlKHd0LGllKSxlKG90LGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybiExO2Zvcih2YXIgdD10aGlzLnByb3BlcnRpZXMubGVuZ3RoOzA8PS0tdDspaWYodGhpcy5wcm9wZXJ0aWVzW3RdLnZhbHVlIGluc3RhbmNlb2YgU2UpcmV0dXJuITA7cmV0dXJuITF9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRhaWxfbm9kZSgpLl9kb3RfdGhyb3coZSl9KSxlKG10LGZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNfdW5kZWZpbmVkKXJldHVybiEwO2lmKCFyKGUpKXJldHVybiExO2lmKGoodGhpcykmJnRoaXMuaXNfZGVjbGFyZWQoZSkpcmV0dXJuITE7aWYodGhpcy5pc19pbW11dGFibGUoKSlyZXR1cm4hMTt2YXIgdD10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIXQpcmV0dXJuITA7dGhpcy5fZG90X3Rocm93PWllO3ZhciBuPXQuX2RvdF90aHJvdyhlKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2RvdF90aHJvdyxufSksZShYZSxmdW5jdGlvbigpe3JldHVybiJ2b2lkIj09dGhpcy5vcGVyYXRvcn0pLGUoZXQscmUpLGUoQXQsaWUpfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJfZG90X3Rocm93Iix0KX0pLGZ1bmN0aW9uKGUpe2UobGUscmUpLGUocnQsZnVuY3Rpb24oZSl7cmV0dXJuIj0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX2Jvb2xlYW4oZSl9KTt2YXIgdD1hZSgiaW4gaW5zdGFuY2VvZiA9PSAhPSA9PT0gIT09IDwgPD0gPj0gPiIpO2UodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRbdGhpcy5vcGVyYXRvcl18fFhbdGhpcy5vcGVyYXRvcl0mJnRoaXMubGVmdC5pc19ib29sZWFuKGUpJiZ0aGlzLnJpZ2h0LmlzX2Jvb2xlYW4oZSl9KSxlKEN0LGllKTt2YXIgbj1hZSgiZXZlcnkgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSBzb21lIik7ZShLZSxmdW5jdGlvbihlKXtpZighZS5vcHRpb24oInVuc2FmZSIpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIFFlJiYoblt0LnByb3BlcnR5XXx8InRlc3QiPT10LnByb3BlcnR5JiZ0LmV4cHJlc3Npb24gaW5zdGFuY2VvZiBfdCl9KSxlKG50LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnNlcXVlbnQuaXNfYm9vbGVhbihlKSYmdGhpcy5hbHRlcm5hdGl2ZS5pc19ib29sZWFuKGUpfSksZShHZSxyZSksZShZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19ib29sZWFuKGUpfSksZShtdCxmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIXQpcmV0dXJuITE7dGhpcy5pc19ib29sZWFuPXJlO3ZhciBuPXQuaXNfYm9vbGVhbihlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfYm9vbGVhbixufSk7dmFyIHI9YWUoIiEgZGVsZXRlIik7ZShYZSxmdW5jdGlvbigpe3JldHVybiByW3RoaXMub3BlcmF0b3JdfSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImlzX2Jvb2xlYW4iLHQpfSksZnVuY3Rpb24oZSl7ZShsZSxyZSk7dmFyIHQ9YWUoIi0gKiAvICUgJiB8IF4gPDwgPj4gPj4+Iik7ZShydCxmdW5jdGlvbihlKXtyZXR1cm4gdFt0aGlzLm9wZXJhdG9yLnNsaWNlKDAsLTEpXXx8Ij0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX251bWJlcihlKX0pLGUodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRbdGhpcy5vcGVyYXRvcl18fCIrIj09dGhpcy5vcGVyYXRvciYmdGhpcy5sZWZ0LmlzX251bWJlcihlKSYmdGhpcy5yaWdodC5pc19udW1iZXIoZSl9KTt2YXIgbj1hZShbImNoYXJDb2RlQXQiLCJnZXREYXRlIiwiZ2V0RGF5IiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbGxpc2Vjb25kcyIsImdldE1pbnV0ZXMiLCJnZXRNb250aCIsImdldFNlY29uZHMiLCJnZXRUaW1lIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRVVENEYXRlIiwiZ2V0VVRDRGF5IiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENIb3VycyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJnZXRVVENNb250aCIsImdldFVUQ1NlY29uZHMiLCJnZXRZZWFyIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwibG9jYWxlQ29tcGFyZSIsInB1c2giLCJzZWFyY2giLCJzZXREYXRlIiwic2V0RnVsbFllYXIiLCJzZXRIb3VycyIsInNldE1pbGxpc2Vjb25kcyIsInNldE1pbnV0ZXMiLCJzZXRNb250aCIsInNldFNlY29uZHMiLCJzZXRUaW1lIiwic2V0VVRDRGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0VVRDSG91cnMiLCJzZXRVVENNaWxsaXNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0VVRDTW9udGgiLCJzZXRVVENTZWNvbmRzIiwic2V0WWVhciIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkIiwidG9QcmVjaXNpb24iXSk7ZShLZSxmdW5jdGlvbihlKXtpZighZS5vcHRpb24oInVuc2FmZSIpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIFFlJiYoblt0LnByb3BlcnR5XXx8aih0LmV4cHJlc3Npb24pJiYiTWF0aCI9PXQuZXhwcmVzc2lvbi5uYW1lKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5pc19udW1iZXIoZSkmJnRoaXMuYWx0ZXJuYXRpdmUuaXNfbnVtYmVyKGUpfSksZShHZSxyZSksZSh5dCxpZSksZShZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19udW1iZXIoZSl9KSxlKG10LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZml4ZWRfdmFsdWUoKTtpZighdClyZXR1cm4hMTt0aGlzLmlzX251bWJlcj1yZTt2YXIgbj10LmlzX251bWJlcihlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfbnVtYmVyLG59KTt2YXIgcj1hZSgiKyAtIH4gKysgLS0iKTtlKEplLGZ1bmN0aW9uKCl7cmV0dXJuIHJbdGhpcy5vcGVyYXRvcl19KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfbnVtYmVyIix0KX0pLChyPWZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImlzX3N0cmluZyIsdCl9KShsZSxyZSkscihydCxmdW5jdGlvbihlKXtyZXR1cm4oIj0iPT10aGlzLm9wZXJhdG9yfHwiKz0iPT10aGlzLm9wZXJhdG9yKSYmdGhpcy5yaWdodC5pc19zdHJpbmcoZSl9KSxyKHR0LGZ1bmN0aW9uKGUpe3JldHVybiIrIj09dGhpcy5vcGVyYXRvciYmKHRoaXMubGVmdC5pc19zdHJpbmcoZSl8fHRoaXMucmlnaHQuaXNfc3RyaW5nKGUpKX0pLHIobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5pc19zdHJpbmcoZSkmJnRoaXMuYWx0ZXJuYXRpdmUuaXNfc3RyaW5nKGUpfSkscihZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19zdHJpbmcoZSl9KSxyKGJ0LGllKSxyKG10LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZml4ZWRfdmFsdWUoKTtpZighdClyZXR1cm4hMTt0aGlzLmlzX3N0cmluZz1yZTt2YXIgbj10LmlzX3N0cmluZyhlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfc3RyaW5nLG59KSxyKFhlLGZ1bmN0aW9uKCl7cmV0dXJuInR5cGVvZiI9PXRoaXMub3BlcmF0b3J9KTt2YXIgWD1hZSgiJiYgfHwiKSxzPWFlKCJkZWxldGUgKysgLS0iKTtmdW5jdGlvbiBlZShlLHQpe3JldHVybiB0IGluc3RhbmNlb2YgSmUmJnNbdC5vcGVyYXRvcl0/dC5leHByZXNzaW9uOnQgaW5zdGFuY2VvZiBydCYmdC5sZWZ0PT09ZT9lOnZvaWQgMH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGUucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoPnQucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoP3Q6ZX1mdW5jdGlvbiBIKGUsdCxuKXtyZXR1cm4oRihlKT9mdW5jdGlvbihlLHQpe3JldHVybiB5KFEoaGUsZSx7Ym9keTplfSksUShoZSx0LHtib2R5OnR9KSkuYm9keX06eSkodCxuKX1mdW5jdGlvbiBsKGUpe2Zvcih2YXIgdCBpbiBlKWVbdF09YWUoZVt0XSl9IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0KXtlLndhcm4oImdsb2JhbF9kZWZzICIrdC5wcmludF90b19zdHJpbmcoKSsiIHJlZGVmaW5lZCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHQuc3RhcnQpfUNlLkRFRk1FVEhPRCgicmVzb2x2ZV9kZWZpbmVzIixmdW5jdGlvbihvKXtyZXR1cm4gby5vcHRpb24oImdsb2JhbF9kZWZzIik/KHRoaXMuZmlndXJlX291dF9zY29wZSh7aWU4Om8ub3B0aW9uKCJpZTgiKX0pLHRoaXMudHJhbnNmb3JtKG5ldyBXdChmdW5jdGlvbihlKXt2YXIgdD1lLl9maW5kX2RlZnMobywiIik7aWYodCl7Zm9yKHZhciBuLHI9MCxpPWU7KG49dGhpcy5wYXJlbnQocisrKSkmJm4gaW5zdGFuY2VvZiBXZSYmbi5leHByZXNzaW9uPT09aTspaT1uO2lmKCFlZShpLG4pKXJldHVybiB0O2EobyxlKX19KSkpOnRoaXN9KSxlKGxlLG5lKSxlKFFlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5fZmluZF9kZWZzKGUsIi4iK3RoaXMucHJvcGVydHkrdCl9KSxlKGx0LGZ1bmN0aW9uKGUpe3RoaXMuZ2xvYmFsKCkmJnVlKGUub3B0aW9uKCJnbG9iYWxfZGVmcyIpLHRoaXMubmFtZSkmJmEoZSx0aGlzKX0pLGUobXQsZnVuY3Rpb24oZSx0KXtpZih0aGlzLmdsb2JhbCgpKXt2YXIgbj1lLm9wdGlvbigiZ2xvYmFsX2RlZnMiKSxyPXRoaXMubmFtZSt0O3JldHVybiB1ZShuLHIpP2Z1bmN0aW9uIHQoZSxuKXtpZihlIGluc3RhbmNlb2YgbGUpcmV0dXJuIFEoZS5DVE9SLG4sZSk7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gUShpdCxuLHtlbGVtZW50czplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLG4pfSl9KTtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPVtdO2Zvcih2YXIgaSBpbiBlKXVlKGUsaSkmJnIucHVzaChRKHN0LG4se2tleTppLHZhbHVlOnQoZVtpXSxuKX0pKTtyZXR1cm4gUShvdCxuLHtwcm9wZXJ0aWVzOnJ9KX1yZXR1cm4gUChlLG4pfShuW3JdLHRoaXMpOnZvaWQgMH19KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiX2ZpbmRfZGVmcyIsdCl9KTt2YXIgdT1bImNvbnN0cnVjdG9yIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sbT17QXJyYXk6WyJpbmRleE9mIiwiam9pbiIsImxhc3RJbmRleE9mIiwic2xpY2UiXS5jb25jYXQodSksQm9vbGVhbjp1LEZ1bmN0aW9uOnUsTnVtYmVyOlsidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiJdLmNvbmNhdCh1KSxPYmplY3Q6dSxSZWdFeHA6WyJ0ZXN0Il0uY29uY2F0KHUpLFN0cmluZzpbImNoYXJBdCIsImNoYXJDb2RlQXQiLCJjb25jYXQiLCJpbmRleE9mIiwiaXRhbGljcyIsImxhc3RJbmRleE9mIiwibWF0Y2giLCJyZXBsYWNlIiwic2VhcmNoIiwic2xpY2UiLCJzcGxpdCIsInN1YnN0ciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJ0cmltIl0uY29uY2F0KHUpfTtsKG0pO3ZhciBiPXtBcnJheTpbImlzQXJyYXkiXSxNYXRoOlsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFuIiwiY2VpbCIsImNvcyIsImV4cCIsImZsb29yIiwibG9nIiwicm91bmQiLCJzaW4iLCJzcXJ0IiwidGFuIiwiYXRhbjIiLCJwb3ciLCJtYXgiLCJtaW4iXSxOdW1iZXI6WyJpc0Zpbml0ZSIsImlzTmFOIl0sT2JqZWN0OlsiY3JlYXRlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldFByb3RvdHlwZU9mIiwiaXNFeHRlbnNpYmxlIiwiaXNGcm96ZW4iLCJpc1NlYWxlZCIsImtleXMiXSxTdHJpbmc6WyJmcm9tQ2hhckNvZGUiXX07bChiKSxmdW5jdGlvbihlKXtsZS5ERUZNRVRIT0QoImV2YWx1YXRlIixmdW5jdGlvbihlKXtpZighZS5vcHRpb24oImV2YWx1YXRlIikpcmV0dXJuIHRoaXM7dmFyIHQ9W10sbj10aGlzLl9ldmFsKGUsdCwxKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RlbGV0ZSBlLl9ldmFsfSksIW58fG4gaW5zdGFuY2VvZiBSZWdFeHA/bjoiZnVuY3Rpb24iPT10eXBlb2Ygbnx8Im9iamVjdCI9PXR5cGVvZiBuP3RoaXM6bn0pO3ZhciB0PWFlKCIhIH4gLSArIHZvaWQiKTtsZS5ERUZNRVRIT0QoImlzX2NvbnN0YW50IixmdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgdnQ/ISh0aGlzIGluc3RhbmNlb2YgX3QpOnRoaXMgaW5zdGFuY2VvZiBYZSYmdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgdnQmJnRbdGhpcy5vcGVyYXRvcl19KSxlKGNlLGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEIoIkNhbm5vdCBldmFsdWF0ZSBhIHN0YXRlbWVudCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHRoaXMuc3RhcnQpKX0pLGUoT2UsRCksZShsZSxEKSxlKHZ0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0pLGUoRGUsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJuIHQubm9kZT10aGlzLHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24oKXt9In0sdH1yZXR1cm4gdGhpc30pLGUoaXQsZnVuY3Rpb24oZSx0LG4pe2lmKGUub3B0aW9uKCJ1bnNhZmUiKSl7Zm9yKHZhciByPVtdLGk9MCxvPXRoaXMuZWxlbWVudHMubGVuZ3RoO2k8bztpKyspe3ZhciBhPXRoaXMuZWxlbWVudHNbaV0scz1hLl9ldmFsKGUsdCxuKTtpZihhPT09cylyZXR1cm4gdGhpcztyLnB1c2gocyl9cmV0dXJuIHJ9cmV0dXJuIHRoaXN9KSxlKG90LGZ1bmN0aW9uKGUsdCxuKXtpZihlLm9wdGlvbigidW5zYWZlIikpe2Zvcih2YXIgcj17fSxpPTAsbz10aGlzLnByb3BlcnRpZXMubGVuZ3RoO2k8bztpKyspe3ZhciBhPXRoaXMucHJvcGVydGllc1tpXSxzPWEua2V5O2lmKHMgaW5zdGFuY2VvZiB1dClzPXMubmFtZTtlbHNlIGlmKHMgaW5zdGFuY2VvZiBsZSYmKHM9cy5fZXZhbChlLHQsbikpPT09YS5rZXkpcmV0dXJuIHRoaXM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5wcm90b3R5cGVbc10pcmV0dXJuIHRoaXM7aWYoIShhLnZhbHVlIGluc3RhbmNlb2YgRGUpJiYocltzXT1hLnZhbHVlLl9ldmFsKGUsdCxuKSxyW3NdPT09YS52YWx1ZSkpcmV0dXJuIHRoaXN9cmV0dXJuIHJ9cmV0dXJuIHRoaXN9KTt2YXIgYT1hZSgiISB0eXBlb2Ygdm9pZCIpO2UoWGUsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZXhwcmVzc2lvbjtpZihlLm9wdGlvbigidHlwZW9mcyIpJiYidHlwZW9mIj09dGhpcy5vcGVyYXRvciYmKHIgaW5zdGFuY2VvZiBPZXx8ciBpbnN0YW5jZW9mIG10JiZyLmZpeGVkX3ZhbHVlKClpbnN0YW5jZW9mIE9lKSlyZXR1cm4iZnVuY3Rpb24iO2FbdGhpcy5vcGVyYXRvcl18fG4rKzt2YXIgaT1yLl9ldmFsKGUsdCxuKTtpZihpPT09dGhpcy5leHByZXNzaW9uKXJldHVybiB0aGlzO3N3aXRjaCh0aGlzLm9wZXJhdG9yKXtjYXNlIiEiOnJldHVybiFpO2Nhc2UidHlwZW9mIjpyZXR1cm4gaSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzOnR5cGVvZiBpO2Nhc2Uidm9pZCI6cmV0dXJuO2Nhc2UifiI6cmV0dXJufmk7Y2FzZSItIjpyZXR1cm4taTtjYXNlIisiOnJldHVybitpO2Nhc2UiKysiOmNhc2UiLS0iOmlmKHIgaW5zdGFuY2VvZiBtdCl7dmFyIG89ci5kZWZpbml0aW9uKCkucmVmZXJlbmNlcztpZihvW28ubGVuZ3RoLTFdPT09cilyZXR1cm4gaX19cmV0dXJuIHRoaXN9KTt2YXIgcz1hZSgiJiYgfHwgPT09ICE9PSIpO2UodHQsZnVuY3Rpb24oZSx0LG4pe3NbdGhpcy5vcGVyYXRvcl18fG4rKzt2YXIgcj10aGlzLmxlZnQuX2V2YWwoZSx0LG4pO2lmKHI9PT10aGlzLmxlZnQpcmV0dXJuIHRoaXM7dmFyIGksbz10aGlzLnJpZ2h0Ll9ldmFsKGUsdCxuKTtpZihvPT09dGhpcy5yaWdodClyZXR1cm4gdGhpcztzd2l0Y2godGhpcy5vcGVyYXRvcil7Y2FzZSImJiI6aT1yJiZvO2JyZWFrO2Nhc2UifHwiOmk9cnx8bzticmVhaztjYXNlInwiOmk9cnxvO2JyZWFrO2Nhc2UiJiI6aT1yJm87YnJlYWs7Y2FzZSJeIjppPXJebzticmVhaztjYXNlIisiOmk9citvO2JyZWFrO2Nhc2UiKiI6aT1yKm87YnJlYWs7Y2FzZSIvIjppPXIvbzticmVhaztjYXNlIiUiOmk9ciVvO2JyZWFrO2Nhc2UiLSI6aT1yLW87YnJlYWs7Y2FzZSI8PCI6aT1yPDxvO2JyZWFrO2Nhc2UiPj4iOmk9cj4+bzticmVhaztjYXNlIj4+PiI6aT1yPj4+bzticmVhaztjYXNlIj09IjppPXI9PW87YnJlYWs7Y2FzZSI9PT0iOmk9cj09PW87YnJlYWs7Y2FzZSIhPSI6aT1yIT1vO2JyZWFrO2Nhc2UiIT09IjppPXIhPT1vO2JyZWFrO2Nhc2UiPCI6aT1yPG87YnJlYWs7Y2FzZSI8PSI6aT1yPD1vO2JyZWFrO2Nhc2UiPiI6aT1vPHI7YnJlYWs7Y2FzZSI+PSI6aT1vPD1yO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXN9cmV0dXJuIGlzTmFOKGkpJiZlLmZpbmRfcGFyZW50KHhlKT90aGlzOml9KSxlKG50LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNvbmRpdGlvbi5fZXZhbChlLHQsbik7aWYocj09PXRoaXMuY29uZGl0aW9uKXJldHVybiB0aGlzO3ZhciBpPXI/dGhpcy5jb25zZXF1ZW50OnRoaXMuYWx0ZXJuYXRpdmUsbz1pLl9ldmFsKGUsdCxuKTtyZXR1cm4gbz09PWk/dGhpczpvfSksZShtdCxmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIWkpcmV0dXJuIHRoaXM7aWYoMDw9dC5pbmRleE9mKGkpKXI9aS5fZXZhbCgpO2Vsc2V7aWYodGhpcy5fZXZhbD1ELHI9aS5fZXZhbChlLHQsbiksZGVsZXRlIHRoaXMuX2V2YWwscj09PWkpcmV0dXJuIHRoaXM7aS5fZXZhbD1mdW5jdGlvbigpe3JldHVybiByfSx0LnB1c2goaSl9aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXt2YXIgbz10aGlzLmRlZmluaXRpb24oKS5lc2NhcGVkO2lmKG8mJm88bilyZXR1cm4gdGhpc31yZXR1cm4gcn0pO3ZhciBkPXtBcnJheTpBcnJheSxNYXRoOk1hdGgsTnVtYmVyOk51bWJlcixPYmplY3Q6T2JqZWN0LFN0cmluZzpTdHJpbmd9LHU9e01hdGg6WyJFIiwiTE4xMCIsIkxOMiIsIkxPRzJFIiwiTE9HMTBFIiwiUEkiLCJTUVJUMV8yIiwiU1FSVDIiXSxOdW1iZXI6WyJNQVhfVkFMVUUiLCJNSU5fVkFMVUUiLCJOYU4iLCJORUdBVElWRV9JTkZJTklUWSIsIlBPU0lUSVZFX0lORklOSVRZIl19O2wodSksZShXZSxmdW5jdGlvbihlLHQsbil7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgcj10aGlzLnByb3BlcnR5O2lmKHIgaW5zdGFuY2VvZiBsZSYmKHI9ci5fZXZhbChlLHQsbikpPT09dGhpcy5wcm9wZXJ0eSlyZXR1cm4gdGhpczt2YXIgaSxvPXRoaXMuZXhwcmVzc2lvbjtpZihqKG8pKXt2YXIgYT11W28ubmFtZV07aWYoIWF8fCFhW3JdKXJldHVybiB0aGlzO2k9ZFtvLm5hbWVdfWVsc2V7aWYoIShpPW8uX2V2YWwoZSx0LG4rMSkpfHxpPT09b3x8IXVlKGkscikpcmV0dXJuIHRoaXM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGkpc3dpdGNoKHIpe2Nhc2UibmFtZSI6cmV0dXJuIGkubm9kZS5uYW1lP2kubm9kZS5uYW1lLm5hbWU6IiI7Y2FzZSJsZW5ndGgiOnJldHVybiBpLm5vZGUuYXJnbmFtZXMubGVuZ3RoO2RlZmF1bHQ6cmV0dXJuIHRoaXN9fXJldHVybiBpW3JdfXJldHVybiB0aGlzfSksZShLZSxmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5leHByZXNzaW9uO2lmKHQub3B0aW9uKCJ1bnNhZmUiKSYmciBpbnN0YW5jZW9mIFdlKXt2YXIgaSxvPXIucHJvcGVydHk7aWYobyBpbnN0YW5jZW9mIGxlJiYobz1vLl9ldmFsKHQsZSxuKSk9PT1yLnByb3BlcnR5KXJldHVybiB0aGlzO3ZhciBhPXIuZXhwcmVzc2lvbjtpZihqKGEpKXt2YXIgcz1iW2EubmFtZV07aWYoIXN8fCFzW29dKXJldHVybiB0aGlzO2k9ZFthLm5hbWVdfWVsc2V7aWYoKGk9YS5fZXZhbCh0LGUsbisxKSk9PT1hfHwhaSlyZXR1cm4gdGhpczt2YXIgdT1tW2kuY29uc3RydWN0b3IubmFtZV07aWYoIXV8fCF1W29dKXJldHVybiB0aGlzfWZvcih2YXIgbD1bXSxjPTAsZj10aGlzLmFyZ3MubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPXRoaXMuYXJnc1tjXSxoPXAuX2V2YWwodCxlLG4pO2lmKHA9PT1oKXJldHVybiB0aGlzO2wucHVzaChoKX10cnl7cmV0dXJuIGlbb10uYXBwbHkoaSxsKX1jYXRjaChlKXt0Lndhcm4oIkVycm9yIGV2YWx1YXRpbmcge2NvZGV9IFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIse2NvZGU6dGhpcy5wcmludF90b19zdHJpbmcoKSxmaWxlOnRoaXMuc3RhcnQuZmlsZSxsaW5lOnRoaXMuc3RhcnQubGluZSxjb2w6dGhpcy5zdGFydC5jb2x9KX19cmV0dXJuIHRoaXN9KSxlKEdlLEQpfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJfZXZhbCIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiBvKGUpe3JldHVybiBRKFhlLGUse29wZXJhdG9yOiIhIixleHByZXNzaW9uOmV9KX1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj1vKGUpO2lmKG4pe3ZhciBpPVEoaGUsdCx7Ym9keTp0fSk7cmV0dXJuIHkocixpKT09PWk/dDpyfXJldHVybiB5KHIsdCl9ZShsZSxmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfSksZShjZSxmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IG5lZ2F0ZSBhIHN0YXRlbWVudCIpfSksZShEZSxmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfSksZShYZSxmdW5jdGlvbigpe3JldHVybiIhIj09dGhpcy5vcGVyYXRvcj90aGlzLmV4cHJlc3Npb246byh0aGlzKX0pLGUoWWUsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5leHByZXNzaW9ucy5zbGljZSgpO3JldHVybiB0LnB1c2godC5wb3AoKS5uZWdhdGUoZSkpLE4odGhpcyx0KX0pLGUobnQsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsb25lKCk7cmV0dXJuIG4uY29uc2VxdWVudD1uLmNvbnNlcXVlbnQubmVnYXRlKGUpLG4uYWx0ZXJuYXRpdmU9bi5hbHRlcm5hdGl2ZS5uZWdhdGUoZSksaSh0aGlzLG4sdCl9KSxlKHR0LGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jbG9uZSgpLHI9dGhpcy5vcGVyYXRvcjtpZihlLm9wdGlvbigidW5zYWZlX2NvbXBzIikpc3dpdGNoKHIpe2Nhc2UiPD0iOnJldHVybiBuLm9wZXJhdG9yPSI+IixuO2Nhc2UiPCI6cmV0dXJuIG4ub3BlcmF0b3I9Ij49IixuO2Nhc2UiPj0iOnJldHVybiBuLm9wZXJhdG9yPSI8IixuO2Nhc2UiPiI6cmV0dXJuIG4ub3BlcmF0b3I9Ijw9IixufXN3aXRjaChyKXtjYXNlIj09IjpyZXR1cm4gbi5vcGVyYXRvcj0iIT0iLG47Y2FzZSIhPSI6cmV0dXJuIG4ub3BlcmF0b3I9Ij09IixuO2Nhc2UiPT09IjpyZXR1cm4gbi5vcGVyYXRvcj0iIT09IixuO2Nhc2UiIT09IjpyZXR1cm4gbi5vcGVyYXRvcj0iPT09IixuO2Nhc2UiJiYiOnJldHVybiBuLm9wZXJhdG9yPSJ8fCIsbi5sZWZ0PW4ubGVmdC5uZWdhdGUoZSx0KSxuLnJpZ2h0PW4ucmlnaHQubmVnYXRlKGUpLGkodGhpcyxuLHQpO2Nhc2UifHwiOnJldHVybiBuLm9wZXJhdG9yPSImJiIsbi5sZWZ0PW4ubGVmdC5uZWdhdGUoZSx0KSxuLnJpZ2h0PW4ucmlnaHQubmVnYXRlKGUpLGkodGhpcyxuLHQpfXJldHVybiBvKHRoaXMpfSl9KGZ1bmN0aW9uKGUsbil7ZS5ERUZNRVRIT0QoIm5lZ2F0ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKHRoaXMsZSx0KX0pfSk7dmFyIGM9YWUoIkJvb2xlYW4gZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCBEYXRlIGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgRXJyb3IgZXNjYXBlIEV2YWxFcnJvciBpc0Zpbml0ZSBpc05hTiBOdW1iZXIgT2JqZWN0IHBhcnNlRmxvYXQgcGFyc2VJbnQgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdHJpbmcgU3ludGF4RXJyb3IgVHlwZUVycm9yIHVuZXNjYXBlIFVSSUVycm9yIik7ZnVuY3Rpb24gQShlKXtyZXR1cm4gZSYmZS5hYm9ydHMoKX1LZS5ERUZNRVRIT0QoImlzX2V4cHJfcHVyZSIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgdD10aGlzLmV4cHJlc3Npb247aWYoaih0KSYmY1t0Lm5hbWVdKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBRZSYmaih0LmV4cHJlc3Npb24pKXt2YXIgbj1iW3QuZXhwcmVzc2lvbi5uYW1lXTtyZXR1cm4gbiYmblt0LnByb3BlcnR5XX19cmV0dXJuIHRoaXMucHVyZXx8IWUucHVyZV9mdW5jcyh0aGlzKX0pLGxlLkRFRk1FVEhPRCgiaXNfY2FsbF9wdXJlIixyZSksUWUuREVGTUVUSE9EKCJpc19jYWxsX3B1cmUiLGZ1bmN0aW9uKGUpe2lmKGUub3B0aW9uKCJ1bnNhZmUiKSl7dmFyIHQsbj10aGlzLmV4cHJlc3Npb247cmV0dXJuIG4gaW5zdGFuY2VvZiBpdD90PW0uQXJyYXk6bi5pc19ib29sZWFuKGUpP3Q9bS5Cb29sZWFuOm4uaXNfbnVtYmVyKGUpP3Q9bS5OdW1iZXI6biBpbnN0YW5jZW9mIF90P3Q9bS5SZWdFeHA6bi5pc19zdHJpbmcoZSk/dD1tLlN0cmluZzp0aGlzLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fCh0PW0uT2JqZWN0KSx0JiZ0W3RoaXMucHJvcGVydHldfX0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpZihlW25dLmhhc19zaWRlX2VmZmVjdHModCkpcmV0dXJuITA7cmV0dXJuITF9ZShsZSxpZSksZShpdCxmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLmVsZW1lbnRzLGUpfSksZShydCxpZSksZSh0dCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZWZ0Lmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMucmlnaHQuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoZGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcy5ib2R5LGUpfSksZShLZSxmdW5jdGlvbihlKXtyZXR1cm4hKHRoaXMuaXNfZXhwcl9wdXJlKGUpfHx0aGlzLmV4cHJlc3Npb24uaXNfY2FsbF9wdXJlKGUpJiYhdGhpcy5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMoZSkpfHx0KHRoaXMuYXJncyxlKX0pLGUoUGUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMuY29uc2VxdWVudC5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmFsdGVybmF0aXZlLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKHZ0LHJlKSxlKFZlLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZGVmaW5pdGlvbnMsZSl9KSxlKFFlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2VzcyhlKXx8dGhpcy5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKGdlLHJlKSxlKFVlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbmRpdGlvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmJvZHkmJnRoaXMuYm9keS5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmFsdGVybmF0aXZlJiZ0aGlzLmFsdGVybmF0aXZlLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKHZlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoT2UscmUpLGUob3QsZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcy5wcm9wZXJ0aWVzLGUpfSksZShhdCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZS5oYXNfc2lkZV9lZmZlY3RzKGUpfSksZShaZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLnByb3BlcnR5Lmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZXhwcmVzc2lvbnMsZSl9KSxlKGhlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoTWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobHQscmUpLGUobXQsZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNfZGVjbGFyZWQoZSl9KSxlKGd0LHJlKSxlKEllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuYm9keSxlKXx8dGhpcy5iY2F0Y2gmJnRoaXMuYmNhdGNoLmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMuYmZpbmFsbHkmJnRoaXMuYmZpbmFsbHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoSmUsZnVuY3Rpb24oZSl7cmV0dXJuIHNbdGhpcy5vcGVyYXRvcl18fHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfSksZSgkZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZX0pfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJoYXNfc2lkZV9lZmZlY3RzIix0KX0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpZihlW25dLm1heV90aHJvdyh0KSlyZXR1cm4hMDtyZXR1cm4hMX1lKGxlLGllKSxlKHZ0LHJlKSxlKGdlLHJlKSxlKE9lLHJlKSxlKGx0LHJlKSxlKGd0LHJlKSxlKGl0LGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZWxlbWVudHMsZSl9KSxlKHJ0LGZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5yaWdodC5tYXlfdGhyb3coZSl8fCEoIWUuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiYiPSI9PXRoaXMub3BlcmF0b3ImJnRoaXMubGVmdCBpbnN0YW5jZW9mIG10KSYmdGhpcy5sZWZ0Lm1heV90aHJvdyhlKX0pLGUodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVmdC5tYXlfdGhyb3coZSl8fHRoaXMucmlnaHQubWF5X3Rocm93KGUpfSksZShkZSxmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLmJvZHksZSl9KSxlKEtlLGZ1bmN0aW9uKGUpe3JldHVybiEhdCh0aGlzLmFyZ3MsZSl8fCF0aGlzLmlzX2V4cHJfcHVyZShlKSYmKCEhdGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKXx8KCEodGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgT2UpfHx0KHRoaXMuZXhwcmVzc2lvbi5ib2R5LGUpKSl9KSxlKFBlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93KGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLm1heV90aHJvdyhlKXx8dGhpcy5jb25zZXF1ZW50Lm1heV90aHJvdyhlKXx8dGhpcy5hbHRlcm5hdGl2ZS5tYXlfdGhyb3coZSl9KSxlKFZlLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZGVmaW5pdGlvbnMsZSl9KSxlKFFlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2VzcyhlKXx8dGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKX0pLGUoVWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLm1heV90aHJvdyhlKXx8dGhpcy5ib2R5JiZ0aGlzLmJvZHkubWF5X3Rocm93KGUpfHx0aGlzLmFsdGVybmF0aXZlJiZ0aGlzLmFsdGVybmF0aXZlLm1heV90aHJvdyhlKX0pLGUodmUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYm9keS5tYXlfdGhyb3coZSl9KSxlKG90LGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMucHJvcGVydGllcyxlKX0pLGUoYXQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmFsdWUubWF5X3Rocm93KGUpfSksZShSZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZSYmdGhpcy52YWx1ZS5tYXlfdGhyb3coZSl9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZXhwcmVzc2lvbnMsZSl9KSxlKGhlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkubWF5X3Rocm93KGUpfSksZShaZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3coZSl8fHRoaXMucHJvcGVydHkubWF5X3Rocm93KGUpfSksZShNZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKXx8dCh0aGlzLmJvZHksZSl9KSxlKG10LGZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmlzX2RlY2xhcmVkKGUpfSksZShJZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iY2F0Y2g/dGhpcy5iY2F0Y2gubWF5X3Rocm93KGUpOnQodGhpcy5ib2R5LGUpfHx0aGlzLmJmaW5hbGx5JiZ0aGlzLmJmaW5hbGx5Lm1heV90aHJvdyhlKX0pLGUoSmUsZnVuY3Rpb24oZSl7cmV0dXJuISgidHlwZW9mIj09dGhpcy5vcGVyYXRvciYmdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgbXQpJiZ0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93KGUpfSksZSgkZSxmdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMudmFsdWUmJnRoaXMudmFsdWUubWF5X3Rocm93KGUpfSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoIm1heV90aHJvdyIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aDswPD0tLXQ7KWlmKCFlW3RdLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oKSlyZXR1cm4hMTtyZXR1cm4hMH1lKGxlLHJlKSxlKGl0LGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5lbGVtZW50cyl9KSxlKHR0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdC5pc19jb25zdGFudF9leHByZXNzaW9uKCkmJnRoaXMucmlnaHQuaXNfY29uc3RhbnRfZXhwcmVzc2lvbigpfSksZSh2dCxpZSksZShPZSxmdW5jdGlvbihyKXt2YXIgaT10aGlzLG89ITA7cmV0dXJuIGkud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYoIW8pcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIG10KXtpZihpLmlubGluZWQpcmV0dXJuIShvPSExKTt2YXIgdD1lLmRlZmluaXRpb24oKTtpZih0ZSh0LGkuZW5jbG9zZWQpJiYhaS52YXJpYWJsZXMuaGFzKHQubmFtZSkpe2lmKHIpe3ZhciBuPXIuZmluZF92YXJpYWJsZShlKTtpZih0LnVuZGVjbGFyZWQ/IW46bj09PXQpcmV0dXJuIG89ImYiLCEwfW89ITF9cmV0dXJuITB9fSkpLG99KSxlKG90LGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5wcm9wZXJ0aWVzKX0pLGUoYXQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZS5pc19jb25zdGFudF9leHByZXNzaW9uKCl9KSxlKEplLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5pc19jb25zdGFudF9leHByZXNzaW9uKCl9KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfY29uc3RhbnRfZXhwcmVzc2lvbiIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9dGhpcy5ib2R5Lmxlbmd0aDtyZXR1cm4gMDxlJiZBKHRoaXMuYm9keVtlLTFdKX1lKGNlLFQpLGUoVSxEKSxlKG1lLHQpLGUoTSx0KSxlKFVlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRpdmUmJkEodGhpcy5ib2R5KSYmQSh0aGlzLmFsdGVybmF0aXZlKSYmdGhpc30pfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJhYm9ydHMiLHQpfSk7dmFyIGY9YWUoWyJ1c2UgYXNtIiwidXNlIHN0cmljdCJdKTtmdW5jdGlvbiB4KHQsZSl7dmFyIG49ITEscj1uZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISEobnx8ZSBpbnN0YW5jZW9mIGtlKXx8KGUgaW5zdGFuY2VvZiBMZSYmci5sb29wY29udHJvbF90YXJnZXQoZSk9PT10P249ITA6dm9pZCAwKX0pO3JldHVybiBlIGluc3RhbmNlb2YgdmUmJnIucHVzaChlKSxyLnB1c2godCksdC5ib2R5LndhbGsociksbn1lKHBlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIXQub3B0aW9uKCJkaXJlY3RpdmVzIil8fGZbZS52YWx1ZV0mJnQuaGFzX2RpcmVjdGl2ZShlLnZhbHVlKT09PWU/ZTpRKGdlLGUpfSksZShmZSxmdW5jdGlvbihlLHQpe3JldHVybiB0Lm9wdGlvbigiZHJvcF9kZWJ1Z2dlciIpP1EoZ2UsZSk6ZX0pLGUodmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ib2R5IGluc3RhbmNlb2YgRmUmJnQubG9vcGNvbnRyb2xfdGFyZ2V0KGUuYm9keSk9PT1lLmJvZHk/UShnZSxlKTowPT1lLmxhYmVsLnJlZmVyZW5jZXMubGVuZ3RoP2UuYm9keTplfSksZShkZSxmdW5jdGlvbihlLHQpe3JldHVybiBpKGUuYm9keSx0KSxlfSksZShtZSxmdW5jdGlvbihlLHQpe3N3aXRjaChpKGUuYm9keSx0KSxlLmJvZHkubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGUuYm9keVswXTtjYXNlIDA6cmV0dXJuIFEoZ2UsZSl9cmV0dXJuIGV9KSxlKE9lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZS5ib2R5LHQpLHQub3B0aW9uKCJzaWRlX2VmZmVjdHMiKSYmMT09ZS5ib2R5Lmxlbmd0aCYmZS5ib2R5WzBdPT09dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJihlLmJvZHkubGVuZ3RoPTApLGV9KSxrZS5ERUZNRVRIT0QoImRyb3BfdW51c2VkIixmdW5jdGlvbih5KXtpZih5Lm9wdGlvbigidW51c2VkIikmJiF5Lmhhc19kaXJlY3RpdmUoInVzZSBhc20iKSl7dmFyIF89dGhpcztpZighXy5waW5uZWQoKSl7dmFyIHc9IShfIGluc3RhbmNlb2YgQ2UpfHx5LnRvcGxldmVsLmZ1bmNzLEU9IShfIGluc3RhbmNlb2YgQ2UpfHx5LnRvcGxldmVsLnZhcnMsQT0va2VlcF9hc3NpZ24vLnRlc3QoeS5vcHRpb24oInVudXNlZCIpKT9yZTpmdW5jdGlvbihlLHQpe3ZhciBuO2lmKGUgaW5zdGFuY2VvZiBydCYmKGUud3JpdGVfb25seXx8Ij0iPT1lLm9wZXJhdG9yKT9uPWUubGVmdDplIGluc3RhbmNlb2YgSmUmJmUud3JpdGVfb25seSYmKG49ZS5leHByZXNzaW9uKSwhL3N0cmljdC8udGVzdCh5Lm9wdGlvbigicHVyZV9nZXR0ZXJzIikpKXJldHVybiBuIGluc3RhbmNlb2YgbXQmJm47Zm9yKDtuIGluc3RhbmNlb2YgV2UmJiFuLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2Vzcyh5KTspbiBpbnN0YW5jZW9mIFplJiZ0LnVuc2hpZnQobi5wcm9wZXJ0eSksbj1uLmV4cHJlc3Npb247cmV0dXJuIG4gaW5zdGFuY2VvZiBtdCYmc2Uobi5kZWZpbml0aW9uKCkub3JpZyxmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBodCl9KSYmbn0scz1bXSx4PU9iamVjdC5jcmVhdGUobnVsbCksaz1PYmplY3QuY3JlYXRlKG51bGwpLHU9T2JqZWN0LmNyZWF0ZShudWxsKSxsPU9iamVjdC5jcmVhdGUobnVsbCk7XyBpbnN0YW5jZW9mIENlJiZ5LnRvcF9yZXRhaW4mJl8udmFyaWFibGVzLmVhY2goZnVuY3Rpb24oZSl7IXkudG9wX3JldGFpbihlKXx8ZS5pZCBpbiB4fHwoeFtlLmlkXT0hMCxzLnB1c2goZSkpfSk7dmFyIEM9bmV3IEwscj1uZXcgTCxPPXRoaXMsYz1uZXcgRHQoZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgT2UmJmUudXNlc19hcmd1bWVudHMmJiFjLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmZS5hcmduYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3QuaWQgaW4geHx8KHhbdC5pZF09ITAscy5wdXNoKHQpKX0pLGUhPT1fKXtpZihlIGluc3RhbmNlb2YgVGUpe3ZhciBuPWUubmFtZS5kZWZpbml0aW9uKCk7cmV0dXJuIHd8fE8hPT1ffHxuLmlkIGluIHh8fCh4W24uaWRdPSEwLHMucHVzaChuKSksci5hZGQobi5pZCxlKSwhMH1yZXR1cm4gZSBpbnN0YW5jZW9mIGZ0JiZPPT09XyYmQy5hZGQoZS5kZWZpbml0aW9uKCkuaWQsZSksZSBpbnN0YW5jZW9mIFZlJiZPPT09Xz8oZS5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZS5kZWZpbml0aW9uKCk7ZS5uYW1lIGluc3RhbmNlb2YgY3QmJkMuYWRkKHQuaWQsZSksRXx8dC5pZCBpbiB4fHwoeFt0LmlkXT0hMCxzLnB1c2godCkpLGUudmFsdWUmJihyLmFkZCh0LmlkLGUudmFsdWUpLGUudmFsdWUuaGFzX3NpZGVfZWZmZWN0cyh5KSYmZS52YWx1ZS53YWxrKGMpLHQuY2hhaW5lZHx8ZS5uYW1lLmZpeGVkX3ZhbHVlKCkhPT1lLnZhbHVlfHwoa1t0LmlkXT1lKSl9KSwhMCk6aShlLHQpfX0pO18ud2FsayhjKSxjPW5ldyBEdChpKTtmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKyl7dmFyIHQ9ci5nZXQoc1tlXS5pZCk7dCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uud2FsayhjKX0pfXZhciBTPXkub3B0aW9uKCJrZWVwX2ZuYW1lcyIpP3JlOnkub3B0aW9uKCJpZTgiKT9mdW5jdGlvbihlKXtyZXR1cm4heS5leHBvc2VkKGUpJiYhZS5yZWZlcmVuY2VzLmxlbmd0aH06ZnVuY3Rpb24oZSl7cmV0dXJuIShlLmlkIGluIHgpfHwxPGUub3JpZy5sZW5ndGh9LEQ9bmV3IFd0KGZ1bmN0aW9uKGEsZSx0KXt2YXIgbj1ELnBhcmVudCgpO2lmKEUpe3ZhciByPVtdO2lmKGM9QShhLHIpKXt2YXIgaT0oZj1jLmRlZmluaXRpb24oKSkuaWQgaW4geCxvPW51bGw7aWYoYSBpbnN0YW5jZW9mIHJ0PyghaXx8YS5sZWZ0PT09YyYmZi5pZCBpbiBrJiZrW2YuaWRdIT09YSkmJihvPWEucmlnaHQpOml8fChvPVEoeXQsYSx7dmFsdWU6MH0pKSxvKXJldHVybiByLnB1c2gobyksWih5LG4sYSxOKGEsci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNmb3JtKEQpfSkpKX19aWYoTz09PV8pe2lmKGEgaW5zdGFuY2VvZiBEZSYmYS5uYW1lJiZTKGEubmFtZS5kZWZpbml0aW9uKCkpJiYoYS5uYW1lPW51bGwpLGEgaW5zdGFuY2VvZiBPZSYmIShhIGluc3RhbmNlb2YgU2UpKWZvcih2YXIgcz0heS5vcHRpb24oImtlZXBfZmFyZ3MiKSx1PWEuYXJnbmFtZXMsbD11Lmxlbmd0aDswPD0tLWw7KXt2YXIgYzsoYz11W2xdKS5kZWZpbml0aW9uKCkuaWQgaW4geD9zPSExOihjLl9fdW51c2VkPSEwLHMmJih1LnBvcCgpLHlbYy51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIGZ1bmN0aW9uIGFyZ3VtZW50IHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoYykpKSl9dmFyIGY7aWYodyYmYSBpbnN0YW5jZW9mIFRlJiZhIT09XylpZighKChmPWEubmFtZS5kZWZpbml0aW9uKCkpLmlkIGluIHgpKXJldHVybiB5W2EubmFtZS51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIGZ1bmN0aW9uIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoYS5uYW1lKSksZi5lbGltaW5hdGVkKyssUShnZSxhKTtpZihhIGluc3RhbmNlb2YgVmUmJiEobiBpbnN0YW5jZW9mIEFlJiZuLmluaXQ9PT1hKSl7dmFyIHA9W10saD1bXSxkPVtdLG09W107c3dpdGNoKGEuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnZhbHVlJiYoZS52YWx1ZT1lLnZhbHVlLnRyYW5zZm9ybShEKSk7dmFyIHQ9ZS5uYW1lLmRlZmluaXRpb24oKTtpZighRXx8dC5pZCBpbiB4KXtpZihlLnZhbHVlJiZ0LmlkIGluIGsmJmtbdC5pZF0hPT1lJiYoZS52YWx1ZT1lLnZhbHVlLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh5KSksZS5uYW1lIGluc3RhbmNlb2YgY3Qpe3ZhciBuPUMuZ2V0KHQuaWQpO2lmKDE8bi5sZW5ndGgmJighZS52YWx1ZXx8dC5vcmlnLmluZGV4T2YoZS5uYW1lKT50LmVsaW1pbmF0ZWQpKXtpZih5Lndhcm4oIkRyb3BwaW5nIGR1cGxpY2F0ZWQgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZSB7bmFtZX0gW3tmaWxlfTp7bGluZX0se2NvbH1dIixiKGUubmFtZSkpLGUudmFsdWUpe3ZhciByPVEobXQsZS5uYW1lLGUubmFtZSk7dC5yZWZlcmVuY2VzLnB1c2gocik7dmFyIGk9UShydCxlLHtvcGVyYXRvcjoiPSIsbGVmdDpyLHJpZ2h0OmUudmFsdWV9KTtrW3QuaWRdPT09ZSYmKGtbdC5pZF09aSksbS5wdXNoKGkudHJhbnNmb3JtKEQpKX1yZXR1cm4gUihuLGUpLHZvaWQgdC5lbGltaW5hdGVkKyt9fWUudmFsdWU/KDA8bS5sZW5ndGgmJigwPGQubGVuZ3RoPyhtLnB1c2goZS52YWx1ZSksZS52YWx1ZT1OKGUudmFsdWUsbSkpOnAucHVzaChRKGhlLGEse2JvZHk6TihhLG0pfSkpLG09W10pLGQucHVzaChlKSk6aC5wdXNoKGUpfWVsc2UgaWYodC5vcmlnWzBdaW5zdGFuY2VvZiBkdCl7KG89ZS52YWx1ZSYmZS52YWx1ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoeSkpJiZtLnB1c2gobyksZS52YWx1ZT1udWxsLGgucHVzaChlKX1lbHNle3ZhciBvOyhvPWUudmFsdWUmJmUudmFsdWUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHkpKT8oeS53YXJuKCJTaWRlIGVmZmVjdHMgaW4gaW5pdGlhbGl6YXRpb24gb2YgdW51c2VkIHZhcmlhYmxlIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoZS5uYW1lKSksbS5wdXNoKG8pKTp5W2UubmFtZS51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIHZhcmlhYmxlIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoZS5uYW1lKSksdC5lbGltaW5hdGVkKyt9fSksKDA8aC5sZW5ndGh8fDA8ZC5sZW5ndGgpJiYoYS5kZWZpbml0aW9ucz1oLmNvbmNhdChkKSxwLnB1c2goYSkpLDA8bS5sZW5ndGgmJnAucHVzaChRKGhlLGEse2JvZHk6TihhLG0pfSkpLHAubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQ/b2Uuc2tpcDpRKGdlLGEpO2Nhc2UgMTpyZXR1cm4gcFswXTtkZWZhdWx0OnJldHVybiB0P29lLnNwbGljZShwKTpRKG1lLGEse2JvZHk6cH0pfX1pZihhIGluc3RhbmNlb2YgRWUpcmV0dXJuIGUoYSx0aGlzKSxhLmluaXQgaW5zdGFuY2VvZiBtZSYmKGc9YS5pbml0LGEuaW5pdD1nLmJvZHkucG9wKCksZy5ib2R5LnB1c2goYSkpLGEuaW5pdCBpbnN0YW5jZW9mIGhlP2EuaW5pdD1hLmluaXQuYm9keTpJKGEuaW5pdCkmJihhLmluaXQ9bnVsbCksZz90P29lLnNwbGljZShnLmJvZHkpOmc6YTtpZihhIGluc3RhbmNlb2YgdmUmJmEuYm9keSBpbnN0YW5jZW9mIEVlKXtpZihlKGEsdGhpcyksYS5ib2R5IGluc3RhbmNlb2YgbWUpe3ZhciBnPWEuYm9keTtyZXR1cm4gYS5ib2R5PWcuYm9keS5wb3AoKSxnLmJvZHkucHVzaChhKSx0P29lLnNwbGljZShnLmJvZHkpOmd9cmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIGtlKXt2YXIgdj1PO3JldHVybiBlKE89YSx0aGlzKSxPPXYsYX19ZnVuY3Rpb24gYihlKXtyZXR1cm57bmFtZTplLm5hbWUsZmlsZTplLnN0YXJ0LmZpbGUsbGluZTplLnN0YXJ0LmxpbmUsY29sOmUuc3RhcnQuY29sfX19KTtfLnRyYW5zZm9ybShEKX19ZnVuY3Rpb24gZihlLHQsbil7ZS5pZCBpbiB4fHwodCYmbj8oeFtlLmlkXT0hMCxzLnB1c2goZSkpOih1W2UuaWRdPXQsbFtlLmlkXT1uKSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuLHI9W10saT1BKGUscik7aWYoaSYmXy52YXJpYWJsZXMuZ2V0KGkubmFtZSk9PT0obj1pLmRlZmluaXRpb24oKSkpe2lmKHIuZm9yRWFjaChmdW5jdGlvbihlKXtlLndhbGsoYyl9KSxlIGluc3RhbmNlb2YgcnQpaWYoZS5yaWdodC53YWxrKGMpLGUubGVmdD09PWkpbi5jaGFpbmVkfHxpLmZpeGVkX3ZhbHVlKCkhPT1lLnJpZ2h0fHwoa1tuLmlkXT1lKSxlLndyaXRlX29ubHl8fGYobiwhMCxsW24uaWRdKTtlbHNle3ZhciBvPWkuZml4ZWRfdmFsdWUoKTtvJiZvLmlzX2NvbnN0YW50KCl8fGYobix1W24uaWRdLCEwKX1yZXR1cm4hMH1pZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuKG49ZS5kZWZpbml0aW9uKCkpLmlkIGluIHh8fCh4W24uaWRdPSEwLHMucHVzaChuKSksITA7aWYoZSBpbnN0YW5jZW9mIGtlKXt2YXIgYT1PO3JldHVybiBPPWUsdCgpLE89YSwhMH19fSksa2UuREVGTUVUSE9EKCJob2lzdF9kZWNsYXJhdGlvbnMiLGZ1bmN0aW9uKGkpe2lmKCFpLmhhc19kaXJlY3RpdmUoInVzZSBhc20iKSl7dmFyIG89aS5vcHRpb24oImhvaXN0X2Z1bnMiKSxhPWkub3B0aW9uKCJob2lzdF92YXJzIikscz10aGlzO2lmKGEpe3ZhciB0PTA7cy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4gMTx0fHwoZSBpbnN0YW5jZW9mIGtlJiZlIT09c3x8KGUgaW5zdGFuY2VvZiBIZT8odCsrLCEwKTp2b2lkIDApKX0pKSx0PD0xJiYoYT0hMSl9aWYob3x8YSl7dmFyIHU9W10sbD1bXSxjPW5ldyBMLGY9MCxwPW5ldyBXdChmdW5jdGlvbihlKXtpZihlIT09cyl7aWYoZSBpbnN0YW5jZW9mIHBlKXJldHVybiB1LnB1c2goZSksUShnZSxlKTtpZihvJiZlIGluc3RhbmNlb2YgVGUmJihwLnBhcmVudCgpPT09c3x8IWkuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpKSlyZXR1cm4gbC5wdXNoKGUpLFEoZ2UsZSk7aWYoYSYmZSBpbnN0YW5jZW9mIEhlKXtlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7Yy5zZXQoZS5uYW1lLm5hbWUsZSksKytmfSk7dmFyIHQ9ZS50b19hc3NpZ25tZW50cyhpKSxuPXAucGFyZW50KCk7aWYobiBpbnN0YW5jZW9mIEFlJiZuLmluaXQ9PT1lKXtpZih0KXJldHVybiB0O3ZhciByPWUuZGVmaW5pdGlvbnNbMF0ubmFtZTtyZXR1cm4gUShtdCxyLHIpfXJldHVybiBuIGluc3RhbmNlb2YgRWUmJm4uaW5pdD09PWU/dDp0P1EoaGUsZSx7Ym9keTp0fSk6UShnZSxlKX1yZXR1cm4gZSBpbnN0YW5jZW9mIGtlP2U6dm9pZCAwfX0pO2lmKHMudHJhbnNmb3JtKHApLDA8Zil7dmFyIG49W107aWYoYy5lYWNoKGZ1bmN0aW9uKGUsdCl7cyBpbnN0YW5jZW9mIE9lJiYhc2Uocy5hcmduYW1lcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT10fSk/Yy5kZWwodCk6KChlPWUuY2xvbmUoKSkudmFsdWU9bnVsbCxuLnB1c2goZSksYy5zZXQodCxlKSl9KSwwPG4ubGVuZ3RoKXtmb3IodmFyIGU9MDtlPHMuYm9keS5sZW5ndGg7KXtpZihzLmJvZHlbZV1pbnN0YW5jZW9mIGhlKXt2YXIgcixoLGQ9cy5ib2R5W2VdLmJvZHk7aWYoZCBpbnN0YW5jZW9mIHJ0JiYiPSI9PWQub3BlcmF0b3ImJihyPWQubGVmdClpbnN0YW5jZW9mIHV0JiZjLmhhcyhyLm5hbWUpKXtpZigobT1jLmdldChyLm5hbWUpKS52YWx1ZSlicmVhazttLnZhbHVlPWQucmlnaHQsUihuLG0pLG4ucHVzaChtKSxzLmJvZHkuc3BsaWNlKGUsMSk7Y29udGludWV9aWYoZCBpbnN0YW5jZW9mIFllJiYoaD1kLmV4cHJlc3Npb25zWzBdKWluc3RhbmNlb2YgcnQmJiI9Ij09aC5vcGVyYXRvciYmKHI9aC5sZWZ0KWluc3RhbmNlb2YgdXQmJmMuaGFzKHIubmFtZSkpe3ZhciBtO2lmKChtPWMuZ2V0KHIubmFtZSkpLnZhbHVlKWJyZWFrO20udmFsdWU9aC5yaWdodCxSKG4sbSksbi5wdXNoKG0pLHMuYm9keVtlXS5ib2R5PU4oZCxkLmV4cHJlc3Npb25zLnNsaWNlKDEpKTtjb250aW51ZX19aWYocy5ib2R5W2VdaW5zdGFuY2VvZiBnZSlzLmJvZHkuc3BsaWNlKGUsMSk7ZWxzZXtpZighKHMuYm9keVtlXWluc3RhbmNlb2YgbWUpKWJyZWFrO3ZhciBnPVtlLDFdLmNvbmNhdChzLmJvZHlbZV0uYm9keSk7cy5ib2R5LnNwbGljZS5hcHBseShzLmJvZHksZyl9fW49UShIZSxzLHtkZWZpbml0aW9uczpufSksbC5wdXNoKG4pfX1zLmJvZHk9dS5jb25jYXQobCxzLmJvZHkpfX19KSxrZS5ERUZNRVRIT0QoInZhcl9uYW1lcyIsZnVuY3Rpb24oKXt2YXIgbj10aGlzLl92YXJfbmFtZXM7cmV0dXJuIG58fCh0aGlzLl92YXJfbmFtZXM9bj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtuW2UubmFtZV09ITB9KSx0aGlzLnZhcmlhYmxlcy5lYWNoKGZ1bmN0aW9uKGUsdCl7blt0XT0hMH0pKSxufSksa2UuREVGTUVUSE9EKCJtYWtlX3Zhcl9uYW1lIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy52YXJfbmFtZXMoKSxuPWU9ZS5yZXBsYWNlKC8oPzpeW15hLXpfJF18W15hLXowLTlfJF0pL2dpLCJfIikscj0wO3Rbbl07cisrKW49ZSsiJCIrcjtyZXR1cm4gdFtuXT0hMCxufSksa2UuREVGTUVUSE9EKCJob2lzdF9wcm9wZXJ0aWVzIixmdW5jdGlvbihlKXtpZihlLm9wdGlvbigiaG9pc3RfcHJvcHMiKSYmIWUuaGFzX2RpcmVjdGl2ZSgidXNlIGFzbSIpKXt2YXIgYz10aGlzLGY9YyBpbnN0YW5jZW9mIENlJiZlLnRvcF9yZXRhaW58fHJlLHA9T2JqZWN0LmNyZWF0ZShudWxsKTtjLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24ocixlKXtpZihyIGluc3RhbmNlb2YgcnQmJiI9Ij09ci5vcGVyYXRvciYmci53cml0ZV9vbmx5JiZ1KHIubGVmdCxyLnJpZ2h0LDEpKXtlKHIsdGhpcyk7dmFyIGk9bmV3IEwsbz1bXSxhPVtdO3JldHVybiByLnJpZ2h0LnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1sKHIubGVmdCxlLmtleSk7YS5wdXNoKFEoJGUscix7bmFtZTp0LHZhbHVlOm51bGx9KSk7dmFyIG49UShtdCxyLHtuYW1lOnQubmFtZSxzY29wZTpjLHRoZWRlZjp0LmRlZmluaXRpb24oKX0pO24ucmVmZXJlbmNlKHt9KSxvLnB1c2goUShydCxyLHtvcGVyYXRvcjoiPSIsbGVmdDpuLHJpZ2h0OmUudmFsdWV9KSl9KSxwW3IubGVmdC5kZWZpbml0aW9uKCkuaWRdPWksYy5ib2R5LnNwbGljZShjLmJvZHkuaW5kZXhPZih0aGlzLnN0YWNrWzFdKSsxLDAsUShIZSxyLHtkZWZpbml0aW9uczphfSkpLE4ocixvKX1pZihyIGluc3RhbmNlb2YgJGUmJnUoci5uYW1lLHIudmFsdWUsMCkpe2Uocix0aGlzKTtpPW5ldyBMO3ZhciB0PVtdO3JldHVybiByLnZhbHVlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goUSgkZSxyLHtuYW1lOmwoci5uYW1lLGUua2V5KSx2YWx1ZTplLnZhbHVlfSkpfSkscFtyLm5hbWUuZGVmaW5pdGlvbigpLmlkXT1pLG9lLnNwbGljZSh0KX1pZihyIGluc3RhbmNlb2YgV2UmJnIuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIG10JiYoaT1wW3IuZXhwcmVzc2lvbi5kZWZpbml0aW9uKCkuaWRdKSl7dmFyIG49aS5nZXQoZChyLnByb3BlcnR5KSkscz1RKG10LHIse25hbWU6bi5uYW1lLHNjb3BlOnIuZXhwcmVzc2lvbi5zY29wZSx0aGVkZWY6bn0pO3JldHVybiBzLnJlZmVyZW5jZSh7fSksc31mdW5jdGlvbiB1KGUsdCxuKXtpZihlLnNjb3BlPT09Yyl7dmFyIHI9ZS5kZWZpbml0aW9uKCk7aWYoci5hc3NpZ25tZW50cz09biYmIXIuZGlyZWN0X2FjY2VzcyYmMSE9ci5lc2NhcGVkJiZyLnJlZmVyZW5jZXMubGVuZ3RoIT1uJiYhci5zaW5nbGVfdXNlJiYhZihyKSYmZS5maXhlZF92YWx1ZSgpPT09dClyZXR1cm4gdCBpbnN0YW5jZW9mIG90fX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49UShjdCxlLHtuYW1lOmMubWFrZV92YXJfbmFtZShlLm5hbWUrIl8iK3QpLHNjb3BlOmN9KSxyPWMuZGVmX3ZhcmlhYmxlKG4pO3JldHVybiBpLnNldCh0LHIpLGMuZW5jbG9zZWQucHVzaChyKSxufX0pKX19KSxmdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W10sbz0hMSxhPTA7YTxyO2ErKyl7dmFyIHM9ZVthXS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUodCxuKTtvfD1zIT09ZVthXSxzJiYoaS5wdXNoKHMpLG49ITEpfXJldHVybiBvP2kubGVuZ3RoP2k6bnVsbDplfWUobGUsRCksZShTZSxUKSxlKGl0LGZ1bmN0aW9uKGUsdCl7dmFyIG49YSh0aGlzLmVsZW1lbnRzLGUsdCk7cmV0dXJuIG4mJk4odGhpcyxuKX0pLGUocnQsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZWZ0O3JldHVybiB0Lmhhc19zaWRlX2VmZmVjdHMoZSl8fGUuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiZ0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbi5pc19jb25zdGFudCgpP3RoaXM6KHRoaXMud3JpdGVfb25seT0hMCxKKHQpLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oZS5maW5kX3BhcmVudChrZSkpP3RoaXMucmlnaHQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpOnRoaXMpfSksZSh0dCxmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmlnaHQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7aWYoIW4pcmV0dXJuIHRoaXMubGVmdC5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTtpZihYW3RoaXMub3BlcmF0b3JdKXtpZihuPT09dGhpcy5yaWdodClyZXR1cm4gdGhpczt2YXIgcj10aGlzLmNsb25lKCk7cmV0dXJuIHIucmlnaHQ9bi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSkscn12YXIgaT10aGlzLmxlZnQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7cmV0dXJuIGk/Tih0aGlzLFtpLG4uZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpXSk6bn0pLGUoS2UsZnVuY3Rpb24odCxlKXtpZighdGhpcy5pc19leHByX3B1cmUodCkpe2lmKHRoaXMuZXhwcmVzc2lvbi5pc19jYWxsX3B1cmUodCkpe3ZhciBuPXRoaXMuYXJncy5zbGljZSgpO3JldHVybiBuLnVuc2hpZnQodGhpcy5leHByZXNzaW9uLmV4cHJlc3Npb24pLChuPWEobix0LGUpKSYmTih0aGlzLG4pfWlmKCEodGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgRGUpfHx0aGlzLmV4cHJlc3Npb24ubmFtZSYmdGhpcy5leHByZXNzaW9uLm5hbWUuZGVmaW5pdGlvbigpLnJlZmVyZW5jZXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciByPXRoaXMuY2xvbmUoKSxpPXIuZXhwcmVzc2lvbjtyZXR1cm4gaS5wcm9jZXNzX2V4cHJlc3Npb24oITEsdCksaS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlJiZlLnZhbHVlPyhlLnZhbHVlPWUudmFsdWUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHQpLCEwKTplIGluc3RhbmNlb2Yga2UmJmUhPT1pfHx2b2lkIDB9KSkscn10aGlzLnB1cmUmJnQud2FybigiRHJvcHBpbmcgX19QVVJFX18gY2FsbCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHRoaXMuc3RhcnQpO3ZhciBvPWEodGhpcy5hcmdzLHQsZSk7cmV0dXJuIG8mJk4odGhpcyxvKX0pLGUobnQsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zZXF1ZW50LmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKSxuPXRoaXMuYWx0ZXJuYXRpdmUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpO2lmKHQ9PT10aGlzLmNvbnNlcXVlbnQmJm49PT10aGlzLmFsdGVybmF0aXZlKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiBuP1EodHQsdGhpcyx7b3BlcmF0b3I6Inx8IixsZWZ0OnRoaXMuY29uZGl0aW9uLHJpZ2h0Om59KTp0aGlzLmNvbmRpdGlvbi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSk7aWYoIW4pcmV0dXJuIFEodHQsdGhpcyx7b3BlcmF0b3I6IiYmIixsZWZ0OnRoaXMuY29uZGl0aW9uLHJpZ2h0OnR9KTt2YXIgcj10aGlzLmNsb25lKCk7cmV0dXJuIHIuY29uc2VxdWVudD10LHIuYWx0ZXJuYXRpdmU9bixyfSksZSh2dCxUKSxlKFFlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGUpP3RoaXM6dGhpcy5leHByZXNzaW9uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlLHQpfSksZShEZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lJiZlLm9wdGlvbigiaWU4Iik/dGhpczpudWxsfSksZShvdCxmdW5jdGlvbihlLHQpe3ZhciBuPWEodGhpcy5wcm9wZXJ0aWVzLGUsdCk7cmV0dXJuIG4mJk4odGhpcyxuKX0pLGUoYXQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy52YWx1ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KX0pLGUoWWUsZnVuY3Rpb24oZSx0KXt2YXIgbj1hKHRoaXMuZXhwcmVzc2lvbnMsZSx0KTtyZXR1cm4gbj09PXRoaXMuZXhwcmVzc2lvbnM/dGhpczpuP04odGhpcyxuKTpudWxsfSksZShaZSxmdW5jdGlvbihlLHQpe2lmKHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGUpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuZXhwcmVzc2lvbi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTtpZighbilyZXR1cm4gdGhpcy5wcm9wZXJ0eS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTt2YXIgcj10aGlzLnByb3BlcnR5LmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKTtyZXR1cm4gcj9OKHRoaXMsW24scl0pOm59KSxlKG10LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzX2RlY2xhcmVkKGUpPyh0aGlzLmRlZmluaXRpb24oKS5yZXBsYWNlZCsrLG51bGwpOnRoaXN9KSxlKGd0LFQpLGUoSmUsZnVuY3Rpb24oZSx0KXtpZihzW3RoaXMub3BlcmF0b3JdKXJldHVybiB0aGlzLndyaXRlX29ubHk9IXRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpLHRoaXM7aWYoInR5cGVvZiI9PXRoaXMub3BlcmF0b3ImJnRoaXMuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIG10KXJldHVybiB0aGlzLmV4cHJlc3Npb24uZGVmaW5pdGlvbigpLnJlcGxhY2VkKyssbnVsbDt2YXIgbj10aGlzLmV4cHJlc3Npb24uZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7cmV0dXJuIHQmJm4mJnoobik/bj09PXRoaXMuZXhwcmVzc2lvbiYmIiEiPT10aGlzLm9wZXJhdG9yP3RoaXM6bi5uZWdhdGUoZSx0KTpufSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImRyb3Bfc2lkZV9lZmZlY3RfZnJlZSIsdCl9KSxlKGhlLGZ1bmN0aW9uKGUsdCl7aWYodC5vcHRpb24oInNpZGVfZWZmZWN0cyIpKXt2YXIgbj1lLmJvZHkscj1uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0LCEwKTtpZighcilyZXR1cm4gdC53YXJuKCJEcm9wcGluZyBzaWRlLWVmZmVjdC1mcmVlIHN0YXRlbWVudCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLFEoZ2UsZSk7aWYociE9PW4pcmV0dXJuIFEoaGUsZSx7Ym9keTpyfSl9cmV0dXJuIGV9KSxlKHdlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQub3B0aW9uKCJsb29wcyIpP1EoRWUsZSxlKS5vcHRpbWl6ZSh0KTplfSksZShfZSxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigibG9vcHMiKSlyZXR1cm4gZTt2YXIgbj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUodCk7aWYoIShuIGluc3RhbmNlb2YgbGUpKXtpZihuKXJldHVybiBRKEVlLGUse2JvZHk6UShtZSxlLmJvZHkse2JvZHk6W2UuYm9keSxRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9ufSldfSl9KS5vcHRpbWl6ZSh0KTtpZigheChlLHQucGFyZW50KCkpKXJldHVybiBRKG1lLGUuYm9keSx7Ym9keTpbZS5ib2R5LFEoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KV19KS5vcHRpbWl6ZSh0KX1yZXR1cm4gZS5ib2R5IGluc3RhbmNlb2YgaGU/UShFZSxlLHtjb25kaXRpb246TihlLmNvbmRpdGlvbixbZS5ib2R5LmJvZHksZS5jb25kaXRpb25dKSxib2R5OlEoZ2UsZSl9KS5vcHRpbWl6ZSh0KTplfSksZShFZSxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigibG9vcHMiKSlyZXR1cm4gZTtpZih0Lm9wdGlvbigic2lkZV9lZmZlY3RzIikmJmUuaW5pdCYmKGUuaW5pdD1lLmluaXQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHQpKSxlLmNvbmRpdGlvbil7dmFyIG49ZS5jb25kaXRpb24uZXZhbHVhdGUodCk7aWYoIShuIGluc3RhbmNlb2YgbGUpKWlmKG4pZS5jb25kaXRpb249bnVsbDtlbHNlIGlmKCF0Lm9wdGlvbigiZGVhZF9jb2RlIikpe3ZhciByPWUuY29uZGl0aW9uO2UuY29uZGl0aW9uPVAobixlLmNvbmRpdGlvbiksZS5jb25kaXRpb249eShlLmNvbmRpdGlvbi50cmFuc2Zvcm0odCkscil9aWYobiBpbnN0YW5jZW9mIGxlJiYobj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUodCkpLG4pIWUuY29uZGl0aW9ufHxuIGluc3RhbmNlb2YgbGV8fChlLmJvZHk9UShtZSxlLmJvZHkse2JvZHk6W1EoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KSxlLmJvZHldfSksZS5jb25kaXRpb249bnVsbCk7ZWxzZSBpZih0Lm9wdGlvbigiZGVhZF9jb2RlIikpe3ZhciBpPVtdO3JldHVybiBFKHQsZS5ib2R5LGkpLGUuaW5pdCBpbnN0YW5jZW9mIGNlP2kucHVzaChlLmluaXQpOmUuaW5pdCYmaS5wdXNoKFEoaGUsZS5pbml0LHtib2R5OmUuaW5pdH0pKSxpLnB1c2goUShoZSxlLmNvbmRpdGlvbix7Ym9keTplLmNvbmRpdGlvbn0pKSxRKG1lLGUse2JvZHk6aX0pLm9wdGltaXplKHQpfX1yZXR1cm4gZnVuY3Rpb24gdChuLHIpe3ZhciBlPW4uYm9keSBpbnN0YW5jZW9mIG1lP24uYm9keS5ib2R5WzBdOm4uYm9keTtpZihyLm9wdGlvbigiZGVhZF9jb2RlIikmJm8oZSkpe3ZhciBpPVtdO3JldHVybiBuLmluaXQgaW5zdGFuY2VvZiBjZT9pLnB1c2gobi5pbml0KTpuLmluaXQmJmkucHVzaChRKGhlLG4uaW5pdCx7Ym9keTpuLmluaXR9KSksbi5jb25kaXRpb24mJmkucHVzaChRKGhlLG4uY29uZGl0aW9uLHtib2R5Om4uY29uZGl0aW9ufSkpLEUocixuLmJvZHksaSksUShtZSxuLHtib2R5Oml9KX1yZXR1cm4gZSBpbnN0YW5jZW9mIFVlJiYobyhlLmJvZHkpPyhuLmNvbmRpdGlvbj9uLmNvbmRpdGlvbj1RKHR0LG4uY29uZGl0aW9uLHtsZWZ0Om4uY29uZGl0aW9uLG9wZXJhdG9yOiImJiIscmlnaHQ6ZS5jb25kaXRpb24ubmVnYXRlKHIpfSk6bi5jb25kaXRpb249ZS5jb25kaXRpb24ubmVnYXRlKHIpLGEoZS5hbHRlcm5hdGl2ZSkpOm8oZS5hbHRlcm5hdGl2ZSkmJihuLmNvbmRpdGlvbj9uLmNvbmRpdGlvbj1RKHR0LG4uY29uZGl0aW9uLHtsZWZ0Om4uY29uZGl0aW9uLG9wZXJhdG9yOiImJiIscmlnaHQ6ZS5jb25kaXRpb259KTpuLmNvbmRpdGlvbj1lLmNvbmRpdGlvbixhKGUuYm9keSkpKSxuO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGZSYmci5sb29wY29udHJvbF90YXJnZXQoZSk9PT1yLnNlbGYoKX1mdW5jdGlvbiBhKGUpe2U9XyhlKSxuLmJvZHkgaW5zdGFuY2VvZiBtZT8obi5ib2R5PW4uYm9keS5jbG9uZSgpLG4uYm9keS5ib2R5PWUuY29uY2F0KG4uYm9keS5ib2R5LnNsaWNlKDEpKSxuLmJvZHk9bi5ib2R5LnRyYW5zZm9ybShyKSk6bi5ib2R5PVEobWUsbi5ib2R5LHtib2R5OmV9KS50cmFuc2Zvcm0ociksbj10KG4scil9fShlLHQpfSksZShVZSxmdW5jdGlvbihlLHQpe2lmKEkoZS5hbHRlcm5hdGl2ZSkmJihlLmFsdGVybmF0aXZlPW51bGwpLCF0Lm9wdGlvbigiY29uZGl0aW9uYWxzIikpcmV0dXJuIGU7dmFyIG49ZS5jb25kaXRpb24uZXZhbHVhdGUodCk7aWYoISh0Lm9wdGlvbigiZGVhZF9jb2RlIil8fG4gaW5zdGFuY2VvZiBsZSkpe3ZhciByPWUuY29uZGl0aW9uO2UuY29uZGl0aW9uPVAobixyKSxlLmNvbmRpdGlvbj15KGUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KSxyKX1pZih0Lm9wdGlvbigiZGVhZF9jb2RlIikpe2lmKG4gaW5zdGFuY2VvZiBsZSYmKG49ZS5jb25kaXRpb24uaXNfdHJ1dGh5KCl8fGUuY29uZGl0aW9uLnRhaWxfbm9kZSgpLmV2YWx1YXRlKHQpKSwhbil7dC53YXJuKCJDb25kaXRpb24gYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsZS5jb25kaXRpb24uc3RhcnQpO3ZhciBpPVtdO3JldHVybiBFKHQsZS5ib2R5LGkpLGkucHVzaChRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9ufSkpLGUuYWx0ZXJuYXRpdmUmJmkucHVzaChlLmFsdGVybmF0aXZlKSxRKG1lLGUse2JvZHk6aX0pLm9wdGltaXplKHQpfWlmKCEobiBpbnN0YW5jZW9mIGxlKSl7dC53YXJuKCJDb25kaXRpb24gYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLmNvbmRpdGlvbi5zdGFydCk7aT1bXTtyZXR1cm4gZS5hbHRlcm5hdGl2ZSYmRSh0LGUuYWx0ZXJuYXRpdmUsaSksaS5wdXNoKFEoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KSksaS5wdXNoKGUuYm9keSksUShtZSxlLHtib2R5Oml9KS5vcHRpbWl6ZSh0KX19dmFyIG89ZS5jb25kaXRpb24ubmVnYXRlKHQpLGE9ZS5jb25kaXRpb24ucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoLHM9by5wcmludF90b19zdHJpbmcoKS5sZW5ndGgsdT1zPGE7aWYoZS5hbHRlcm5hdGl2ZSYmdSl7dT0hMSxlLmNvbmRpdGlvbj1vO3ZhciBsPWUuYm9keTtlLmJvZHk9ZS5hbHRlcm5hdGl2ZXx8UShnZSxlKSxlLmFsdGVybmF0aXZlPWx9aWYoSShlLmJvZHkpJiZJKGUuYWx0ZXJuYXRpdmUpKXJldHVybiBRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9uLmNsb25lKCl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBoZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGhlKXJldHVybiBRKGhlLGUse2JvZHk6UShudCxlLHtjb25kaXRpb246ZS5jb25kaXRpb24sY29uc2VxdWVudDplLmJvZHkuYm9keSxhbHRlcm5hdGl2ZTplLmFsdGVybmF0aXZlLmJvZHl9KX0pLm9wdGltaXplKHQpO2lmKEkoZS5hbHRlcm5hdGl2ZSkmJmUuYm9keSBpbnN0YW5jZW9mIGhlKXJldHVybiBhPT09cyYmIXUmJmUuY29uZGl0aW9uIGluc3RhbmNlb2YgdHQmJiJ8fCI9PWUuY29uZGl0aW9uLm9wZXJhdG9yJiYodT0hMCksdT9RKGhlLGUse2JvZHk6USh0dCxlLHtvcGVyYXRvcjoifHwiLGxlZnQ6byxyaWdodDplLmJvZHkuYm9keX0pfSkub3B0aW1pemUodCk6UShoZSxlLHtib2R5OlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0OmUuY29uZGl0aW9uLHJpZ2h0OmUuYm9keS5ib2R5fSl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBnZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGhlKXJldHVybiBRKGhlLGUse2JvZHk6USh0dCxlLHtvcGVyYXRvcjoifHwiLGxlZnQ6ZS5jb25kaXRpb24scmlnaHQ6ZS5hbHRlcm5hdGl2ZS5ib2R5fSl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBCZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIEJlJiZlLmJvZHkuVFlQRT09ZS5hbHRlcm5hdGl2ZS5UWVBFKXJldHVybiBRKGUuYm9keS5DVE9SLGUse3ZhbHVlOlEobnQsZSx7Y29uZGl0aW9uOmUuY29uZGl0aW9uLGNvbnNlcXVlbnQ6ZS5ib2R5LnZhbHVlfHxRKEF0LGUuYm9keSksYWx0ZXJuYXRpdmU6ZS5hbHRlcm5hdGl2ZS52YWx1ZXx8UShBdCxlLmFsdGVybmF0aXZlKX0pLnRyYW5zZm9ybSh0KX0pLm9wdGltaXplKHQpO2lmKGUuYm9keSBpbnN0YW5jZW9mIFVlJiYhZS5ib2R5LmFsdGVybmF0aXZlJiYhZS5hbHRlcm5hdGl2ZSYmKGU9UShVZSxlLHtjb25kaXRpb246USh0dCxlLmNvbmRpdGlvbix7b3BlcmF0b3I6IiYmIixsZWZ0OmUuY29uZGl0aW9uLHJpZ2h0OmUuYm9keS5jb25kaXRpb259KSxib2R5OmUuYm9keS5ib2R5LGFsdGVybmF0aXZlOm51bGx9KSksQShlLmJvZHkpJiZlLmFsdGVybmF0aXZlKXt2YXIgYz1lLmFsdGVybmF0aXZlO3JldHVybiBlLmFsdGVybmF0aXZlPW51bGwsUShtZSxlLHtib2R5OltlLGNdfSkub3B0aW1pemUodCl9aWYoQShlLmFsdGVybmF0aXZlKSl7aT1lLmJvZHk7cmV0dXJuIGUuYm9keT1lLmFsdGVybmF0aXZlLGUuY29uZGl0aW9uPXU/bzplLmNvbmRpdGlvbi5uZWdhdGUodCksZS5hbHRlcm5hdGl2ZT1udWxsLFEobWUsZSx7Ym9keTpbZSxpXX0pLm9wdGltaXplKHQpfXJldHVybiBlfSksZShNZSxmdW5jdGlvbih0LG4pe2lmKCFuLm9wdGlvbigic3dpdGNoZXMiKSlyZXR1cm4gdDt2YXIgZSxyPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuKTtpZighKHIgaW5zdGFuY2VvZiBsZSkpe3ZhciBpPXQuZXhwcmVzc2lvbjt0LmV4cHJlc3Npb249UChyLGkpLHQuZXhwcmVzc2lvbj15KHQuZXhwcmVzc2lvbi50cmFuc2Zvcm0obiksaSl9aWYoIW4ub3B0aW9uKCJkZWFkX2NvZGUiKSlyZXR1cm4gdDtyIGluc3RhbmNlb2YgbGUmJihyPXQuZXhwcmVzc2lvbi50YWlsX25vZGUoKS5ldmFsdWF0ZShuKSk7Zm9yKHZhciBvLGEscz1bXSx1PVtdLGw9MCxjPXQuYm9keS5sZW5ndGg7bDxjJiYhYTtsKyspe2lmKChlPXQuYm9keVtsXSlpbnN0YW5jZW9mIE5lKW8/YihlLHVbdS5sZW5ndGgtMV0pOm89ZTtlbHNlIGlmKCEociBpbnN0YW5jZW9mIGxlKSl7aWYoISgoZz1lLmV4cHJlc3Npb24uZXZhbHVhdGUobikpaW5zdGFuY2VvZiBsZSkmJmchPT1yKXtiKGUsdVt1Lmxlbmd0aC0xXSk7Y29udGludWV9aWYoZyBpbnN0YW5jZW9mIGxlJiYoZz1lLmV4cHJlc3Npb24udGFpbF9ub2RlKCkuZXZhbHVhdGUobikpLGc9PT1yJiYoYT1lLG8pKXt2YXIgZj11LmluZGV4T2Yobyk7dS5zcGxpY2UoZiwxKSxiKG8sdVtmLTFdKSxvPW51bGx9fWlmKEEoZSkpe3ZhciBwPXVbdS5sZW5ndGgtMV07QShwKSYmcC5ib2R5Lmxlbmd0aD09ZS5ib2R5Lmxlbmd0aCYmUShtZSxwLHApLmVxdWl2YWxlbnRfdG8oUShtZSxlLGUpKSYmKHAuYm9keT1bXSl9dS5wdXNoKGUpfWZvcig7bDxjOyliKHQuYm9keVtsKytdLHVbdS5sZW5ndGgtMV0pO2ZvcigwPHUubGVuZ3RoJiYodVswXS5ib2R5PXMuY29uY2F0KHVbMF0uYm9keSkpLHQuYm9keT11O2U9dVt1Lmxlbmd0aC0xXTspe3ZhciBoPWUuYm9keVtlLmJvZHkubGVuZ3RoLTFdO2lmKGggaW5zdGFuY2VvZiBGZSYmbi5sb29wY29udHJvbF90YXJnZXQoaCk9PT10JiZlLmJvZHkucG9wKCksZS5ib2R5Lmxlbmd0aHx8ZSBpbnN0YW5jZW9mIFBlJiYob3x8ZS5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMobikpKWJyZWFrO3UucG9wKCk9PT1vJiYobz1udWxsKX1pZigwPT11Lmxlbmd0aClyZXR1cm4gUShtZSx0LHtib2R5OnMuY29uY2F0KFEoaGUsdC5leHByZXNzaW9uLHtib2R5OnQuZXhwcmVzc2lvbn0pKX0pLm9wdGltaXplKG4pO2lmKDE9PXUubGVuZ3RoJiYodVswXT09PWF8fHVbMF09PT1vKSl7dmFyIGQ9ITEsbT1uZXcgRHQoZnVuY3Rpb24oZSl7aWYoZHx8ZSBpbnN0YW5jZW9mIE9lfHxlIGluc3RhbmNlb2YgaGUpcmV0dXJuITA7ZSBpbnN0YW5jZW9mIEZlJiZtLmxvb3Bjb250cm9sX3RhcmdldChlKT09PXQmJihkPSEwKX0pO2lmKHQud2FsayhtKSwhZCl7dmFyIGcsdj11WzBdLmJvZHkuc2xpY2UoKTtyZXR1cm4oZz11WzBdLmV4cHJlc3Npb24pJiZ2LnVuc2hpZnQoUShoZSxnLHtib2R5Omd9KSksdi51bnNoaWZ0KFEoaGUsdC5leHByZXNzaW9uLHtib2R5OnQuZXhwcmVzc2lvbn0pKSxRKG1lLHQse2JvZHk6dn0pLm9wdGltaXplKG4pfX1yZXR1cm4gdDtmdW5jdGlvbiBiKGUsdCl7dCYmIUEodCk/dC5ib2R5PXQuYm9keS5jb25jYXQoZS5ib2R5KTpFKG4sZSxzKX19KSxlKEllLGZ1bmN0aW9uKGUsdCl7aWYoaShlLmJvZHksdCksZS5iY2F0Y2gmJmUuYmZpbmFsbHkmJnNlKGUuYmZpbmFsbHkuYm9keSxJKSYmKGUuYmZpbmFsbHk9bnVsbCksdC5vcHRpb24oImRlYWRfY29kZSIpJiZzZShlLmJvZHksSSkpe3ZhciBuPVtdO3JldHVybiBlLmJjYXRjaCYmKEUodCxlLmJjYXRjaCxuKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIFZlJiZlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTt0JiYoZS5uYW1lPWUubmFtZS5jbG9uZSgpLGUubmFtZS50aGVkZWY9dCl9KX0pKSxlLmJmaW5hbGx5JiYobj1uLmNvbmNhdChlLmJmaW5hbGx5LmJvZHkpKSxRKG1lLGUse2JvZHk6bn0pLm9wdGltaXplKHQpfXJldHVybiBlfSksVmUuREVGTUVUSE9EKCJyZW1vdmVfaW5pdGlhbGl6ZXJzIixmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnZhbHVlPW51bGx9KX0pLFZlLkRFRk1FVEhPRCgidG9fYXNzaWdubWVudHMiLGZ1bmN0aW9uKGUpe3ZhciByPWUub3B0aW9uKCJyZWR1Y2VfdmFycyIpLHQ9dGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnZhbHVlKXt2YXIgbj1RKG10LHQubmFtZSx0Lm5hbWUpO2UucHVzaChRKHJ0LHQse29wZXJhdG9yOiI9IixsZWZ0Om4scmlnaHQ6dC52YWx1ZX0pKSxyJiYobi5kZWZpbml0aW9uKCkuZml4ZWQ9ITEpfXJldHVybih0PXQubmFtZS5kZWZpbml0aW9uKCkpLmVsaW1pbmF0ZWQrKyx0LnJlcGxhY2VkLS0sZX0sW10pO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOk4odGhpcyx0KX0pLGUoVmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWZpbml0aW9ucy5sZW5ndGg/ZTpRKGdlLGUpfSksS2UuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoIWUub3B0aW9uKCJzZXF1ZW5jZXMiKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLmV4cHJlc3Npb247aWYoISh0IGluc3RhbmNlb2YgWWUpKXJldHVybiB0aGlzO3ZhciBuPXQudGFpbF9ub2RlKCk7aWYoYShlLG4pJiYhKHRoaXMgaW5zdGFuY2VvZiBHZSkpcmV0dXJuIHRoaXM7dmFyIHI9dC5leHByZXNzaW9ucy5zbGljZSgwLC0xKSxpPXRoaXMuY2xvbmUoKTtyZXR1cm4gaS5leHByZXNzaW9uPW4sci5wdXNoKGkpLE4odGhpcyxyKS5vcHRpbWl6ZShlKX0pLGUoS2UsZnVuY3Rpb24ocyxpKXt2YXIgZT1zLmxpZnRfc2VxdWVuY2VzKGkpO2lmKGUhPT1zKXJldHVybiBlO3ZhciByPXMuZXhwcmVzc2lvbixoPXI7aS5vcHRpb24oInJlZHVjZV92YXJzIikmJmggaW5zdGFuY2VvZiBtdCYmKGg9aC5maXhlZF92YWx1ZSgpKTt2YXIgdD1oIGluc3RhbmNlb2YgT2U7aWYoaS5vcHRpb24oInVudXNlZCIpJiZ0JiYhaC51c2VzX2FyZ3VtZW50cyYmIWgucGlubmVkKCkpe2Zvcih2YXIgbj0wLG89MCxhPTAsdT1zLmFyZ3MubGVuZ3RoO2E8dTthKyspe3ZhciBsPWE+PWguYXJnbmFtZXMubGVuZ3RoO2lmKGx8fGguYXJnbmFtZXNbYV0uX191bnVzZWQpe2lmKGc9cy5hcmdzW2FdLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShpKSlzLmFyZ3NbbisrXT1nO2Vsc2UgaWYoIWwpe3MuYXJnc1tuKytdPVEoeXQscy5hcmdzW2FdLHt2YWx1ZTowfSk7Y29udGludWV9fWVsc2Ugcy5hcmdzW24rK109cy5hcmdzW2FdO289bn1zLmFyZ3MubGVuZ3RoPW99aWYoaS5vcHRpb24oInVuc2FmZSIpKWlmKGoocikpc3dpdGNoKHIubmFtZSl7Y2FzZSJBcnJheSI6aWYoMT09cy5hcmdzLmxlbmd0aCl7aWYoKG09cy5hcmdzWzBdKWluc3RhbmNlb2YgeXQpdHJ5e3ZhciBjPW0uZ2V0VmFsdWUoKTtpZig2PGMpYnJlYWs7dmFyIGY9QXJyYXkoYyk7Zm9yKGE9MDthPGM7YSsrKWZbYV09USh4dCxzKTtyZXR1cm4gUShpdCxzLHtlbGVtZW50czpmfSl9Y2F0Y2goZSl7aS53YXJuKCJJbnZhbGlkIGFycmF5IGxlbmd0aDoge2xlbmd0aH0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7bGVuZ3RoOmMsZmlsZTpzLnN0YXJ0LmZpbGUsbGluZTpzLnN0YXJ0LmxpbmUsY29sOnMuc3RhcnQuY29sfSk7YnJlYWt9aWYoIW0uaXNfYm9vbGVhbihpKSYmIW0uaXNfc3RyaW5nKGkpKWJyZWFrfXJldHVybiBRKGl0LHMse2VsZW1lbnRzOnMuYXJnc30pO2Nhc2UiT2JqZWN0IjppZigwPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKG90LHMse3Byb3BlcnRpZXM6W119KTticmVhaztjYXNlIlN0cmluZyI6aWYoMD09cy5hcmdzLmxlbmd0aClyZXR1cm4gUShidCxzLHt2YWx1ZToiIn0pO2lmKHMuYXJncy5sZW5ndGg8PTEpcmV0dXJuIFEodHQscyx7bGVmdDpzLmFyZ3NbMF0sb3BlcmF0b3I6IisiLHJpZ2h0OlEoYnQscyx7dmFsdWU6IiJ9KX0pLm9wdGltaXplKGkpO2JyZWFrO2Nhc2UiTnVtYmVyIjppZigwPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKHl0LHMse3ZhbHVlOjB9KTtpZigxPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKFhlLHMse2V4cHJlc3Npb246cy5hcmdzWzBdLG9wZXJhdG9yOiIrIn0pLm9wdGltaXplKGkpO2Nhc2UiQm9vbGVhbiI6aWYoMD09cy5hcmdzLmxlbmd0aClyZXR1cm4gUShPdCxzKTtpZigxPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKFhlLHMse2V4cHJlc3Npb246UShYZSxzLHtleHByZXNzaW9uOnMuYXJnc1swXSxvcGVyYXRvcjoiISJ9KSxvcGVyYXRvcjoiISJ9KS5vcHRpbWl6ZShpKTticmVhaztjYXNlIlJlZ0V4cCI6dmFyIHA9W107aWYoc2Uocy5hcmdzLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZXZhbHVhdGUoaSk7cmV0dXJuIHAudW5zaGlmdCh0KSxlIT09dH0pKXRyeXtyZXR1cm4gSChpLHMsUShfdCxzLHt2YWx1ZTpSZWdFeHAuYXBwbHkoUmVnRXhwLHApfSkpfWNhdGNoKGUpe2kud2FybigiRXJyb3IgY29udmVydGluZyB7ZXhwcn0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7ZXhwcjpzLnByaW50X3RvX3N0cmluZygpLGZpbGU6cy5zdGFydC5maWxlLGxpbmU6cy5zdGFydC5saW5lLGNvbDpzLnN0YXJ0LmNvbH0pfX1lbHNlIGlmKHIgaW5zdGFuY2VvZiBRZSlzd2l0Y2goci5wcm9wZXJ0eSl7Y2FzZSJ0b1N0cmluZyI6aWYoMD09cy5hcmdzLmxlbmd0aCYmIXIuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGkpKXJldHVybiBRKHR0LHMse2xlZnQ6UShidCxzLHt2YWx1ZToiIn0pLG9wZXJhdG9yOiIrIixyaWdodDpyLmV4cHJlc3Npb259KS5vcHRpbWl6ZShpKTticmVhaztjYXNlImpvaW4iOnZhciBkO2lmKHIuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIGl0KWlmKCEoMDxzLmFyZ3MubGVuZ3RoJiYoZD1zLmFyZ3NbMF0uZXZhbHVhdGUoaSkpPT09cy5hcmdzWzBdKSl7Zj1bXTt2YXIgbSxnLHY9W107cmV0dXJuIHIuZXhwcmVzc2lvbi5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZXZhbHVhdGUoaSk7dCE9PWU/di5wdXNoKHQpOigwPHYubGVuZ3RoJiYoZi5wdXNoKFEoYnQscyx7dmFsdWU6di5qb2luKGQpfSkpLHYubGVuZ3RoPTApLGYucHVzaChlKSl9KSwwPHYubGVuZ3RoJiZmLnB1c2goUShidCxzLHt2YWx1ZTp2LmpvaW4oZCl9KSksMD09Zi5sZW5ndGg/UShidCxzLHt2YWx1ZToiIn0pOjE9PWYubGVuZ3RoP2ZbMF0uaXNfc3RyaW5nKGkpP2ZbMF06USh0dCxmWzBdLHtvcGVyYXRvcjoiKyIsbGVmdDpRKGJ0LHMse3ZhbHVlOiIifSkscmlnaHQ6ZlswXX0pOiIiPT1kPyhtPWZbMF0uaXNfc3RyaW5nKGkpfHxmWzFdLmlzX3N0cmluZyhpKT9mLnNoaWZ0KCk6UShidCxzLHt2YWx1ZToiIn0pLGYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFEodHQsdCx7b3BlcmF0b3I6IisiLGxlZnQ6ZSxyaWdodDp0fSl9LG0pLm9wdGltaXplKGkpKTooKGc9cy5jbG9uZSgpKS5leHByZXNzaW9uPWcuZXhwcmVzc2lvbi5jbG9uZSgpLGcuZXhwcmVzc2lvbi5leHByZXNzaW9uPWcuZXhwcmVzc2lvbi5leHByZXNzaW9uLmNsb25lKCksZy5leHByZXNzaW9uLmV4cHJlc3Npb24uZWxlbWVudHM9ZixIKGkscyxnKSl9YnJlYWs7Y2FzZSJjaGFyQXQiOmlmKHIuZXhwcmVzc2lvbi5pc19zdHJpbmcoaSkpe3ZhciBiPXMuYXJnc1swXSx5PWI/Yi5ldmFsdWF0ZShpKTowO2lmKHkhPT1iKXJldHVybiBRKFplLHIse2V4cHJlc3Npb246ci5leHByZXNzaW9uLHByb3BlcnR5OlAoMHx5LGJ8fHIpfSkub3B0aW1pemUoaSl9YnJlYWs7Y2FzZSJhcHBseSI6aWYoMj09cy5hcmdzLmxlbmd0aCYmcy5hcmdzWzFdaW5zdGFuY2VvZiBpdClyZXR1cm4oUz1zLmFyZ3NbMV0uZWxlbWVudHMuc2xpY2UoKSkudW5zaGlmdChzLmFyZ3NbMF0pLFEoS2Uscyx7ZXhwcmVzc2lvbjpRKFFlLHIse2V4cHJlc3Npb246ci5leHByZXNzaW9uLHByb3BlcnR5OiJjYWxsIn0pLGFyZ3M6U30pLm9wdGltaXplKGkpO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIF89ci5leHByZXNzaW9uO2lmKF8gaW5zdGFuY2VvZiBtdCYmKF89Xy5maXhlZF92YWx1ZSgpKSxfIGluc3RhbmNlb2YgT2UmJiFfLmNvbnRhaW5zX3RoaXMoKSlyZXR1cm4ocy5hcmdzLmxlbmd0aD9OKHRoaXMsW3MuYXJnc1swXSxRKEtlLHMse2V4cHJlc3Npb246ci5leHByZXNzaW9uLGFyZ3M6cy5hcmdzLnNsaWNlKDEpfSldKTpRKEtlLHMse2V4cHJlc3Npb246ci5leHByZXNzaW9uLGFyZ3M6W119KSkub3B0aW1pemUoaSl9aWYoaS5vcHRpb24oInVuc2FmZV9GdW5jdGlvbiIpJiZqKHIpJiYiRnVuY3Rpb24iPT1yLm5hbWUpe2lmKDA9PXMuYXJncy5sZW5ndGgpcmV0dXJuIFEoRGUscyx7YXJnbmFtZXM6W10sYm9keTpbXX0pO2lmKHNlKHMuYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGJ0fSkpdHJ5e3ZhciB3PVl0KGs9Im4oZnVuY3Rpb24oIitzLmFyZ3Muc2xpY2UoMCwtMSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkuam9pbigiLCIpKyIpeyIrcy5hcmdzW3MuYXJncy5sZW5ndGgtMV0udmFsdWUrIn0pIiksRT17aWU4Omkub3B0aW9uKCJpZTgiKX07dy5maWd1cmVfb3V0X3Njb3BlKEUpO3ZhciBBLHg9bmV3IFh0KGkub3B0aW9ucyk7KHc9dy50cmFuc2Zvcm0oeCkpLmZpZ3VyZV9vdXRfc2NvcGUoRSksdy5jb21wdXRlX2NoYXJfZnJlcXVlbmN5KEUpLHcubWFuZ2xlX25hbWVzKEUpLHcud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISFBfHwoZSBpbnN0YW5jZW9mIE9lPyhBPWUsITApOnZvaWQgMCl9KSk7dmFyIGs9SnQoKTtyZXR1cm4gbWUucHJvdG90eXBlLl9jb2RlZ2VuLmNhbGwoQSxBLGspLHMuYXJncz1bUShidCxzLHt2YWx1ZTpBLmFyZ25hbWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmludF90b19zdHJpbmcoKX0pLmpvaW4oIiwiKX0pLFEoYnQscy5hcmdzW3MuYXJncy5sZW5ndGgtMV0se3ZhbHVlOmsuZ2V0KCkucmVwbGFjZSgvXlx7fFx9JC9nLCIiKX0pXSxzfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIE50KSl0aHJvdyBlO2kud2FybigiRXJyb3IgcGFyc2luZyBjb2RlIHBhc3NlZCB0byBuZXcgRnVuY3Rpb24gW3tmaWxlfTp7bGluZX0se2NvbH1dIixzLmFyZ3Nbcy5hcmdzLmxlbmd0aC0xXS5zdGFydCksaS53YXJuKGUudG9TdHJpbmcoKSl9fXZhciBDPXQmJmguYm9keVswXSxPPWkub3B0aW9uKCJpbmxpbmUiKSYmIXMuaXNfZXhwcl9wdXJlKGkpO2lmKE8mJkMgaW5zdGFuY2VvZiBSZSYmKCEoVD1DLnZhbHVlKXx8VC5pc19jb25zdGFudF9leHByZXNzaW9uKCkpKXtUPVQ/VC5jbG9uZSghMCk6UShBdCxzKTt2YXIgUz1zLmFyZ3MuY29uY2F0KFQpO3JldHVybiBOKHMsUykub3B0aW1pemUoaSl9aWYodCl7dmFyIEQsVCxCLFIsTD0tMTtpZihPJiYhaC51c2VzX2FyZ3VtZW50cyYmIWgucGlubmVkKCkmJiEoaC5uYW1lJiZoIGluc3RhbmNlb2YgRGUpJiYoVD1mdW5jdGlvbihlKXt2YXIgdD1oLmJvZHkubGVuZ3RoO2lmKGkub3B0aW9uKCJpbmxpbmUiKTwzKXJldHVybiAxPT10JiZVKGUpO2U9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgcj1oLmJvZHlbbl07aWYociBpbnN0YW5jZW9mIEhlKXtpZihlJiYhc2Uoci5kZWZpbml0aW9ucyxmdW5jdGlvbihlKXtyZXR1cm4hZS52YWx1ZX0pKXJldHVybiExfWVsc2V7aWYociBpbnN0YW5jZW9mIGdlKWNvbnRpbnVlO2lmKGUpcmV0dXJuITE7ZT1yfX1yZXR1cm4gVShlKX0oQykpJiYocj09PWh8fGkub3B0aW9uKCJ1bnVzZWQiKSYmMT09KEQ9ci5kZWZpbml0aW9uKCkpLnJlZmVyZW5jZXMubGVuZ3RoJiYhJChpLEQpJiZoLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oci5zY29wZSkpJiYhcy5wdXJlJiYhaC5jb250YWluc190aGlzKCkmJmZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtkb3tpZigoQj1pLnBhcmVudCgrK0wpKWluc3RhbmNlb2YgemUpZVtCLmFyZ25hbWUubmFtZV09ITA7ZWxzZSBpZihCIGluc3RhbmNlb2YgYmUpUj1bXTtlbHNlIGlmKEIgaW5zdGFuY2VvZiBtdCYmQi5maXhlZF92YWx1ZSgpaW5zdGFuY2VvZiBrZSlyZXR1cm4hMX13aGlsZSghKEIgaW5zdGFuY2VvZiBrZSkpO3ZhciB0PSghKEIgaW5zdGFuY2VvZiBDZSl8fGkudG9wbGV2ZWwudmFycykmJihyIT09aHx8aC5wYXJlbnRfc2NvcGU9PT1pLmZpbmRfcGFyZW50KGtlKSksbj1pLm9wdGlvbigiaW5saW5lIik7cmV0dXJuISghZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWguYm9keS5sZW5ndGg7bjxyO24rKyl7dmFyIGk9aC5ib2R5W25dO2lmKGkgaW5zdGFuY2VvZiBIZSl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBvPWkuZGVmaW5pdGlvbnMubGVuZ3RoOzA8PS0tbzspe3ZhciBhPWkuZGVmaW5pdGlvbnNbb10ubmFtZTtpZihlW2EubmFtZV18fFZbYS5uYW1lXXx8Qi52YXJfbmFtZXMoKVthLm5hbWVdKXJldHVybiExO1ImJlIucHVzaChhLmRlZmluaXRpb24oKSl9fX1yZXR1cm4hMH0oZSwzPD1uJiZ0KXx8IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1oLmFyZ25hbWVzLmxlbmd0aDtuPHI7bisrKXt2YXIgaT1oLmFyZ25hbWVzW25dO2lmKCFpLl9fdW51c2VkKXtpZighdHx8ZVtpLm5hbWVdfHxWW2kubmFtZV18fEIudmFyX25hbWVzKClbaS5uYW1lXSlyZXR1cm4hMTtSJiZSLnB1c2goaS5kZWZpbml0aW9uKCkpfX1yZXR1cm4hMH0oZSwyPD1uJiZ0KXx8UiYmMCE9Ui5sZW5ndGgmJksoaCxSKSl9KCkpcmV0dXJuIGguX3NxdWVlemVkPSEwLE4ocyxmdW5jdGlvbigpe3ZhciBlPVtdLHQ9W107KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWguYXJnbmFtZXMubGVuZ3RoLHI9cy5hcmdzLmxlbmd0aDstLXI+PW47KXQucHVzaChzLmFyZ3Nbcl0pO2ZvcihyPW47MDw9LS1yOyl7dmFyIGk9aC5hcmduYW1lc1tyXSxvPXMuYXJnc1tyXTtpZihpLl9fdW51c2VkfHxCLnZhcl9uYW1lcygpW2kubmFtZV0pbyYmdC5wdXNoKG8pO2Vsc2V7dmFyIGE9UShjdCxpLGkpO2kuZGVmaW5pdGlvbigpLm9yaWcucHVzaChhKSwhbyYmUiYmKG89UShBdCxzKSksTShlLHQsYSxvKX19ZS5yZXZlcnNlKCksdC5yZXZlcnNlKCl9KShlLHQpLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQubGVuZ3RoLHI9MCxpPWguYm9keS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89aC5ib2R5W3JdO2lmKG8gaW5zdGFuY2VvZiBIZSlmb3IodmFyIGE9MCxzPW8uZGVmaW5pdGlvbnMubGVuZ3RoO2E8czthKyspe3ZhciB1PW8uZGVmaW5pdGlvbnNbYV0sbD11Lm5hbWUsYz1sLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTtpZihjJiYoKGw9bC5jbG9uZSgpKS50aGVkZWY9YyksTShlLHQsbCx1LnZhbHVlKSxSJiZzZShoLmFyZ25hbWVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPWwubmFtZX0pKXt2YXIgZj1oLnZhcmlhYmxlcy5nZXQobC5uYW1lKSxwPVEobXQsbCxsKTtmLnJlZmVyZW5jZXMucHVzaChwKSx0LnNwbGljZShuKyssMCxRKHJ0LHUse29wZXJhdG9yOiI9IixsZWZ0OnAscmlnaHQ6UShBdCxsKX0pKX19fX0oZSx0KSx0LnB1c2goVCksZS5sZW5ndGgmJihhPUIuYm9keS5pbmRleE9mKGkucGFyZW50KEwtMSkpKzEsQi5ib2R5LnNwbGljZShhLDAsUShIZSxoLHtkZWZpbml0aW9uczplfSkpKTtyZXR1cm4gdH0oKSkub3B0aW1pemUoaSk7aWYoaS5vcHRpb24oInNpZGVfZWZmZWN0cyIpJiZzZShoLmJvZHksSSkpe1M9cy5hcmdzLmNvbmNhdChRKEF0LHMpKTtyZXR1cm4gTihzLFMpLm9wdGltaXplKGkpfX1pZihpLm9wdGlvbigiZHJvcF9jb25zb2xlIikmJnIgaW5zdGFuY2VvZiBXZSl7Zm9yKHZhciBGPXIuZXhwcmVzc2lvbjtGLmV4cHJlc3Npb247KUY9Ri5leHByZXNzaW9uO2lmKGooRikmJiJjb25zb2xlIj09Ri5uYW1lKXJldHVybiBRKEF0LHMpLm9wdGltaXplKGkpfWlmKGkub3B0aW9uKCJuZWdhdGVfaWlmZSIpJiZpLnBhcmVudCgpaW5zdGFuY2VvZiBoZSYmeihzKSlyZXR1cm4gcy5uZWdhdGUoaSwhMCk7dmFyIHE9cy5ldmFsdWF0ZShpKTtyZXR1cm4gcSE9PXM/KHE9UChxLHMpLm9wdGltaXplKGkpLEgoaSxxLHMpKTpzO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIFJlP2UudmFsdWU/ZS52YWx1ZS5jbG9uZSghMCk6UShBdCxzKTplIGluc3RhbmNlb2YgaGU/UShYZSxlLHtvcGVyYXRvcjoidm9pZCIsZXhwcmVzc2lvbjplLmJvZHkuY2xvbmUoITApfSk6dm9pZCAwOlEoQXQscyl9ZnVuY3Rpb24gTShlLHQsbixyKXt2YXIgaT1uLmRlZmluaXRpb24oKTtCLnZhcmlhYmxlcy5zZXQobi5uYW1lLGkpLEIuZW5jbG9zZWQucHVzaChpKSxCLnZhcl9uYW1lcygpW24ubmFtZV18fChCLnZhcl9uYW1lcygpW24ubmFtZV09ITAsZS5wdXNoKFEoJGUsbix7bmFtZTpuLHZhbHVlOm51bGx9KSkpO3ZhciBvPVEobXQsbixuKTtpLnJlZmVyZW5jZXMucHVzaChvKSxyJiZ0LnB1c2goUShydCxzLHtvcGVyYXRvcjoiPSIsbGVmdDpvLHJpZ2h0OnJ9KSl9fSksZShHZSxmdW5jdGlvbihlLHQpe3ZhciBuPWUubGlmdF9zZXF1ZW5jZXModCk7aWYobiE9PWUpcmV0dXJuIG47aWYodC5vcHRpb24oInVuc2FmZSIpKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoaihyKSlzd2l0Y2goci5uYW1lKXtjYXNlIk9iamVjdCI6Y2FzZSJSZWdFeHAiOmNhc2UiRnVuY3Rpb24iOmNhc2UiRXJyb3IiOmNhc2UiQXJyYXkiOnJldHVybiBRKEtlLGUsZSkudHJhbnNmb3JtKHQpfX1yZXR1cm4gZX0pLGUoWWUsZnVuY3Rpb24oZSxuKXtpZighbi5vcHRpb24oInNpZGVfZWZmZWN0cyIpKXJldHVybiBlO3ZhciByLGksbz1bXTtyPUYobiksaT1lLmV4cHJlc3Npb25zLmxlbmd0aC0xLGUuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3Q8aSYmKGU9ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUobixyKSksZSYmKGgobyxlKSxyPSExKX0pO3ZhciB0PW8ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKDswPHQmJnYob1t0XSxuKTspdC0tO3Q8by5sZW5ndGgtMSYmKG9bdF09UShYZSxlLHtvcGVyYXRvcjoidm9pZCIsZXhwcmVzc2lvbjpvW3RdfSksby5sZW5ndGg9dCsxKX0oKSwwPT10PyhlPVoobixuLnBhcmVudCgpLG4uc2VsZigpLG9bMF0pKWluc3RhbmNlb2YgWWV8fChlPWUub3B0aW1pemUobikpOmUuZXhwcmVzc2lvbnM9byxlfSksSmUuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInNlcXVlbmNlcyIpJiZ0aGlzLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBZZSl7dmFyIHQ9dGhpcy5leHByZXNzaW9uLmV4cHJlc3Npb25zLnNsaWNlKCksbj10aGlzLmNsb25lKCk7cmV0dXJuIG4uZXhwcmVzc2lvbj10LnBvcCgpLHQucHVzaChuKSxOKHRoaXMsdCkub3B0aW1pemUoZSl9cmV0dXJuIHRoaXN9KSxlKGV0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGlmdF9zZXF1ZW5jZXModCl9KSxlKFhlLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHByZXNzaW9uO2lmKCJkZWxldGUiPT1lLm9wZXJhdG9yJiYhKG4gaW5zdGFuY2VvZiBtdHx8biBpbnN0YW5jZW9mIFdlfHxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGt0fHxlIGluc3RhbmNlb2YgRXR8fGUgaW5zdGFuY2VvZiBBdH0obikpKXJldHVybiBuIGluc3RhbmNlb2YgWWU/KChuPW4uZXhwcmVzc2lvbnMuc2xpY2UoKSkucHVzaChRKFN0LGUpKSxOKGUsbikub3B0aW1pemUodCkpOk4oZSxbbixRKFN0LGUpXSkub3B0aW1pemUodCk7dmFyIHI9ZS5saWZ0X3NlcXVlbmNlcyh0KTtpZihyIT09ZSlyZXR1cm4gcjtpZih0Lm9wdGlvbigic2lkZV9lZmZlY3RzIikmJiJ2b2lkIj09ZS5vcGVyYXRvcilyZXR1cm4obj1uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0KSk/KGUuZXhwcmVzc2lvbj1uLGUpOlEoQXQsZSkub3B0aW1pemUodCk7aWYodC5vcHRpb24oImJvb2xlYW5zIikpe2lmKCIhIj09ZS5vcGVyYXRvciYmbi5pc190cnV0aHkoKSlyZXR1cm4gTihlLFtuLFEoT3QsZSldKS5vcHRpbWl6ZSh0KTtpZih0LmluX2Jvb2xlYW5fY29udGV4dCgpKXN3aXRjaChlLm9wZXJhdG9yKXtjYXNlIiEiOmlmKG4gaW5zdGFuY2VvZiBYZSYmIiEiPT1uLm9wZXJhdG9yKXJldHVybiBuLmV4cHJlc3Npb247biBpbnN0YW5jZW9mIHR0JiYoZT1IKHQsZSxuLm5lZ2F0ZSh0LEYodCkpKSk7YnJlYWs7Y2FzZSJ0eXBlb2YiOnJldHVybiB0Lndhcm4oIkJvb2xlYW4gZXhwcmVzc2lvbiBhbHdheXMgdHJ1ZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLChuIGluc3RhbmNlb2YgbXQ/UShTdCxlKTpOKGUsW24sUShTdCxlKV0pKS5vcHRpbWl6ZSh0KX19aWYoIi0iPT1lLm9wZXJhdG9yJiZuIGluc3RhbmNlb2Yga3QmJihuPW4udHJhbnNmb3JtKHQpKSxuIGluc3RhbmNlb2YgdHQmJigiKyI9PWUub3BlcmF0b3J8fCItIj09ZS5vcGVyYXRvcikmJigiKiI9PW4ub3BlcmF0b3J8fCIvIj09bi5vcGVyYXRvcnx8IiUiPT1uLm9wZXJhdG9yKSlyZXR1cm4gUSh0dCxlLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6UShYZSxuLmxlZnQse29wZXJhdG9yOmUub3BlcmF0b3IsZXhwcmVzc2lvbjpuLmxlZnR9KSxyaWdodDpuLnJpZ2h0fSk7aWYoIi0iIT1lLm9wZXJhdG9yfHwhKG4gaW5zdGFuY2VvZiB5dHx8biBpbnN0YW5jZW9mIGt0KSl7dmFyIGk9ZS5ldmFsdWF0ZSh0KTtpZihpIT09ZSlyZXR1cm4gSCh0LGk9UChpLGUpLm9wdGltaXplKHQpLGUpfXJldHVybiBlfSksdHQuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInNlcXVlbmNlcyIpKXtpZih0aGlzLmxlZnQgaW5zdGFuY2VvZiBZZSl7dmFyIHQ9dGhpcy5sZWZ0LmV4cHJlc3Npb25zLnNsaWNlKCk7cmV0dXJuKG49dGhpcy5jbG9uZSgpKS5sZWZ0PXQucG9wKCksdC5wdXNoKG4pLE4odGhpcyx0KS5vcHRpbWl6ZShlKX1pZih0aGlzLnJpZ2h0IGluc3RhbmNlb2YgWWUmJiF0aGlzLmxlZnQuaGFzX3NpZGVfZWZmZWN0cyhlKSl7Zm9yKHZhciBuLHI9Ij0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLmxlZnQgaW5zdGFuY2VvZiBtdCxpPSh0PXRoaXMucmlnaHQuZXhwcmVzc2lvbnMpLmxlbmd0aC0xLG89MDtvPGkmJihyfHwhdFtvXS5oYXNfc2lkZV9lZmZlY3RzKGUpKTtvKyspO2lmKG89PWkpcmV0dXJuIHQ9dC5zbGljZSgpLChuPXRoaXMuY2xvbmUoKSkucmlnaHQ9dC5wb3AoKSx0LnB1c2gobiksTih0aGlzLHQpLm9wdGltaXplKGUpO2lmKDA8bylyZXR1cm4obj10aGlzLmNsb25lKCkpLnJpZ2h0PU4odGhpcy5yaWdodCx0LnNsaWNlKG8pKSwodD10LnNsaWNlKDAsbykpLnB1c2gobiksTih0aGlzLHQpLm9wdGltaXplKGUpfX1yZXR1cm4gdGhpc30pO3ZhciBrPWFlKCI9PSA9PT0gIT0gIT09ICogJiB8IF4iKTtmdW5jdGlvbiAkKGUsdCl7Zm9yKHZhciBuLHI9MDtuPWUucGFyZW50KHIpO3IrKylpZihuIGluc3RhbmNlb2YgT2Upe3ZhciBpPW4ubmFtZTtpZihpJiZpLmRlZmluaXRpb24oKT09PXQpYnJlYWt9cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgbXR8fGUuVFlQRT09PXQuVFlQRX1mdW5jdGlvbiBLKG4sdCl7dmFyIHI9ITEsaT1uZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISFyfHwoZSBpbnN0YW5jZW9mIG10JiZ0ZShlLmRlZmluaXRpb24oKSx0KT9yPSEwOnZvaWQgMCl9KSxvPW5ldyBEdChmdW5jdGlvbihlKXtpZihyKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiBrZSYmZSE9PW4pe3ZhciB0PW8ucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT1lKXJldHVybjtyZXR1cm4gZS53YWxrKGkpLCEwfX0pO3JldHVybiBuLndhbGsobykscn1lKHR0LGZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gcigpe3JldHVybiBuLmxlZnQuaXNfY29uc3RhbnQoKXx8bi5yaWdodC5pc19jb25zdGFudCgpfHwhbi5sZWZ0Lmhhc19zaWRlX2VmZmVjdHModCkmJiFuLnJpZ2h0Lmhhc19zaWRlX2VmZmVjdHModCl9ZnVuY3Rpb24gZShlKXtpZihyKCkpe2UmJihuLm9wZXJhdG9yPWUpO3ZhciB0PW4ubGVmdDtuLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXR9fWlmKGtbbi5vcGVyYXRvcl0mJm4ucmlnaHQuaXNfY29uc3RhbnQoKSYmIW4ubGVmdC5pc19jb25zdGFudCgpJiYobi5sZWZ0IGluc3RhbmNlb2YgdHQmJkt0W24ubGVmdC5vcGVyYXRvcl0+PUt0W24ub3BlcmF0b3JdfHxlKCkpLG49bi5saWZ0X3NlcXVlbmNlcyh0KSx0Lm9wdGlvbigiY29tcGFyaXNvbnMiKSlzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSI9PT0iOmNhc2UiIT09Ijp2YXIgaT0hMDsobi5sZWZ0LmlzX3N0cmluZyh0KSYmbi5yaWdodC5pc19zdHJpbmcodCl8fG4ubGVmdC5pc19udW1iZXIodCkmJm4ucmlnaHQuaXNfbnVtYmVyKHQpfHxuLmxlZnQuaXNfYm9vbGVhbih0KSYmbi5yaWdodC5pc19ib29sZWFuKHQpfHxuLmxlZnQuZXF1aXZhbGVudF90byhuLnJpZ2h0KSkmJihuLm9wZXJhdG9yPW4ub3BlcmF0b3Iuc3Vic3RyKDAsMikpO2Nhc2UiPT0iOmNhc2UiIT0iOmlmKCFpJiZ2KG4ubGVmdCx0KSluLmxlZnQ9USh3dCxuLmxlZnQpO2Vsc2UgaWYodC5vcHRpb24oInR5cGVvZnMiKSYmbi5sZWZ0IGluc3RhbmNlb2YgYnQmJiJ1bmRlZmluZWQiPT1uLmxlZnQudmFsdWUmJm4ucmlnaHQgaW5zdGFuY2VvZiBYZSYmInR5cGVvZiI9PW4ucmlnaHQub3BlcmF0b3Ipe3ZhciBvPW4ucmlnaHQuZXhwcmVzc2lvbjsobyBpbnN0YW5jZW9mIG10PyFvLmlzX2RlY2xhcmVkKHQpOm8gaW5zdGFuY2VvZiBXZSYmdC5vcHRpb24oImllOCIpKXx8KG4ucmlnaHQ9byxuLmxlZnQ9UShBdCxuLmxlZnQpLm9wdGltaXplKHQpLDI9PW4ub3BlcmF0b3IubGVuZ3RoJiYobi5vcGVyYXRvcis9Ij0iKSl9ZWxzZSBpZihuLmxlZnQgaW5zdGFuY2VvZiBtdCYmbi5yaWdodCBpbnN0YW5jZW9mIG10JiZuLmxlZnQuZGVmaW5pdGlvbigpPT09bi5yaWdodC5kZWZpbml0aW9uKCkmJmZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaXR8fGUgaW5zdGFuY2VvZiBPZXx8ZSBpbnN0YW5jZW9mIG90fShuLmxlZnQuZml4ZWRfdmFsdWUoKSkpcmV0dXJuIFEoIj0iPT1uLm9wZXJhdG9yWzBdP1N0Ok90LG4pO2JyZWFrO2Nhc2UiJiYiOmNhc2UifHwiOnZhciBhPW4ubGVmdDtpZihhLm9wZXJhdG9yPT1uLm9wZXJhdG9yJiYoYT1hLnJpZ2h0KSxhIGluc3RhbmNlb2YgdHQmJmEub3BlcmF0b3I9PSgiJiYiPT1uLm9wZXJhdG9yPyIhPT0iOiI9PT0iKSYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiZhLm9wZXJhdG9yPT1uLnJpZ2h0Lm9wZXJhdG9yJiYodihhLmxlZnQsdCkmJm4ucmlnaHQubGVmdCBpbnN0YW5jZW9mIHd0fHxhLmxlZnQgaW5zdGFuY2VvZiB3dCYmdihuLnJpZ2h0LmxlZnQsdCkpJiYhYS5yaWdodC5oYXNfc2lkZV9lZmZlY3RzKHQpJiZhLnJpZ2h0LmVxdWl2YWxlbnRfdG8obi5yaWdodC5yaWdodCkpe3ZhciBzPVEodHQsbix7b3BlcmF0b3I6YS5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OlEod3QsbikscmlnaHQ6YS5yaWdodH0pO3JldHVybiBhIT09bi5sZWZ0JiYocz1RKHR0LG4se29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpuLmxlZnQubGVmdCxyaWdodDpzfSkpLHN9fWlmKHQub3B0aW9uKCJib29sZWFucyIpJiYiKyI9PW4ub3BlcmF0b3ImJnQuaW5fYm9vbGVhbl9jb250ZXh0KCkpe3ZhciB1PW4ubGVmdC5ldmFsdWF0ZSh0KSxsPW4ucmlnaHQuZXZhbHVhdGUodCk7aWYodSYmInN0cmluZyI9PXR5cGVvZiB1KXJldHVybiB0Lndhcm4oIisgaW4gYm9vbGVhbiBjb250ZXh0IGFsd2F5cyB0cnVlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksTihuLFtuLnJpZ2h0LFEoU3QsbildKS5vcHRpbWl6ZSh0KTtpZihsJiYic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHQud2FybigiKyBpbiBib29sZWFuIGNvbnRleHQgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxRKFN0LG4pXSkub3B0aW1pemUodCl9aWYodC5vcHRpb24oImNvbXBhcmlzb25zIikmJm4uaXNfYm9vbGVhbih0KSl7aWYoISh0LnBhcmVudCgpaW5zdGFuY2VvZiB0dCl8fHQucGFyZW50KClpbnN0YW5jZW9mIHJ0KXt2YXIgYz1RKFhlLG4se29wZXJhdG9yOiIhIixleHByZXNzaW9uOm4ubmVnYXRlKHQsRih0KSl9KTtuPUgodCxuLGMpfXN3aXRjaChuLm9wZXJhdG9yKXtjYXNlIj4iOmUoIjwiKTticmVhaztjYXNlIj49IjplKCI8PSIpfX1pZigiKyI9PW4ub3BlcmF0b3Ipe2lmKG4ucmlnaHQgaW5zdGFuY2VvZiBidCYmIiI9PW4ucmlnaHQuZ2V0VmFsdWUoKSYmbi5sZWZ0LmlzX3N0cmluZyh0KSlyZXR1cm4gbi5sZWZ0O2lmKG4ubGVmdCBpbnN0YW5jZW9mIGJ0JiYiIj09bi5sZWZ0LmdldFZhbHVlKCkmJm4ucmlnaHQuaXNfc3RyaW5nKHQpKXJldHVybiBuLnJpZ2h0O2lmKG4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LmxlZnQgaW5zdGFuY2VvZiBidCYmIiI9PW4ubGVmdC5sZWZ0LmdldFZhbHVlKCkmJm4ucmlnaHQuaXNfc3RyaW5nKHQpKXJldHVybiBuLmxlZnQ9bi5sZWZ0LnJpZ2h0LG4udHJhbnNmb3JtKHQpfWlmKHQub3B0aW9uKCJldmFsdWF0ZSIpKXtzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSImJiI6aWYoISh1PWcobi5sZWZ0KSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgJiYgYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksWih0LHQucGFyZW50KCksdC5zZWxmKCksbi5sZWZ0KS5vcHRpbWl6ZSh0KTtpZighKHUgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgJiYgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxuLnJpZ2h0XSkub3B0aW1pemUodCk7aWYobD1uLnJpZ2h0LmV2YWx1YXRlKHQpKXtpZighKGwgaW5zdGFuY2VvZiBsZSkpe2lmKCImJiI9PShmPXQucGFyZW50KCkpLm9wZXJhdG9yJiZmLmxlZnQ9PT10LnNlbGYoKXx8dC5vcHRpb24oImJvb2xlYW5zIikmJnQuaW5fYm9vbGVhbl9jb250ZXh0KCkpcmV0dXJuIHQud2FybigiRHJvcHBpbmcgc2lkZS1lZmZlY3QtZnJlZSAmJiBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLG4ubGVmdC5vcHRpbWl6ZSh0KX19ZWxzZXtpZih0Lm9wdGlvbigiYm9vbGVhbnMiKSYmdC5pbl9ib29sZWFuX2NvbnRleHQoKSlyZXR1cm4gdC53YXJuKCJCb29sZWFuICYmIGFsd2F5cyBmYWxzZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLE4obixbbi5sZWZ0LFEoT3QsbildKS5vcHRpbWl6ZSh0KTtuLmZhbHN5PSEwfWlmKCJ8fCI9PW4ubGVmdC5vcGVyYXRvcilpZighKHA9bi5sZWZ0LnJpZ2h0LmV2YWx1YXRlKHQpKSlyZXR1cm4gUShudCxuLHtjb25kaXRpb246bi5sZWZ0LmxlZnQsY29uc2VxdWVudDpuLnJpZ2h0LGFsdGVybmF0aXZlOm4ubGVmdC5yaWdodH0pLm9wdGltaXplKHQpO2JyZWFrO2Nhc2UifHwiOnZhciBmLHA7aWYoISh1PWcobi5sZWZ0KSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgfHwgYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksTihuLFtuLmxlZnQsbi5yaWdodF0pLm9wdGltaXplKHQpO2lmKCEodSBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gdC53YXJuKCJDb25kaXRpb24gbGVmdCBvZiB8fCBhbHdheXMgdHJ1ZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLFoodCx0LnBhcmVudCgpLHQuc2VsZigpLG4ubGVmdCkub3B0aW1pemUodCk7aWYobD1uLnJpZ2h0LmV2YWx1YXRlKHQpKXtpZighKGwgaW5zdGFuY2VvZiBsZSkpe2lmKHQub3B0aW9uKCJib29sZWFucyIpJiZ0LmluX2Jvb2xlYW5fY29udGV4dCgpKXJldHVybiB0Lndhcm4oIkJvb2xlYW4gfHwgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxRKFN0LG4pXSkub3B0aW1pemUodCk7bi50cnV0aHk9ITB9fWVsc2UgaWYoInx8Ij09KGY9dC5wYXJlbnQoKSkub3BlcmF0b3ImJmYubGVmdD09PXQuc2VsZigpfHx0Lm9wdGlvbigiYm9vbGVhbnMiKSYmdC5pbl9ib29sZWFuX2NvbnRleHQoKSlyZXR1cm4gdC53YXJuKCJEcm9wcGluZyBzaWRlLWVmZmVjdC1mcmVlIHx8IFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksbi5sZWZ0Lm9wdGltaXplKHQpO2lmKCImJiI9PW4ubGVmdC5vcGVyYXRvcilpZigocD1uLmxlZnQucmlnaHQuZXZhbHVhdGUodCkpJiYhKHAgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIFEobnQsbix7Y29uZGl0aW9uOm4ubGVmdC5sZWZ0LGNvbnNlcXVlbnQ6bi5sZWZ0LnJpZ2h0LGFsdGVybmF0aXZlOm4ucmlnaHR9KS5vcHRpbWl6ZSh0KX12YXIgaD0hMDtzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSIrIjppZihuLmxlZnQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ucmlnaHQub3BlcmF0b3ImJm4ucmlnaHQubGVmdCBpbnN0YW5jZW9mIHZ0JiZuLnJpZ2h0LmlzX3N0cmluZyh0KSYmKG49USh0dCxuLHtvcGVyYXRvcjoiKyIsbGVmdDpRKGJ0LG4ubGVmdCx7dmFsdWU6IiIrbi5sZWZ0LmdldFZhbHVlKCkrbi5yaWdodC5sZWZ0LmdldFZhbHVlKCksc3RhcnQ6bi5sZWZ0LnN0YXJ0LGVuZDpuLnJpZ2h0LmxlZnQuZW5kfSkscmlnaHQ6bi5yaWdodC5yaWdodH0pKSxuLnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ubGVmdC5pc19zdHJpbmcodCkmJihuPVEodHQsbix7b3BlcmF0b3I6IisiLGxlZnQ6bi5sZWZ0LmxlZnQscmlnaHQ6UShidCxuLnJpZ2h0LHt2YWx1ZToiIituLmxlZnQucmlnaHQuZ2V0VmFsdWUoKStuLnJpZ2h0LmdldFZhbHVlKCksc3RhcnQ6bi5sZWZ0LnJpZ2h0LnN0YXJ0LGVuZDpuLnJpZ2h0LmVuZH0pfSkpLG4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LmlzX3N0cmluZyh0KSYmbi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ucmlnaHQgaW5zdGFuY2VvZiB0dCYmIisiPT1uLnJpZ2h0Lm9wZXJhdG9yJiZuLnJpZ2h0LmxlZnQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodC5pc19zdHJpbmcodCkmJihuPVEodHQsbix7b3BlcmF0b3I6IisiLGxlZnQ6USh0dCxuLmxlZnQse29wZXJhdG9yOiIrIixsZWZ0Om4ubGVmdC5sZWZ0LHJpZ2h0OlEoYnQsbi5sZWZ0LnJpZ2h0LHt2YWx1ZToiIituLmxlZnQucmlnaHQuZ2V0VmFsdWUoKStuLnJpZ2h0LmxlZnQuZ2V0VmFsdWUoKSxzdGFydDpuLmxlZnQucmlnaHQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KX0pLHJpZ2h0Om4ucmlnaHQucmlnaHR9KSksbi5yaWdodCBpbnN0YW5jZW9mIFhlJiYiLSI9PW4ucmlnaHQub3BlcmF0b3ImJm4ubGVmdC5pc19udW1iZXIodCkpe249USh0dCxuLHtvcGVyYXRvcjoiLSIsbGVmdDpuLmxlZnQscmlnaHQ6bi5yaWdodC5leHByZXNzaW9ufSk7YnJlYWt9aWYobi5sZWZ0IGluc3RhbmNlb2YgWGUmJiItIj09bi5sZWZ0Lm9wZXJhdG9yJiZyKCkmJm4ucmlnaHQuaXNfbnVtYmVyKHQpKXtuPVEodHQsbix7b3BlcmF0b3I6Ii0iLGxlZnQ6bi5yaWdodCxyaWdodDpuLmxlZnQuZXhwcmVzc2lvbn0pO2JyZWFrfWNhc2UiKiI6aD10Lm9wdGlvbigidW5zYWZlX21hdGgiKTtjYXNlIiYiOmNhc2UifCI6Y2FzZSJeIjppZihuLmxlZnQuaXNfbnVtYmVyKHQpJiZuLnJpZ2h0LmlzX251bWJlcih0KSYmcigpJiYhKG4ubGVmdCBpbnN0YW5jZW9mIHR0JiZuLmxlZnQub3BlcmF0b3IhPW4ub3BlcmF0b3ImJkt0W24ubGVmdC5vcGVyYXRvcl0+PUt0W24ub3BlcmF0b3JdKSl7dmFyIGQ9USh0dCxuLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5yaWdodCxyaWdodDpuLmxlZnR9KTtuPW4ucmlnaHQgaW5zdGFuY2VvZiB2dCYmIShuLmxlZnQgaW5zdGFuY2VvZiB2dCk/SCh0LGQsbik6SCh0LG4sZCl9aCYmbi5pc19udW1iZXIodCkmJihuLnJpZ2h0IGluc3RhbmNlb2YgdHQmJm4ucmlnaHQub3BlcmF0b3I9PW4ub3BlcmF0b3ImJihuPVEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0OlEodHQsbi5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LHJpZ2h0Om4ucmlnaHQubGVmdCxzdGFydDpuLmxlZnQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KSxyaWdodDpuLnJpZ2h0LnJpZ2h0fSkpLG4ucmlnaHQgaW5zdGFuY2VvZiB2dCYmbi5sZWZ0IGluc3RhbmNlb2YgdHQmJm4ubGVmdC5vcGVyYXRvcj09bi5vcGVyYXRvciYmKG4ubGVmdC5sZWZ0IGluc3RhbmNlb2YgdnQ/bj1RKHR0LG4se29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpRKHR0LG4ubGVmdCx7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0Om4ubGVmdC5sZWZ0LHJpZ2h0Om4ucmlnaHQsc3RhcnQ6bi5sZWZ0LmxlZnQuc3RhcnQsZW5kOm4ucmlnaHQuZW5kfSkscmlnaHQ6bi5sZWZ0LnJpZ2h0fSk6bi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJihuPVEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0OlEodHQsbi5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LnJpZ2h0LHJpZ2h0Om4ucmlnaHQsc3RhcnQ6bi5sZWZ0LnJpZ2h0LnN0YXJ0LGVuZDpuLnJpZ2h0LmVuZH0pLHJpZ2h0Om4ubGVmdC5sZWZ0fSkpKSxuLmxlZnQgaW5zdGFuY2VvZiB0dCYmbi5sZWZ0Lm9wZXJhdG9yPT1uLm9wZXJhdG9yJiZuLmxlZnQucmlnaHQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiZuLnJpZ2h0Lm9wZXJhdG9yPT1uLm9wZXJhdG9yJiZuLnJpZ2h0LmxlZnQgaW5zdGFuY2VvZiB2dCYmKG49USh0dCxuLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6USh0dCxuLmxlZnQse29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpRKHR0LG4ubGVmdC5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LnJpZ2h0LHJpZ2h0Om4ucmlnaHQubGVmdCxzdGFydDpuLmxlZnQucmlnaHQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KSxyaWdodDpuLmxlZnQubGVmdH0pLHJpZ2h0Om4ucmlnaHQucmlnaHR9KSkpfX1pZihuLnJpZ2h0IGluc3RhbmNlb2YgdHQmJm4ucmlnaHQub3BlcmF0b3I9PW4ub3BlcmF0b3ImJihYW24ub3BlcmF0b3JdfHwiKyI9PW4ub3BlcmF0b3ImJihuLnJpZ2h0LmxlZnQuaXNfc3RyaW5nKHQpfHxuLmxlZnQuaXNfc3RyaW5nKHQpJiZuLnJpZ2h0LnJpZ2h0LmlzX3N0cmluZyh0KSkpKXJldHVybiBuLmxlZnQ9USh0dCxuLmxlZnQse29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpuLmxlZnQscmlnaHQ6bi5yaWdodC5sZWZ0fSksbi5yaWdodD1uLnJpZ2h0LnJpZ2h0LG4udHJhbnNmb3JtKHQpO3ZhciBtPW4uZXZhbHVhdGUodCk7cmV0dXJuIG0hPT1uPyhtPVAobSxuKS5vcHRpbWl6ZSh0KSxIKHQsbSxuKSk6bjtmdW5jdGlvbiBnKGUpe3JldHVybiEhZS50cnV0aHl8fCFlLmZhbHN5JiYoISFlLmlzX3RydXRoeSgpfHxlLmV2YWx1YXRlKHQpKX19KSxlKG10LGZ1bmN0aW9uKGUsdCl7aWYoIXQub3B0aW9uKCJpZTgiKSYmaihlKSYmKCFlLnNjb3BlLnVzZXNfd2l0aHx8IXQuZmluZF9wYXJlbnQoeGUpKSlzd2l0Y2goZS5uYW1lKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIFEoQXQsZSkub3B0aW1pemUodCk7Y2FzZSJOYU4iOnJldHVybiBRKEV0LGUpLm9wdGltaXplKHQpO2Nhc2UiSW5maW5pdHkiOnJldHVybiBRKGt0LGUpLm9wdGltaXplKHQpfXZhciBuLHI9dC5wYXJlbnQoKTtpZih0Lm9wdGlvbigicmVkdWNlX3ZhcnMiKSYmZWUoZSxyKSE9PWUpe3ZhciBpPWUuZGVmaW5pdGlvbigpLG89ZS5maXhlZF92YWx1ZSgpLGE9aS5zaW5nbGVfdXNlJiYhKHIgaW5zdGFuY2VvZiBLZSYmci5pc19leHByX3B1cmUodCkpO2lmKGEmJm8gaW5zdGFuY2VvZiBPZSlpZihpLnNjb3BlPT09ZS5zY29wZXx8dC5vcHRpb24oInJlZHVjZV9mdW5jcyIpJiYxIT1pLmVzY2FwZWQmJiFvLmlubGluZWQpe2lmKCQodCxpKSlhPSExO2Vsc2UgaWYoKGkuc2NvcGUhPT1lLnNjb3BlfHxpLm9yaWdbMF1pbnN0YW5jZW9mIGZ0KSYmImYiPT0oYT1vLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oZS5zY29wZSkpKWZvcih2YXIgcz1lLnNjb3BlOyhzIGluc3RhbmNlb2YgVGV8fHMgaW5zdGFuY2VvZiBEZSkmJihzLmlubGluZWQ9ITApLHM9cy5wYXJlbnRfc2NvcGU7KTt9ZWxzZSBhPSExO2lmKGEmJm8pe2lmKGkuc2luZ2xlX3VzZT0hMSxvLl9zcXVlZXplZD0hMCxvIGluc3RhbmNlb2YgVGUmJigobz1RKERlLG8sbykpLm5hbWU9UShodCxvLm5hbWUsby5uYW1lKSksMDxpLnJlY3Vyc2l2ZV9yZWZzKXt2YXIgdT0odj1vLmNsb25lKCEwKSkubmFtZS5kZWZpbml0aW9uKCksbD12LnZhcmlhYmxlcy5nZXQodi5uYW1lLm5hbWUpLGM9bCYmbC5vcmlnWzBdO2MgaW5zdGFuY2VvZiBodHx8KCgoYz1RKGh0LHYubmFtZSx2Lm5hbWUpKS5zY29wZT12KS5uYW1lPWMsbD12LmRlZl9mdW5jdGlvbihjKSksdi53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgbXQpe3ZhciB0PWUuZGVmaW5pdGlvbigpO2lmKHQ9PT11KShlLnRoZWRlZj1sKS5yZWZlcmVuY2VzLnB1c2goZSk7ZWxzZXt0LnNpbmdsZV91c2U9ITE7dmFyIG49ZS5maXhlZF92YWx1ZSgpO2lmKCEobiBpbnN0YW5jZW9mIE9lKSlyZXR1cm47aWYoIW4ubmFtZSlyZXR1cm47aWYoby52YXJpYWJsZXMuZ2V0KG4ubmFtZS5uYW1lKSE9PW4ubmFtZS5kZWZpbml0aW9uKCkpcmV0dXJuO24ubmFtZT1uLm5hbWUuY2xvbmUoKTt2YXIgcj12LnZhcmlhYmxlcy5nZXQobi5uYW1lLm5hbWUpfHx2LmRlZl9mdW5jdGlvbihuLm5hbWUpOyhlLnRoZWRlZj1yKS5yZWZlcmVuY2VzLnB1c2goZSl9fX0pKX1lbHNlKHY9by5vcHRpbWl6ZSh0KSk9PT1vJiYodj1vLmNsb25lKCEwKSk7cmV0dXJuIGkucmVwbGFjZWQrKyx2fWlmKG8mJnZvaWQgMD09PWkuc2hvdWxkX3JlcGxhY2Upe3ZhciBmO2lmKG8gaW5zdGFuY2VvZiBndClpLm9yaWdbMF1pbnN0YW5jZW9mIGZ0fHwhc2UoaS5yZWZlcmVuY2VzLGZ1bmN0aW9uKGUpe3JldHVybiBpLnNjb3BlPT09ZS5zY29wZX0pfHwoZj1vKTtlbHNle3ZhciBwPW8uZXZhbHVhdGUodCk7cD09PW98fCF0Lm9wdGlvbigidW5zYWZlX3JlZ2V4cCIpJiZwIGluc3RhbmNlb2YgUmVnRXhwfHwoZj1QKHAsbykpfWlmKGYpe3ZhciBoLGQ9Zi5vcHRpbWl6ZSh0KS5wcmludF90b19zdHJpbmcoKS5sZW5ndGg7by53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgbXQmJihuPSEwKSxuKXJldHVybiEwfSkpLGg9bj9mdW5jdGlvbigpe3ZhciBlPWYub3B0aW1pemUodCk7cmV0dXJuIGU9PT1mP2UuY2xvbmUoITApOmV9OihkPU1hdGgubWluKGQsby5wcmludF90b19zdHJpbmcoKS5sZW5ndGgpLGZ1bmN0aW9uKCl7dmFyIGU9eShmLm9wdGltaXplKHQpLG8pO3JldHVybiBlPT09Znx8ZT09PW8/ZS5jbG9uZSghMCk6ZX0pO3ZhciBtPWkubmFtZS5sZW5ndGgsZz0wO3Qub3B0aW9uKCJ1bnVzZWQiKSYmIXQuZXhwb3NlZChpKSYmKGc9KG0rMitkKS8oaS5yZWZlcmVuY2VzLmxlbmd0aC1pLmFzc2lnbm1lbnRzKSksaS5zaG91bGRfcmVwbGFjZT1kPD1tK2cmJmh9ZWxzZSBpLnNob3VsZF9yZXBsYWNlPSExfWlmKGkuc2hvdWxkX3JlcGxhY2Upe3ZhciB2PWkuc2hvdWxkX3JlcGxhY2UoKTtyZXR1cm4gaS5yZXBsYWNlZCsrLHZ9fXJldHVybiBlfSksZShBdCxmdW5jdGlvbihlLHQpe2lmKHQub3B0aW9uKCJ1bnNhZmVfdW5kZWZpbmVkIikpe3ZhciBuPW8odCwidW5kZWZpbmVkIik7aWYobil7dmFyIHI9UShtdCxlLHtuYW1lOiJ1bmRlZmluZWQiLHNjb3BlOm4uc2NvcGUsdGhlZGVmOm59KTtyZXR1cm4gci5pc191bmRlZmluZWQ9ITAscn19dmFyIGk9ZWUodC5zZWxmKCksdC5wYXJlbnQoKSk7cmV0dXJuIGkmJnAoaSxlKT9lOlEoWGUsZSx7b3BlcmF0b3I6InZvaWQiLGV4cHJlc3Npb246USh5dCxlLHt2YWx1ZTowfSl9KX0pLGUoa3QsZnVuY3Rpb24oZSx0KXt2YXIgbj1lZSh0LnNlbGYoKSx0LnBhcmVudCgpKTtyZXR1cm4gbiYmcChuLGUpP2U6IXQub3B0aW9uKCJrZWVwX2luZmluaXR5Iil8fG4mJiFwKG4sZSl8fG8odCwiSW5maW5pdHkiKT9RKHR0LGUse29wZXJhdG9yOiIvIixsZWZ0OlEoeXQsZSx7dmFsdWU6MX0pLHJpZ2h0OlEoeXQsZSx7dmFsdWU6MH0pfSk6ZX0pLGUoRXQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lZSh0LnNlbGYoKSx0LnBhcmVudCgpKTtyZXR1cm4gbiYmIXAobixlKXx8byh0LCJOYU4iKT9RKHR0LGUse29wZXJhdG9yOiIvIixsZWZ0OlEoeXQsZSx7dmFsdWU6MH0pLHJpZ2h0OlEoeXQsZSx7dmFsdWU6MH0pfSk6ZX0pO3ZhciBDPWFlKCIrIC0gLyAqICUgPj4gPDwgPj4+IHwgXiAmIiksTz1hZSgiKiB8IF4gJiIpO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIG10JiYoZT1lLmZpeGVkX3ZhbHVlKCkpLCEhZSYmKCEoZSBpbnN0YW5jZW9mIE9lKXx8dC5wYXJlbnQoKWluc3RhbmNlb2YgR2V8fCFlLmNvbnRhaW5zX3RoaXMoKSl9ZShydCxmdW5jdGlvbihhLHMpe3ZhciBlO2lmKHMub3B0aW9uKCJkZWFkX2NvZGUiKSYmYS5sZWZ0IGluc3RhbmNlb2YgbXQmJihlPWEubGVmdC5kZWZpbml0aW9uKCkpLnNjb3BlPT09cy5maW5kX3BhcmVudChPZSkpe3ZhciB0LG49MCxyPWE7ZG97aWYodD1yLChyPXMucGFyZW50KG4rKykpaW5zdGFuY2VvZiBCZSl7aWYobyhuLHIpKWJyZWFrO2lmKEsoZS5zY29wZSxbZV0pKWJyZWFrO3JldHVybiI9Ij09YS5vcGVyYXRvcj9hLnJpZ2h0OihlLmZpeGVkPSExLFEodHQsYSx7b3BlcmF0b3I6YS5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OmEubGVmdCxyaWdodDphLnJpZ2h0fSkub3B0aW1pemUocykpfX13aGlsZShyIGluc3RhbmNlb2YgdHQmJnIucmlnaHQ9PT10fHxyIGluc3RhbmNlb2YgWWUmJnIudGFpbF9ub2RlKCk9PT10KX1pZihhPWEubGlmdF9zZXF1ZW5jZXMocyksIXMub3B0aW9uKCJhc3NpZ25tZW50cyIpKXJldHVybiBhO2lmKCI9Ij09YS5vcGVyYXRvciYmYS5sZWZ0IGluc3RhbmNlb2YgbXQmJmEucmlnaHQgaW5zdGFuY2VvZiB0dCYmKGEucmlnaHQubGVmdCBpbnN0YW5jZW9mIG10JiZhLnJpZ2h0LmxlZnQubmFtZT09YS5sZWZ0Lm5hbWUmJkNbYS5yaWdodC5vcGVyYXRvcl0/KGEub3BlcmF0b3I9YS5yaWdodC5vcGVyYXRvcisiPSIsYS5yaWdodD1hLnJpZ2h0LnJpZ2h0KTphLnJpZ2h0LnJpZ2h0IGluc3RhbmNlb2YgbXQmJmEucmlnaHQucmlnaHQubmFtZT09YS5sZWZ0Lm5hbWUmJk9bYS5yaWdodC5vcGVyYXRvcl0mJiFhLnJpZ2h0LmxlZnQuaGFzX3NpZGVfZWZmZWN0cyhzKSYmKGEub3BlcmF0b3I9YS5yaWdodC5vcGVyYXRvcisiPSIsYS5yaWdodD1hLnJpZ2h0LmxlZnQpKSwoIis9Ij09YS5vcGVyYXRvcnx8Ii09Ij09YS5vcGVyYXRvcikmJmEubGVmdC5pc19udW1iZXIocykmJmEucmlnaHQgaW5zdGFuY2VvZiB5dCYmMT09PWEucmlnaHQuZ2V0VmFsdWUoKSl7dmFyIGk9YS5vcGVyYXRvci5zbGljZSgwLC0xKTtyZXR1cm4gUShYZSxhLHtvcGVyYXRvcjppK2ksZXhwcmVzc2lvbjphLmxlZnR9KX1yZXR1cm4gYTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49YS5yaWdodDthLnJpZ2h0PVEod3Qsbik7dmFyIHI9dC5tYXlfdGhyb3cocyk7YS5yaWdodD1uO2Zvcih2YXIgaSxvPWEubGVmdC5kZWZpbml0aW9uKCkuc2NvcGU7KGk9cy5wYXJlbnQoZSsrKSkhPT1vOylpZihpIGluc3RhbmNlb2YgSWUpe2lmKGkuYmZpbmFsbHkpcmV0dXJuITA7aWYociYmaS5iY2F0Y2gpcmV0dXJuITB9fX0pLGUobnQsZnVuY3Rpb24oZSxpKXtpZighaS5vcHRpb24oImNvbmRpdGlvbmFscyIpKXJldHVybiBlO2lmKGUuY29uZGl0aW9uIGluc3RhbmNlb2YgWWUpe3ZhciB0PWUuY29uZGl0aW9uLmV4cHJlc3Npb25zLnNsaWNlKCk7cmV0dXJuIGUuY29uZGl0aW9uPXQucG9wKCksdC5wdXNoKGUpLE4oZSx0KX12YXIgbj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUoaSk7aWYoIW4pcmV0dXJuIGkud2FybigiQ29uZGl0aW9uIGFsd2F5cyBmYWxzZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLE4oZSxbZS5jb25kaXRpb24sZS5hbHRlcm5hdGl2ZV0pLm9wdGltaXplKGkpO2lmKCEobiBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gaS53YXJuKCJDb25kaXRpb24gYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLnN0YXJ0KSxOKGUsW2UuY29uZGl0aW9uLGUuY29uc2VxdWVudF0pLm9wdGltaXplKGkpO3ZhciByPW4ubmVnYXRlKGksRihpKSk7SChpLG4scik9PT1yJiYoZT1RKG50LGUse2NvbmRpdGlvbjpyLGNvbnNlcXVlbnQ6ZS5hbHRlcm5hdGl2ZSxhbHRlcm5hdGl2ZTplLmNvbnNlcXVlbnR9KSk7dmFyIG89ZS5jb25kaXRpb24sYT1lLmNvbnNlcXVlbnQscz1lLmFsdGVybmF0aXZlO2lmKG8gaW5zdGFuY2VvZiBtdCYmYSBpbnN0YW5jZW9mIG10JiZvLmRlZmluaXRpb24oKT09PWEuZGVmaW5pdGlvbigpKXJldHVybiBRKHR0LGUse29wZXJhdG9yOiJ8fCIsbGVmdDpvLHJpZ2h0OnN9KTt2YXIgdSxsPWEudGFpbF9ub2RlKCk7aWYobCBpbnN0YW5jZW9mIHJ0KXt2YXIgYz0iPSI9PWwub3BlcmF0b3IsZj1jP3MudGFpbF9ub2RlKCk6cztpZigoY3x8YT09PWwpJiZmIGluc3RhbmNlb2YgcnQmJmwub3BlcmF0b3I9PWYub3BlcmF0b3ImJmwubGVmdC5lcXVpdmFsZW50X3RvKGYubGVmdCkmJihjJiYhbC5sZWZ0Lmhhc19zaWRlX2VmZmVjdHMoaSl8fCFvLmhhc19zaWRlX2VmZmVjdHMoaSkmJnYoYSkmJnYocykpKXJldHVybiBRKHJ0LGUse29wZXJhdG9yOmwub3BlcmF0b3IsbGVmdDpsLmxlZnQscmlnaHQ6UShudCxlLHtjb25kaXRpb246byxjb25zZXF1ZW50OmIoYSksYWx0ZXJuYXRpdmU6YihzKX0pfSl9aWYoYSBpbnN0YW5jZW9mIEtlJiZzLlRZUEU9PT1hLlRZUEUmJjA8YS5hcmdzLmxlbmd0aCYmYS5hcmdzLmxlbmd0aD09cy5hcmdzLmxlbmd0aCYmYS5leHByZXNzaW9uLmVxdWl2YWxlbnRfdG8ocy5leHByZXNzaW9uKSYmIW8uaGFzX3NpZGVfZWZmZWN0cyhpKSYmIWEuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGkpJiYibnVtYmVyIj09dHlwZW9mKHU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YS5hcmdzLHQ9cy5hcmdzLG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIWVbbl0uZXF1aXZhbGVudF90byh0W25dKSl7Zm9yKHZhciBpPW4rMTtpPHI7aSsrKWlmKCFlW2ldLmVxdWl2YWxlbnRfdG8odFtpXSkpcmV0dXJuO3JldHVybiBufX0oKSkpe3ZhciBwPWEuY2xvbmUoKTtyZXR1cm4gcC5hcmdzW3VdPVEobnQsZSx7Y29uZGl0aW9uOm8sY29uc2VxdWVudDphLmFyZ3NbdV0sYWx0ZXJuYXRpdmU6cy5hcmdzW3VdfSkscH1pZihhIGluc3RhbmNlb2YgbnQmJmEuYWx0ZXJuYXRpdmUuZXF1aXZhbGVudF90byhzKSlyZXR1cm4gUShudCxlLHtjb25kaXRpb246USh0dCxlLHtsZWZ0Om8sb3BlcmF0b3I6IiYmIixyaWdodDphLmNvbmRpdGlvbn0pLGNvbnNlcXVlbnQ6YS5jb25zZXF1ZW50LGFsdGVybmF0aXZlOnN9KTtpZihhLmVxdWl2YWxlbnRfdG8ocykpcmV0dXJuIE4oZSxbbyxhXSkub3B0aW1pemUoaSk7aWYoKGEgaW5zdGFuY2VvZiBZZXx8cyBpbnN0YW5jZW9mIFllKSYmYS50YWlsX25vZGUoKS5lcXVpdmFsZW50X3RvKHMudGFpbF9ub2RlKCkpKXJldHVybiBOKGUsW1EobnQsZSx7Y29uZGl0aW9uOm8sY29uc2VxdWVudDp5KGEpLGFsdGVybmF0aXZlOnkocyl9KSxhLnRhaWxfbm9kZSgpXSkub3B0aW1pemUoaSk7aWYoYSBpbnN0YW5jZW9mIHR0JiYifHwiPT1hLm9wZXJhdG9yJiZhLnJpZ2h0LmVxdWl2YWxlbnRfdG8ocykpcmV0dXJuIFEodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0Om8scmlnaHQ6YS5sZWZ0fSkscmlnaHQ6c30pLm9wdGltaXplKGkpO3ZhciBoPWkub3B0aW9uKCJib29sZWFucyIpJiZpLmluX2Jvb2xlYW5fY29udGV4dCgpO3JldHVybiBtKGUuY29uc2VxdWVudCk/ZyhlLmFsdGVybmF0aXZlKT9kKG8pOlEodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OmQobykscmlnaHQ6ZS5hbHRlcm5hdGl2ZX0pOmcoZS5jb25zZXF1ZW50KT9tKGUuYWx0ZXJuYXRpdmUpP2Qoby5uZWdhdGUoaSkpOlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0OmQoby5uZWdhdGUoaSkpLHJpZ2h0OmUuYWx0ZXJuYXRpdmV9KTptKGUuYWx0ZXJuYXRpdmUpP1EodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OmQoby5uZWdhdGUoaSkpLHJpZ2h0OmUuY29uc2VxdWVudH0pOmcoZS5hbHRlcm5hdGl2ZSk/USh0dCxlLHtvcGVyYXRvcjoiJiYiLGxlZnQ6ZChvKSxyaWdodDplLmNvbnNlcXVlbnR9KTplO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIGUuaXNfYm9vbGVhbihpKT9lOlEoWGUsZSx7b3BlcmF0b3I6IiEiLGV4cHJlc3Npb246ZS5uZWdhdGUoaSl9KX1mdW5jdGlvbiBtKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU3R8fGgmJmUgaW5zdGFuY2VvZiB2dCYmZS5nZXRWYWx1ZSgpfHxlIGluc3RhbmNlb2YgWGUmJiIhIj09ZS5vcGVyYXRvciYmZS5leHByZXNzaW9uIGluc3RhbmNlb2YgdnQmJiFlLmV4cHJlc3Npb24uZ2V0VmFsdWUoKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlIGluc3RhbmNlb2YgT3R8fGgmJmUgaW5zdGFuY2VvZiB2dCYmIWUuZ2V0VmFsdWUoKXx8ZSBpbnN0YW5jZW9mIFhlJiYiISI9PWUub3BlcmF0b3ImJmUuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIHZ0JiZlLmV4cHJlc3Npb24uZ2V0VmFsdWUoKX1mdW5jdGlvbiB2KGUpe2lmKGU9PT1lLnRhaWxfbm9kZSgpKXJldHVybiEwO2Zvcih2YXIgdD1lLmV4cHJlc3Npb25zLG49dC5sZW5ndGgtMTswPD0tLW47KXt2YXIgcj10W25dO2lmKCEociBpbnN0YW5jZW9mIHJ0KSYmci5oYXNfc2lkZV9lZmZlY3RzKGkpfHwiPSIhPXIub3BlcmF0b3J8fHIubGVmdC5oYXNfc2lkZV9lZmZlY3RzKGkpfHxyLnJpZ2h0Lmhhc19zaWRlX2VmZmVjdHMoaSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gYihlKXtpZighKGUgaW5zdGFuY2VvZiBZZSkpcmV0dXJuIGUucmlnaHQ7dmFyIHQ9ZS5leHByZXNzaW9ucy5zbGljZSgpO3JldHVybiB0LnB1c2godC5wb3AoKS5yaWdodCksTihlLHQpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBZZT9OKGUsZS5leHByZXNzaW9ucy5zbGljZSgwLC0xKSk6USh5dCxlLHt2YWx1ZTowfSl9fSksZShDdCxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigiYm9vbGVhbnMiKSlyZXR1cm4gZTtpZih0LmluX2Jvb2xlYW5fY29udGV4dCgpKXJldHVybiBRKHl0LGUse3ZhbHVlOitlLnZhbHVlfSk7dmFyIG49dC5wYXJlbnQoKTtyZXR1cm4gbiBpbnN0YW5jZW9mIHR0JiYoIj09Ij09bi5vcGVyYXRvcnx8IiE9Ij09bi5vcGVyYXRvcik/KHQud2FybigiTm9uLXN0cmljdCBlcXVhbGl0eSBhZ2FpbnN0IGJvb2xlYW46IHtvcGVyYXRvcn0ge3ZhbHVlfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHtvcGVyYXRvcjpuLm9wZXJhdG9yLHZhbHVlOmUudmFsdWUsZmlsZTpuLnN0YXJ0LmZpbGUsbGluZTpuLnN0YXJ0LmxpbmUsY29sOm4uc3RhcnQuY29sfSksUSh5dCxlLHt2YWx1ZTorZS52YWx1ZX0pKTpRKFhlLGUse29wZXJhdG9yOiIhIixleHByZXNzaW9uOlEoeXQsZSx7dmFsdWU6MS1lLnZhbHVlfSl9KX0pLGUoWmUsZnVuY3Rpb24oZSx0KXt2YXIgbixyPWUuZXhwcmVzc2lvbixpPWUucHJvcGVydHk7aWYodC5vcHRpb24oInByb3BlcnRpZXMiKSl7dmFyIG89aS5ldmFsdWF0ZSh0KTtpZihvIT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBvKWlmKCJ1bmRlZmluZWQiPT1vKW89dm9pZCAwO2Vsc2Uodj1wYXJzZUZsb2F0KG8pKS50b1N0cmluZygpPT1vJiYobz12KTtpPWUucHJvcGVydHk9eShpLFAobyxpKS50cmFuc2Zvcm0odCkpO3ZhciBhPSIiK287aWYoTXQoYSkmJmEubGVuZ3RoPD1pLnByaW50X3RvX3N0cmluZygpLmxlbmd0aCsxKXJldHVybiBRKFFlLGUse2V4cHJlc3Npb246cixwcm9wZXJ0eTphfSkub3B0aW1pemUodCl9fWlmKHQub3B0aW9uKCJhcmd1bWVudHMiKSYmciBpbnN0YW5jZW9mIG10JiYiYXJndW1lbnRzIj09ci5uYW1lJiYxPT1yLmRlZmluaXRpb24oKS5vcmlnLmxlbmd0aCYmaSBpbnN0YW5jZW9mIHl0JiYobj1yLnNjb3BlKT09PXQuZmluZF9wYXJlbnQoT2UpKXt2YXIgcz1pLmdldFZhbHVlKCksdT1uLmFyZ25hbWVzW3NdO2lmKHUmJnQuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpKXt2YXIgbD11LmRlZmluaXRpb24oKTsoIXQub3B0aW9uKCJyZWR1Y2VfdmFycyIpfHxyLmRlZmluaXRpb24oKS5yZWFzc2lnbmVkfHxsLmFzc2lnbm1lbnRzfHwxPGwub3JpZy5sZW5ndGgpJiYodT1udWxsKX1lbHNlIGlmKCF1JiYhdC5vcHRpb24oImtlZXBfZmFyZ3MiKSYmczxuLmFyZ25hbWVzLmxlbmd0aCs1KWZvcig7cz49bi5hcmduYW1lcy5sZW5ndGg7KXU9UShmdCxuLHtuYW1lOm4ubWFrZV92YXJfbmFtZSgiYXJndW1lbnRfIituLmFyZ25hbWVzLmxlbmd0aCksc2NvcGU6bn0pLG4uYXJnbmFtZXMucHVzaCh1KSxuLmVuY2xvc2VkLnB1c2gobi5kZWZfdmFyaWFibGUodSkpO2lmKHUmJkcoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXUubmFtZX0sbi5hcmduYW1lcyk9PT11KXt2YXIgYz1RKG10LGUsdSk7cmV0dXJuIGMucmVmZXJlbmNlKHt9KSxkZWxldGUgdS5fX3VudXNlZCxjfX1pZihlZShlLHQucGFyZW50KCkpKXJldHVybiBlO2lmKG8hPT1pKXt2YXIgZj1lLmZsYXR0ZW5fb2JqZWN0KGEsdCk7ZiYmKHI9ZS5leHByZXNzaW9uPWYuZXhwcmVzc2lvbixpPWUucHJvcGVydHk9Zi5wcm9wZXJ0eSl9aWYodC5vcHRpb24oInByb3BlcnRpZXMiKSYmdC5vcHRpb24oInNpZGVfZWZmZWN0cyIpJiZpIGluc3RhbmNlb2YgeXQmJnIgaW5zdGFuY2VvZiBpdCl7cz1pLmdldFZhbHVlKCk7dmFyIHA9ci5lbGVtZW50cyxoPXBbc107aWYoUyhoLHQpKXtmb3IodmFyIGQ9ITAsbT1bXSxnPXAubGVuZ3RoOy0tZz5zOyl7KHY9cFtnXS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUodCkpJiYobS51bnNoaWZ0KHYpLGQmJnYuaGFzX3NpZGVfZWZmZWN0cyh0KSYmKGQ9ITEpKX1mb3IoaD1oIGluc3RhbmNlb2YgeHQ/UShBdCxoKTpoLGR8fG0udW5zaGlmdChoKTswPD0tLWc7KXt2YXIgdjsodj1wW2ddLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0KSk/bS51bnNoaWZ0KHYpOnMtLX1yZXR1cm4gZD8obS5wdXNoKGgpLE4oZSxtKS5vcHRpbWl6ZSh0KSk6UShaZSxlLHtleHByZXNzaW9uOlEoaXQscix7ZWxlbWVudHM6bX0pLHByb3BlcnR5OlEoeXQsaSx7dmFsdWU6c30pfSl9fXZhciBiPWUuZXZhbHVhdGUodCk7cmV0dXJuIGIhPT1lP0godCxiPVAoYixlKS5vcHRpbWl6ZSh0KSxlKTplfSksa2UuREVGTUVUSE9EKCJjb250YWluc190aGlzIixmdW5jdGlvbigpe3ZhciB0LG49dGhpcztyZXR1cm4gbi53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIXR8fChlIGluc3RhbmNlb2YgZ3Q/dD0hMDplIT09biYmZSBpbnN0YW5jZW9mIGtlfHx2b2lkIDApfSkpLHR9KSxXZS5ERUZNRVRIT0QoImZsYXR0ZW5fb2JqZWN0IixmdW5jdGlvbihlLHQpe2lmKHQub3B0aW9uKCJwcm9wZXJ0aWVzIikpe3ZhciBuPXRoaXMuZXhwcmVzc2lvbjtpZihuIGluc3RhbmNlb2Ygb3QpZm9yKHZhciByPW4ucHJvcGVydGllcyxpPXIubGVuZ3RoOzA8PS0taTspe3ZhciBvPXJbaV07aWYoIiIrby5rZXk9PWUpe2lmKCFzZShyLGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygc3R9KSlicmVhaztpZighUyhvLnZhbHVlLHQpKWJyZWFrO3JldHVybiBRKFplLHRoaXMse2V4cHJlc3Npb246UShpdCxuLHtlbGVtZW50czpyLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pfSkscHJvcGVydHk6USh5dCx0aGlzLHt2YWx1ZTppfSl9KX19fX0pLGUoUWUsZnVuY3Rpb24oZSx0KXtpZigiYXJndW1lbnRzIiE9ZS5wcm9wZXJ0eSYmImNhbGxlciIhPWUucHJvcGVydHl8fHQud2FybigiRnVuY3Rpb24ucHJvdG90eXBlLntwcm9wfSBub3Qgc3VwcG9ydGVkIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIse3Byb3A6ZS5wcm9wZXJ0eSxmaWxlOmUuc3RhcnQuZmlsZSxsaW5lOmUuc3RhcnQubGluZSxjb2w6ZS5zdGFydC5jb2x9KSxlZShlLHQucGFyZW50KCkpKXJldHVybiBlO2lmKHQub3B0aW9uKCJ1bnNhZmVfcHJvdG8iKSYmZS5leHByZXNzaW9uIGluc3RhbmNlb2YgUWUmJiJwcm90b3R5cGUiPT1lLmV4cHJlc3Npb24ucHJvcGVydHkpe3ZhciBuPWUuZXhwcmVzc2lvbi5leHByZXNzaW9uO2lmKGoobikpc3dpdGNoKG4ubmFtZSl7Y2FzZSJBcnJheSI6ZS5leHByZXNzaW9uPVEoaXQsZS5leHByZXNzaW9uLHtlbGVtZW50czpbXX0pO2JyZWFrO2Nhc2UiRnVuY3Rpb24iOmUuZXhwcmVzc2lvbj1RKERlLGUuZXhwcmVzc2lvbix7YXJnbmFtZXM6W10sYm9keTpbXX0pO2JyZWFrO2Nhc2UiTnVtYmVyIjplLmV4cHJlc3Npb249USh5dCxlLmV4cHJlc3Npb24se3ZhbHVlOjB9KTticmVhaztjYXNlIk9iamVjdCI6ZS5leHByZXNzaW9uPVEob3QsZS5leHByZXNzaW9uLHtwcm9wZXJ0aWVzOltdfSk7YnJlYWs7Y2FzZSJSZWdFeHAiOmUuZXhwcmVzc2lvbj1RKF90LGUuZXhwcmVzc2lvbix7dmFsdWU6L3QvfSk7YnJlYWs7Y2FzZSJTdHJpbmciOmUuZXhwcmVzc2lvbj1RKGJ0LGUuZXhwcmVzc2lvbix7dmFsdWU6IiJ9KX19dmFyIHI9ZS5mbGF0dGVuX29iamVjdChlLnByb3BlcnR5LHQpO2lmKHIpcmV0dXJuIHIub3B0aW1pemUodCk7dmFyIGk9ZS5ldmFsdWF0ZSh0KTtyZXR1cm4gaSE9PWU/SCh0LGk9UChpLGUpLm9wdGltaXplKHQpLGUpOmV9KSxlKFJlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWUmJnYoZS52YWx1ZSx0KSYmKGUudmFsdWU9bnVsbCksZX0pfShmdW5jdGlvbihlLG4pe2UuREVGTUVUSE9EKCJvcHRpbWl6ZSIsZnVuY3Rpb24oZSl7aWYodGhpcy5fb3B0aW1pemVkKXJldHVybiB0aGlzO2lmKGUuaGFzX2RpcmVjdGl2ZSgidXNlIGFzbSIpKXJldHVybiB0aGlzO3ZhciB0PW4odGhpcyxlKTtyZXR1cm4gdC5fb3B0aW1pemVkPSEwLHR9KX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9ITAsbj0wO248ZS5sZW5ndGg7bisrKXQmJmVbbl1pbnN0YW5jZW9mIGNlJiZlW25dLmJvZHkgaW5zdGFuY2VvZiBidD9lW25dPW5ldyBwZSh7c3RhcnQ6ZVtuXS5zdGFydCxlbmQ6ZVtuXS5lbmQsdmFsdWU6ZVtuXS5ib2R5LnZhbHVlfSk6IXR8fGVbbl1pbnN0YW5jZW9mIGNlJiZlW25dLmJvZHkgaW5zdGFuY2VvZiBidHx8KHQ9ITEpO3JldHVybiBlfXZhciByPXtQcm9ncmFtOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQ2Uoe3N0YXJ0OnMoZSksZW5kOnUoZSksYm9keTp0KGUuYm9keS5tYXAobCkpfSl9LEZ1bmN0aW9uRGVjbGFyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxuYW1lOmwoZS5pZCksYXJnbmFtZXM6ZS5wYXJhbXMubWFwKGwpLGJvZHk6dChsKGUuYm9keSkuYm9keSl9KX0sRnVuY3Rpb25FeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoe3N0YXJ0OnMoZSksZW5kOnUoZSksbmFtZTpsKGUuaWQpLGFyZ25hbWVzOmUucGFyYW1zLm1hcChsKSxib2R5OnQobChlLmJvZHkpLmJvZHkpfSl9LEV4cHJlc3Npb25TdGF0ZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxib2R5OmwoZS5leHByZXNzaW9uKX0pfSxUcnlTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5oYW5kbGVyc3x8W2UuaGFuZGxlcl07aWYoMTx0Lmxlbmd0aHx8ZS5ndWFyZGVkSGFuZGxlcnMmJmUuZ3VhcmRlZEhhbmRsZXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk11bHRpcGxlIGNhdGNoIGNsYXVzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7cmV0dXJuIG5ldyBJZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxib2R5OmwoZS5ibG9jaykuYm9keSxiY2F0Y2g6bCh0WzBdKSxiZmluYWxseTplLmZpbmFsaXplcj9uZXcgamUobChlLmZpbmFsaXplcikpOm51bGx9KX0sUHJvcGVydHk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXksbj17c3RhcnQ6cyh0KSxlbmQ6dShlLnZhbHVlKSxrZXk6IklkZW50aWZpZXIiPT10LnR5cGU/dC5uYW1lOnQudmFsdWUsdmFsdWU6bChlLnZhbHVlKX07cmV0dXJuImluaXQiPT1lLmtpbmQ/bmV3IHN0KG4pOihuLmtleT1uZXcgUSh7bmFtZTpuLmtleX0pLG4udmFsdWU9bmV3IFNlKG4udmFsdWUpLCJnZXQiPT1lLmtpbmQ/bmV3IFcobik6InNldCI9PWUua2luZD9uZXcgWShuKTp2b2lkIDApfSxBcnJheUV4cHJlc3Npb246ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpdCh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxlbGVtZW50czplLmVsZW1lbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWU/bmV3IHh0OmwoZSl9KX0pfSxPYmplY3RFeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3Qoe3N0YXJ0OnMoZSksZW5kOnUoZSkscHJvcGVydGllczplLnByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9IlByb3BlcnR5IixsKGUpfSl9KX0sU2VxdWVuY2VFeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWWUoe3N0YXJ0OnMoZSksZW5kOnUoZSksZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucy5tYXAobCl9KX0sTWVtYmVyRXhwcmVzc2lvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3KGUuY29tcHV0ZWQ/WmU6UWUpKHtzdGFydDpzKGUpLGVuZDp1KGUpLHByb3BlcnR5OmUuY29tcHV0ZWQ/bChlLnByb3BlcnR5KTplLnByb3BlcnR5Lm5hbWUsZXhwcmVzc2lvbjpsKGUub2JqZWN0KX0pfSxTd2l0Y2hDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZS50ZXN0P1BlOk5lKSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxleHByZXNzaW9uOmwoZS50ZXN0KSxib2R5OmUuY29uc2VxdWVudC5tYXAobCl9KX0sVmFyaWFibGVEZWNsYXJhdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKHtzdGFydDpzKGUpLGVuZDp1KGUpLGRlZmluaXRpb25zOmUuZGVjbGFyYXRpb25zLm1hcChsKX0pfSxMaXRlcmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUsbj17c3RhcnQ6cyhlKSxlbmQ6dShlKX07aWYobnVsbD09PXQpcmV0dXJuIG5ldyB3dChuKTt2YXIgcj1lLnJlZ2V4O2lmKHImJnIucGF0dGVybilyZXR1cm4gbi52YWx1ZT1uZXcgUmVnRXhwKHIucGF0dGVybixyLmZsYWdzKSxuLnZhbHVlLnJhd19zb3VyY2U9ci5wYXR0ZXJuLG5ldyBfdChuKTtpZihyKXJldHVybiBuLnZhbHVlPWUucmVnZXgmJmUucmF3P2UucmF3OnQsbmV3IF90KG4pO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJzdHJpbmciOnJldHVybiBuLnZhbHVlPXQsbmV3IGJ0KG4pO2Nhc2UibnVtYmVyIjpyZXR1cm4gbi52YWx1ZT10LG5ldyB5dChuKTtjYXNlImJvb2xlYW4iOnJldHVybiBuZXcodD9TdDpPdCkobil9fSxJZGVudGlmaWVyOmZ1bmN0aW9uKGUpe3ZhciB0PW9bby5sZW5ndGgtMl07cmV0dXJuIG5ldygiTGFiZWxlZFN0YXRlbWVudCI9PXQudHlwZT9aOiJWYXJpYWJsZURlY2xhcmF0b3IiPT10LnR5cGUmJnQuaWQ9PT1lP2N0OiJGdW5jdGlvbkV4cHJlc3Npb24iPT10LnR5cGU/dC5pZD09PWU/aHQ6ZnQ6IkZ1bmN0aW9uRGVjbGFyYXRpb24iPT10LnR5cGU/dC5pZD09PWU/cHQ6ZnQ6IkNhdGNoQ2xhdXNlIj09dC50eXBlP2R0OiJCcmVha1N0YXRlbWVudCI9PXQudHlwZXx8IkNvbnRpbnVlU3RhdGVtZW50Ij09dC50eXBlP0o6bXQpKHtzdGFydDpzKGUpLGVuZDp1KGUpLG5hbWU6ZS5uYW1lfSl9fTtmdW5jdGlvbiBpKGUpe2lmKCJMaXRlcmFsIj09ZS50eXBlKXJldHVybiBudWxsIT1lLnJhdz9lLnJhdzplLnZhbHVlKyIifWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5sb2Msbj10JiZ0LnN0YXJ0LHI9ZS5yYW5nZTtyZXR1cm4gbmV3IE8oe2ZpbGU6dCYmdC5zb3VyY2UsbGluZTpuJiZuLmxpbmUsY29sOm4mJm4uY29sdW1uLHBvczpyP3JbMF06ZS5zdGFydCxlbmRsaW5lOm4mJm4ubGluZSxlbmRjb2w6biYmbi5jb2x1bW4sZW5kcG9zOnI/clswXTplLnN0YXJ0LHJhdzppKGUpfSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmxvYyxuPXQmJnQuZW5kLHI9ZS5yYW5nZTtyZXR1cm4gbmV3IE8oe2ZpbGU6dCYmdC5zb3VyY2UsbGluZTpuJiZuLmxpbmUsY29sOm4mJm4uY29sdW1uLHBvczpyP3JbMV06ZS5lbmQsZW5kbGluZTpuJiZuLmxpbmUsZW5kY29sOm4mJm4uY29sdW1uLGVuZHBvczpyP3JbMV06ZS5lbmQscmF3OmkoZSl9KX1mdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz0iZnVuY3Rpb24gRnJvbV9Nb3pfIitlKyIoTSl7XG4iO28rPSJyZXR1cm4gbmV3IFUyLiIrdC5uYW1lKyIoe1xuc3RhcnQ6IG15X3N0YXJ0X3Rva2VuKE0pLFxuZW5kOiBteV9lbmRfdG9rZW4oTSkiO3ZhciBhPSJmdW5jdGlvbiBUb19Nb3pfIitlKyIoTSl7XG4iO2ErPSJyZXR1cm4ge1xudHlwZTogIitKU09OLnN0cmluZ2lmeShlKSxuJiZuLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0vKFthLXowLTkkX10rKSg9fEB8PnwlKShbYS16MC05JF9dKykvaS5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdW5kZXJzdGFuZCBwcm9wZXJ0eSBtYXA6ICIrZSk7dmFyIG49dFsxXSxyPXRbMl0saT10WzNdO3N3aXRjaChvKz0iLFxuIitpKyI6ICIsYSs9IixcbiIrbisiOiAiLHIpe2Nhc2UiQCI6bys9Ik0uIituKyIubWFwKGZyb21fbW96KSIsYSs9Ik0uIitpKyIubWFwKHRvX21veikiO2JyZWFrO2Nhc2UiPiI6bys9ImZyb21fbW96KE0uIituKyIpIixhKz0idG9fbW96KE0uIitpKyIpIjticmVhaztjYXNlIj0iOm8rPSJNLiIrbixhKz0iTS4iK2k7YnJlYWs7Y2FzZSIlIjpvKz0iZnJvbV9tb3ooTS4iK24rIikuYm9keSIsYSs9InRvX21vel9ibG9jayhNKSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHVuZGVyc3RhbmQgb3BlcmF0b3IgaW4gcHJvcG1hcDogIitlKX19KSxvKz0iXG59KVxufSIsYSs9IlxufVxufSIsbz1uZXcgRnVuY3Rpb24oIlUyIiwibXlfc3RhcnRfdG9rZW4iLCJteV9lbmRfdG9rZW4iLCJmcm9tX21veiIsInJldHVybigiK28rIikiKShkLHMsdSxsKSxhPW5ldyBGdW5jdGlvbigidG9fbW96IiwidG9fbW96X2Jsb2NrIiwidG9fbW96X3Njb3BlIiwicmV0dXJuKCIrYSsiKSIpKGYscCxoKSxyW2VdPW8sYyh0LGEpfXIuVXBkYXRlRXhwcmVzc2lvbj1yLlVuYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KCgicHJlZml4ImluIGU/ZS5wcmVmaXg6IlVuYXJ5RXhwcmVzc2lvbiI9PWUudHlwZSk/WGU6ZXQpKHtzdGFydDpzKGUpLGVuZDp1KGUpLG9wZXJhdG9yOmUub3BlcmF0b3IsZXhwcmVzc2lvbjpsKGUuYXJndW1lbnQpfSl9LGUoIkVtcHR5U3RhdGVtZW50IixnZSksZSgiQmxvY2tTdGF0ZW1lbnQiLG1lLCJib2R5QGJvZHkiKSxlKCJJZlN0YXRlbWVudCIsVWUsInRlc3Q+Y29uZGl0aW9uLCBjb25zZXF1ZW50PmJvZHksIGFsdGVybmF0ZT5hbHRlcm5hdGl2ZSIpLGUoIkxhYmVsZWRTdGF0ZW1lbnQiLHZlLCJsYWJlbD5sYWJlbCwgYm9keT5ib2R5IiksZSgiQnJlYWtTdGF0ZW1lbnQiLEZlLCJsYWJlbD5sYWJlbCIpLGUoIkNvbnRpbnVlU3RhdGVtZW50IixxZSwibGFiZWw+bGFiZWwiKSxlKCJXaXRoU3RhdGVtZW50Iix4ZSwib2JqZWN0PmV4cHJlc3Npb24sIGJvZHk+Ym9keSIpLGUoIlN3aXRjaFN0YXRlbWVudCIsTWUsImRpc2NyaW1pbmFudD5leHByZXNzaW9uLCBjYXNlc0Bib2R5IiksZSgiUmV0dXJuU3RhdGVtZW50IixSZSwiYXJndW1lbnQ+dmFsdWUiKSxlKCJUaHJvd1N0YXRlbWVudCIsSywiYXJndW1lbnQ+dmFsdWUiKSxlKCJXaGlsZVN0YXRlbWVudCIsd2UsInRlc3Q+Y29uZGl0aW9uLCBib2R5PmJvZHkiKSxlKCJEb1doaWxlU3RhdGVtZW50IixfZSwidGVzdD5jb25kaXRpb24sIGJvZHk+Ym9keSIpLGUoIkZvclN0YXRlbWVudCIsRWUsImluaXQ+aW5pdCwgdGVzdD5jb25kaXRpb24sIHVwZGF0ZT5zdGVwLCBib2R5PmJvZHkiKSxlKCJGb3JJblN0YXRlbWVudCIsQWUsImxlZnQ+aW5pdCwgcmlnaHQ+b2JqZWN0LCBib2R5PmJvZHkiKSxlKCJEZWJ1Z2dlclN0YXRlbWVudCIsZmUpLGUoIlZhcmlhYmxlRGVjbGFyYXRvciIsJGUsImlkPm5hbWUsIGluaXQ+dmFsdWUiKSxlKCJDYXRjaENsYXVzZSIsemUsInBhcmFtPmFyZ25hbWUsIGJvZHklYm9keSIpLGUoIlRoaXNFeHByZXNzaW9uIixndCksZSgiQmluYXJ5RXhwcmVzc2lvbiIsdHQsIm9wZXJhdG9yPW9wZXJhdG9yLCBsZWZ0PmxlZnQsIHJpZ2h0PnJpZ2h0IiksZSgiTG9naWNhbEV4cHJlc3Npb24iLHR0LCJvcGVyYXRvcj1vcGVyYXRvciwgbGVmdD5sZWZ0LCByaWdodD5yaWdodCIpLGUoIkFzc2lnbm1lbnRFeHByZXNzaW9uIixydCwib3BlcmF0b3I9b3BlcmF0b3IsIGxlZnQ+bGVmdCwgcmlnaHQ+cmlnaHQiKSxlKCJDb25kaXRpb25hbEV4cHJlc3Npb24iLG50LCJ0ZXN0PmNvbmRpdGlvbiwgY29uc2VxdWVudD5jb25zZXF1ZW50LCBhbHRlcm5hdGU+YWx0ZXJuYXRpdmUiKSxlKCJOZXdFeHByZXNzaW9uIixHZSwiY2FsbGVlPmV4cHJlc3Npb24sIGFyZ3VtZW50c0BhcmdzIiksZSgiQ2FsbEV4cHJlc3Npb24iLEtlLCJjYWxsZWU+ZXhwcmVzc2lvbiwgYXJndW1lbnRzQGFyZ3MiKSxjKENlLGZ1bmN0aW9uKGUpe3JldHVybiBoKCJQcm9ncmFtIixlKX0pLGMoVGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkZ1bmN0aW9uRGVjbGFyYXRpb24iLGlkOmYoZS5uYW1lKSxwYXJhbXM6ZS5hcmduYW1lcy5tYXAoZiksYm9keTpoKCJCbG9ja1N0YXRlbWVudCIsZSl9fSksYyhEZSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiRnVuY3Rpb25FeHByZXNzaW9uIixpZDpmKGUubmFtZSkscGFyYW1zOmUuYXJnbmFtZXMubWFwKGYpLGJvZHk6aCgiQmxvY2tTdGF0ZW1lbnQiLGUpfX0pLGMocGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLGV4cHJlc3Npb246e3R5cGU6IkxpdGVyYWwiLHZhbHVlOmUudmFsdWV9fX0pLGMoaGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLGV4cHJlc3Npb246ZihlLmJvZHkpfX0pLGMoTSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiU3dpdGNoQ2FzZSIsdGVzdDpmKGUuZXhwcmVzc2lvbiksY29uc2VxdWVudDplLmJvZHkubWFwKGYpfX0pLGMoSWUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlRyeVN0YXRlbWVudCIsYmxvY2s6cChlKSxoYW5kbGVyOmYoZS5iY2F0Y2gpLGd1YXJkZWRIYW5kbGVyczpbXSxmaW5hbGl6ZXI6ZihlLmJmaW5hbGx5KX19KSxjKHplLGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJDYXRjaENsYXVzZSIscGFyYW06ZihlLmFyZ25hbWUpLGd1YXJkOm51bGwsYm9keTpwKGUpfX0pLGMoVmUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlZhcmlhYmxlRGVjbGFyYXRpb24iLGtpbmQ6InZhciIsZGVjbGFyYXRpb25zOmUuZGVmaW5pdGlvbnMubWFwKGYpfX0pLGMoWWUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlNlcXVlbmNlRXhwcmVzc2lvbiIsZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucy5tYXAoZil9fSksYyhXZSxmdW5jdGlvbihlKXt2YXIgdD1lIGluc3RhbmNlb2YgWmU7cmV0dXJue3R5cGU6Ik1lbWJlckV4cHJlc3Npb24iLG9iamVjdDpmKGUuZXhwcmVzc2lvbiksY29tcHV0ZWQ6dCxwcm9wZXJ0eTp0P2YoZS5wcm9wZXJ0eSk6e3R5cGU6IklkZW50aWZpZXIiLG5hbWU6ZS5wcm9wZXJ0eX19fSksYyhKZSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiKysiPT1lLm9wZXJhdG9yfHwiLS0iPT1lLm9wZXJhdG9yPyJVcGRhdGVFeHByZXNzaW9uIjoiVW5hcnlFeHByZXNzaW9uIixvcGVyYXRvcjplLm9wZXJhdG9yLHByZWZpeDplIGluc3RhbmNlb2YgWGUsYXJndW1lbnQ6ZihlLmV4cHJlc3Npb24pfX0pLGModHQsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IiYmIj09ZS5vcGVyYXRvcnx8Inx8Ij09ZS5vcGVyYXRvcj8iTG9naWNhbEV4cHJlc3Npb24iOiJCaW5hcnlFeHByZXNzaW9uIixsZWZ0OmYoZS5sZWZ0KSxvcGVyYXRvcjplLm9wZXJhdG9yLHJpZ2h0OmYoZS5yaWdodCl9fSksYyhpdCxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiQXJyYXlFeHByZXNzaW9uIixlbGVtZW50czplLmVsZW1lbnRzLm1hcChmKX19KSxjKG90LGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJPYmplY3RFeHByZXNzaW9uIixwcm9wZXJ0aWVzOmUucHJvcGVydGllcy5tYXAoZil9fSksYyhhdCxmdW5jdGlvbihlKXt2YXIgdCxuPXt0eXBlOiJMaXRlcmFsIix2YWx1ZTplLmtleSBpbnN0YW5jZW9mIFE/ZS5rZXkubmFtZTplLmtleX07cmV0dXJuIGUgaW5zdGFuY2VvZiBzdD90PSJpbml0IjplIGluc3RhbmNlb2YgVz90PSJnZXQiOmUgaW5zdGFuY2VvZiBZJiYodD0ic2V0Iikse3R5cGU6IlByb3BlcnR5IixraW5kOnQsa2V5Om4sdmFsdWU6ZihlLnZhbHVlKX19KSxjKHV0LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3JldHVybnt0eXBlOiJJZGVudGlmaWVyIixuYW1lOnQ/dC5tYW5nbGVkX25hbWV8fHQubmFtZTplLm5hbWV9fSksYyhfdCxmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL1tnaW11eV0qJC8pWzBdLG49Ii8iK2UudmFsdWUucmF3X3NvdXJjZSsiLyIrdDtyZXR1cm57dHlwZToiTGl0ZXJhbCIsdmFsdWU6bixyYXc6bixyZWdleDp7cGF0dGVybjplLnZhbHVlLnJhd19zb3VyY2UsZmxhZ3M6dH19fSksYyh2dCxmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8MHx8MD09PXQmJjEvdDwwKT97dHlwZToiVW5hcnlFeHByZXNzaW9uIixvcGVyYXRvcjoiLSIscHJlZml4OiEwLGFyZ3VtZW50Ont0eXBlOiJMaXRlcmFsIix2YWx1ZTotdCxyYXc6ZS5zdGFydC5yYXd9fTp7dHlwZToiTGl0ZXJhbCIsdmFsdWU6dCxyYXc6ZS5zdGFydC5yYXd9fSksYyhhLGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJJZGVudGlmaWVyIixuYW1lOlN0cmluZyhlLnZhbHVlKX19KSxDdC5ERUZNRVRIT0QoInRvX21vemlsbGFfYXN0Iix2dC5wcm90b3R5cGUudG9fbW96aWxsYV9hc3QpLHd0LkRFRk1FVEhPRCgidG9fbW96aWxsYV9hc3QiLHZ0LnByb3RvdHlwZS50b19tb3ppbGxhX2FzdCkseHQuREVGTUVUSE9EKCJ0b19tb3ppbGxhX2FzdCIsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLGRlLkRFRk1FVEhPRCgidG9fbW96aWxsYV9hc3QiLG1lLnByb3RvdHlwZS50b19tb3ppbGxhX2FzdCksT2UuREVGTUVUSE9EKCJ0b19tb3ppbGxhX2FzdCIsRGUucHJvdG90eXBlLnRvX21vemlsbGFfYXN0KTt2YXIgbz1udWxsO2Z1bmN0aW9uIGwoZSl7by5wdXNoKGUpO3ZhciB0PW51bGwhPWU/cltlLnR5cGVdKGUpOm51bGw7cmV0dXJuIG8ucG9wKCksdH1mdW5jdGlvbiBjKGUsdCl7ZS5ERUZNRVRIT0QoInRvX21vemlsbGFfYXN0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zdGFydCxpPWUuZW5kO3JldHVybiBudWxsIT1yLnBvcyYmbnVsbCE9aS5lbmRwb3MmJih0LnJhbmdlPVtyLnBvcyxpLmVuZHBvc10pLHIubGluZSYmKHQubG9jPXtzdGFydDp7bGluZTpyLmxpbmUsY29sdW1uOnIuY29sfSxlbmQ6aS5lbmRsaW5lP3tsaW5lOmkuZW5kbGluZSxjb2x1bW46aS5lbmRjb2x9Om51bGx9LHIuZmlsZSYmKHQubG9jLnNvdXJjZT1yLmZpbGUpKSx0fSh0aGlzLHQodGhpcykpfSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gbnVsbCE9ZT9lLnRvX21vemlsbGFfYXN0KCk6bnVsbH1mdW5jdGlvbiBwKGUpe3JldHVybnt0eXBlOiJCbG9ja1N0YXRlbWVudCIsYm9keTplLmJvZHkubWFwKGYpfX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49dC5ib2R5Lm1hcChmKTtyZXR1cm4gdC5ib2R5WzBdaW5zdGFuY2VvZiBoZSYmdC5ib2R5WzBdLmJvZHkgaW5zdGFuY2VvZiBidCYmbi51bnNoaWZ0KGYobmV3IGdlKHQuYm9keVswXSkpKSx7dHlwZTplLGJvZHk6bn19bGUuZnJvbV9tb3ppbGxhX2FzdD1mdW5jdGlvbihlKXt2YXIgdD1vO289W107dmFyIG49bChlKTtyZXR1cm4gbz10LG4ud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEope2Zvcih2YXIgdCxuPTA7KHQ9dGhpcy5wYXJlbnQobikpJiYhKHQgaW5zdGFuY2VvZiBrZSk7bisrKWlmKHQgaW5zdGFuY2VvZiB2ZSYmdC5sYWJlbC5uYW1lPT1lLm5hbWUpe2UudGhlZGVmPXQubGFiZWw7YnJlYWt9aWYoIWUudGhlZGVmKXt2YXIgcj1lLnN0YXJ0O1B0KCJVbmRlZmluZWQgbGFiZWwgIitlLm5hbWUsci5maWxlLHIubGluZSxyLmNvbCxyLnBvcyl9fX0pKSxufX0oKTt2YXIgdz0idW5kZWZpbmVkIj09dHlwZW9mIGF0b2I/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1KGUsImJhc2U2NCIpLnRvU3RyaW5nKCl9OmF0b2IsRT0idW5kZWZpbmVkIj09dHlwZW9mIGJ0b2E/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1KGUpLnRvU3RyaW5nKCJiYXNlNjQiKX06YnRvYTtmdW5jdGlvbiBBKHQpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgaW5wdXQgc291cmNlIG1hcDogIit0KX19ZnVuY3Rpb24geCh0LG4sZSl7blt0XSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV0mJigib2JqZWN0IiE9dHlwZW9mIG5bZV0mJihuW2VdPXt9KSx0IGluIG5bZV18fChuW2VdW3RdPW5bdF0pKX0pfWZ1bmN0aW9uIGsoZSl7ZSYmKCJwcm9wcyJpbiBlP2UucHJvcHMgaW5zdGFuY2VvZiBMfHwoZS5wcm9wcz1MLmZyb21PYmplY3QoZS5wcm9wcykpOmUucHJvcHM9bmV3IEwpfWZ1bmN0aW9uIEMoZSl7cmV0dXJue3Byb3BzOmUucHJvcHMudG9PYmplY3QoKX19ZC5EaWN0aW9uYXJ5PUwsZC5taW5pZnk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz1sZS53YXJuX2Z1bmN0aW9uO3RyeXt2YXIgYSxzPSh0PSQodCx7Y29tcHJlc3M6e30sZW5jbG9zZTohMSxpZTg6ITEsa2VlcF9mbmFtZXM6ITEsbWFuZ2xlOnt9LG5hbWVDYWNoZTpudWxsLG91dHB1dDp7fSxwYXJzZTp7fSxyZW5hbWU6dm9pZCAwLHNvdXJjZU1hcDohMSx0aW1pbmdzOiExLHRvcGxldmVsOiExLHdhcm5pbmdzOiExLHdyYXA6ITF9LCEwKSkudGltaW5ncyYme3N0YXJ0OkRhdGUubm93KCl9O3ZvaWQgMD09PXQucmVuYW1lJiYodC5yZW5hbWU9dC5jb21wcmVzcyYmdC5tYW5nbGUpLHgoImllOCIsdCxbImNvbXByZXNzIiwibWFuZ2xlIiwib3V0cHV0Il0pLHgoImtlZXBfZm5hbWVzIix0LFsiY29tcHJlc3MiLCJtYW5nbGUiXSkseCgidG9wbGV2ZWwiLHQsWyJjb21wcmVzcyIsIm1hbmdsZSJdKSx4KCJ3YXJuaW5ncyIsdCxbImNvbXByZXNzIl0pLHQubWFuZ2xlJiYodC5tYW5nbGU9JCh0Lm1hbmdsZSx7Y2FjaGU6dC5uYW1lQ2FjaGUmJih0Lm5hbWVDYWNoZS52YXJzfHx7fSksZXZhbDohMSxpZTg6ITEsa2VlcF9mbmFtZXM6ITEscHJvcGVydGllczohMSxyZXNlcnZlZDpbXSx0b3BsZXZlbDohMX0sITApLHQubWFuZ2xlLnByb3BlcnRpZXMmJigib2JqZWN0IiE9dHlwZW9mIHQubWFuZ2xlLnByb3BlcnRpZXMmJih0Lm1hbmdsZS5wcm9wZXJ0aWVzPXt9KSx0Lm1hbmdsZS5wcm9wZXJ0aWVzLmtlZXBfcXVvdGVkJiYoYT10Lm1hbmdsZS5wcm9wZXJ0aWVzLnJlc2VydmVkLEFycmF5LmlzQXJyYXkoYSl8fChhPVtdKSx0Lm1hbmdsZS5wcm9wZXJ0aWVzLnJlc2VydmVkPWEpLCF0Lm5hbWVDYWNoZXx8ImNhY2hlImluIHQubWFuZ2xlLnByb3BlcnRpZXN8fCh0Lm1hbmdsZS5wcm9wZXJ0aWVzLmNhY2hlPXQubmFtZUNhY2hlLnByb3BzfHx7fSkpLGsodC5tYW5nbGUuY2FjaGUpLGsodC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSkpLHQuc291cmNlTWFwJiYodC5zb3VyY2VNYXA9JCh0LnNvdXJjZU1hcCx7Y29udGVudDpudWxsLGZpbGVuYW1lOm51bGwsaW5jbHVkZVNvdXJjZXM6ITEscm9vdDpudWxsLHVybDpudWxsfSwhMCkpO3ZhciB1LGwsYz1bXTtpZih0Lndhcm5pbmdzJiYhbGUud2Fybl9mdW5jdGlvbiYmKGxlLndhcm5fZnVuY3Rpb249ZnVuY3Rpb24oZSl7Yy5wdXNoKGUpfSkscyYmKHMucGFyc2U9RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIENlKWw9ZTtlbHNleyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSx0LnBhcnNlPXQucGFyc2V8fHt9LHQucGFyc2UudG9wbGV2ZWw9bnVsbDt2YXIgZj10LnNvdXJjZU1hcCYmdC5zb3VyY2VNYXAuY29udGVudDtmb3IodmFyIHAgaW4ic3RyaW5nIj09dHlwZW9mIGYmJiJpbmxpbmUiIT1mJiYoZj1BKGYpKSx1PWYmJk9iamVjdC5jcmVhdGUobnVsbCksZSlpZih1ZShlLHApJiYodC5wYXJzZS5maWxlbmFtZT1wLHQucGFyc2UudG9wbGV2ZWw9WXQoZVtwXSx0LnBhcnNlKSx1KSlpZigiaW5saW5lIj09Zil7dmFyIGg9KHI9ZVtuPXBdLChpPS9cblwvXC8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblwvanNvbig7Lio/KT87YmFzZTY0LCguKikvLmV4ZWMocikpP3coaVsyXSk6KGxlLndhcm4oImlubGluZSBzb3VyY2UgbWFwIG5vdCBmb3VuZDogIituKSxudWxsKSk7aCYmKHVbcF09QShoKSl9ZWxzZSB1W3BdPWY7bD10LnBhcnNlLnRvcGxldmVsfWEmJmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtnKHQsZSl9ZS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2Ygc3QmJmUucXVvdGU/bihlLmtleSk6ZSBpbnN0YW5jZW9mIFplJiZ5KGUucHJvcGVydHksbil9KSl9KGwsYSksdC53cmFwJiYobD1sLndyYXBfY29tbW9uanModC53cmFwKSksdC5lbmNsb3NlJiYobD1sLndyYXBfZW5jbG9zZSh0LmVuY2xvc2UpKSxzJiYocy5yZW5hbWU9RGF0ZS5ub3coKSksdC5yZW5hbWUmJihsLmZpZ3VyZV9vdXRfc2NvcGUodC5tYW5nbGUpLGwuZXhwYW5kX25hbWVzKHQubWFuZ2xlKSkscyYmKHMuY29tcHJlc3M9RGF0ZS5ub3coKSksdC5jb21wcmVzcyYmKGw9bmV3IFh0KHQuY29tcHJlc3MpLmNvbXByZXNzKGwpKSxzJiYocy5zY29wZT1EYXRlLm5vdygpKSx0Lm1hbmdsZSYmbC5maWd1cmVfb3V0X3Njb3BlKHQubWFuZ2xlKSxzJiYocy5tYW5nbGU9RGF0ZS5ub3coKSksdC5tYW5nbGUmJihsLmNvbXB1dGVfY2hhcl9mcmVxdWVuY3kodC5tYW5nbGUpLGwubWFuZ2xlX25hbWVzKHQubWFuZ2xlKSkscyYmKHMucHJvcGVydGllcz1EYXRlLm5vdygpKSx0Lm1hbmdsZSYmdC5tYW5nbGUucHJvcGVydGllcyYmKGw9XyhsLHQubWFuZ2xlLnByb3BlcnRpZXMpKSxzJiYocy5vdXRwdXQ9RGF0ZS5ub3coKSk7dmFyIGQ9e307aWYodC5vdXRwdXQuYXN0JiYoZC5hc3Q9bCksIXVlKHQub3V0cHV0LCJjb2RlIil8fHQub3V0cHV0LmNvZGUpe2lmKHQuc291cmNlTWFwKWlmKHQub3V0cHV0LnNvdXJjZV9tYXA9ZnVuY3Rpb24odSl7dT0kKHUse2ZpbGU6bnVsbCxyb290Om51bGwsb3JpZzpudWxsLG9yaWdfbGluZV9kaWZmOjAsZGVzdF9saW5lX2RpZmY6MH0sITApO3ZhciBsPW5ldyBNT1pfU291cmNlTWFwLlNvdXJjZU1hcEdlbmVyYXRvcih7ZmlsZTp1LmZpbGUsc291cmNlUm9vdDp1LnJvb3R9KSxjPXUub3JpZyYmT2JqZWN0LmNyZWF0ZShudWxsKTtpZihjKWZvcih2YXIgZSBpbiB1Lm9yaWcpe3ZhciBuPW5ldyBNT1pfU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHUub3JpZ1tlXSk7QXJyYXkuaXNBcnJheSh1Lm9yaWdbZV0uc291cmNlcykmJm4uX3NvdXJjZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5zb3VyY2VDb250ZW50Rm9yKGUsITApO3QmJmwuc2V0U291cmNlQ29udGVudChlLHQpfSksY1tlXT1ufXJldHVybnthZGQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPWMmJmNbZV07aWYoYSl7dmFyIHM9YS5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOnIsY29sdW1uOml9KTtpZihudWxsPT09cy5zb3VyY2UpcmV0dXJuO2U9cy5zb3VyY2Uscj1zLmxpbmUsaT1zLmNvbHVtbixvPXMubmFtZXx8b31sLmFkZE1hcHBpbmcoe25hbWU6byxzb3VyY2U6ZSxnZW5lcmF0ZWQ6e2xpbmU6dCt1LmRlc3RfbGluZV9kaWZmLGNvbHVtbjpufSxvcmlnaW5hbDp7bGluZTpyK3Uub3JpZ19saW5lX2RpZmYsY29sdW1uOml9fSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBsfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeShsLnRvSlNPTigpKX19fSh7ZmlsZTp0LnNvdXJjZU1hcC5maWxlbmFtZSxvcmlnOnUscm9vdDp0LnNvdXJjZU1hcC5yb290fSksdC5zb3VyY2VNYXAuaW5jbHVkZVNvdXJjZXMpe2lmKGUgaW5zdGFuY2VvZiBDZSl0aHJvdyBuZXcgRXJyb3IoIm9yaWdpbmFsIHNvdXJjZSBjb250ZW50IHVuYXZhaWxhYmxlIik7Zm9yKHZhciBwIGluIGUpdWUoZSxwKSYmdC5vdXRwdXQuc291cmNlX21hcC5nZXQoKS5zZXRTb3VyY2VDb250ZW50KHAsZVtwXSl9ZWxzZSB0Lm91dHB1dC5zb3VyY2VfbWFwLmdldCgpLl9zb3VyY2VzQ29udGVudHM9bnVsbDtkZWxldGUgdC5vdXRwdXQuYXN0LGRlbGV0ZSB0Lm91dHB1dC5jb2RlO3ZhciBtPUp0KHQub3V0cHV0KTtsLnByaW50KG0pLGQuY29kZT1tLmdldCgpLHQuc291cmNlTWFwJiYoZC5tYXA9dC5vdXRwdXQuc291cmNlX21hcC50b1N0cmluZygpLCJpbmxpbmUiPT10LnNvdXJjZU1hcC51cmw/ZC5jb2RlKz0iXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIitFKGQubWFwKTp0LnNvdXJjZU1hcC51cmwmJihkLmNvZGUrPSJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPSIrdC5zb3VyY2VNYXAudXJsKSl9cmV0dXJuIHQubmFtZUNhY2hlJiZ0Lm1hbmdsZSYmKHQubWFuZ2xlLmNhY2hlJiYodC5uYW1lQ2FjaGUudmFycz1DKHQubWFuZ2xlLmNhY2hlKSksdC5tYW5nbGUucHJvcGVydGllcyYmdC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSYmKHQubmFtZUNhY2hlLnByb3BzPUModC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSkpKSxzJiYocy5lbmQ9RGF0ZS5ub3coKSxkLnRpbWluZ3M9e3BhcnNlOi4wMDEqKHMucmVuYW1lLXMucGFyc2UpLHJlbmFtZTouMDAxKihzLmNvbXByZXNzLXMucmVuYW1lKSxjb21wcmVzczouMDAxKihzLnNjb3BlLXMuY29tcHJlc3MpLHNjb3BlOi4wMDEqKHMubWFuZ2xlLXMuc2NvcGUpLG1hbmdsZTouMDAxKihzLnByb3BlcnRpZXMtcy5tYW5nbGUpLHByb3BlcnRpZXM6LjAwMSoocy5vdXRwdXQtcy5wcm9wZXJ0aWVzKSxvdXRwdXQ6LjAwMSoocy5lbmQtcy5vdXRwdXQpLHRvdGFsOi4wMDEqKHMuZW5kLXMuc3RhcnQpfSksYy5sZW5ndGgmJihkLndhcm5pbmdzPWMpLGR9Y2F0Y2goZSl7cmV0dXJue2Vycm9yOmV9fWZpbmFsbHl7bGUud2Fybl9mdW5jdGlvbj1vfX0sZC5wYXJzZT1ZdCxkLnB1c2hfdW5pcT1nLGQuVHJlZVRyYW5zZm9ybWVyPVd0LGQuVHJlZVdhbGtlcj1EdH0odm9pZCAwPT09bj9uPXt9Om4pfSkuY2FsbCh0aGlzLGUoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6NH1dfSx7fSxbImh0bWwtbWluaWZpZXIiXSk7CgpsZXQgaHRtbG1pbmlmaWVyID0gcmVxdWlyZSgnaHRtbC1taW5pZmllcicpLm1pbmlmeQoKd2luZG93WydodG1sLW1pbmlmaWVyJ109aHRtbG1pbmlmaWVyCgo="),Z.document.getElementsByTagName("head")[0].appendChild(l),Z["html-minifier"]}();var s=Array.isArray,S="object"==typeof d&&d&&d.Object===Object&&d,J="object"==typeof self&&self&&self.Object===Object&&self,K=S||J||Function("return this")(),R=K.Symbol,a=R,H=Object.prototype,o=H.hasOwnProperty,F=H.toString,n=a?a.toStringTag:void 0;var N=function(Z){var l=o.call(Z,n),b=Z[n];try{Z[n]=void 0;var i=!0}catch(Z){}var m=F.call(Z);return i&&(l?Z[n]=b:delete Z[n]),m},U=Object.prototype.toString;var C=N,k=function(Z){return U.call(Z)},T=R?R.toStringTag:void 0;var t=function(Z){return null==Z?void 0===Z?"[object Undefined]":"[object Null]":T&&T in Object(Z)?C(Z):k(Z)};var v=t,z=function(Z){return null!=Z&&"object"==typeof Z};var j=function(Z){return"symbol"==typeof Z||z(Z)&&"[object Symbol]"==v(Z)},w=s,B=j,M=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Q=/^\w*$/;var g=function(Z,l){if(w(Z))return!1;var b=typeof Z;return!("number"!=b&&"symbol"!=b&&"boolean"!=b&&null!=Z&&!B(Z))||(Q.test(Z)||!M.test(Z)||null!=l&&Z in Object(l))};var P=function(Z){var l=typeof Z;return null!=Z&&("object"==l||"function"==l)},O=t,E=P;var e,f=function(Z){if(!E(Z))return!1;var l=O(Z);return"[object Function]"==l||"[object GeneratorFunction]"==l||"[object AsyncFunction]"==l||"[object Proxy]"==l},D=K["__core-js_shared__"],r=(e=/[^.]+$/.exec(D&&D.keys&&D.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"";var A=function(Z){return!!r&&r in Z},q=Function.prototype.toString;var _=f,$=A,ZZ=P,lZ=function(Z){if(null!=Z){try{return q.call(Z)}catch(Z){}try{return Z+""}catch(Z){}}return""},bZ=/^\[object .+?Constructor\]$/,iZ=Function.prototype,mZ=Object.prototype,dZ=iZ.toString,cZ=mZ.hasOwnProperty,GZ=RegExp("^"+dZ.call(cZ).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var XZ=function(Z){return!(!ZZ(Z)||$(Z))&&(_(Z)?GZ:bZ).test(lZ(Z))},WZ=function(Z,l){return null==Z?void 0:Z[l]};var IZ=function(Z,l){var b=WZ(Z,l);return XZ(b)?b:void 0},VZ=IZ(Object,"create"),uZ=VZ;var LZ=function(){this.__data__=uZ?uZ(null):{},this.size=0};var YZ=function(Z){var l=this.has(Z)&&delete this.__data__[Z];return this.size-=l?1:0,l},pZ=VZ,xZ=Object.prototype.hasOwnProperty;var yZ=function(Z){var l=this.__data__;if(pZ){var b=l[Z];return"__lodash_hash_undefined__"===b?void 0:b}return xZ.call(l,Z)?l[Z]:void 0},hZ=VZ,sZ=Object.prototype.hasOwnProperty;var SZ=VZ;var JZ=LZ,KZ=YZ,RZ=yZ,aZ=function(Z){var l=this.__data__;return hZ?void 0!==l[Z]:sZ.call(l,Z)},HZ=function(Z,l){var b=this.__data__;return this.size+=this.has(Z)?0:1,b[Z]=SZ&&void 0===l?"__lodash_hash_undefined__":l,this};function oZ(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}oZ.prototype.clear=JZ,oZ.prototype.delete=KZ,oZ.prototype.get=RZ,oZ.prototype.has=aZ,oZ.prototype.set=HZ;var FZ=oZ;var nZ=function(){this.__data__=[],this.size=0};var NZ=function(Z,l){return Z===l||Z!=Z&&l!=l};var UZ=function(Z,l){for(var b=Z.length;b--;)if(NZ(Z[b][0],l))return b;return-1},CZ=UZ,kZ=Array.prototype.splice;var TZ=UZ;var tZ=UZ;var vZ=UZ;var zZ=nZ,jZ=function(Z){var l=this.__data__,b=CZ(l,Z);return!(b<0)&&(b==l.length-1?l.pop():kZ.call(l,b,1),--this.size,!0)},wZ=function(Z){var l=this.__data__,b=TZ(l,Z);return b<0?void 0:l[b][1]},BZ=function(Z){return tZ(this.__data__,Z)>-1},MZ=function(Z,l){var b=this.__data__,i=vZ(b,Z);return i<0?(++this.size,b.push([Z,l])):b[i][1]=l,this};function QZ(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}QZ.prototype.clear=zZ,QZ.prototype.delete=jZ,QZ.prototype.get=wZ,QZ.prototype.has=BZ,QZ.prototype.set=MZ;var gZ=QZ,PZ=IZ(K,"Map"),OZ=FZ,EZ=gZ,eZ=PZ;var fZ=function(Z){var l=typeof Z;return"string"==l||"number"==l||"symbol"==l||"boolean"==l?"__proto__"!==Z:null===Z};var DZ=function(Z,l){var b=Z.__data__;return fZ(l)?b["string"==typeof l?"string":"hash"]:b.map},rZ=DZ;var AZ=DZ;var qZ=DZ;var _Z=DZ;var $Z=function(){this.size=0,this.__data__={hash:new OZ,map:new(eZ||EZ),string:new OZ}},Zl=function(Z){var l=rZ(this,Z).delete(Z);return this.size-=l?1:0,l},ll=function(Z){return AZ(this,Z).get(Z)},bl=function(Z){return qZ(this,Z).has(Z)},il=function(Z,l){var b=_Z(this,Z),i=b.size;return b.set(Z,l),this.size+=b.size==i?0:1,this};function ml(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}ml.prototype.clear=$Z,ml.prototype.delete=Zl,ml.prototype.get=ll,ml.prototype.has=bl,ml.prototype.set=il;var dl=ml;function cl(Z,l){if("function"!=typeof Z||null!=l&&"function"!=typeof l)throw new TypeError("Expected a function");var b=function(){var i=arguments,m=l?l.apply(this,i):i[0],d=b.cache;if(d.has(m))return d.get(m);var c=Z.apply(this,i);return b.cache=d.set(m,c)||d,c};return b.cache=new(cl.Cache||dl),b}cl.Cache=dl;var Gl=cl;var Xl=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Wl=/\\(\\)?/g,Il=function(Z){var l=Gl(Z,(function(Z){return 500===b.size&&b.clear(),Z})),b=l.cache;return l}((function(Z){var l=[];return 46===Z.charCodeAt(0)&&l.push(""),Z.replace(Xl,(function(Z,b,i,m){l.push(i?m.replace(Wl,"$1"):b||Z)})),l}));var Vl=function(Z,l){for(var b=-1,i=null==Z?0:Z.length,m=Array(i);++b<i;)m[b]=l(Z[b],b,Z);return m},ul=s,Ll=j,Yl=R?R.prototype:void 0,pl=Yl?Yl.toString:void 0;var xl=function Z(l){if("string"==typeof l)return l;if(ul(l))return Vl(l,Z)+"";if(Ll(l))return pl?pl.call(l):"";var b=l+"";return"0"==b&&1/l==-Infinity?"-0":b},yl=xl;var hl=s,sl=g,Sl=Il,Jl=function(Z){return null==Z?"":yl(Z)};var Kl=j;var Rl=function(Z,l){return hl(Z)?Z:sl(Z,l)?[Z]:Sl(Jl(Z))},al=function(Z){if("string"==typeof Z||Kl(Z))return Z;var l=Z+"";return"0"==l&&1/Z==-Infinity?"-0":l};var Hl=function(Z,l){for(var b=0,i=(l=Rl(l,Z)).length;null!=Z&&b<i;)Z=Z[al(l[b++])];return b&&b==i?Z:void 0};let ol=c((function(Z,l,b){var i=null==Z?void 0:Hl(Z,l);return void 0===i?b:i}))(Z,"minify",null),Fl=null;Fl=m()?h:ol;var nl=Fl;function Nl(Z,l){var b=Object.keys(Z);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(Z);l&&(i=i.filter((function(l){return Object.getOwnPropertyDescriptor(Z,l).enumerable}))),b.push.apply(b,i)}return b}function Ul(Z){for(var l=1;l<arguments.length;l++){var i=null!=arguments[l]?arguments[l]:{};l%2?Nl(Object(i),!0).forEach((function(l){var m,d,c;m=Z,d=l,c=i[l],(d=b(d))in m?Object.defineProperty(m,d,{value:c,enumerable:!0,configurable:!0,writable:!0}):m[d]=c})):Object.getOwnPropertyDescriptors?Object.defineProperties(Z,Object.getOwnPropertyDescriptors(i)):Nl(Object(i)).forEach((function(l){Object.defineProperty(Z,l,Object.getOwnPropertyDescriptor(i,l))}))}return Z}return function(Z){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!i(Z))return"";let b=Ul(Ul({},{includeAutoGeneratedTags:!0,removeAttributeQuotes:!1,removeComments:!0,removeRedundantAttributes:!0,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,sortClassName:!0,useShortDoctype:!0,collapseWhitespace:!0}),l),m="";try{m=nl(Z,b)}catch(Z){m=Z.toString()}return m}}));
6
+ !function(Z,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l(require("html-minifier")):"function"==typeof define&&define.amd?define(["html-minifier"],l):(Z="undefined"!=typeof globalThis?globalThis:Z||self)["w-data-html-minify"]=l(Z["html-minifier"])}(this,(function(Z){"use strict";function l(Z){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(Z){return typeof Z}:function(Z){return Z&&"function"==typeof Symbol&&Z.constructor===Symbol&&Z!==Symbol.prototype?"symbol":typeof Z},l(Z)}function b(Z){var b=function(Z,b){if("object"!==l(Z)||null===Z)return Z;var i=Z[Symbol.toPrimitive];if(void 0!==i){var m=i.call(Z,b||"default");if("object"!==l(m))return m;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(Z)}(Z,"string");return"symbol"===l(b)?b:String(b)}function i(Z){return!(!function(Z){return"[object String]"===Object.prototype.toString.call(Z)}(Z)||""===Z)}function m(){return"undefined"!=typeof window&&void 0!==window.document}var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function c(Z){return Z&&Z.__esModule&&Object.prototype.hasOwnProperty.call(Z,"default")?Z.default:Z}function G(Z){if(Z.__esModule)return Z;var l=Z.default;if("function"==typeof l){var b=function Z(){if(this instanceof Z){var b=[null];return b.push.apply(b,arguments),new(Function.bind.apply(l,b))}return l.apply(this,arguments)};b.prototype=l.prototype}else b={};return Object.defineProperty(b,"__esModule",{value:!0}),Object.keys(Z).forEach((function(l){var i=Object.getOwnPropertyDescriptor(Z,l);Object.defineProperty(b,l,i.get?i:{enumerable:!0,get:function(){return Z[l]}})})),b}var X={exports:{}};var W,I={exports:{}},V=G(Object.freeze({__proto__:null,default:{}}));function u(){return W||(W=1,function(Z,l){var b;Z.exports=(b=b||function(Z,l){var b;if("undefined"!=typeof window&&window.crypto&&(b=window.crypto),"undefined"!=typeof self&&self.crypto&&(b=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(b=globalThis.crypto),!b&&"undefined"!=typeof window&&window.msCrypto&&(b=window.msCrypto),!b&&void 0!==d&&d.crypto&&(b=d.crypto),!b)try{b=V}catch(Z){}var i=function(){if(b){if("function"==typeof b.getRandomValues)try{return b.getRandomValues(new Uint32Array(1))[0]}catch(Z){}if("function"==typeof b.randomBytes)try{return b.randomBytes(4).readInt32LE()}catch(Z){}}throw new Error("Native crypto module could not be used to get secure random number.")},m=Object.create||function(){function Z(){}return function(l){var b;return Z.prototype=l,b=new Z,Z.prototype=null,b}}(),c={},G=c.lib={},X=G.Base={extend:function(Z){var l=m(this);return Z&&l.mixIn(Z),l.hasOwnProperty("init")&&this.init!==l.init||(l.init=function(){l.$super.init.apply(this,arguments)}),l.init.prototype=l,l.$super=this,l},create:function(){var Z=this.extend();return Z.init.apply(Z,arguments),Z},init:function(){},mixIn:function(Z){for(var l in Z)Z.hasOwnProperty(l)&&(this[l]=Z[l]);Z.hasOwnProperty("toString")&&(this.toString=Z.toString)},clone:function(){return this.init.prototype.extend(this)}},W=G.WordArray=X.extend({init:function(Z,b){Z=this.words=Z||[],this.sigBytes=b!=l?b:4*Z.length},toString:function(Z){return(Z||u).stringify(this)},concat:function(Z){var l=this.words,b=Z.words,i=this.sigBytes,m=Z.sigBytes;if(this.clamp(),i%4)for(var d=0;d<m;d++){var c=b[d>>>2]>>>24-d%4*8&255;l[i+d>>>2]|=c<<24-(i+d)%4*8}else for(var G=0;G<m;G+=4)l[i+G>>>2]=b[G>>>2];return this.sigBytes+=m,this},clamp:function(){var l=this.words,b=this.sigBytes;l[b>>>2]&=4294967295<<32-b%4*8,l.length=Z.ceil(b/4)},clone:function(){var Z=X.clone.call(this);return Z.words=this.words.slice(0),Z},random:function(Z){for(var l=[],b=0;b<Z;b+=4)l.push(i());return new W.init(l,Z)}}),I=c.enc={},u=I.Hex={stringify:function(Z){for(var l=Z.words,b=Z.sigBytes,i=[],m=0;m<b;m++){var d=l[m>>>2]>>>24-m%4*8&255;i.push((d>>>4).toString(16)),i.push((15&d).toString(16))}return i.join("")},parse:function(Z){for(var l=Z.length,b=[],i=0;i<l;i+=2)b[i>>>3]|=parseInt(Z.substr(i,2),16)<<24-i%8*4;return new W.init(b,l/2)}},L=I.Latin1={stringify:function(Z){for(var l=Z.words,b=Z.sigBytes,i=[],m=0;m<b;m++){var d=l[m>>>2]>>>24-m%4*8&255;i.push(String.fromCharCode(d))}return i.join("")},parse:function(Z){for(var l=Z.length,b=[],i=0;i<l;i++)b[i>>>2]|=(255&Z.charCodeAt(i))<<24-i%4*8;return new W.init(b,l)}},Y=I.Utf8={stringify:function(Z){try{return decodeURIComponent(escape(L.stringify(Z)))}catch(Z){throw new Error("Malformed UTF-8 data")}},parse:function(Z){return L.parse(unescape(encodeURIComponent(Z)))}},p=G.BufferedBlockAlgorithm=X.extend({reset:function(){this._data=new W.init,this._nDataBytes=0},_append:function(Z){"string"==typeof Z&&(Z=Y.parse(Z)),this._data.concat(Z),this._nDataBytes+=Z.sigBytes},_process:function(l){var b,i=this._data,m=i.words,d=i.sigBytes,c=this.blockSize,G=d/(4*c),X=(G=l?Z.ceil(G):Z.max((0|G)-this._minBufferSize,0))*c,I=Z.min(4*X,d);if(X){for(var V=0;V<X;V+=c)this._doProcessBlock(m,V);b=m.splice(0,X),i.sigBytes-=I}return new W.init(b,I)},clone:function(){var Z=X.clone.call(this);return Z._data=this._data.clone(),Z},_minBufferSize:0});G.Hasher=p.extend({cfg:X.extend(),init:function(Z){this.cfg=this.cfg.extend(Z),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(Z){return this._append(Z),this._process(),this},finalize:function(Z){return Z&&this._append(Z),this._doFinalize()},blockSize:16,_createHelper:function(Z){return function(l,b){return new Z.init(b).finalize(l)}},_createHmacHelper:function(Z){return function(l,b){return new x.HMAC.init(Z,b).finalize(l)}}});var x=c.algo={};return c}(Math),b)}(I)),I.exports}!function(Z,l){Z.exports=u().enc.Utf8}(X);var L=c(X.exports),Y={exports:{}};!function(Z,l){var b;Z.exports=(b=u(),function(){var Z=b,l=Z.lib.WordArray;function i(Z,b,i){for(var m=[],d=0,c=0;c<b;c++)if(c%4){var G=i[Z.charCodeAt(c-1)]<<c%4*2|i[Z.charCodeAt(c)]>>>6-c%4*2;m[d>>>2]|=G<<24-d%4*8,d++}return l.create(m,d)}Z.enc.Base64={stringify:function(Z){var l=Z.words,b=Z.sigBytes,i=this._map;Z.clamp();for(var m=[],d=0;d<b;d+=3)for(var c=(l[d>>>2]>>>24-d%4*8&255)<<16|(l[d+1>>>2]>>>24-(d+1)%4*8&255)<<8|l[d+2>>>2]>>>24-(d+2)%4*8&255,G=0;G<4&&d+.75*G<b;G++)m.push(i.charAt(c>>>6*(3-G)&63));var X=i.charAt(64);if(X)for(;m.length%4;)m.push(X);return m.join("")},parse:function(Z){var l=Z.length,b=this._map,m=this._reverseMap;if(!m){m=this._reverseMap=[];for(var d=0;d<b.length;d++)m[b.charCodeAt(d)]=d}var c=b.charAt(64);if(c){var G=Z.indexOf(c);-1!==G&&(l=G)}return i(Z,l,m)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),b.enc.Base64)}(Y);var p=c(Y.exports);function x(Z){let l=!1;if(i(Z))l=!isNaN(Number(Z));else if(function(Z){return"[object Number]"===Object.prototype.toString.call(Z)}(Z)){if(function(Z){return Z!=Z}(Z))return!1;l=!0}return l}function y(Z,l){return b=Z,"[object Object]"===Object.prototype.toString.call(b)&&(!(!i(l)&&!x(l))&&l in Z);var b}let h=function(){if(!m())return null;let Z="undefined"!=typeof self?self:m()?window:"undefined"!=typeof global?global:null;if(y(Z,"html-minifier"))return Z["html-minifier"];let l=Z.document.createElement("script");return l.innerHTML=function(Z){return i(Z)?p.parse(Z).toString(L):""}("CgovKiEKICogSFRNTE1pbmlmaWVyIHY0LjAuMCAoaHR0cHM6Ly9rYW5nYXguZ2l0aHViLmlvL2h0bWwtbWluaWZpZXIvKQogKiBDb3B5cmlnaHQgMjAxMC0yMDE5IEp1cml5ICJrYW5nYXgiIFpheXRzZXYKICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwoKcmVxdWlyZT1mdW5jdGlvbiBvKGEscyx1KXtmdW5jdGlvbiBsKHQsZSl7aWYoIXNbdF0pe2lmKCFhW3RdKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZSYmbilyZXR1cm4gbih0LCEwKTtpZihjKXJldHVybiBjKHQsITApO3ZhciByPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyByLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHJ9dmFyIGk9c1t0XT17ZXhwb3J0czp7fX07YVt0XVswXS5jYWxsKGkuZXhwb3J0cyxmdW5jdGlvbihlKXtyZXR1cm4gbChhW3RdWzFdW2VdfHxlKX0saSxpLmV4cG9ydHMsbyxhLHMsdSl9cmV0dXJuIHNbdF0uZXhwb3J0c31mb3IodmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZT0wO2U8dS5sZW5ndGg7ZSsrKWwodVtlXSk7cmV0dXJuIGx9KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpLG49dFswXSxyPXRbMV07cmV0dXJuIDMqKG4rcikvNC1yfSxuLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWYoZSkscj1uWzBdLGk9blsxXSxvPW5ldyBjKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyoodCtuKS80LW59KDAscixpKSksYT0wLHM9MDxpP3ItNDpyLHU9MDt1PHM7dSs9NCl0PWxbZS5jaGFyQ29kZUF0KHUpXTw8MTh8bFtlLmNoYXJDb2RlQXQodSsxKV08PDEyfGxbZS5jaGFyQ29kZUF0KHUrMildPDw2fGxbZS5jaGFyQ29kZUF0KHUrMyldLG9bYSsrXT10Pj4xNiYyNTUsb1thKytdPXQ+PjgmMjU1LG9bYSsrXT0yNTUmdDsyPT09aSYmKHQ9bFtlLmNoYXJDb2RlQXQodSldPDwyfGxbZS5jaGFyQ29kZUF0KHUrMSldPj40LG9bYSsrXT0yNTUmdCk7MT09PWkmJih0PWxbZS5jaGFyQ29kZUF0KHUpXTw8MTB8bFtlLmNoYXJDb2RlQXQodSsxKV08PDR8bFtlLmNoYXJDb2RlQXQodSsyKV0+PjIsb1thKytdPXQ+PjgmMjU1LG9bYSsrXT0yNTUmdCk7cmV0dXJuIG99LG4uZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lLmxlbmd0aCxyPW4lMyxpPVtdLG89MCxhPW4tcjtvPGE7bys9MTYzODMpaS5wdXNoKHUoZSxvLGE8bysxNjM4Mz9hOm8rMTYzODMpKTsxPT1yPyh0PWVbbi0xXSxpLnB1c2goc1t0Pj4yXStzW3Q8PDQmNjNdKyI9PSIpKToyPT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0saS5wdXNoKHNbdD4+MTBdK3NbdD4+NCY2M10rc1t0PDwyJjYzXSsiPSIpKTtyZXR1cm4gaS5qb2luKCIiKX07Zm9yKHZhciBzPVtdLGw9W10sYz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxyPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixpPTAsbz1yLmxlbmd0aDtpPG87KytpKXNbaV09cltpXSxsW3IuY2hhckNvZGVBdChpKV09aTtmdW5jdGlvbiBmKGUpe3ZhciB0PWUubGVuZ3RoO2lmKDA8dCU0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBuPWUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09biYmKG49dCksW24sbj09PXQ/MDo0LW4lNF19ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHZhciByLGksbz1bXSxhPXQ7YTxuO2ErPTMpcj0oZVthXTw8MTYmMTY3MTE2ODApKyhlW2ErMV08PDgmNjUyODApKygyNTUmZVthKzJdKSxvLnB1c2goc1soaT1yKT4+MTgmNjNdK3NbaT4+MTImNjNdK3NbaT4+NiY2M10rc1s2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9bFsiLSIuY2hhckNvZGVBdCgwKV09NjIsbFsiXyIuY2hhckNvZGVBdCgwKV09NjN9LHt9XSwyOltmdW5jdGlvbihlLHQsbil7fSx7fV0sMzpbZnVuY3Rpb24oZSx0LG4pe2FyZ3VtZW50c1s0XVsyXVswXS5hcHBseShuLGFyZ3VtZW50cyl9LHtkdXA6Mn1dLDQ6W2Z1bmN0aW9uKGUsdCxVKXsoZnVuY3Rpb24oZil7InVzZSBzdHJpY3QiO3ZhciByPWUoImJhc2U2NC1qcyIpLG89ZSgiaWVlZTc1NCIpO1UuQnVmZmVyPWYsVS5TbG93QnVmZmVyPWZ1bmN0aW9uKGUpeytlIT1lJiYoZT0wKTtyZXR1cm4gZi5hbGxvYygrZSl9LFUuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG49MjE0NzQ4MzY0NztmdW5jdGlvbiBhKGUpe2lmKG48ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2UrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiB0Ll9fcHJvdG9fXz1mLnByb3RvdHlwZSx0fWZ1bmN0aW9uIGYoZSx0LG4pe2lmKCJudW1iZXIiIT10eXBlb2YgZSlyZXR1cm4gaShlLHQsbik7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiB1KGUpfWZ1bmN0aW9uIGkoZSx0LG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dHx8KHQ9InV0ZjgiKTtpZighZi5pc0VuY29kaW5nKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdCk7dmFyIG49MHxwKGUsdCkscj1hKG4pLGk9ci53cml0ZShlLHQpO2khPT1uJiYocj1yLnNsaWNlKDAsaSkpO3JldHVybiByfShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gbChlKTtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgZSk7aWYoRihlLEFycmF5QnVmZmVyKXx8ZSYmRihlLmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtpZih0PDB8fGUuYnl0ZUxlbmd0aDx0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihlLmJ5dGVMZW5ndGg8dCsobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciByO3I9dm9pZCAwPT09dCYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheShlKTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KGUsdCk6bmV3IFVpbnQ4QXJyYXkoZSx0LG4pO3JldHVybiByLl9fcHJvdG9fXz1mLnByb3RvdHlwZSxyfShlLHQsbik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciByPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobnVsbCE9ciYmciE9PWUpcmV0dXJuIGYuZnJvbShyLHQsbik7dmFyIGk9ZnVuY3Rpb24oZSl7aWYoZi5pc0J1ZmZlcihlKSl7dmFyIHQ9MHxjKGUubGVuZ3RoKSxuPWEodCk7cmV0dXJuIDA9PT1uLmxlbmd0aHx8ZS5jb3B5KG4sMCwwLHQpLG59aWYodm9pZCAwIT09ZS5sZW5ndGgpcmV0dXJuIm51bWJlciIhPXR5cGVvZiBlLmxlbmd0aHx8cShlLmxlbmd0aCk/YSgwKTpsKGUpO2lmKCJCdWZmZXIiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpcmV0dXJuIGwoZS5kYXRhKX0oZSk7aWYoaSlyZXR1cm4gaTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBmLmZyb20oZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx0LG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIGUpfWZ1bmN0aW9uIHMoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcyhlKSxhKGU8MD8wOjB8YyhlKSl9ZnVuY3Rpb24gbChlKXtmb3IodmFyIHQ9ZS5sZW5ndGg8MD8wOjB8YyhlLmxlbmd0aCksbj1hKHQpLHI9MDtyPHQ7cis9MSluW3JdPTI1NSZlW3JdO3JldHVybiBufWZ1bmN0aW9uIGMoZSl7aWYobjw9ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrbi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gcChlLHQpe2lmKGYuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8RihlLEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7dmFyIG49ZS5sZW5ndGgscj0yPGFyZ3VtZW50cy5sZW5ndGgmJiEwPT09YXJndW1lbnRzWzJdO2lmKCFyJiYwPT09bilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBCKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqbjtjYXNlImhleCI6cmV0dXJuIG4+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihlKS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiByPy0xOkIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gaChlLHQsbil7dmFyIHI9ZVt0XTtlW3RdPWVbbl0sZVtuXT1yfWZ1bmN0aW9uIGQoZSx0LG4scixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBuPyhyPW4sbj0wKToyMTQ3NDgzNjQ3PG4/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxxKG49K24pJiYobj1pPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFpKXJldHVybi0xO249MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWYuZnJvbSh0LHIpKSxmLmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6bShlLHQsbixyLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxuKTptKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBtKGUsdCxuLHIsaSl7dmFyIG8sYT0xLHM9ZS5sZW5ndGgsdT10Lmxlbmd0aDtpZih2b2lkIDAhPT1yJiYoInVjczIiPT09KHI9U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09cnx8InV0ZjE2bGUiPT09cnx8InV0Zi0xNmxlIj09PXIpKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO3MvPWE9Mix1Lz0yLG4vPTJ9ZnVuY3Rpb24gbChlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGM9LTE7Zm9yKG89bjtvPHM7bysrKWlmKGwoZSxvKT09PWwodCwtMT09PWM/MDpvLWMpKXtpZigtMT09PWMmJihjPW8pLG8tYysxPT09dSlyZXR1cm4gYyphfWVsc2UtMSE9PWMmJihvLT1vLWMpLGM9LTF9ZWxzZSBmb3IoczxuK3UmJihuPXMtdSksbz1uOzA8PW87by0tKXtmb3IodmFyIGY9ITAscD0wO3A8dTtwKyspaWYobChlLG8rcCkhPT1sKHQscCkpe2Y9ITE7YnJlYWt9aWYoZilyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBnKGUsdCxuLHIpe249TnVtYmVyKG4pfHwwO3ZhciBpPWUubGVuZ3RoLW47cj9pPChyPU51bWJlcihyKSkmJihyPWkpOnI9aTt2YXIgbz10Lmxlbmd0aDtvLzI8ciYmKHI9by8yKTtmb3IodmFyIGE9MDthPHI7KythKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKmEsMiksMTYpO2lmKHEocykpcmV0dXJuIGE7ZVtuK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gdihlLHQsbixyKXtyZXR1cm4gTChmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIGIoZSx0LG4pe3JldHVybiAwPT09dCYmbj09PWUubGVuZ3RoP3IuZnJvbUJ5dGVBcnJheShlKTpyLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LG4pKX1mdW5jdGlvbiB5KGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8sYSxzLHUsbD1lW2ldLGM9bnVsbCxmPTIzOTxsPzQ6MjIzPGw/MzoxOTE8bD8yOjE7aWYoaStmPD1uKXN3aXRjaChmKXtjYXNlIDE6bDwxMjgmJihjPWwpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJjEyNzwodT0oMzEmbCk8PDZ8NjMmbykmJihjPXUpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxhPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmMjA0NzwodT0oMTUmbCk8PDEyfCg2MyZvKTw8Nnw2MyZhKSYmKHU8NTUyOTZ8fDU3MzQzPHUpJiYoYz11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZzKSYmNjU1MzU8KHU9KDE1JmwpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKSYmdTwxMTE0MTEyJiYoYz11KX1udWxsPT09Yz8oYz02NTUzMyxmPTEpOjY1NTM1PGMmJihjLT02NTUzNixyLnB1c2goYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxyLnB1c2goYyksaSs9Zn1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9XylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIG49IiIscj0wO2Zvcig7cjx0OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKHIscis9XykpO3JldHVybiBufShyKX1VLmtNYXhMZW5ndGg9biwoZi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKX1jYXRjaChlKXtyZXR1cm4hMX19KCkpfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoZi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9U3ltYm9sLnNwZWNpZXMmJmZbU3ltYm9sLnNwZWNpZXNdPT09ZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxmLnBvb2xTaXplPTgxOTIsZi5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaShlLHQsbil9LGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5LGYuYWxsb2M9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHMoZSksZTw9MD9hKGUpOnZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2EoZSkuZmlsbCh0LG4pOmEoZSkuZmlsbCh0KTphKGUpfShlLHQsbil9LGYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSl9LGYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB1KGUpfSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09Zi5wcm90b3R5cGV9LGYuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKEYoZSxVaW50OEFycmF5KSYmKGU9Zi5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksRih0LFVpbnQ4QXJyYXkpJiYodD1mLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhZi5pc0J1ZmZlcihlKXx8IWYuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dC5sZW5ndGgsaT0wLG89TWF0aC5taW4obixyKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtuPWVbaV0scj10W2ldO2JyZWFrfXJldHVybiBuPHI/LTE6cjxuPzE6MH0sZi5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGYuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09dClmb3Iobj10PTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIHI9Zi5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIG89ZVtuXTtpZihGKG8sVWludDhBcnJheSkmJihvPWYuZnJvbShvKSksIWYuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShyLGkpLGkrPW8ubGVuZ3RofXJldHVybiByfSxmLmJ5dGVMZW5ndGg9cCxmLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsZi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWgodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCloKHRoaXMsdCx0KzMpLGgodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWgodGhpcyx0LHQrNyksaCh0aGlzLHQrMSx0KzYpLGgodGhpcyx0KzIsdCs1KSxoKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP3kodGhpcywwLGUpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09bnx8bj50aGlzLmxlbmd0aCkmJihuPXRoaXMubGVuZ3RoKSxuPD0wKXJldHVybiIiO2lmKChuPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIEEodGhpcyx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHkodGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4geCh0aGlzLHQsbik7ZGVmYXVsdDppZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxyPSEwfX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxmLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIWYuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWYuY29tcGFyZSh0aGlzLGUpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiIsdD1VLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBlPXRoaXMudG9TdHJpbmcoImhleCIsMCx0KS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPnQmJihlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2UrIj4ifSxmLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoRihlLFVpbnQ4QXJyYXkpJiYoZT1mLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoaTw9ciYmbjw9dClyZXR1cm4gMDtpZihpPD1yKXJldHVybi0xO2lmKG48PXQpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLGE9KG4+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihvLGEpLHU9dGhpcy5zbGljZShyLGkpLGw9ZS5zbGljZSh0LG4pLGM9MDtjPHM7KytjKWlmKHVbY10hPT1sW2NdKXtvPXVbY10sYT1sW2NdO2JyZWFrfXJldHVybiBvPGE/LTE6YTxvPzE6MH0sZi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxuKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGQodGhpcyxlLHQsbiwhMCl9LGYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZCh0aGlzLGUsdCxuLCExKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3Q+Pj49MCxpc0Zpbml0ZShuKT8obj4+Pj0wLHZvaWQgMD09PXImJihyPSJ1dGY4IikpOihyPW4sbj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fGk8bikmJihuPWkpLDA8ZS5sZW5ndGgmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cnx8KHI9InV0ZjgiKTtmb3IodmFyIG8sYSxzLHUsbCxjLGYscCxoLGQ9ITE7Oylzd2l0Y2gocil7Y2FzZSJoZXgiOnJldHVybiBnKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHA9dCxoPW4sTChCKGUsKGY9dGhpcykubGVuZ3RoLXApLGYscCxoKTtjYXNlImFzY2lpIjpyZXR1cm4gdih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB2KHRoaXMsZSx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdT10aGlzLGw9dCxjPW4sTChSKGUpLHUsbCxjKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGE9dCxzPW4sTChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKW49ZS5jaGFyQ29kZUF0KGEpLHI9bj4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KGUsKG89dGhpcykubGVuZ3RoLWEpLG8sYSxzKTtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTtyPSgiIityKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBfPTQwOTY7ZnVuY3Rpb24gdyhlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiByfWZ1bmN0aW9uIEUoZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fHI8bikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1UKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIHgoZSx0LG4pe2Zvcih2YXIgcj1lLnNsaWNlKHQsbiksaT0iIixvPTA7bzxyLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocltvXSsyNTYqcltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBrKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYobjxlK3QpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBDKGUsdCxuLHIsaSxvKXtpZighZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoaTx0fHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTyhlLHQsbixyLGksbyl7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFMoZSx0LG4scixpKXtyZXR1cm4gdD0rdCxuPj4+PTAsaXx8TyhlLDAsbiw0KSxvLndyaXRlKGUsdCxuLHIsMjMsNCksbis0fWZ1bmN0aW9uIEQoZSx0LG4scixpKXtyZXR1cm4gdD0rdCxuPj4+PTAsaXx8TyhlLDAsbiw4KSxvLndyaXRlKGUsdCxuLHIsNTIsOCksbis4fWYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTpuPGUmJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOm48dCYmKHQ9biksdDxlJiYodD1lKTt2YXIgcj10aGlzLnN1YmFycmF5KGUsdCk7cmV0dXJuIHIuX19wcm90b19fPWYucHJvdG90eXBlLHJ9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOylyKz10aGlzW2Urb10qaTtyZXR1cm4gcn0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZSstLXRdLGk9MTswPHQmJihpKj0yNTYpOylyKz10aGlzW2UrLS10XSppO3JldHVybiByfSxmLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQsbil7ZT4+Pj0wLHQ+Pj49MCxufHxrKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciByPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KXIrPXRoaXNbZStvXSppO3JldHVybihpKj0xMjgpPD1yJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2U+Pj49MCx0Pj4+PTAsbnx8ayhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10LGk9MSxvPXRoaXNbZSstLXJdOzA8ciYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLXJdKmk7cmV0dXJuKGkqPTEyOCk8PW8mJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7ZT4+Pj0wLHR8fGsoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8ayhlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8ayhlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxrKGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fGsoZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcyxlLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0Pj4+PTAsbj4+Pj0wLHIpfHxDKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtufSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0Pj4+PTAsbj4+Pj0wLHIpfHxDKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOzA8PS0taSYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LGYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDEsMjU1LDApLHRoaXNbdF09MjU1JmUsdCsxfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEModGhpcyxlLHQsMiw2NTUzNSwwKSx0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSx0KzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUsdCs0fSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Qyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89MCxhPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvLTFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrbn0sZi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHQ+Pj49MCwhcil7dmFyIGk9TWF0aC5wb3coMiw4Km4tMSk7Qyh0aGlzLGUsdCxuLGktMSwtaSl9dmFyIG89bi0xLGE9MSxzPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTswPD0tLW8mJihhKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K28rMV0mJihzPTEpLHRoaXNbdCtvXT0oZS9hPj4wKS1zJjI1NTtyZXR1cm4gdCtufSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDEsMTI3LC0xMjgpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdD4+Pj0wLG58fEModGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHQrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksdGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUsdCsyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHQ+Pj49MCxufHxDKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0LHQrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0Pj4+PTAsbnx8Qyh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSx0KzR9LGYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyxlLHQsITAsbil9LGYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyxlLHQsITEsbil9LGYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEKHRoaXMsZSx0LCEwLG4pfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRCh0aGlzLGUsdCwhMSxuKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQsbixyKXtpZighZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihufHwobj0wKSxyfHwwPT09cnx8KHI9dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksMDxyJiZyPG4mJihyPW4pLHI9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtyPnRoaXMubGVuZ3RoJiYocj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxyLW4mJihyPWUubGVuZ3RoLXQrbik7dmFyIGk9ci1uO2lmKHRoaXM9PT1lJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4odCxuLHIpO2Vsc2UgaWYodGhpcz09PWUmJm48dCYmdDxyKWZvcih2YXIgbz1pLTE7MDw9bzstLW8pZVtvK3RdPXRoaXNbbytuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLHIpLHQpO3JldHVybiBpfSxmLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhyPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKHI9bixuPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1yJiYic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgciYmIWYuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpO2lmKDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1yJiZpPDEyOHx8ImxhdGluMSI9PT1yKSYmKGU9aSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIGE9Zi5pc0J1ZmZlcihlKT9lOmYuZnJvbShlLHIpLHM9YS5sZW5ndGg7aWYoMD09PXMpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK2UrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1hW28lc119cmV0dXJuIHRoaXN9O3ZhciB0PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gVChlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gQihlLHQpe3ZhciBuO3Q9dHx8MS8wO2Zvcih2YXIgcj1lLmxlbmd0aCxpPW51bGwsbz1bXSxhPTA7YTxyOysrYSl7aWYoNTUyOTU8KG49ZS5jaGFyQ29kZUF0KGEpKSYmbjw1NzM0NCl7aWYoIWkpe2lmKDU2MzE5PG4pey0xPCh0LT0zKSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1yKXstMTwodC09MykmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1uO2NvbnRpbnVlfWlmKG48NTYzMjApey0xPCh0LT0zKSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPW47Y29udGludWV9bj02NTUzNisoaS01NTI5Njw8MTB8bi01NjMyMCl9ZWxzZSBpJiYtMTwodC09MykmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLG48MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gobil9ZWxzZSBpZihuPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChuPj42fDE5Miw2MyZufDEyOCl9ZWxzZSBpZihuPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gobj4+MTJ8MjI0LG4+PjYmNjN8MTI4LDYzJm58MTI4KX1lbHNle2lmKCEobjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChuPj4xOHwyNDAsbj4+MTImNjN8MTI4LG4+PjYmNjN8MTI4LDYzJm58MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gUihlKXtyZXR1cm4gci50b0J5dGVBcnJheShmdW5jdGlvbihlKXtpZigoZT0oZT1lLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKHQsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIEwoZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgdHx8bnVsbCE9ZSYmbnVsbCE9ZS5jb25zdHJ1Y3RvciYmbnVsbCE9ZS5jb25zdHJ1Y3Rvci5uYW1lJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT10Lm5hbWV9ZnVuY3Rpb24gcShlKXtyZXR1cm4gZSE9ZX19KS5jYWxsKHRoaXMsZSgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjEsYnVmZmVyOjQsaWVlZTc1NDoxMDV9XSw1OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPXsxMDA6IkNvbnRpbnVlIiwxMDE6IlN3aXRjaGluZyBQcm90b2NvbHMiLDEwMjoiUHJvY2Vzc2luZyIsMjAwOiJPSyIsMjAxOiJDcmVhdGVkIiwyMDI6IkFjY2VwdGVkIiwyMDM6Ik5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIiwyMDQ6Ik5vIENvbnRlbnQiLDIwNToiUmVzZXQgQ29udGVudCIsMjA2OiJQYXJ0aWFsIENvbnRlbnQiLDIwNzoiTXVsdGktU3RhdHVzIiwyMDg6IkFscmVhZHkgUmVwb3J0ZWQiLDIyNjoiSU0gVXNlZCIsMzAwOiJNdWx0aXBsZSBDaG9pY2VzIiwzMDE6Ik1vdmVkIFBlcm1hbmVudGx5IiwzMDI6IkZvdW5kIiwzMDM6IlNlZSBPdGhlciIsMzA0OiJOb3QgTW9kaWZpZWQiLDMwNToiVXNlIFByb3h5IiwzMDc6IlRlbXBvcmFyeSBSZWRpcmVjdCIsMzA4OiJQZXJtYW5lbnQgUmVkaXJlY3QiLDQwMDoiQmFkIFJlcXVlc3QiLDQwMToiVW5hdXRob3JpemVkIiw0MDI6IlBheW1lbnQgUmVxdWlyZWQiLDQwMzoiRm9yYmlkZGVuIiw0MDQ6Ik5vdCBGb3VuZCIsNDA1OiJNZXRob2QgTm90IEFsbG93ZWQiLDQwNjoiTm90IEFjY2VwdGFibGUiLDQwNzoiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiLDQwODoiUmVxdWVzdCBUaW1lb3V0Iiw0MDk6IkNvbmZsaWN0Iiw0MTA6IkdvbmUiLDQxMToiTGVuZ3RoIFJlcXVpcmVkIiw0MTI6IlByZWNvbmRpdGlvbiBGYWlsZWQiLDQxMzoiUGF5bG9hZCBUb28gTGFyZ2UiLDQxNDoiVVJJIFRvbyBMb25nIiw0MTU6IlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiLDQxNjoiUmFuZ2UgTm90IFNhdGlzZmlhYmxlIiw0MTc6IkV4cGVjdGF0aW9uIEZhaWxlZCIsNDE4OiJJJ20gYSB0ZWFwb3QiLDQyMToiTWlzZGlyZWN0ZWQgUmVxdWVzdCIsNDIyOiJVbnByb2Nlc3NhYmxlIEVudGl0eSIsNDIzOiJMb2NrZWQiLDQyNDoiRmFpbGVkIERlcGVuZGVuY3kiLDQyNToiVW5vcmRlcmVkIENvbGxlY3Rpb24iLDQyNjoiVXBncmFkZSBSZXF1aXJlZCIsNDI4OiJQcmVjb25kaXRpb24gUmVxdWlyZWQiLDQyOToiVG9vIE1hbnkgUmVxdWVzdHMiLDQzMToiUmVxdWVzdCBIZWFkZXIgRmllbGRzIFRvbyBMYXJnZSIsNDUxOiJVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29ucyIsNTAwOiJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiLDUwMToiTm90IEltcGxlbWVudGVkIiw1MDI6IkJhZCBHYXRld2F5Iiw1MDM6IlNlcnZpY2UgVW5hdmFpbGFibGUiLDUwNDoiR2F0ZXdheSBUaW1lb3V0Iiw1MDU6IkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkIiw1MDY6IlZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzIiw1MDc6Ikluc3VmZmljaWVudCBTdG9yYWdlIiw1MDg6Ikxvb3AgRGV0ZWN0ZWQiLDUwOToiQmFuZHdpZHRoIExpbWl0IEV4Y2VlZGVkIiw1MTA6Ik5vdCBFeHRlbmRlZCIsNTExOiJOZXR3b3JrIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIn19LHt9XSw2OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWUoIi4vbGliL2NsZWFuIil9LHsiLi9saWIvY2xlYW4iOjd9XSw3OltmdW5jdGlvbihlLEUsdCl7KGZ1bmN0aW9uKHMpe3ZhciB1PWUoIi4vb3B0aW1pemVyL2xldmVsLTAvb3B0aW1pemUiKSxsPWUoIi4vb3B0aW1pemVyL2xldmVsLTEvb3B0aW1pemUiKSxjPWUoIi4vb3B0aW1pemVyL2xldmVsLTIvb3B0aW1pemUiKSxmPWUoIi4vb3B0aW1pemVyL3ZhbGlkYXRvciIpLHQ9ZSgiLi9vcHRpb25zL2NvbXBhdGliaWxpdHkiKSxuPWUoIi4vb3B0aW9ucy9mZXRjaCIpLHI9ZSgiLi9vcHRpb25zL2Zvcm1hdCIpLmZvcm1hdEZyb20saT1lKCIuL29wdGlvbnMvaW5saW5lIiksbz1lKCIuL29wdGlvbnMvaW5saW5lLXJlcXVlc3QiKSxhPWUoIi4vb3B0aW9ucy9pbmxpbmUtdGltZW91dCIpLHA9ZSgiLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLGg9ZSgiLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLm9wdGltaXphdGlvbkxldmVsRnJvbSxkPWUoIi4vb3B0aW9ucy9yZWJhc2UiKSxtPWUoIi4vb3B0aW9ucy9yZWJhc2UtdG8iKSxnPWUoIi4vcmVhZGVyL2lucHV0LXNvdXJjZS1tYXAtdHJhY2tlciIpLHY9ZSgiLi9yZWFkZXIvcmVhZC1zb3VyY2VzIiksYj1lKCIuL3dyaXRlci9zaW1wbGUiKSx5PWUoIi4vd3JpdGVyL3NvdXJjZS1tYXBzIiksXz1FLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLm9wdGlvbnM9e2NvbXBhdGliaWxpdHk6dChlLmNvbXBhdGliaWxpdHkpLGZldGNoOm4oZS5mZXRjaCksZm9ybWF0OnIoZS5mb3JtYXQpLGlubGluZTppKGUuaW5saW5lKSxpbmxpbmVSZXF1ZXN0Om8oZS5pbmxpbmVSZXF1ZXN0KSxpbmxpbmVUaW1lb3V0OmEoZS5pbmxpbmVUaW1lb3V0KSxsZXZlbDpoKGUubGV2ZWwpLHJlYmFzZTpkKGUucmViYXNlKSxyZWJhc2VUbzptKGUucmViYXNlVG8pLHJldHVyblByb21pc2U6ISFlLnJldHVyblByb21pc2Usc291cmNlTWFwOiEhZS5zb3VyY2VNYXAsc291cmNlTWFwSW5saW5lU291cmNlczohIWUuc291cmNlTWFwSW5saW5lU291cmNlc319O2Z1bmN0aW9uIHcoZSx0LG4scil7dmFyIGk9ImZ1bmN0aW9uIiE9dHlwZW9mIG4/bjpudWxsLG89ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOm51bGwsYT17c3RhdHM6e2VmZmljaWVuY3k6MCxtaW5pZmllZFNpemU6MCxvcmlnaW5hbFNpemU6MCxzdGFydGVkQXQ6RGF0ZS5ub3coKSx0aW1lU3BlbnQ6MH0sY2FjaGU6e3NwZWNpZmljaXR5Ont9fSxlcnJvcnM6W10saW5saW5lZFN0eWxlc2hlZXRzOltdLGlucHV0U291cmNlTWFwVHJhY2tlcjpnKCksbG9jYWxPbmx5OiFvLG9wdGlvbnM6dCxzb3VyY2U6bnVsbCxzb3VyY2VzQ29udGVudDp7fSx2YWxpZGF0b3I6Zih0LmNvbXBhdGliaWxpdHkpLHdhcm5pbmdzOltdfTtyZXR1cm4gaSYmYS5pbnB1dFNvdXJjZU1hcFRyYWNrZXIudHJhY2sodm9pZCAwLGkpLGZ1bmN0aW9uKGUpe3JldHVybiBlP2Z1bmN0aW9uKGUpe3JldHVybiBlKCl9OnMubmV4dFRpY2t9KGEubG9jYWxPbmx5KShmdW5jdGlvbigpe3JldHVybiB2KGUsYSxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe3JldHVybiBlLnN0YXRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49RGF0ZS5ub3coKS10LnN0YXRzLnN0YXJ0ZWRBdDtyZXR1cm4gZGVsZXRlIHQuc3RhdHMuc3RhcnRlZEF0LHQuc3RhdHMudGltZVNwZW50PW4sdC5zdGF0cy5lZmZpY2llbmN5PTEtZS5sZW5ndGgvdC5zdGF0cy5vcmlnaW5hbFNpemUsdC5zdGF0cy5taW5pZmllZFNpemU9ZS5sZW5ndGgsdC5zdGF0c30oZS5zdHlsZXMsdCksZS5lcnJvcnM9dC5lcnJvcnMsZS5pbmxpbmVkU3R5bGVzaGVldHM9dC5pbmxpbmVkU3R5bGVzaGVldHMsZS53YXJuaW5ncz10Lndhcm5pbmdzLGV9KChhLm9wdGlvbnMuc291cmNlTWFwP3k6YikoZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbj11KGUsdCksbj1wLk9uZSBpbiB0Lm9wdGlvbnMubGV2ZWw/bChlLHQpOmUsbj1wLlR3byBpbiB0Lm9wdGlvbnMubGV2ZWw/YyhlLHQsITApOm59KGUsYSksYSksYSk7cmV0dXJuIG8/bygwPGEuZXJyb3JzLmxlbmd0aD9hLmVycm9yczpudWxsLHQpOnR9KX0pfV8ucHJvY2Vzcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQudG87cmV0dXJuIGRlbGV0ZSB0LnRvLG5ldyBfKE9iamVjdC5hc3NpZ24oe3JldHVyblByb21pc2U6ITAscmViYXNlVG86bn0sdCkpLm1pbmlmeShlKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybntjc3M6ZS5zdHlsZXN9fSl9LF8ucHJvdG90eXBlLm1pbmlmeT1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiBpLnJldHVyblByb21pc2U/bmV3IFByb21pc2UoZnVuY3Rpb24obixyKXt3KGUsaSx0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/cihlKTpuKHQpfSl9KTp3KGUsaSx0LG4pfX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpKX0seyIuL29wdGltaXplci9sZXZlbC0wL29wdGltaXplIjo5LCIuL29wdGltaXplci9sZXZlbC0xL29wdGltaXplIjoxMCwiLi9vcHRpbWl6ZXIvbGV2ZWwtMi9vcHRpbWl6ZSI6MjksIi4vb3B0aW1pemVyL3ZhbGlkYXRvciI6NTcsIi4vb3B0aW9ucy9jb21wYXRpYmlsaXR5Ijo1OSwiLi9vcHRpb25zL2ZldGNoIjo2MCwiLi9vcHRpb25zL2Zvcm1hdCI6NjEsIi4vb3B0aW9ucy9pbmxpbmUiOjY0LCIuL29wdGlvbnMvaW5saW5lLXJlcXVlc3QiOjYyLCIuL29wdGlvbnMvaW5saW5lLXRpbWVvdXQiOjYzLCIuL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi9vcHRpb25zL3JlYmFzZSI6NjcsIi4vb3B0aW9ucy9yZWJhc2UtdG8iOjY2LCIuL3JlYWRlci9pbnB1dC1zb3VyY2UtbWFwLXRyYWNrZXIiOjcxLCIuL3JlYWRlci9yZWFkLXNvdXJjZXMiOjc3LCIuL3dyaXRlci9zaW1wbGUiOjk5LCIuL3dyaXRlci9zb3VyY2UtbWFwcyI6MTAwLF9wcm9jZXNzOjExMn1dLDg6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FTVEVSSVNLOiJhc3RlcmlzayIsQkFORzoiYmFuZyIsQkFDS1NMQVNIOiJiYWNrc2xhc2giLFVOREVSU0NPUkU6InVuZGVyc2NvcmUifX0se31dLDk6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSx7fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL3Nob3J0ZW4taGV4IiksaT1lKCIuL3Nob3J0ZW4taHNsIiksbz1lKCIuL3Nob3J0ZW4tcmdiIiksbT1lKCIuL3NvcnQtc2VsZWN0b3JzIiksZz1lKCIuL3RpZHktcnVsZXMiKSx2PWUoIi4vdGlkeS1ibG9jayIpLGI9ZSgiLi90aWR5LWF0LXJ1bGUiKSwkPWUoIi4uL2hhY2siKSxLPWUoIi4uL3JlbW92ZS11bnVzZWQiKSxHPWUoIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIiksWT1lKCIuLi93cmFwLWZvci1vcHRpbWl6aW5nIikuYWxsLFc9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxRPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLFo9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpLEo9ZSgiLi4vLi4vdXRpbHMvZm9ybWF0LXBvc2l0aW9uIiksYT1lKCIuLi8uLi91dGlscy9zcGxpdCIpLFg9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMsZWU9Imlnbm9yZS1wcm9wZXJ0eSIseT0iQGNoYXJzZXQiLF89bmV3IFJlZ0V4cCgiXiIreSwiaSIpLHc9ZSgiLi4vLi4vb3B0aW9ucy9yb3VuZGluZy1wcmVjaXNpb24iKS5ERUZBVUxULHM9Lyg/Ol58XHN8XCgpKC0/XGQrKXB4Lyx0ZT0vXihcLT9bXGRcLl0rKShtP3MpJC8sdT0vWzAtOWEtZl0vaSxuZT0vXig/OlwtY2hyb21lXC18XC1bXHdcLV0rXHd8XHdbXHdcLV0rXHd8XC1cLVxTKykkLyxFPS9eQGltcG9ydC9pLHJlPS9eKCcuKid8Ii4qIikkLyxpZT0vXlsnIl1bYS16QS1aXVthLXpBLVpcZFwtX10rWyciXSQvLG9lPS9edXJsXCgvaSxhZT0vXi0tXFMrJC87ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGUmJiItIj09ZVsxXVswXSYmcGFyc2VGbG9hdChlWzFdKTwwfWZ1bmN0aW9uIHVlKGUsdCxuKXtyZXR1cm4tMT09PXQuaW5kZXhPZigiIyIpJiYtMT09dC5pbmRleE9mKCJyZ2IiKSYmLTE9PXQuaW5kZXhPZigiaHNsIil8fCh0PXQucmVwbGFjZSgvcmdiXCgoXC0/XGQrKSwoXC0/XGQrKSwoXC0/XGQrKVwpL2csZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG8odCxuLHIpfSkucmVwbGFjZSgvaHNsXCgoLT9cZCspLCgtP1xkKyklPywoLT9cZCspJT9cKS9nLGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBpKHQsbixyKX0pLnJlcGxhY2UoLyhefFtePSciXSkjKFswLTlhLWZdezZ9KS9naSxmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPWlbcitlLmxlbmd0aF07cmV0dXJuIG8mJnUudGVzdChvKT9lOm5bMF09PW5bMV0mJm5bMl09PW5bM10mJm5bNF09PW5bNV0/KHQrIiMiK25bMF0rblsyXStuWzRdKS50b0xvd2VyQ2FzZSgpOih0KyIjIituKS50b0xvd2VyQ2FzZSgpfSkucmVwbGFjZSgvKF58W149JyJdKSMoWzAtOWEtZl17M30pL2dpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCsiIyIrbi50b0xvd2VyQ2FzZSgpfSkucmVwbGFjZSgvKHJnYnxyZ2JhfGhzbHxoc2xhKVwoKFteXCldKylcKS9nLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLnNwbGl0KCIsIik7cmV0dXJuImhzbCI9PXQmJjM9PXIubGVuZ3RofHwiaHNsYSI9PXQmJjQ9PXIubGVuZ3RofHwicmdiIj09dCYmMz09ci5sZW5ndGgmJjA8bi5pbmRleE9mKCIlIil8fCJyZ2JhIj09dCYmND09ci5sZW5ndGgmJjA8bi5pbmRleE9mKCIlIik/KC0xPT1yWzFdLmluZGV4T2YoIiUiKSYmKHJbMV0rPSIlIiksLTE9PXJbMl0uaW5kZXhPZigiJSIpJiYoclsyXSs9IiUiKSx0KyIoIityLmpvaW4oIiwiKSsiKSIpOmV9KSxuLmNvbG9ycy5vcGFjaXR5JiYtMT09ZS5pbmRleE9mKCJiYWNrZ3JvdW5kIikmJih0PXQucmVwbGFjZSgvKD86cmdiYXxoc2xhKVwoMCwwJT8sMCU/LDBcKS9nLGZ1bmN0aW9uKGUpe3JldHVybi0xPGEodCwiLCIpLnBvcCgpLmluZGV4T2YoImdyYWRpZW50KCIpP2U6InRyYW5zcGFyZW50In0pKSkscih0KX1mdW5jdGlvbiBsZShlLHQsaSl7cmV0dXJuIHMudGVzdCh0KT90LnJlcGxhY2UocyxmdW5jdGlvbihlLHQpe3ZhciBuLHI9cGFyc2VJbnQodCk7cmV0dXJuIDA9PT1yP2U6KGkucHJvcGVydGllcy5zaG9ydGVyTGVuZ3RoVW5pdHMmJmkudW5pdHMucHQmJjMqciU0PT0wJiYobj0zKnIvNCsicHQiKSxpLnByb3BlcnRpZXMuc2hvcnRlckxlbmd0aFVuaXRzJiZpLnVuaXRzLnBjJiZyJTE2PT0wJiYobj1yLzE2KyJwYyIpLGkucHJvcGVydGllcy5zaG9ydGVyTGVuZ3RoVW5pdHMmJmkudW5pdHMuaW4mJnIlOTY9PTAmJihuPXIvOTYrImluIiksbiYmKG49ZS5zdWJzdHJpbmcoMCxlLmluZGV4T2YodCkpK24pLG4mJm4ubGVuZ3RoPGUubGVuZ3RoP246ZSl9KTp0fWZ1bmN0aW9uIGNlKGUsdCx1KXtyZXR1cm4gdS5lbmFibGVkJiYtMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSh1LmRlY2ltYWxQb2ludE1hdGNoZXIsIiQxJDIkMyIpLnJlcGxhY2UodS56ZXJvTWF0Y2hlcixmdW5jdGlvbihlLHQsbixyKXt2YXIgaT11LnVuaXRzW3JdLm11bHRpcGxpZXIsbz1wYXJzZUludCh0KSxhPWlzTmFOKG8pPzA6byxzPXBhcnNlRmxvYXQobik7cmV0dXJuIE1hdGgucm91bmQoKGErcykqaSkvaStyfSk6dH1mdW5jdGlvbiBmZShlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmLHAsaCxkLG0sZyx2LGIseSxfLHcsRSxBLHgsayxDLE8sUyxELFQsQixSLEwsRixxLFUsTSxOPW4ub3B0aW9ucyxQPU4ubGV2ZWxbVy5PbmVdLEk9WSh0LCEwKTtlOmZvcih2YXIgej0wLGo9SS5sZW5ndGg7ejxqO3orKylpZihpPShyPUlbel0pLm5hbWUsbmUudGVzdChpKXx8KHU9ci5hbGxbci5wb3NpdGlvbl0sbi53YXJuaW5ncy5wdXNoKCJJbnZhbGlkIHByb3BlcnR5IG5hbWUgJyIraSsiJyBhdCAiK0oodVsxXVsyXVswXSkrIi4gSWdub3JpbmcuIiksci51bnVzZWQ9ITApLDA9PT1yLnZhbHVlLmxlbmd0aCYmKHU9ci5hbGxbci5wb3NpdGlvbl0sbi53YXJuaW5ncy5wdXNoKCJFbXB0eSBwcm9wZXJ0eSAnIitpKyInIGF0ICIrSih1WzFdWzJdWzBdKSsiLiBJZ25vcmluZy4iKSxyLnVudXNlZD0hMCksci5oYWNrJiYoKHIuaGFja1swXT09JC5BU1RFUklTS3x8ci5oYWNrWzBdPT0kLlVOREVSU0NPUkUpJiYhTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuaWVQcmVmaXhIYWNrfHxyLmhhY2tbMF09PSQuQkFDS1NMQVNIJiYhTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuaWVTdWZmaXhIYWNrfHxyLmhhY2tbMF09PSQuQkFORyYmIU4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLmllQmFuZ0hhY2spJiYoci51bnVzZWQ9ITApLFAucmVtb3ZlTmVnYXRpdmVQYWRkaW5ncyYmMD09PWkuaW5kZXhPZigicGFkZGluZyIpJiYoc2Uoci52YWx1ZVswXSl8fHNlKHIudmFsdWVbMV0pfHxzZShyLnZhbHVlWzJdKXx8c2Uoci52YWx1ZVszXSkpJiYoci51bnVzZWQ9ITApLCFOLmNvbXBhdGliaWxpdHkucHJvcGVydGllcy5pZUZpbHRlcnMmJmhlKHIpJiYoci51bnVzZWQ9ITApLCFyLnVudXNlZClpZihyLmJsb2NrKWZlKGUsci52YWx1ZVswXVsxXSxuKTtlbHNlIGlmKCFhZS50ZXN0KGkpKXtmb3IodmFyIFY9MCxIPXIudmFsdWUubGVuZ3RoO1Y8SDtWKyspe2lmKG89ci52YWx1ZVtWXVswXSxhPXIudmFsdWVbVl1bMV0sTT1hLHM9b2UudGVzdChNKSxvPT1RLlBST1BFUlRZX0JMT0NLKXtyLnVudXNlZD0hMCxuLndhcm5pbmdzLnB1c2goIkludmFsaWQgdmFsdWUgdG9rZW4gYXQgIitKKGFbMF1bMV1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWlmKHMmJiFuLnZhbGlkYXRvci5pc1VybChhKSl7ci51bnVzZWQ9ITAsbi53YXJuaW5ncy5wdXNoKCJCcm9rZW4gVVJMICciK2ErIicgYXQgIitKKHIudmFsdWVbVl1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWlmKHM/KGE9UC5ub3JtYWxpemVVcmxzP2EucmVwbGFjZShvZSwidXJsKCIpLnJlcGxhY2UoL1xcP1xufFxcP1xyXG4vZywiIik6YSxhPU4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLnVybFF1b3Rlcz9hOiEvXnVybFwoWyciXS4rWyciXVwpJC8udGVzdChVPWEpfHwvXnVybFwoWyciXS4qW1wqXHNcKFwpJyJdLipbJyJdXCkkLy50ZXN0KFUpfHwvXnVybFwoWyciXWRhdGE6W147XSs7Y2hhcnNldC8udGVzdChVKT9VOlUucmVwbGFjZSgvWyInXS9nLCIiKSk6KHE9YSxyZS50ZXN0KHEpP2E9UC5yZW1vdmVRdW90ZXM/KEY9YSwiY29udGVudCI9PShMPWkpfHwtMTxMLmluZGV4T2YoImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzIil8fC0xPEwuaW5kZXhPZigiZm9udC1mZWF0dXJlLXNldHRpbmdzIil8fC0xPEwuaW5kZXhPZigiZ3JpZC0iKT9GOmllLnRlc3QoRik/Ri5zdWJzdHJpbmcoMSxGLmxlbmd0aC0xKTpGKTphOihhPWxlKDAsYT1jZSgwLGE9UC5yZW1vdmVXaGl0ZXNwYWNlPyhSPWEsLTE8aS5pbmRleE9mKCJmaWx0ZXIiKXx8LTE9PVIuaW5kZXhPZigiICIpfHwwPT09Ui5pbmRleE9mKCJleHByZXNzaW9uIik/UjotMTxSLmluZGV4T2YoWi5TSU5HTEVfUVVPVEUpfHwtMTxSLmluZGV4T2YoWi5ET1VCTEVfUVVPVEUpP1I6KC0xPChSPVIucmVwbGFjZSgvXHMrL2csIiAiKSkuaW5kZXhPZigiY2FsYyIpJiYoUj1SLnJlcGxhY2UoL1wpID9cLyA/L2csIikvICIpKSxSLnJlcGxhY2UoLyhcKDs/KVxzKy9nLCIkMSIpLnJlcGxhY2UoL1xzKyg7P1wpKS9nLCIkMSIpLnJlcGxhY2UoLywgL2csIiwiKSkpOmEsTi5wcmVjaXNpb24pLE4uY29tcGF0aWJpbGl0eSksYT1QLnJlcGxhY2VUaW1lVW5pdHM/KEI9YSx0ZS50ZXN0KEIpP0IucmVwbGFjZSh0ZSxmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIm1zIj09bj9yPXBhcnNlSW50KHQpLzFlMysicyI6InMiPT1uJiYocj0xZTMqcGFyc2VGbG9hdCh0KSsibXMiKSxyLmxlbmd0aDxlLmxlbmd0aD9yOmV9KTpCKTphLGE9UC5yZXBsYWNlWmVyb1VuaXRzPy0xPT0oVD1hKS5pbmRleE9mKCIwIik/VDooLTE8VC5pbmRleE9mKCItIikmJihUPVQucmVwbGFjZSgvKFteXHdcZFwtXXxeKVwtMChbXlwuXXwkKS9nLCIkMTAkMiIpLnJlcGxhY2UoLyhbXlx3XGRcLV18XilcLTAoW15cLl18JCkvZywiJDEwJDIiKSksVC5yZXBsYWNlKC8oXnxccykwKyhbMS05XSkvZywiJDEkMiIpLnJlcGxhY2UoLyhefFxEKVwuMCsoXER8JCkvZywiJDEwJDIiKS5yZXBsYWNlKC8oXnxcRClcLjArKFxEfCQpL2csIiQxMCQyIikucmVwbGFjZSgvXC4oWzEtOV0qKTArKFxEfCQpL2csZnVuY3Rpb24oZSx0LG4pe3JldHVybigwPHQubGVuZ3RoPyIuIjoiIikrdCtufSkucmVwbGFjZSgvKF58XEQpMFwuKFxkKS9nLCIkMS4kMiIpKTphLE4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLnplcm9Vbml0cyYmKGE9LTE9PShEPWEpLmluZGV4T2YoIjBkZWciKT9EOkQucmVwbGFjZSgvXCgwZGVnXCkvZywiKDApIiksQz1pLE89YSxTPU4udW5pdHNSZWdleHAsYT0vXig/OlwtbW96XC1jYWxjfFwtd2Via2l0XC1jYWxjfGNhbGN8cmdifGhzbHxyZ2JhfGhzbGEpXCgvLnRlc3QoTyk/TzoiZmxleCI9PUN8fCItbXMtZmxleCI9PUN8fCItd2Via2l0LWZsZXgiPT1DfHwiZmxleC1iYXNpcyI9PUN8fCItd2Via2l0LWZsZXgtYmFzaXMiPT1DP086MDxPLmluZGV4T2YoIiUiKSYmKCJoZWlnaHQiPT1DfHwibWF4LWhlaWdodCI9PUN8fCJ3aWR0aCI9PUN8fCJtYXgtd2lkdGgiPT1DKT9POk8ucmVwbGFjZShTLCIkMTAkMiIpLnJlcGxhY2UoUywiJDEwJDIiKSksTi5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuY29sb3JzJiYoYT11ZShpLGEsTi5jb21wYXRpYmlsaXR5KSkpKSx3PWksRT1hLEE9ZSx4PVAudHJhbnNmb3JtLChhPXZvaWQgMD09PShrPXgodyxFLFgoQSkpKT9FOiExPT09az9lZTprKT09PWVlKXtyLnVudXNlZD0hMDtjb250aW51ZSBlfXIudmFsdWVbVl1bMV09YX1QLnJlcGxhY2VNdWx0aXBsZVplcm9zJiYoeT12b2lkIDAsND09KF89KGI9cikudmFsdWUpLmxlbmd0aCYmIjAiPT09X1swXVsxXSYmIjAiPT09X1sxXVsxXSYmIjAiPT09X1syXVsxXSYmIjAiPT09X1szXVsxXSYmKHk9LTE8Yi5uYW1lLmluZGV4T2YoImJveC1zaGFkb3ciKT8yOjEpLHkmJihiLnZhbHVlLnNwbGljZSh5KSxiLmRpcnR5PSEwKSksImJhY2tncm91bmQiPT1pJiZQLm9wdGltaXplQmFja2dyb3VuZD8odj12b2lkIDAsMT09KHY9ci52YWx1ZSkubGVuZ3RoJiYibm9uZSI9PXZbMF1bMV0mJih2WzBdWzFdPSIwIDAiKSwxPT12Lmxlbmd0aCYmInRyYW5zcGFyZW50Ij09dlswXVsxXSYmKHZbMF1bMV09IjAgMCIpKTowPT09aS5pbmRleE9mKCJib3JkZXIiKSYmMDxpLmluZGV4T2YoInJhZGl1cyIpJiZQLm9wdGltaXplQm9yZGVyUmFkaXVzPyhtPXZvaWQgMCwzPT0oZz0oZD1yKS52YWx1ZSkubGVuZ3RoJiYiLyI9PWdbMV1bMV0mJmdbMF1bMV09PWdbMl1bMV0/bT0xOjU9PWcubGVuZ3RoJiYiLyI9PWdbMl1bMV0mJmdbMF1bMV09PWdbM11bMV0mJmdbMV1bMV09PWdbNF1bMV0/bT0yOjc9PWcubGVuZ3RoJiYiLyI9PWdbM11bMV0mJmdbMF1bMV09PWdbNF1bMV0mJmdbMV1bMV09PWdbNV1bMV0mJmdbMl1bMV09PWdbNl1bMV0/bT0zOjk9PWcubGVuZ3RoJiYiLyI9PWdbNF1bMV0mJmdbMF1bMV09PWdbNV1bMV0mJmdbMV1bMV09PWdbNl1bMV0mJmdbMl1bMV09PWdbN11bMV0mJmdbM11bMV09PWdbOF1bMV0mJihtPTQpLG0mJihkLnZhbHVlLnNwbGljZShtKSxkLmRpcnR5PSEwKSk6ImZpbHRlciI9PWkmJlAub3B0aW1pemVGaWx0ZXImJk4uY29tcGF0aWJpbGl0eS5wcm9wZXJ0aWVzLmllRmlsdGVycz8oMT09KGg9cikudmFsdWUubGVuZ3RoJiYoaC52YWx1ZVswXVsxXT1oLnZhbHVlWzBdWzFdLnJlcGxhY2UoL3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtXC5NaWNyb3NvZnRcLihBbHBoYXxDaHJvbWEpKFxXKS8sZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0LnRvTG93ZXJDYXNlKCkrbn0pKSxoLnZhbHVlWzBdWzFdPWgudmFsdWVbMF1bMV0ucmVwbGFjZSgvLChcUykvZywiLCAkMSIpLnJlcGxhY2UoLyA/PSA/L2csIj0iKSk6ImZvbnQtd2VpZ2h0Ij09aSYmUC5vcHRpbWl6ZUZvbnRXZWlnaHQ/KHA9dm9pZChmPTApLCJub3JtYWwiPT0ocD0oYz1yKS52YWx1ZVtmXVsxXSk/cD0iNDAwIjoiYm9sZCI9PXAmJihwPSI3MDAiKSxjLnZhbHVlW2ZdWzFdPXApOiJvdXRsaW5lIj09aSYmUC5vcHRpbWl6ZU91dGxpbmUmJihsPXZvaWQgMCwxPT0obD1yLnZhbHVlKS5sZW5ndGgmJiJub25lIj09bFswXVsxXSYmKGxbMF1bMV09IjAiKSl9RyhJKSxLKEkpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKShuPWVbcl0pWzBdPT1RLkNPTU1FTlQmJihwZShuLHQpLDA9PT1uWzFdLmxlbmd0aCYmKGUuc3BsaWNlKHIsMSksci0tKSl9KHQsTil9ZnVuY3Rpb24gcGUoZSx0KXtlWzFdWzJdPT1aLkVYQ0xBTUFUSU9OJiYoImFsbCI9PXQubGV2ZWxbVy5PbmVdLnNwZWNpYWxDb21tZW50c3x8dC5jb21tZW50c0tlcHQ8dC5sZXZlbFtXLk9uZV0uc3BlY2lhbENvbW1lbnRzKT90LmNvbW1lbnRzS2VwdCsrOmVbMV09W119ZnVuY3Rpb24gaGUoZSl7dmFyIHQ7cmV0dXJuKCJmaWx0ZXIiPT1lLm5hbWV8fCItbXMtZmlsdGVyIj09ZS5uYW1lKSYmKC0xPCh0PWUudmFsdWVbMF1bMV0pLmluZGV4T2YoInByb2dpZCIpfHwwPT09dC5pbmRleE9mKCJhbHBoYSIpfHwwPT09dC5pbmRleE9mKCJjaHJvbWEiKSl9dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpPW4ub3B0aW9ucyxvPWkubGV2ZWxbVy5PbmVdLGE9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5pZTdIYWNrLHM9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5hZGphY2VudFNwYWNlLHU9aS5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxsPWkuZm9ybWF0LGM9ITEsZj0hMTtpLnVuaXRzUmVnZXhwPWkudW5pdHNSZWdleHB8fGZ1bmN0aW9uKHQpe3ZhciBuPVsicHgiLCJlbSIsImV4IiwiY20iLCJtbSIsImluIiwicHQiLCJwYyIsIiUiXTtyZXR1cm5bImNoIiwicmVtIiwidmgiLCJ2bSIsInZtYXgiLCJ2bWluIiwidnciXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuY29tcGF0aWJpbGl0eS51bml0c1tlXSYmbi5wdXNoKGUpfSksbmV3IFJlZ0V4cCgiKF58XFxzfFxcKHwsKTAoPzoiK24uam9pbigifCIpKyIpKFxcV3wkKSIsImciKX0oaSksaS5wcmVjaXNpb249aS5wcmVjaXNpb258fGZ1bmN0aW9uKGUpe3ZhciB0LG4scj17bWF0Y2hlcjpudWxsLHVuaXRzOnt9fSxpPVtdO2Zvcih0IGluIGUpKG49ZVt0XSkhPXcmJihyLnVuaXRzW3RdPXt9LHIudW5pdHNbdF0udmFsdWU9bixyLnVuaXRzW3RdLm11bHRpcGxpZXI9TWF0aC5wb3coMTAsbiksaS5wdXNoKHQpKTtyZXR1cm4gMDxpLmxlbmd0aCYmKHIuZW5hYmxlZD0hMCxyLmRlY2ltYWxQb2ludE1hdGNoZXI9bmV3IFJlZ0V4cCgiKFxcZClcXC4oJHwiK2kuam9pbigifCIpKyIpKCR8VykiLCJnIiksci56ZXJvTWF0Y2hlcj1uZXcgUmVnRXhwKCIoXFxkKikoXFwuXFxkKykoIitpLmpvaW4oInwiKSsiKSIsImciKSkscn0oby5yb3VuZGluZ1ByZWNpc2lvbiksaS5jb21tZW50c0tlcHQ9aS5jb21tZW50c0tlcHR8fDA7Zm9yKHZhciBwPTAsaD10Lmxlbmd0aDtwPGg7cCsrKXt2YXIgZD10W3BdO3N3aXRjaChkWzBdKXtjYXNlIFEuQVRfUlVMRTpkWzFdPShyPWQsRS50ZXN0KHJbMV0pJiZmPyIiOmRbMV0pLGRbMV09by50aWR5QXRSdWxlcz9iKGRbMV0pOmRbMV0sYz0hMDticmVhaztjYXNlIFEuQVRfUlVMRV9CTE9DSzpmZShkWzFdLGRbMl0sbiksZj0hMDticmVhaztjYXNlIFEuTkVTVEVEX0JMT0NLOmRbMV09by50aWR5QmxvY2tTY29wZXM/dihkWzFdLHUpOmRbMV0sZShkWzJdLG4pLGY9ITA7YnJlYWs7Y2FzZSBRLkNPTU1FTlQ6cGUoZCxpKTticmVhaztjYXNlIFEuUlVMRTpkWzFdPW8udGlkeVNlbGVjdG9ycz9nKGRbMV0sIWEscyxsLG4ud2FybmluZ3MpOmRbMV0sZFsxXT0xPGRbMV0ubGVuZ3RoP20oZFsxXSxvLnNlbGVjdG9yc1NvcnRpbmdNZXRob2QpOmRbMV0sZmUoZFsxXSxkWzJdLG4pLGY9ITB9KGRbMF09PVEuQ09NTUVOVCYmMD09PWRbMV0ubGVuZ3RofHxvLnJlbW92ZUVtcHR5JiYoMD09PWRbMV0ubGVuZ3RofHxkWzJdJiYwPT09ZFsyXS5sZW5ndGgpKSYmKHQuc3BsaWNlKHAsMSkscC0tLGgtLSl9cmV0dXJuIG8uY2xlYW51cENoYXJzZXRzJiZjJiZmdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl7dmFyIGk9ZVtuXTtpWzBdPT1RLkFUX1JVTEUmJl8udGVzdChpWzFdKSYmKHR8fC0xPT1pWzFdLmluZGV4T2YoeSk/KGUuc3BsaWNlKG4sMSksbi0tLHItLSk6KHQ9ITAsZS5zcGxpY2UobiwxKSxlLnVuc2hpZnQoW1EuQVRfUlVMRSxpWzFdLnJlcGxhY2UoXyx5KV0pKSl9fSh0KSx0fX0seyIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCI6NjUsIi4uLy4uL29wdGlvbnMvcm91bmRpbmctcHJlY2lzaW9uIjo2OCwiLi4vLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiI6ODcsIi4uLy4uL3V0aWxzL3NwbGl0Ijo5NiwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vaGFjayI6OCwiLi4vcmVtb3ZlLXVudXNlZCI6NTUsIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4vc2hvcnRlbi1oZXgiOjExLCIuL3Nob3J0ZW4taHNsIjoxMiwiLi9zaG9ydGVuLXJnYiI6MTMsIi4vc29ydC1zZWxlY3RvcnMiOjE0LCIuL3RpZHktYXQtcnVsZSI6MTUsIi4vdGlkeS1ibG9jayI6MTYsIi4vdGlkeS1ydWxlcyI6MTd9XSwxMTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPXthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzBmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmMGYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwZjAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmYwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LGk9e30sbz17fTtmb3IodmFyIGEgaW4gcil7dmFyIHM9clthXTthLmxlbmd0aDxzLmxlbmd0aD9vW3NdPWE6aVthXT1zfXZhciB1PW5ldyBSZWdFeHAoIihefCB8LHxcXCkpKCIrT2JqZWN0LmtleXMoaSkuam9pbigifCIpKyIpKCB8LHxcXCl8JCkiLCJpZyIpLGw9bmV3IFJlZ0V4cCgiKCIrT2JqZWN0LmtleXMobykuam9pbigifCIpKyIpKFteYS1mMC05XXwkKSIsImlnIik7ZnVuY3Rpb24gYyhlLHQsbixyKXtyZXR1cm4gdCtpW24udG9Mb3dlckNhc2UoKV0rcn1mdW5jdGlvbiBmKGUsdCxuKXtyZXR1cm4gb1t0LnRvTG93ZXJDYXNlKCldK259dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PS0xPGUuaW5kZXhPZigiIyIpLG49ZS5yZXBsYWNlKHUsYyk7cmV0dXJuIG4hPWUmJihuPW4ucmVwbGFjZSh1LGMpKSx0P24ucmVwbGFjZShsLGYpOm59fSx7fV0sMTI6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiB1KGUsdCxuKXtyZXR1cm4gbjwwJiYobis9MSksMTxuJiYobi09MSksbjwxLzY/ZSs2Kih0LWUpKm46bjwuNT90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvO2lmKChlJT0zNjApPDAmJihlKz0zNjApLGU9fn5lLzM2MCx0PDA/dD0wOjEwMDx0JiYodD0xMDApLG48MD9uPTA6MTAwPG4mJihuPTEwMCksbj1+fm4vMTAwLDA9PSh0PX5+dC8xMDApKXI9aT1vPW47ZWxzZXt2YXIgYT1uPC41P24qKDErdCk6bit0LW4qdCxzPTIqbi1hO3I9dShzLGEsZSsxLzMpLGk9dShzLGEsZSksbz11KHMsYSxlLTEvMyl9cmV0dXJuW35+KDI1NSpyKSx+figyNTUqaSksfn4oMjU1Km8pXX0oZSx0LG4pLGk9clswXS50b1N0cmluZygxNiksbz1yWzFdLnRvU3RyaW5nKDE2KSxhPXJbMl0udG9TdHJpbmcoMTYpO3JldHVybiIjIisoMT09aS5sZW5ndGg/IjAiOiIiKStpKygxPT1vLmxlbmd0aD8iMCI6IiIpK28rKDE9PWEubGVuZ3RoPyIwIjoiIikrYX19LHt9XSwxMzpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIiMiKygiMDAwMDAiKyhNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KGUpLDI1NSkpPDwxNnxNYXRoLm1heCgwLE1hdGgubWluKHBhcnNlSW50KHQpLDI1NSkpPDw4fE1hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQobiksMjU1KSkpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfX0se31dLDE0OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vLi4vdXRpbHMvbmF0dXJhbC1jb21wYXJlIik7ZnVuY3Rpb24gaShlLHQpe3JldHVybiByKGVbMV0sdFsxXSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlWzFdPnRbMV0/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJuYXR1cmFsIjpyZXR1cm4gZS5zb3J0KGkpO2Nhc2Uic3RhbmRhcmQiOnJldHVybiBlLnNvcnQobyk7Y2FzZSJub25lIjpjYXNlITE6cmV0dXJuIGV9fX0seyIuLi8uLi91dGlscy9uYXR1cmFsLWNvbXBhcmUiOjk0fV0sMTU6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXHMrL2csIiAiKS5yZXBsYWNlKC91cmxcKFxzKy9nLCJ1cmwoIikucmVwbGFjZSgvXHMrXCkvZywiKSIpLnRyaW0oKX19LHt9XSwxNjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBpPS9eQG1lZGlhXFcvO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5sZW5ndGgtMTswPD1yO3ItLSluPSF0JiZpLnRlc3QoZVtyXVsxXSksZVtyXVsxXT1lW3JdWzFdLnJlcGxhY2UoL1xufFxyXG4vZywiICIpLnJlcGxhY2UoL1xzKy9nLCIgIikucmVwbGFjZSgvKCx8OnxcKCkgL2csIiQxIikucmVwbGFjZSgvIFwpL2csIikiKS5yZXBsYWNlKC8nKFthLXpBLVpdW2EtekEtWlxkXC1fXSspJy8sIiQxIikucmVwbGFjZSgvIihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIvLCIkMSIpLnJlcGxhY2Uobj8vXCkgL2c6bnVsbCwiKSIpO3JldHVybiBlfX0se31dLDE3OltmdW5jdGlvbihlLHQsbil7dmFyIHc9ZSgiLi4vLi4vb3B0aW9ucy9mb3JtYXQiKS5TcGFjZXMsRT1lKCIuLi8uLi90b2tlbml6ZXIvbWFya2VyIiksaD1lKCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iKSxBPS9bXHMiJ11baUldXHMqXF0vLHg9LyhbXGRcd10pKFtpSV0pXF0vZyxkPS89IihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIoW2lJXSkvZyxtPS89IihbYS16QS1aXVthLXpBLVpcZFwtX10rKSIoXHN8XF0pL2csZz0vXig/Oig/OjwhLS18LS0+KVxzKikrLyx2PS89JyhbYS16QS1aXVthLXpBLVpcZFwtX10rKScoW2lJXSkvZyxiPS89JyhbYS16QS1aXVthLXpBLVpcZFwtX10rKScoXHN8XF0pL2csaz0vWz5cK35dLyxDPS9ccy8scz0iPCI7ZnVuY3Rpb24geShlKXt2YXIgdCxuLHIsaSxvPSExLGE9ITE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2lmKG49ZVtyXSx0KTtlbHNlIGlmKG49PUUuU0lOR0xFX1FVT1RFfHxuPT1FLkRPVUJMRV9RVU9URSlhPSFhO2Vsc2V7aWYoIShhfHxuIT1FLkNMT1NFX0NVUkxZX0JSQUNLRVQmJm4hPUUuRVhDTEFNQVRJT04mJm4hPXMmJm4hPUUuU0VNSUNPTE9OKSl7bz0hMDticmVha31pZighYSYmMD09PXImJmsudGVzdChuKSl7bz0hMDticmVha319dD1uPT1FLkJBQ0tfU0xBU0h9cmV0dXJuIG99ZnVuY3Rpb24gXyhlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGwsYyxmLHAsaCxkLG09W10sZz0wLHY9ITEsYj0hMSx5PUEudGVzdChlKSxfPXQmJnQuc3BhY2VzW3cuQXJvdW5kU2VsZWN0b3JSZWxhdGlvbl07Zm9yKGg9MCxkPWUubGVuZ3RoO2g8ZDtoKyspe2lmKHI9KG49ZVtoXSk9PUUuTkVXX0xJTkVfTklYLGk9bj09RS5ORVdfTElORV9OSVgmJmVbaC0xXT09RS5DQVJSSUFHRV9SRVRVUk4scz11fHxsLGY9IWMmJiFvJiYwPT09ZyYmay50ZXN0KG4pLHA9Qy50ZXN0KG4pLGEmJnMmJmkpbS5wb3AoKSxtLnBvcCgpO2Vsc2UgaWYobyYmcyYmciltLnBvcCgpO2Vsc2UgaWYobyltLnB1c2gobik7ZWxzZSBpZihuIT1FLk9QRU5fU1FVQVJFX0JSQUNLRVR8fHMpaWYobiE9RS5DTE9TRV9TUVVBUkVfQlJBQ0tFVHx8cylpZihuIT1FLk9QRU5fUk9VTkRfQlJBQ0tFVHx8cylpZihuIT1FLkNMT1NFX1JPVU5EX0JSQUNLRVR8fHMpaWYobiE9RS5TSU5HTEVfUVVPVEV8fHMpaWYobiE9RS5ET1VCTEVfUVVPVEV8fHMpaWYobj09RS5TSU5HTEVfUVVPVEUmJnMpbS5wdXNoKG4pLHU9ITE7ZWxzZSBpZihuPT1FLkRPVUJMRV9RVU9URSYmcyltLnB1c2gobiksbD0hMTtlbHNle2lmKHAmJnYmJiFfKWNvbnRpbnVlOyFwJiZ2JiZfPyhtLnB1c2goRS5TUEFDRSksbS5wdXNoKG4pKTpwJiYoY3x8MDxnKSYmIXN8fHAmJmImJiFzfHwoaXx8cikmJihjfHwwPGcpJiZzfHwoZiYmYiYmIV8/KG0ucG9wKCksbS5wdXNoKG4pKTpmJiYhYiYmXz8obS5wdXNoKEUuU1BBQ0UpLG0ucHVzaChuKSk6cD9tLnB1c2goRS5TUEFDRSk6bS5wdXNoKG4pKX1lbHNlIG0ucHVzaChuKSxsPSEwO2Vsc2UgbS5wdXNoKG4pLHU9ITA7ZWxzZSBtLnB1c2gobiksZy0tO2Vsc2UgbS5wdXNoKG4pLGcrKztlbHNlIG0ucHVzaChuKSxjPSExO2Vsc2UgbS5wdXNoKG4pLGM9ITA7YT1vLG89bj09RS5CQUNLX1NMQVNILHY9ZixiPXB9cmV0dXJuIHk/bS5qb2luKCIiKS5yZXBsYWNlKHgsIiQxICQyXSIpOm0uam9pbigiIil9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPVtdO2Z1bmN0aW9uIHUoZSx0KXtyZXR1cm4gaS5wdXNoKCJIVE1MIGNvbW1lbnQgJyIrdCsiJyBhdCAiK2goZVsyXVswXSkrIi4gUmVtb3ZpbmcuIiksIiJ9Zm9yKHZhciBsPTAsYz1lLmxlbmd0aDtsPGM7bCsrKXt2YXIgZj1lW2xdLHA9ZlsxXTt5KHA9cC5yZXBsYWNlKGcsdS5iaW5kKG51bGwsZikpKT9pLnB1c2goIkludmFsaWQgc2VsZWN0b3IgJyIrZlsxXSsiJyBhdCAiK2goZlsyXVswXSkrIi4gSWdub3JpbmcuIik6KHA9XyhwLHIpLHA9LTE9PShvPXApLmluZGV4T2YoIiciKSYmLTE9PW8uaW5kZXhPZignIicpP286by5yZXBsYWNlKHYsIj0kMSAkMiIpLnJlcGxhY2UoYiwiPSQxJDIiKS5yZXBsYWNlKGQsIj0kMSAkMiIpLnJlcGxhY2UobSwiPSQxJDIiKSxuJiYwPHAuaW5kZXhPZigibmF2IikmJihwPXAucmVwbGFjZSgvXCtuYXYoXFN8JCkvLCIrIG5hdiQxIikpLHQmJi0xPHAuaW5kZXhPZigiKitodG1sICIpfHx0JiYtMTxwLmluZGV4T2YoIio6Zmlyc3QtY2hpbGQraHRtbCAiKXx8KC0xPHAuaW5kZXhPZigiKiIpJiYocD1wLnJlcGxhY2UoL1wqKFs6I1wuXFtdKS9nLCIkMSIpLnJlcGxhY2UoL14oXDpmaXJzdFwtY2hpbGQpP1wraHRtbC8sIiokMStodG1sIikpLC0xPHMuaW5kZXhPZihwKXx8KGZbMV09cCxzLnB1c2gocCksYS5wdXNoKGYpKSkpfXJldHVybiAxPT1hLmxlbmd0aCYmMD09PWFbMF1bMV0ubGVuZ3RoJiYoaS5wdXNoKCJFbXB0eSBzZWxlY3RvciAnIithWzBdWzFdKyInIGF0ICIraChhWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKSxhPVtdKSxhfX0seyIuLi8uLi9vcHRpb25zL2Zvcm1hdCI6NjEsIi4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3fV0sMTg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgeD1lKCIuL2ludmFsaWQtcHJvcGVydHktZXJyb3IiKSxzPWUoIi4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUsbT1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSxBPWUoIi4uLy4uL3Rva2VuaXplci9tYXJrZXIiKSxrPWUoIi4uLy4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiIpO2Z1bmN0aW9uIEMoZSl7dmFyIHQsbjtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZigiaW5oZXJpdCI9PWVbdF1bMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTyhlLHQsbil7dmFyIHI9bltlXTtyZXR1cm4gci5kb3VibGVWYWx1ZXMmJjI9PXIuZGVmYXVsdFZhbHVlLmxlbmd0aD9zKFttLlBST1BFUlRZLFttLlBST1BFUlRZX05BTUUsZV0sW20uUFJPUEVSVFlfVkFMVUUsci5kZWZhdWx0VmFsdWVbMF1dLFttLlBST1BFUlRZX1ZBTFVFLHIuZGVmYXVsdFZhbHVlWzFdXV0pOnIuZG91YmxlVmFsdWVzJiYxPT1yLmRlZmF1bHRWYWx1ZS5sZW5ndGg/cyhbbS5QUk9QRVJUWSxbbS5QUk9QRVJUWV9OQU1FLGVdLFttLlBST1BFUlRZX1ZBTFVFLHIuZGVmYXVsdFZhbHVlWzBdXV0pOnMoW20uUFJPUEVSVFksW20uUFJPUEVSVFlfTkFNRSxlXSxbbS5QUk9QRVJUWV9WQUxVRSxyLmRlZmF1bHRWYWx1ZV1dKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49dFtlLm5hbWVdLmNvbXBvbmVudHMscj1bXSxpPWUudmFsdWU7aWYoaS5sZW5ndGg8MSlyZXR1cm5bXTtpLmxlbmd0aDwyJiYoaVsxXT1pWzBdLnNsaWNlKDApKSxpLmxlbmd0aDwzJiYoaVsyXT1pWzBdLnNsaWNlKDApKSxpLmxlbmd0aDw0JiYoaVszXT1pWzFdLnNsaWNlKDApKTtmb3IodmFyIG89bi5sZW5ndGgtMTswPD1vO28tLSl7dmFyIGE9cyhbbS5QUk9QRVJUWSxbbS5QUk9QRVJUWV9OQU1FLG5bb11dXSk7YS52YWx1ZT1baVtvXV0sci51bnNoaWZ0KGEpfXJldHVybiByfWZ1bmN0aW9uIHIoZSx0LG4pe2Zvcih2YXIgcixpLG8sYT10W2UubmFtZV0scz1bTyhhLmNvbXBvbmVudHNbMF0sMCx0KSxPKGEuY29tcG9uZW50c1sxXSwwLHQpLE8oYS5jb21wb25lbnRzWzJdLDAsdCldLHU9MDt1PDM7dSsrKXt2YXIgbD1zW3VdOzA8bC5uYW1lLmluZGV4T2YoImNvbG9yIik/cj1sOjA8bC5uYW1lLmluZGV4T2YoInN0eWxlIik/aT1sOm89bH1pZigxPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdfHwzPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdJiYiaW5oZXJpdCI9PWUudmFsdWVbMV1bMV0mJiJpbmhlcml0Ij09ZS52YWx1ZVsyXVsxXSlyZXR1cm4gci52YWx1ZT1pLnZhbHVlPW8udmFsdWU9W2UudmFsdWVbMF1dLHM7dmFyIGMsZixwPWUudmFsdWUuc2xpY2UoMCk7cmV0dXJuIDA8cC5sZW5ndGgmJihjPTE8KGY9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbmhlcml0IiE9ZVsxXSYmKHQuaXNXaWR0aChlWzFdKXx8dC5pc1VuaXQoZVsxXSkmJiF0LmlzRHluYW1pY1VuaXQoZVsxXSkpJiYhdC5pc1N0eWxlS2V5d29yZChlWzFdKSYmIXQuaXNDb2xvckZ1bmN0aW9uKGVbMV0pfX0obikpKS5sZW5ndGgmJigibm9uZSI9PWZbMF1bMV18fCJhdXRvIj09ZlswXVsxXSk/ZlsxXTpmWzBdKSYmKG8udmFsdWU9W2NdLHAuc3BsaWNlKHAuaW5kZXhPZihjKSwxKSksMDxwLmxlbmd0aCYmKGM9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbmhlcml0IiE9ZVsxXSYmdC5pc1N0eWxlS2V5d29yZChlWzFdKSYmIXQuaXNDb2xvckZ1bmN0aW9uKGVbMV0pfX0obikpWzBdKSYmKGkudmFsdWU9W2NdLHAuc3BsaWNlKHAuaW5kZXhPZihjKSwxKSksMDxwLmxlbmd0aCYmKGM9cC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnZlcnQiPT1lWzFdfHx0LmlzQ29sb3IoZVsxXSl8fHQuaXNQcmVmaXhlZChlWzFdKX19KG4pKVswXSkmJihyLnZhbHVlPVtjXSxwLnNwbGljZShwLmluZGV4T2YoYyksMSkpLHN9dC5leHBvcnRzPXthbmltYXRpb246ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPU8oZS5uYW1lKyItZHVyYXRpb24iLDAsdCkscz1PKGUubmFtZSsiLXRpbWluZy1mdW5jdGlvbiIsMCx0KSx1PU8oZS5uYW1lKyItZGVsYXkiLDAsdCksbD1PKGUubmFtZSsiLWl0ZXJhdGlvbi1jb3VudCIsMCx0KSxjPU8oZS5uYW1lKyItZGlyZWN0aW9uIiwwLHQpLGY9TyhlLm5hbWUrIi1maWxsLW1vZGUiLDAsdCkscD1PKGUubmFtZSsiLXBsYXktc3RhdGUiLDAsdCksaD1PKGUubmFtZSsiLW5hbWUiLDAsdCksZD1bYSxzLHUsbCxjLGYscCxoXSxtPWUudmFsdWUsZz0hMSx2PSExLGI9ITEseT0hMSxfPSExLHc9ITEsRT0hMSxBPSExO2lmKDE9PWUudmFsdWUubGVuZ3RoJiYiaW5oZXJpdCI9PWUudmFsdWVbMF1bMV0pcmV0dXJuIGEudmFsdWU9cy52YWx1ZT11LnZhbHVlPWwudmFsdWU9Yy52YWx1ZT1mLnZhbHVlPXAudmFsdWU9aC52YWx1ZT1lLnZhbHVlLGQ7aWYoMTxtLmxlbmd0aCYmQyhtKSl0aHJvdyBuZXcgeCgiSW52YWxpZCBhbmltYXRpb24gdmFsdWVzIGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoaT0wLG89bS5sZW5ndGg7aTxvO2krKylpZihyPW1baV0sbi5pc1RpbWUoclsxXSkmJiFnKWEudmFsdWU9W3JdLGc9ITA7ZWxzZSBpZihuLmlzVGltZShyWzFdKSYmIWIpdS52YWx1ZT1bcl0sYj0hMDtlbHNlIGlmKCFuLmlzR2xvYmFsKHJbMV0pJiYhbi5pc1RpbWluZ0Z1bmN0aW9uKHJbMV0pfHx2KWlmKCFuLmlzQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRLZXl3b3JkKHJbMV0pJiYhbi5pc1Bvc2l0aXZlTnVtYmVyKHJbMV0pfHx5KWlmKG4uaXNBbmltYXRpb25EaXJlY3Rpb25LZXl3b3JkKHJbMV0pJiYhXyljLnZhbHVlPVtyXSxfPSEwO2Vsc2UgaWYobi5pc0FuaW1hdGlvbkZpbGxNb2RlS2V5d29yZChyWzFdKSYmIXcpZi52YWx1ZT1bcl0sdz0hMDtlbHNlIGlmKG4uaXNBbmltYXRpb25QbGF5U3RhdGVLZXl3b3JkKHJbMV0pJiYhRSlwLnZhbHVlPVtyXSxFPSEwO2Vsc2V7aWYoIW4uaXNBbmltYXRpb25OYW1lS2V5d29yZChyWzFdKSYmIW4uaXNJZGVudGlmaWVyKHJbMV0pfHxBKXRocm93IG5ldyB4KCJJbnZhbGlkIGFuaW1hdGlvbiB2YWx1ZSBhdCAiK2soclsyXVswXSkrIi4gSWdub3JpbmcuIik7aC52YWx1ZT1bcl0sQT0hMH1lbHNlIGwudmFsdWU9W3JdLHk9ITA7ZWxzZSBzLnZhbHVlPVtyXSx2PSEwO3JldHVybiBkfSxiYWNrZ3JvdW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PKCJiYWNrZ3JvdW5kLWltYWdlIiwwLHQpLGk9TygiYmFja2dyb3VuZC1wb3NpdGlvbiIsMCx0KSxvPU8oImJhY2tncm91bmQtc2l6ZSIsMCx0KSxhPU8oImJhY2tncm91bmQtcmVwZWF0IiwwLHQpLHM9TygiYmFja2dyb3VuZC1hdHRhY2htZW50IiwwLHQpLHU9TygiYmFja2dyb3VuZC1vcmlnaW4iLDAsdCksbD1PKCJiYWNrZ3JvdW5kLWNsaXAiLDAsdCksYz1PKCJiYWNrZ3JvdW5kLWNvbG9yIiwwLHQpLGY9W3IsaSxvLGEscyx1LGwsY10scD1lLnZhbHVlLGg9ITEsZD0hMSxtPSExLGc9ITEsdj0hMTtpZigxPT1lLnZhbHVlLmxlbmd0aCYmImluaGVyaXQiPT1lLnZhbHVlWzBdWzFdKXJldHVybiBjLnZhbHVlPXIudmFsdWU9YS52YWx1ZT1pLnZhbHVlPW8udmFsdWU9dS52YWx1ZT1sLnZhbHVlPWUudmFsdWUsZjtpZigxPT1lLnZhbHVlLmxlbmd0aCYmIjAgMCI9PWUudmFsdWVbMF1bMV0pcmV0dXJuIGY7Zm9yKHZhciBiPXAubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciB5PXBbYl07aWYobi5pc0JhY2tncm91bmRBdHRhY2htZW50S2V5d29yZCh5WzFdKSlzLnZhbHVlPVt5XSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRDbGlwS2V5d29yZCh5WzFdKXx8bi5pc0JhY2tncm91bmRPcmlnaW5LZXl3b3JkKHlbMV0pKWQ/KHUudmFsdWU9W3ldLG09ITApOihsLnZhbHVlPVt5XSxkPSEwKSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRSZXBlYXRLZXl3b3JkKHlbMV0pKWc/YS52YWx1ZS51bnNoaWZ0KHkpOihhLnZhbHVlPVt5XSxnPSEwKSx2PSEwO2Vsc2UgaWYobi5pc0JhY2tncm91bmRQb3NpdGlvbktleXdvcmQoeVsxXSl8fG4uaXNCYWNrZ3JvdW5kU2l6ZUtleXdvcmQoeVsxXSl8fG4uaXNVbml0KHlbMV0pfHxuLmlzRHluYW1pY1VuaXQoeVsxXSkpe2lmKDA8Yil7dmFyIF89cFtiLTFdO19bMV09PUEuRk9SV0FSRF9TTEFTSD9vLnZhbHVlPVt5XToxPGImJnBbYi0yXVsxXT09QS5GT1JXQVJEX1NMQVNIPyhvLnZhbHVlPVtfLHldLGItPTIpOihofHwoaS52YWx1ZT1bXSksaS52YWx1ZS51bnNoaWZ0KHkpLGg9ITApfWVsc2UgaHx8KGkudmFsdWU9W10pLGkudmFsdWUudW5zaGlmdCh5KSxoPSEwO3Y9ITB9ZWxzZSBjLnZhbHVlWzBdWzFdIT10W2MubmFtZV0uZGVmYXVsdFZhbHVlJiYibm9uZSIhPWMudmFsdWVbMF1bMV18fCFuLmlzQ29sb3IoeVsxXSkmJiFuLmlzUHJlZml4ZWQoeVsxXSk/KG4uaXNVcmwoeVsxXSl8fG4uaXNGdW5jdGlvbih5WzFdKSkmJihyLnZhbHVlPVt5XSx2PSEwKTooYy52YWx1ZT1beV0sdj0hMCl9aWYoZCYmIW0mJih1LnZhbHVlPWwudmFsdWUuc2xpY2UoMCkpLCF2KXRocm93IG5ldyB4KCJJbnZhbGlkIGJhY2tncm91bmQgdmFsdWUgYXQgIitrKHBbMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3JldHVybiBmfSxib3JkZXI6cixib3JkZXJSYWRpdXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS52YWx1ZSxyPS0xLGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspaWYobltpXVsxXT09QS5GT1JXQVJEX1NMQVNIKXtyPWk7YnJlYWt9aWYoMD09PXJ8fHI9PT1uLmxlbmd0aC0xKXRocm93IG5ldyB4KCJJbnZhbGlkIGJvcmRlci1yYWRpdXMgdmFsdWUgYXQgIitrKG5bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3ZhciBhPU8oZS5uYW1lLDAsdCk7YS52YWx1ZT0tMTxyP24uc2xpY2UoMCxyKTpuLnNsaWNlKDApLGEuY29tcG9uZW50cz1sKGEsdCk7dmFyIHM9TyhlLm5hbWUsMCx0KTtzLnZhbHVlPS0xPHI/bi5zbGljZShyKzEpOm4uc2xpY2UoMCkscy5jb21wb25lbnRzPWwocyx0KTtmb3IodmFyIHU9MDt1PDQ7dSsrKWEuY29tcG9uZW50c1t1XS5tdWx0aXBsZXg9ITAsYS5jb21wb25lbnRzW3VdLnZhbHVlPWEuY29tcG9uZW50c1t1XS52YWx1ZS5jb25jYXQocy5jb21wb25lbnRzW3VdLnZhbHVlKTtyZXR1cm4gYS5jb21wb25lbnRzfSxmb250OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPU8oImZvbnQtc3R5bGUiLDAsdCksdT1PKCJmb250LXZhcmlhbnQiLDAsdCksbD1PKCJmb250LXdlaWdodCIsMCx0KSxjPU8oImZvbnQtc3RyZXRjaCIsMCx0KSxmPU8oImZvbnQtc2l6ZSIsMCx0KSxwPU8oImxpbmUtaGVpZ2h0IiwwLHQpLGg9TygiZm9udC1mYW1pbHkiLDAsdCksZD1bcyx1LGwsYyxmLHAsaF0sbT1lLnZhbHVlLGc9MCx2PSExLGI9ITEseT0hMSxfPSExLHc9ITEsRT0hMTtpZighbVtnXSl0aHJvdyBuZXcgeCgiTWlzc2luZyBmb250IHZhbHVlcyBhdCAiK2soZS5hbGxbZS5wb3NpdGlvbl1bMV1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2lmKDE9PW0ubGVuZ3RoJiYiaW5oZXJpdCI9PW1bMF1bMV0pcmV0dXJuIHMudmFsdWU9dS52YWx1ZT1sLnZhbHVlPWMudmFsdWU9Zi52YWx1ZT1wLnZhbHVlPWgudmFsdWU9bSxkO2lmKDE9PW0ubGVuZ3RoJiYobi5pc0ZvbnRLZXl3b3JkKG1bMF1bMV0pfHxuLmlzR2xvYmFsKG1bMF1bMV0pfHxuLmlzUHJlZml4ZWQobVswXVsxXSkpKXJldHVybiBtWzBdWzFdPUEuSU5URVJOQUwrbVswXVsxXSxzLnZhbHVlPXUudmFsdWU9bC52YWx1ZT1jLnZhbHVlPWYudmFsdWU9cC52YWx1ZT1oLnZhbHVlPW0sZDtpZihtLmxlbmd0aDwyfHwhZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspaWYobj1lW3JdLHQuaXNGb250U2l6ZUtleXdvcmQoblsxXSl8fHQuaXNVbml0KG5bMV0pJiYhdC5pc0R5bmFtaWNVbml0KG5bMV0pfHx0LmlzRnVuY3Rpb24oblsxXSkpcmV0dXJuITA7cmV0dXJuITF9KG0sbil8fCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylpZihuPWVbcl0sdC5pc0lkZW50aWZpZXIoblsxXSkpcmV0dXJuITA7cmV0dXJuITF9KG0sbikpdGhyb3cgbmV3IHgoIkludmFsaWQgZm9udCB2YWx1ZXMgYXQgIitrKGUuYWxsW2UucG9zaXRpb25dWzFdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtpZigxPG0ubGVuZ3RoJiZDKG0pKXRocm93IG5ldyB4KCJJbnZhbGlkIGZvbnQgdmFsdWVzIGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoO2c8NDspe2lmKHI9bi5pc0ZvbnRTdHJldGNoS2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxpPW4uaXNGb250U3R5bGVLZXl3b3JkKG1bZ11bMV0pfHxuLmlzR2xvYmFsKG1bZ11bMV0pLG89bi5pc0ZvbnRWYXJpYW50S2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxhPW4uaXNGb250V2VpZ2h0S2V5d29yZChtW2ddWzFdKXx8bi5pc0dsb2JhbChtW2ddWzFdKSxpJiYhYilzLnZhbHVlPVttW2ddXSxiPSEwO2Vsc2UgaWYobyYmIXkpdS52YWx1ZT1bbVtnXV0seT0hMDtlbHNlIGlmKGEmJiFfKWwudmFsdWU9W21bZ11dLF89ITA7ZWxzZXtpZighcnx8dil7aWYoaSYmYnx8byYmeXx8YSYmX3x8ciYmdil0aHJvdyBuZXcgeCgiSW52YWxpZCBmb250IHN0eWxlIC8gdmFyaWFudCAvIHdlaWdodCAvIHN0cmV0Y2ggdmFsdWUgYXQgIitrKG1bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO2JyZWFrfWMudmFsdWU9W21bZ11dLHY9ITB9ZysrfWlmKCEobi5pc0ZvbnRTaXplS2V5d29yZChtW2ddWzFdKXx8bi5pc1VuaXQobVtnXVsxXSkmJiFuLmlzRHluYW1pY1VuaXQobVtnXVsxXSkpKXRocm93IG5ldyB4KCJNaXNzaW5nIGZvbnQgc2l6ZSBhdCAiK2sobVswXVsyXVswXSkrIi4gSWdub3JpbmcuIik7aWYoZi52YWx1ZT1bbVtnXV0sdz0hMCwhbVsrK2ddKXRocm93IG5ldyB4KCJNaXNzaW5nIGZvbnQgZmFtaWx5IGF0ICIrayhtWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IodyYmbVtnXSYmbVtnXVsxXT09QS5GT1JXQVJEX1NMQVNIJiZtW2crMV0mJihuLmlzTGluZUhlaWdodEtleXdvcmQobVtnKzFdWzFdKXx8bi5pc1VuaXQobVtnKzFdWzFdKXx8bi5pc051bWJlcihtW2crMV1bMV0pKSYmKHAudmFsdWU9W21bZysxXV0sZysrLGcrKyksaC52YWx1ZT1bXTttW2ddOylFPW1bZ11bMV0hPUEuQ09NTUEmJihFP2gudmFsdWVbaC52YWx1ZS5sZW5ndGgtMV1bMV0rPUEuU1BBQ0UrbVtnXVsxXTpoLnZhbHVlLnB1c2gobVtnXSksITApLGcrKztpZigwPT09aC52YWx1ZS5sZW5ndGgpdGhyb3cgbmV3IHgoIk1pc3NpbmcgZm9udCBmYW1pbHkgYXQgIitrKG1bMF1bMl1bMF0pKyIuIElnbm9yaW5nLiIpO3JldHVybiBkfSxmb3VyVmFsdWVzOmwsbGlzdFN0eWxlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1PKCJsaXN0LXN0eWxlLXR5cGUiLDAsdCksaT1PKCJsaXN0LXN0eWxlLXBvc2l0aW9uIiwwLHQpLG89TygibGlzdC1zdHlsZS1pbWFnZSIsMCx0KSxhPVtyLGksb107aWYoMT09ZS52YWx1ZS5sZW5ndGgmJiJpbmhlcml0Ij09ZS52YWx1ZVswXVsxXSlyZXR1cm4gci52YWx1ZT1pLnZhbHVlPW8udmFsdWU9W2UudmFsdWVbMF1dLGE7dmFyIHM9ZS52YWx1ZS5zbGljZSgwKSx1PXMubGVuZ3RoLGw9MDtmb3IobD0wLHU9cy5sZW5ndGg7bDx1O2wrKylpZihuLmlzVXJsKHNbbF1bMV0pfHwiMCI9PXNbbF1bMV0pe28udmFsdWU9W3NbbF1dLHMuc3BsaWNlKGwsMSk7YnJlYWt9Zm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKyspaWYobi5pc0xpc3RTdHlsZVBvc2l0aW9uS2V5d29yZChzW2xdWzFdKSl7aS52YWx1ZT1bc1tsXV0scy5zcGxpY2UobCwxKTticmVha31yZXR1cm4gMDxzLmxlbmd0aCYmKG4uaXNMaXN0U3R5bGVUeXBlS2V5d29yZChzWzBdWzFdKXx8bi5pc0lkZW50aWZpZXIoc1swXVsxXSkpJiYoci52YWx1ZT1bc1swXV0pLGF9LG11bHRpcGxleDpmdW5jdGlvbihkKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9W10sdT1lLnZhbHVlO2ZvcihyPTAsbz11Lmxlbmd0aDtyPG87cisrKSIsIj09dVtyXVsxXSYmcy5wdXNoKHIpO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gZChlLHQsbik7dmFyIGw9W107Zm9yKHI9MCxvPXMubGVuZ3RoO3I8PW87cisrKXt2YXIgYz0wPT09cj8wOnNbci0xXSsxLGY9cjxvP3Nbcl06dS5sZW5ndGgscD1PKGUubmFtZSwwLHQpO3AudmFsdWU9dS5zbGljZShjLGYpLGwucHVzaChkKHAsdCxuKSl9dmFyIGg9bFswXTtmb3Iocj0wLG89aC5sZW5ndGg7cjxvO3IrKylmb3IoaFtyXS5tdWx0aXBsZXg9ITAsaT0xLGE9bC5sZW5ndGg7aTxhO2krKyloW3JdLnZhbHVlLnB1c2goW20uUFJPUEVSVFlfVkFMVUUsQS5DT01NQV0pLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGhbcl0udmFsdWUsbFtpXVtyXS52YWx1ZSk7cmV0dXJuIGh9fSxvdXRsaW5lOnIsdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9TyhlLm5hbWUrIi1wcm9wZXJ0eSIsMCx0KSxzPU8oZS5uYW1lKyItZHVyYXRpb24iLDAsdCksdT1PKGUubmFtZSsiLXRpbWluZy1mdW5jdGlvbiIsMCx0KSxsPU8oZS5uYW1lKyItZGVsYXkiLDAsdCksYz1bYSxzLHUsbF0sZj1lLnZhbHVlLHA9ITEsaD0hMSxkPSExLG09ITE7aWYoMT09ZS52YWx1ZS5sZW5ndGgmJiJpbmhlcml0Ij09ZS52YWx1ZVswXVsxXSlyZXR1cm4gYS52YWx1ZT1zLnZhbHVlPXUudmFsdWU9bC52YWx1ZT1lLnZhbHVlLGM7aWYoMTxmLmxlbmd0aCYmQyhmKSl0aHJvdyBuZXcgeCgiSW52YWxpZCBhbmltYXRpb24gdmFsdWVzIGF0ICIrayhmWzBdWzJdWzBdKSsiLiBJZ25vcmluZy4iKTtmb3IoaT0wLG89Zi5sZW5ndGg7aTxvO2krKylpZihyPWZbaV0sbi5pc1RpbWUoclsxXSkmJiFwKXMudmFsdWU9W3JdLHA9ITA7ZWxzZSBpZihuLmlzVGltZShyWzFdKSYmIWgpbC52YWx1ZT1bcl0saD0hMDtlbHNlIGlmKCFuLmlzR2xvYmFsKHJbMV0pJiYhbi5pc1RpbWluZ0Z1bmN0aW9uKHJbMV0pfHxtKXtpZighbi5pc0lkZW50aWZpZXIoclsxXSl8fGQpdGhyb3cgbmV3IHgoIkludmFsaWQgYW5pbWF0aW9uIHZhbHVlIGF0ICIrayhyWzJdWzBdKSsiLiBJZ25vcmluZy4iKTthLnZhbHVlPVtyXSxkPSEwfWVsc2UgdS52YWx1ZT1bcl0sbT0hMDtyZXR1cm4gY319fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3LCIuLi93cmFwLWZvci1vcHRpbWl6aW5nIjo1OCwiLi9pbnZhbGlkLXByb3BlcnR5LWVycm9yIjoyM31dLDE5OltmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSgiLi9wcm9wZXJ0aWVzL3VuZGVyc3RhbmRhYmxlIik7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiEoIWkoZSx0LG4sMCwhMCkmJiFlLmlzS2V5d29yZChyKShuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHxlLmlzS2V5d29yZChyKShuKSl9fWZ1bmN0aW9uIG8ocil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzS2V5d29yZChyKShuKXx8ZS5pc0dsb2JhbChuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHwoZS5pc0tleXdvcmQocikobil8fGUuaXNHbG9iYWwobikpKX19ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuISFmdW5jdGlvbihlLHQsbil7cmV0dXJuISghZS5pc0Z1bmN0aW9uKHQpfHwhZS5pc0Z1bmN0aW9uKG4pKSYmdC5zdWJzdHJpbmcoMCx0LmluZGV4T2YoIigiKSk9PT1uLnN1YnN0cmluZygwLG4uaW5kZXhPZigiKCIpKX0oZSx0LG4pfHx0PT09bn1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc1VuaXQobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8IShlLmlzVW5pdCh0KSYmIWUuaXNVbml0KG4pKSYmKCEhZS5pc1VuaXQobil8fCFlLmlzVW5pdCh0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX1mdW5jdGlvbiB1KGUpe3ZhciByPW8oZSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcyhlLHQsbil8fHIoZSx0LG4pfX10LmV4cG9ydHM9e2dlbmVyaWM6e2NvbG9yOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc0NvbG9yKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuY29sb3JPcGFjaXR5JiYoZS5pc1JnYkNvbG9yKHQpfHxlLmlzSHNsQ29sb3IodCkpKSYmISghZS5jb2xvck9wYWNpdHkmJihlLmlzUmdiQ29sb3Iobil8fGUuaXNIc2xDb2xvcihuKSkpJiYoISghZS5pc0NvbG9yKHQpfHwhZS5pc0NvbG9yKG4pKXx8YShlLHQsbikpKX0sY29tcG9uZW50czpmdW5jdGlvbihpKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGlbcl0oZSx0LG4pfX0saW1hZ2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEoIWkoZSx0LG4sMCwhMCkmJiFlLmlzSW1hZ2UobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ISFlLmlzSW1hZ2Uobil8fCFlLmlzSW1hZ2UodCkmJmEoZSx0LG4pKX0scHJvcGVydHlOYW1lOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc0lkZW50aWZpZXIobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc0lkZW50aWZpZXIobikpfSx0aW1lOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hKCFpKGUsdCxuLDAsITApJiYhZS5pc1RpbWUobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8IShlLmlzVGltZSh0KSYmIWUuaXNUaW1lKG4pKSYmKCEhZS5pc1RpbWUobil8fCFlLmlzVGltZSh0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX0sdGltaW5nRnVuY3Rpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNUaW1pbmdGdW5jdGlvbihuKXx8ZS5pc0dsb2JhbChuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHxlLmlzVGltaW5nRnVuY3Rpb24obil8fGUuaXNHbG9iYWwobikpfSx1bml0OnMsdW5pdE9yTnVtYmVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzVW5pdChuKXx8ZS5pc051bWJlcihuKSkmJighKCFlLmlzVmFyaWFibGUodCl8fCFlLmlzVmFyaWFibGUobikpfHwhKChlLmlzVW5pdCh0KXx8ZS5pc051bWJlcih0KSkmJiFlLmlzVW5pdChuKSYmIWUuaXNOdW1iZXIobikpJiYoISghZS5pc1VuaXQobikmJiFlLmlzTnVtYmVyKG4pKXx8IWUuaXNVbml0KHQpJiYhZS5pc051bWJlcih0KSYmKCEoIWUuaXNGdW5jdGlvbih0KXx8ZS5pc1ByZWZpeGVkKHQpfHwhZS5pc0Z1bmN0aW9uKG4pfHxlLmlzUHJlZml4ZWQobikpfHxhKGUsdCxuKSkpKX19LHByb3BlcnR5OnthbmltYXRpb25EaXJlY3Rpb246bygiYW5pbWF0aW9uLWRpcmVjdGlvbiIpLGFuaW1hdGlvbkZpbGxNb2RlOnIoImFuaW1hdGlvbi1maWxsLW1vZGUiKSxhbmltYXRpb25JdGVyYXRpb25Db3VudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuISEoaShlLHQsbiwwLCEwKXx8ZS5pc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50S2V5d29yZChuKXx8ZS5pc1Bvc2l0aXZlTnVtYmVyKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fGUuaXNBbmltYXRpb25JdGVyYXRpb25Db3VudEtleXdvcmQobil8fGUuaXNQb3NpdGl2ZU51bWJlcihuKSl9LGFuaW1hdGlvbk5hbWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNBbmltYXRpb25OYW1lS2V5d29yZChuKXx8ZS5pc0lkZW50aWZpZXIobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc0FuaW1hdGlvbk5hbWVLZXl3b3JkKG4pfHxlLmlzSWRlbnRpZmllcihuKSl9LGFuaW1hdGlvblBsYXlTdGF0ZTpvKCJhbmltYXRpb24tcGxheS1zdGF0ZSIpLGJhY2tncm91bmRBdHRhY2htZW50OnIoImJhY2tncm91bmQtYXR0YWNobWVudCIpLGJhY2tncm91bmRDbGlwOm8oImJhY2tncm91bmQtY2xpcCIpLGJhY2tncm91bmRPcmlnaW46cigiYmFja2dyb3VuZC1vcmlnaW4iKSxiYWNrZ3JvdW5kUG9zaXRpb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNCYWNrZ3JvdW5kUG9zaXRpb25LZXl3b3JkKG4pfHxlLmlzR2xvYmFsKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuaXNCYWNrZ3JvdW5kUG9zaXRpb25LZXl3b3JkKG4pJiYhZS5pc0dsb2JhbChuKSl8fHMoZSx0LG4pKX0sYmFja2dyb3VuZFJlcGVhdDpyKCJiYWNrZ3JvdW5kLXJlcGVhdCIpLGJhY2tncm91bmRTaXplOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hIShpKGUsdCxuLDAsITApfHxlLmlzQmFja2dyb3VuZFNpemVLZXl3b3JkKG4pfHxlLmlzR2xvYmFsKG4pKSYmKCEoIWUuaXNWYXJpYWJsZSh0KXx8IWUuaXNWYXJpYWJsZShuKSl8fCEoIWUuaXNCYWNrZ3JvdW5kU2l6ZUtleXdvcmQobikmJiFlLmlzR2xvYmFsKG4pKXx8cyhlLHQsbikpfSxib3R0b206dSgiYm90dG9tIiksYm9yZGVyQ29sbGFwc2U6cigiYm9yZGVyLWNvbGxhcHNlIiksYm9yZGVyU3R5bGU6bygiKi1zdHlsZSIpLGNsZWFyOm8oImNsZWFyIiksY3Vyc29yOm8oImN1cnNvciIpLGRpc3BsYXk6bygiZGlzcGxheSIpLGZsb2F0Om8oImZsb2F0IiksbGVmdDp1KCJsZWZ0IiksZm9udEZhbWlseTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGkoZSx0LG4sMCwhMCl9LGZvbnRTdHJldGNoOm8oImZvbnQtc3RyZXRjaCIpLGZvbnRTdHlsZTpvKCJmb250LXN0eWxlIiksZm9udFZhcmlhbnQ6bygiZm9udC12YXJpYW50IiksZm9udFdlaWdodDpvKCJmb250LXdlaWdodCIpLGxpc3RTdHlsZVR5cGU6bygibGlzdC1zdHlsZS10eXBlIiksbGlzdFN0eWxlUG9zaXRpb246bygibGlzdC1zdHlsZS1wb3NpdGlvbiIpLG91dGxpbmVTdHlsZTpvKCIqLXN0eWxlIiksb3ZlcmZsb3c6bygib3ZlcmZsb3ciKSxwb3NpdGlvbjpvKCJwb3NpdGlvbiIpLHJpZ2h0OnUoInJpZ2h0IiksdGV4dEFsaWduOm8oInRleHQtYWxpZ24iKSx0ZXh0RGVjb3JhdGlvbjpvKCJ0ZXh0LWRlY29yYXRpb24iKSx0ZXh0T3ZlcmZsb3c6bygidGV4dC1vdmVyZmxvdyIpLHRleHRTaGFkb3c6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiEhKGkoZSx0LG4sMCwhMCl8fGUuaXNVbml0KG4pfHxlLmlzQ29sb3Iobil8fGUuaXNHbG9iYWwobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc1VuaXQobil8fGUuaXNDb2xvcihuKXx8ZS5pc0dsb2JhbChuKSl9LHRvcDp1KCJ0b3AiKSx0cmFuc2Zvcm06YSx2ZXJ0aWNhbEFsaWduOnUoInZlcnRpY2FsLWFsaWduIiksdmlzaWJpbGl0eTpvKCJ2aXNpYmlsaXR5Iiksd2hpdGVTcGFjZTpvKCJ3aGl0ZS1zcGFjZSIpLHpJbmRleDpmdW5jdGlvbihlLHQsbil7cmV0dXJuISghaShlLHQsbiwwLCEwKSYmIWUuaXNaSW5kZXgobikpJiYoISghZS5pc1ZhcmlhYmxlKHQpfHwhZS5pc1ZhcmlhYmxlKG4pKXx8ZS5pc1pJbmRleChuKSl9fX19LHsiLi9wcm9wZXJ0aWVzL3VuZGVyc3RhbmRhYmxlIjo0MH1dLDIwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vd3JhcC1mb3Itb3B0aW1pemluZyIpLnNpbmdsZSxpPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO2Z1bmN0aW9uIG8oZSl7dmFyIHQ9cihbaS5QUk9QRVJUWSxbaS5QUk9QRVJUWV9OQU1FLGUubmFtZV1dKTtyZXR1cm4gdC5pbXBvcnRhbnQ9ZS5pbXBvcnRhbnQsdC5oYWNrPWUuaGFjayx0LnVudXNlZD0hMSx0fXQuZXhwb3J0cz17ZGVlcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9byhlKSxuPWUuY29tcG9uZW50cy5sZW5ndGgtMTswPD1uO24tLSl7dmFyIHI9byhlLmNvbXBvbmVudHNbbl0pO3IudmFsdWU9ZS5jb21wb25lbnRzW25dLnZhbHVlLnNsaWNlKDApLHQuY29tcG9uZW50cy51bnNoaWZ0KHIpfXJldHVybiB0LmRpcnR5PSEwLHQudmFsdWU9ZS52YWx1ZS5zbGljZSgwKSx0fSxzaGFsbG93Om99fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3dyYXAtZm9yLW9wdGltaXppbmciOjU4fV0sMjE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuL2JyZWFrLXVwIiksaT1lKCIuL2Nhbi1vdmVycmlkZSIpLG89ZSgiLi9yZXN0b3JlIiksYT1lKCIuLi8uLi91dGlscy9vdmVycmlkZSIpLHM9e2FuaW1hdGlvbjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy50aW1lLGkuZ2VuZXJpYy50aW1pbmdGdW5jdGlvbixpLmdlbmVyaWMudGltZSxpLnByb3BlcnR5LmFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LGkucHJvcGVydHkuYW5pbWF0aW9uRGlyZWN0aW9uLGkucHJvcGVydHkuYW5pbWF0aW9uRmlsbE1vZGUsaS5wcm9wZXJ0eS5hbmltYXRpb25QbGF5U3RhdGUsaS5wcm9wZXJ0eS5hbmltYXRpb25OYW1lXSksY29tcG9uZW50czpbImFuaW1hdGlvbi1kdXJhdGlvbiIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJhbmltYXRpb24tZGVsYXkiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiIsImFuaW1hdGlvbi1maWxsLW1vZGUiLCJhbmltYXRpb24tcGxheS1zdGF0ZSIsImFuaW1hdGlvbi1uYW1lIl0sYnJlYWtVcDpyLm11bHRpcGxleChyLmFuaW1hdGlvbiksZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8ud2l0aG91dERlZmF1bHRzKSxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24tZGVsYXkiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltZSxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1kaXJlY3Rpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbkRpcmVjdGlvbixjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToibm9ybWFsIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24tZHVyYXRpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltZSxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixrZWVwVW5sZXNzRGVmYXVsdDoiYW5pbWF0aW9uLWRlbGF5Iix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1maWxsLW1vZGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbkZpbGxNb2RlLGNvbXBvbmVudE9mOlsiYW5pbWF0aW9uIl0sZGVmYXVsdFZhbHVlOiJub25lIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5hbmltYXRpb25JdGVyYXRpb25Db3VudCxjb21wb25lbnRPZjpbImFuaW1hdGlvbiJdLGRlZmF1bHRWYWx1ZToiMSIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwiYW5pbWF0aW9uLW5hbWUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmFuaW1hdGlvbk5hbWUsY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6Im5vbmUiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi1wbGF5LXN0YXRlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5hbmltYXRpb25QbGF5U3RhdGUsY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6InJ1bm5pbmciLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltaW5nRnVuY3Rpb24sY29tcG9uZW50T2Y6WyJhbmltYXRpb24iXSxkZWZhdWx0VmFsdWU6ImVhc2UiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sYmFja2dyb3VuZDp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy5pbWFnZSxpLnByb3BlcnR5LmJhY2tncm91bmRQb3NpdGlvbixpLnByb3BlcnR5LmJhY2tncm91bmRTaXplLGkucHJvcGVydHkuYmFja2dyb3VuZFJlcGVhdCxpLnByb3BlcnR5LmJhY2tncm91bmRBdHRhY2htZW50LGkucHJvcGVydHkuYmFja2dyb3VuZE9yaWdpbixpLnByb3BlcnR5LmJhY2tncm91bmRDbGlwLGkuZ2VuZXJpYy5jb2xvcl0pLGNvbXBvbmVudHM6WyJiYWNrZ3JvdW5kLWltYWdlIiwiYmFja2dyb3VuZC1wb3NpdGlvbiIsImJhY2tncm91bmQtc2l6ZSIsImJhY2tncm91bmQtcmVwZWF0IiwiYmFja2dyb3VuZC1hdHRhY2htZW50IiwiYmFja2dyb3VuZC1vcmlnaW4iLCJiYWNrZ3JvdW5kLWNsaXAiLCJiYWNrZ3JvdW5kLWNvbG9yIl0sYnJlYWtVcDpyLm11bHRpcGxleChyLmJhY2tncm91bmQpLGRlZmF1bHRWYWx1ZToiMCAwIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8uYmFja2dyb3VuZCksc2hvcnRlc3RWYWx1ZToiMCIsc2hvcnRoYW5kOiEwfSwiYmFja2dyb3VuZC1hdHRhY2htZW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kQXR0YWNobWVudCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6InNjcm9sbCIsaW50b011bHRpcGxleE1vZGU6InJlYWwifSwiYmFja2dyb3VuZC1jbGlwIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kQ2xpcCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6ImJvcmRlci1ib3giLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiJib3JkZXItYm94In0sImJhY2tncm91bmQtY29sb3IiOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29sb3IsY29tcG9uZW50T2Y6WyJiYWNrZ3JvdW5kIl0sZGVmYXVsdFZhbHVlOiJ0cmFuc3BhcmVudCIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLG11bHRpcGxleExhc3RPbmx5OiEwLG5vbk1lcmdlYWJsZVZhbHVlOiJub25lIixzaG9ydGVzdFZhbHVlOiJyZWQifSwiYmFja2dyb3VuZC1pbWFnZSI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5pbWFnZSxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6Im5vbmUiLGludG9NdWx0aXBsZXhNb2RlOiJkZWZhdWx0In0sImJhY2tncm91bmQtb3JpZ2luIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kT3JpZ2luLGNvbXBvbmVudE9mOlsiYmFja2dyb3VuZCJdLGRlZmF1bHRWYWx1ZToicGFkZGluZy1ib3giLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiJib3JkZXItYm94In0sImJhY2tncm91bmQtcG9zaXRpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmJhY2tncm91bmRQb3NpdGlvbixjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyIwIiwiMCJdLGRvdWJsZVZhbHVlczohMCxpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJiYWNrZ3JvdW5kLXJlcGVhdCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYmFja2dyb3VuZFJlcGVhdCxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyJyZXBlYXQiXSxkb3VibGVWYWx1ZXM6ITAsaW50b011bHRpcGxleE1vZGU6InJlYWwifSwiYmFja2dyb3VuZC1zaXplIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5iYWNrZ3JvdW5kU2l6ZSxjb21wb25lbnRPZjpbImJhY2tncm91bmQiXSxkZWZhdWx0VmFsdWU6WyJhdXRvIl0sZG91YmxlVmFsdWVzOiEwLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIixzaG9ydGVzdFZhbHVlOiIwIDAifSxib3R0b206e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm90dG9tLGRlZmF1bHRWYWx1ZToiYXV0byJ9LGJvcmRlcjp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLXdpZHRoIiwiYm9yZGVyLXN0eWxlIiwiYm9yZGVyLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixvdmVycmlkZXNTaG9ydGhhbmRzOlsiYm9yZGVyLWJvdHRvbSIsImJvcmRlci1sZWZ0IiwiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXRvcCJdLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsc2hvcnRoYW5kOiEwLHNob3J0aGFuZENvbXBvbmVudHM6ITB9LCJib3JkZXItYm90dG9tIjp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1ib3R0b20tc3R5bGUiLCJib3JkZXItYm90dG9tLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ud2l0aG91dERlZmF1bHRzLHNob3J0aGFuZDohMH0sImJvcmRlci1ib3R0b20tY29sb3IiOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29sb3IsY29tcG9uZW50T2Y6WyJib3JkZXItYm90dG9tIiwiYm9yZGVyLWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbImJvcmRlci1yYWRpdXMiXSxkZWZhdWx0VmFsdWU6IjAiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iXX0sImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItcmFkaXVzIl0sZGVmYXVsdFZhbHVlOiIwIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIl19LCJib3JkZXItYm90dG9tLXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxjb21wb25lbnRPZjpbImJvcmRlci1ib3R0b20iLCJib3JkZXItc3R5bGUiXSxkZWZhdWx0VmFsdWU6Im5vbmUifSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLWJvdHRvbSIsImJvcmRlci13aWR0aCJdLGRlZmF1bHRWYWx1ZToibWVkaXVtIixvcHBvc2l0ZVRvOiJib3JkZXItdG9wLXdpZHRoIixzaG9ydGVzdFZhbHVlOiIwIn0sImJvcmRlci1jb2xsYXBzZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm9yZGVyQ29sbGFwc2UsZGVmYXVsdFZhbHVlOiJzZXBhcmF0ZSJ9LCJib3JkZXItY29sb3IiOnticmVha1VwOnIuZm91clZhbHVlcyxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLmNvbG9yLGkuZ2VuZXJpYy5jb2xvcixpLmdlbmVyaWMuY29sb3IsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50T2Y6WyJib3JkZXIiXSxjb21wb25lbnRzOlsiYm9yZGVyLXRvcC1jb2xvciIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItbGVmdC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRlc3RWYWx1ZToicmVkIixzaG9ydGhhbmQ6ITB9LCJib3JkZXItbGVmdCI6e2JyZWFrVXA6ci5ib3JkZXIsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50czpbImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLWxlZnQtc3R5bGUiLCJib3JkZXItbGVmdC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLndpdGhvdXREZWZhdWx0cyxzaG9ydGhhbmQ6ITB9LCJib3JkZXItbGVmdC1jb2xvciI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixjb21wb25lbnRPZjpbImJvcmRlci1jb2xvciIsImJvcmRlci1sZWZ0Il0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1sZWZ0LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxjb21wb25lbnRPZjpbImJvcmRlci1sZWZ0IiwiYm9yZGVyLXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1sZWZ0LXdpZHRoIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItbGVmdCIsImJvcmRlci13aWR0aCJdLGRlZmF1bHRWYWx1ZToibWVkaXVtIixvcHBvc2l0ZVRvOiJib3JkZXItcmlnaHQtd2lkdGgiLHNob3J0ZXN0VmFsdWU6IjAifSwiYm9yZGVyLXJhZGl1cyI6e2JyZWFrVXA6ci5ib3JkZXJSYWRpdXMsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0LGkuZ2VuZXJpYy51bml0XSksY29tcG9uZW50czpbImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyJdLGRlZmF1bHRWYWx1ZToiMCIscmVzdG9yZTpvLmJvcmRlclJhZGl1cyxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSJdfSwiYm9yZGVyLXJpZ2h0Ijp7YnJlYWtVcDpyLmJvcmRlcixjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLmdlbmVyaWMuY29sb3JdKSxjb21wb25lbnRzOlsiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLXJpZ2h0LXN0eWxlIiwiYm9yZGVyLXJpZ2h0LWNvbG9yIl0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ud2l0aG91dERlZmF1bHRzLHNob3J0aGFuZDohMH0sImJvcmRlci1yaWdodC1jb2xvciI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixjb21wb25lbnRPZjpbImJvcmRlci1jb2xvciIsImJvcmRlci1yaWdodCJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJib3JkZXItcmlnaHQtc3R5bGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5LmJvcmRlclN0eWxlLGNvbXBvbmVudE9mOlsiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci1yaWdodC13aWR0aCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXdpZHRoIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLG9wcG9zaXRlVG86ImJvcmRlci1sZWZ0LXdpZHRoIixzaG9ydGVzdFZhbHVlOiIwIn0sImJvcmRlci1zdHlsZSI6e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLnByb3BlcnR5LmJvcmRlclN0eWxlLGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5wcm9wZXJ0eS5ib3JkZXJTdHlsZSxpLnByb3BlcnR5LmJvcmRlclN0eWxlXSksY29tcG9uZW50T2Y6WyJib3JkZXIiXSxjb21wb25lbnRzOlsiYm9yZGVyLXRvcC1zdHlsZSIsImJvcmRlci1yaWdodC1zdHlsZSIsImJvcmRlci1ib3R0b20tc3R5bGUiLCJib3JkZXItbGVmdC1zdHlsZSJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRoYW5kOiEwfSwiYm9yZGVyLXRvcCI6e2JyZWFrVXA6ci5ib3JkZXIsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kuZ2VuZXJpYy51bml0LGkucHJvcGVydHkuYm9yZGVyU3R5bGUsaS5nZW5lcmljLmNvbG9yXSksY29tcG9uZW50czpbImJvcmRlci10b3Atd2lkdGgiLCJib3JkZXItdG9wLXN0eWxlIiwiYm9yZGVyLXRvcC1jb2xvciJdLGRlZmF1bHRWYWx1ZToibm9uZSIscmVzdG9yZTpvLndpdGhvdXREZWZhdWx0cyxzaG9ydGhhbmQ6ITB9LCJib3JkZXItdG9wLWNvbG9yIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbG9yLGNvbXBvbmVudE9mOlsiYm9yZGVyLWNvbG9yIiwiYm9yZGVyLXRvcCJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJib3JkZXItcmFkaXVzIl0sZGVmYXVsdFZhbHVlOiIwIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIl19LCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsiYm9yZGVyLXJhZGl1cyJdLGRlZmF1bHRWYWx1ZToiMCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSJdfSwiYm9yZGVyLXRvcC1zdHlsZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuYm9yZGVyU3R5bGUsY29tcG9uZW50T2Y6WyJib3JkZXItc3R5bGUiLCJib3JkZXItdG9wIl0sZGVmYXVsdFZhbHVlOiJub25lIn0sImJvcmRlci10b3Atd2lkdGgiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbImJvcmRlci10b3AiLCJib3JkZXItd2lkdGgiXSxkZWZhdWx0VmFsdWU6Im1lZGl1bSIsb3Bwb3NpdGVUbzoiYm9yZGVyLWJvdHRvbS13aWR0aCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJib3JkZXItd2lkdGgiOnticmVha1VwOnIuZm91clZhbHVlcyxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXRdKSxjb21wb25lbnRPZjpbImJvcmRlciJdLGNvbXBvbmVudHM6WyJib3JkZXItdG9wLXdpZHRoIiwiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1sZWZ0LXdpZHRoIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHJlc3RvcmU6by5mb3VyVmFsdWVzLHNob3J0ZXN0VmFsdWU6IjAiLHNob3J0aGFuZDohMH0sY2xlYXI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuY2xlYXIsZGVmYXVsdFZhbHVlOiJub25lIn0sY29sb3I6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb2xvcixkZWZhdWx0VmFsdWU6InRyYW5zcGFyZW50IixzaG9ydGVzdFZhbHVlOiJyZWQifSxjdXJzb3I6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuY3Vyc29yLGRlZmF1bHRWYWx1ZToiYXV0byJ9LGRpc3BsYXk6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZGlzcGxheX0sZmxvYXQ6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZmxvYXQsZGVmYXVsdFZhbHVlOiJub25lIn0sZm9udDp7YnJlYWtVcDpyLmZvbnQsY2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kucHJvcGVydHkuZm9udFN0eWxlLGkucHJvcGVydHkuZm9udFZhcmlhbnQsaS5wcm9wZXJ0eS5mb250V2VpZ2h0LGkucHJvcGVydHkuZm9udFN0cmV0Y2gsaS5nZW5lcmljLnVuaXQsaS5nZW5lcmljLnVuaXQsaS5wcm9wZXJ0eS5mb250RmFtaWx5XSksY29tcG9uZW50czpbImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc2l6ZSIsImxpbmUtaGVpZ2h0IiwiZm9udC1mYW1pbHkiXSxyZXN0b3JlOm8uZm9udCxzaG9ydGhhbmQ6ITB9LCJmb250LWZhbWlseSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZm9udEZhbWlseSxkZWZhdWx0VmFsdWU6InVzZXJ8YWdlbnR8c3BlY2lmaWMifSwiZm9udC1zaXplIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHNob3J0ZXN0VmFsdWU6IjAifSwiZm9udC1zdHJldGNoIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250U3RyZXRjaCxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LCJmb250LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250U3R5bGUsZGVmYXVsdFZhbHVlOiJub3JtYWwifSwiZm9udC12YXJpYW50Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5mb250VmFyaWFudCxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LCJmb250LXdlaWdodCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuZm9udFdlaWdodCxkZWZhdWx0VmFsdWU6Im5vcm1hbCIsc2hvcnRlc3RWYWx1ZToiNDAwIn0saGVpZ2h0OntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxkZWZhdWx0VmFsdWU6ImF1dG8iLHNob3J0ZXN0VmFsdWU6IjAifSxsZWZ0OntjYW5PdmVycmlkZTppLnByb3BlcnR5LmxlZnQsZGVmYXVsdFZhbHVlOiJhdXRvIn0sImxpbmUtaGVpZ2h0Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXRPck51bWJlcixkZWZhdWx0VmFsdWU6Im5vcm1hbCIsc2hvcnRlc3RWYWx1ZToiMCJ9LCJsaXN0LXN0eWxlIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbXBvbmVudHMoW2kucHJvcGVydHkubGlzdFN0eWxlVHlwZSxpLnByb3BlcnR5Lmxpc3RTdHlsZVBvc2l0aW9uLGkucHJvcGVydHkubGlzdFN0eWxlSW1hZ2VdKSxjb21wb25lbnRzOlsibGlzdC1zdHlsZS10eXBlIiwibGlzdC1zdHlsZS1wb3NpdGlvbiIsImxpc3Qtc3R5bGUtaW1hZ2UiXSxicmVha1VwOnIubGlzdFN0eWxlLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsZGVmYXVsdFZhbHVlOiJvdXRzaWRlIixzaG9ydGVzdFZhbHVlOiJub25lIixzaG9ydGhhbmQ6ITB9LCJsaXN0LXN0eWxlLWltYWdlIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmltYWdlLGNvbXBvbmVudE9mOlsibGlzdC1zdHlsZSJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJsaXN0LXN0eWxlLXBvc2l0aW9uIjp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5saXN0U3R5bGVQb3NpdGlvbixjb21wb25lbnRPZjpbImxpc3Qtc3R5bGUiXSxkZWZhdWx0VmFsdWU6Im91dHNpZGUiLHNob3J0ZXN0VmFsdWU6Imluc2lkZSJ9LCJsaXN0LXN0eWxlLXR5cGUiOntjYW5PdmVycmlkZTppLnByb3BlcnR5Lmxpc3RTdHlsZVR5cGUsY29tcG9uZW50T2Y6WyJsaXN0LXN0eWxlIl0sZGVmYXVsdFZhbHVlOiJkZWNpbWFsfGRpc2MiLHNob3J0ZXN0VmFsdWU6Im5vbmUifSxtYXJnaW46e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdF0pLGNvbXBvbmVudHM6WyJtYXJnaW4tdG9wIiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0Il0sZGVmYXVsdFZhbHVlOiIwIixyZXN0b3JlOm8uZm91clZhbHVlcyxzaG9ydGhhbmQ6ITB9LCJtYXJnaW4tYm90dG9tIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJtYXJnaW4iXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86Im1hcmdpbi10b3AifSwibWFyZ2luLWxlZnQiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbIm1hcmdpbiJdLGRlZmF1bHRWYWx1ZToiMCIsb3Bwb3NpdGVUbzoibWFyZ2luLXJpZ2h0In0sIm1hcmdpbi1yaWdodCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsibWFyZ2luIl0sZGVmYXVsdFZhbHVlOiIwIixvcHBvc2l0ZVRvOiJtYXJnaW4tbGVmdCJ9LCJtYXJnaW4tdG9wIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJtYXJnaW4iXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86Im1hcmdpbi1ib3R0b20ifSxvdXRsaW5lOntjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5nZW5lcmljLmNvbG9yLGkucHJvcGVydHkub3V0bGluZVN0eWxlLGkuZ2VuZXJpYy51bml0XSksY29tcG9uZW50czpbIm91dGxpbmUtY29sb3IiLCJvdXRsaW5lLXN0eWxlIiwib3V0bGluZS13aWR0aCJdLGJyZWFrVXA6ci5vdXRsaW5lLHJlc3RvcmU6by53aXRob3V0RGVmYXVsdHMsZGVmYXVsdFZhbHVlOiIwIixzaG9ydGhhbmQ6ITB9LCJvdXRsaW5lLWNvbG9yIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLmNvbG9yLGNvbXBvbmVudE9mOlsib3V0bGluZSJdLGRlZmF1bHRWYWx1ZToiaW52ZXJ0IixzaG9ydGVzdFZhbHVlOiJyZWQifSwib3V0bGluZS1zdHlsZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkub3V0bGluZVN0eWxlLGNvbXBvbmVudE9mOlsib3V0bGluZSJdLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJvdXRsaW5lLXdpZHRoIjp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJvdXRsaW5lIl0sZGVmYXVsdFZhbHVlOiJtZWRpdW0iLHNob3J0ZXN0VmFsdWU6IjAifSxvdmVyZmxvdzp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5vdmVyZmxvdyxkZWZhdWx0VmFsdWU6InZpc2libGUifSwib3ZlcmZsb3cteCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkub3ZlcmZsb3csZGVmYXVsdFZhbHVlOiJ2aXNpYmxlIn0sIm92ZXJmbG93LXkiOntjYW5PdmVycmlkZTppLnByb3BlcnR5Lm92ZXJmbG93LGRlZmF1bHRWYWx1ZToidmlzaWJsZSJ9LHBhZGRpbmc6e2JyZWFrVXA6ci5mb3VyVmFsdWVzLGNhbk92ZXJyaWRlOmkuZ2VuZXJpYy5jb21wb25lbnRzKFtpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdCxpLmdlbmVyaWMudW5pdF0pLGNvbXBvbmVudHM6WyJwYWRkaW5nLXRvcCIsInBhZGRpbmctcmlnaHQiLCJwYWRkaW5nLWJvdHRvbSIsInBhZGRpbmctbGVmdCJdLGRlZmF1bHRWYWx1ZToiMCIscmVzdG9yZTpvLmZvdXJWYWx1ZXMsc2hvcnRoYW5kOiEwfSwicGFkZGluZy1ib3R0b20iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbInBhZGRpbmciXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86InBhZGRpbmctdG9wIn0sInBhZGRpbmctbGVmdCI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy51bml0LGNvbXBvbmVudE9mOlsicGFkZGluZyJdLGRlZmF1bHRWYWx1ZToiMCIsb3Bwb3NpdGVUbzoicGFkZGluZy1yaWdodCJ9LCJwYWRkaW5nLXJpZ2h0Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnVuaXQsY29tcG9uZW50T2Y6WyJwYWRkaW5nIl0sZGVmYXVsdFZhbHVlOiIwIixvcHBvc2l0ZVRvOiJwYWRkaW5nLWxlZnQifSwicGFkZGluZy10b3AiOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxjb21wb25lbnRPZjpbInBhZGRpbmciXSxkZWZhdWx0VmFsdWU6IjAiLG9wcG9zaXRlVG86InBhZGRpbmctYm90dG9tIn0scG9zaXRpb246e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkucG9zaXRpb24sZGVmYXVsdFZhbHVlOiJzdGF0aWMifSxyaWdodDp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS5yaWdodCxkZWZhdWx0VmFsdWU6ImF1dG8ifSwidGV4dC1hbGlnbiI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkudGV4dEFsaWduLGRlZmF1bHRWYWx1ZToibGVmdHxyaWdodCJ9LCJ0ZXh0LWRlY29yYXRpb24iOntjYW5PdmVycmlkZTppLnByb3BlcnR5LnRleHREZWNvcmF0aW9uLGRlZmF1bHRWYWx1ZToibm9uZSJ9LCJ0ZXh0LW92ZXJmbG93Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50ZXh0T3ZlcmZsb3csZGVmYXVsdFZhbHVlOiJub25lIn0sInRleHQtc2hhZG93Ijp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50ZXh0U2hhZG93LGRlZmF1bHRWYWx1ZToibm9uZSJ9LHRvcDp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS50b3AsZGVmYXVsdFZhbHVlOiJhdXRvIn0sdHJhbnNmb3JtOntjYW5PdmVycmlkZTppLnByb3BlcnR5LnRyYW5zZm9ybSx2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW1zLSIsIi13ZWJraXQtIl19LHRyYW5zaXRpb246e2JyZWFrVXA6ci5tdWx0aXBsZXgoci50cmFuc2l0aW9uKSxjYW5PdmVycmlkZTppLmdlbmVyaWMuY29tcG9uZW50cyhbaS5wcm9wZXJ0eS50cmFuc2l0aW9uUHJvcGVydHksaS5nZW5lcmljLnRpbWUsaS5nZW5lcmljLnRpbWluZ0Z1bmN0aW9uLGkuZ2VuZXJpYy50aW1lXSksY29tcG9uZW50czpbInRyYW5zaXRpb24tcHJvcGVydHkiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLCJ0cmFuc2l0aW9uLWRlbGF5Il0sZGVmYXVsdFZhbHVlOiJub25lIixyZXN0b3JlOm8ubXVsdGlwbGV4KG8ud2l0aG91dERlZmF1bHRzKSxzaG9ydGhhbmQ6ITAsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJ0cmFuc2l0aW9uLWRlbGF5Ijp7Y2FuT3ZlcnJpZGU6aS5nZW5lcmljLnRpbWUsY29tcG9uZW50T2Y6WyJ0cmFuc2l0aW9uIl0sZGVmYXVsdFZhbHVlOiIwcyIsaW50b011bHRpcGxleE1vZGU6InJlYWwiLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwidHJhbnNpdGlvbi1kdXJhdGlvbiI6e2Nhbk92ZXJyaWRlOmkuZ2VuZXJpYy50aW1lLGNvbXBvbmVudE9mOlsidHJhbnNpdGlvbiJdLGRlZmF1bHRWYWx1ZToiMHMiLGludG9NdWx0aXBsZXhNb2RlOiJyZWFsIix2ZW5kb3JQcmVmaXhlczpbIi1tb3otIiwiLW8tIiwiLXdlYmtpdC0iXX0sInRyYW5zaXRpb24tcHJvcGVydHkiOntjYW5PdmVycmlkZTppLmdlbmVyaWMucHJvcGVydHlOYW1lLGNvbXBvbmVudE9mOlsidHJhbnNpdGlvbiJdLGRlZmF1bHRWYWx1ZToiYWxsIixpbnRvTXVsdGlwbGV4TW9kZToicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyVmFsdWU6Il8iLHZlbmRvclByZWZpeGVzOlsiLW1vei0iLCItby0iLCItd2Via2l0LSJdfSwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOntjYW5PdmVycmlkZTppLmdlbmVyaWMudGltaW5nRnVuY3Rpb24sY29tcG9uZW50T2Y6WyJ0cmFuc2l0aW9uIl0sZGVmYXVsdFZhbHVlOiJlYXNlIixpbnRvTXVsdGlwbGV4TW9kZToicmVhbCIsdmVuZG9yUHJlZml4ZXM6WyItbW96LSIsIi1vLSIsIi13ZWJraXQtIl19LCJ2ZXJ0aWNhbC1hbGlnbiI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkudmVydGljYWxBbGlnbixkZWZhdWx0VmFsdWU6ImJhc2VsaW5lIn0sdmlzaWJpbGl0eTp7Y2FuT3ZlcnJpZGU6aS5wcm9wZXJ0eS52aXNpYmlsaXR5LGRlZmF1bHRWYWx1ZToidmlzaWJsZSJ9LCJ3aGl0ZS1zcGFjZSI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkud2hpdGVTcGFjZSxkZWZhdWx0VmFsdWU6Im5vcm1hbCJ9LHdpZHRoOntjYW5PdmVycmlkZTppLmdlbmVyaWMudW5pdCxkZWZhdWx0VmFsdWU6ImF1dG8iLHNob3J0ZXN0VmFsdWU6IjAifSwiei1pbmRleCI6e2Nhbk92ZXJyaWRlOmkucHJvcGVydHkuekluZGV4LGRlZmF1bHRWYWx1ZToiYXV0byJ9fTtmdW5jdGlvbiB1KGUsdCl7dmFyIG49YShzW2VdLHt9KTtyZXR1cm4iY29tcG9uZW50T2YiaW4gbiYmKG4uY29tcG9uZW50T2Y9bi5jb21wb25lbnRPZi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQrZX0pKSwiY29tcG9uZW50cyJpbiBuJiYobi5jb21wb25lbnRzPW4uY29tcG9uZW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQrZX0pKSwia2VlcFVubGVzc0RlZmF1bHQiaW4gbiYmKG4ua2VlcFVubGVzc0RlZmF1bHQ9dCtuLmtlZXBVbmxlc3NEZWZhdWx0KSxufXZhciBsPXt9O2Zvcih2YXIgYyBpbiBzKXt2YXIgZj1zW2NdO2lmKCJ2ZW5kb3JQcmVmaXhlcyJpbiBmKXtmb3IodmFyIHA9MDtwPGYudmVuZG9yUHJlZml4ZXMubGVuZ3RoO3ArKyl7dmFyIGg9Zi52ZW5kb3JQcmVmaXhlc1twXSxkPXUoYyxoKTtkZWxldGUgZC52ZW5kb3JQcmVmaXhlcyxsW2grY109ZH1kZWxldGUgZi52ZW5kb3JQcmVmaXhlc319dC5leHBvcnRzPWEocyxsKX0seyIuLi8uLi91dGlscy9vdmVycmlkZSI6OTUsIi4vYnJlYWstdXAiOjE4LCIuL2Nhbi1vdmVycmlkZSI6MTksIi4vcmVzdG9yZSI6NDl9XSwyMjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBjPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGY9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMscD1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS52YWx1ZTt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXt2YXIgbixyLGksbyxhLHMsdT1bXTtpZih0WzBdPT1jLlJVTEUpZm9yKG49IS9bXC5cKz5+XS8udGVzdChmKHRbMV0pKSxhPTAscz10WzJdLmxlbmd0aDthPHM7YSsrKShyPXRbMl1bYV0pWzBdPT1jLlBST1BFUlRZJiYwIT09KGk9clsxXVsxXSkubGVuZ3RoJiYwIT09aS5pbmRleE9mKCItLSIpJiYobz1wKHIsYSksdS5wdXNoKFtpLG8sKGw9aSwibGlzdC1zdHlsZSI9PWw/bDowPGwuaW5kZXhPZigiLXJhZGl1cyIpPyJib3JkZXItcmFkaXVzIjoiYm9yZGVyLWNvbGxhcHNlIj09bHx8ImJvcmRlci1zcGFjaW5nIj09bHx8ImJvcmRlci1pbWFnZSI9PWw/bDowPT09bC5pbmRleE9mKCJib3JkZXItIikmJi9eYm9yZGVyXC1cdytcLVx3KyQvLnRlc3QobCk/bC5tYXRjaCgvYm9yZGVyXC1cdysvKVswXTowPT09bC5pbmRleE9mKCJib3JkZXItIikmJi9eYm9yZGVyXC1cdyskLy50ZXN0KGwpPyJib3JkZXIiOjA9PT1sLmluZGV4T2YoInRleHQtIik/bDoiLWNocm9tZS0iPT1sP2w6bC5yZXBsYWNlKC9eXC1cdytcLS8sIiIpLm1hdGNoKC8oW2EtekEtWl0rKS8pWzBdLnRvTG93ZXJDYXNlKCkpLHRbMl1bYV0saSsiOiIrbyx0WzFdLG5dKSk7ZWxzZSBpZih0WzBdPT1jLk5FU1RFRF9CTE9DSylmb3IoYT0wLHM9dFsyXS5sZW5ndGg7YTxzO2ErKyl1PXUuY29uY2F0KGUodFsyXVthXSkpO3ZhciBsO3JldHVybiB1fX0seyIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe3RoaXMubmFtZT0iSW52YWxpZFByb3BlcnR5RXJyb3IiLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9KHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cix0LmV4cG9ydHM9cn0se31dLDI0OltmdW5jdGlvbihlLHQsbil7dmFyIGg9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpLHA9ZSgiLi4vLi4vdXRpbHMvc3BsaXQiKSxkPS9cL2RlZXBcLy8sbT0vXjo6LyxnPSI6bm90Iix2PVsiOmRpciIsIjpsYW5nIiwiOm5vdCIsIjpudGgtY2hpbGQiLCI6bnRoLWxhc3QtY2hpbGQiLCI6bnRoLWxhc3Qtb2YtdHlwZSIsIjpudGgtb2YtdHlwZSJdLGI9L1s+XCt+XS8seT1bIjphZnRlciIsIjpiZWZvcmUiLCI6Zmlyc3QtbGV0dGVyIiwiOmZpcnN0LWxpbmUiLCI6bGFuZyJdLF89WyI6OmFmdGVyIiwiOjpiZWZvcmUiLCI6OmZpcnN0LWxldHRlciIsIjo6Zmlyc3QtbGluZSJdLHc9e0RPVUJMRV9RVU9URToiZG91YmxlLXF1b3RlIixTSU5HTEVfUVVPVEU6InNpbmdsZS1xdW90ZSIsUk9PVDoicm9vdCJ9O2Z1bmN0aW9uIEUoZSl7dmFyIHQsbixyLGksbyxhLHM9W10sdT1bXSxsPXcuUk9PVCxjPTAsZj0hMSxwPSExO2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXQ9ZVtvXSxpPSFyJiZiLnRlc3QodCksbj1sPT13LkRPVUJMRV9RVU9URXx8bD09dy5TSU5HTEVfUVVPVEUscj91LnB1c2godCk6dD09aC5ET1VCTEVfUVVPVEUmJmw9PXcuUk9PVD8odS5wdXNoKHQpLGw9dy5ET1VCTEVfUVVPVEUpOnQ9PWguRE9VQkxFX1FVT1RFJiZsPT13LkRPVUJMRV9RVU9URT8odS5wdXNoKHQpLGw9dy5ST09UKTp0PT1oLlNJTkdMRV9RVU9URSYmbD09dy5ST09UPyh1LnB1c2godCksbD13LlNJTkdMRV9RVU9URSk6dD09aC5TSU5HTEVfUVVPVEUmJmw9PXcuU0lOR0xFX1FVT1RFPyh1LnB1c2godCksbD13LlJPT1QpOm4/dS5wdXNoKHQpOnQ9PWguT1BFTl9ST1VORF9CUkFDS0VUPyh1LnB1c2godCksYysrKTp0PT1oLkNMT1NFX1JPVU5EX0JSQUNLRVQmJjE9PWMmJmY/KHUucHVzaCh0KSxzLnB1c2godS5qb2luKCIiKSksYy0tLGY9ISh1PVtdKSk6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUPyh1LnB1c2godCksYy0tKTp0PT1oLkNPTE9OJiYwPT09YyYmZiYmIXA/KHMucHVzaCh1LmpvaW4oIiIpKSwodT1bXSkucHVzaCh0KSk6dCE9aC5DT0xPTnx8MCE9PWN8fHA/dD09aC5TUEFDRSYmMD09PWMmJmY/KHMucHVzaCh1LmpvaW4oIiIpKSxmPSEodT1bXSkpOmkmJjA9PT1jJiZmPyhzLnB1c2godS5qb2luKCIiKSksZj0hKHU9W10pKTp1LnB1c2godCk6KCh1PVtdKS5wdXNoKHQpLGY9ITApLHI9dD09aC5CQUNLX1NMQVNILHA9dD09aC5DT0xPTjtyZXR1cm4gMDx1Lmxlbmd0aCYmZiYmcy5wdXNoKHUuam9pbigiIikpLHN9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGY9cChlLGguQ09NTUEpO2ZvcihvPTAsYT1mLmxlbmd0aDtvPGE7bysrKWlmKDA9PT0oaT1mW29dKS5sZW5ndGh8fChjPWksZC50ZXN0KGMpKXx8LTE8aS5pbmRleE9mKGguQ09MT04pJiYodT1FKHM9aSksbD1yLCEoZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhO2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWlmKHI9ZVtvXSxpPS0xPHIuaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCk/ci5zdWJzdHJpbmcoMCxyLmluZGV4T2YoaC5PUEVOX1JPVU5EX0JSQUNLRVQpKTpyLC0xPT09dC5pbmRleE9mKGkpJiYtMT09PW4uaW5kZXhPZihpKSlyZXR1cm4hMTtyZXR1cm4hMH0odSx0LG4pJiZmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspe2lmKHQ9ZVtvXSxyPXQuaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCksbj0oaT0tMTxyKT90LnN1YnN0cmluZygwLHIpOnQsaSYmLTE9PXYuaW5kZXhPZihuKSlyZXR1cm4hMTtpZighaSYmLTE8di5pbmRleE9mKG4pKXJldHVybiExfXJldHVybiEwfSh1KSYmKHUubGVuZ3RoPDJ8fCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGwsYz0wO2Zvcih1PTAsbD10Lmxlbmd0aDt1PGwmJihuPXRbdV0saT10W3UrMV0pO3UrKylpZihyPWUuaW5kZXhPZihuLGMpLG89ZS5pbmRleE9mKG4scisxKSxjPW8scituLmxlbmd0aD09byYmKGE9LTE8bi5pbmRleE9mKGguT1BFTl9ST1VORF9CUkFDS0VUKT9uLnN1YnN0cmluZygwLG4uaW5kZXhPZihoLk9QRU5fUk9VTkRfQlJBQ0tFVCkpOm4scz0tMTxpLmluZGV4T2YoaC5PUEVOX1JPVU5EX0JSQUNLRVQpP2kuc3Vic3RyaW5nKDAsaS5pbmRleE9mKGguT1BFTl9ST1VORF9CUkFDS0VUKSk6aSxhIT1nfHxzIT1nKSlyZXR1cm4hMDtyZXR1cm4hMX0ocyx1KSkmJih1Lmxlbmd0aDwyfHxsJiZmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvPTA7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYodD1lW25dLGk9dCxtLnRlc3QoaSk/bys9LTE8Xy5pbmRleE9mKHQpPzE6MDpvKz0tMTx5LmluZGV4T2YodCk/MTowLDE8bylyZXR1cm4hMTtyZXR1cm4hMH0odSkpKSkpcmV0dXJuITE7cmV0dXJuITB9fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi91dGlscy9zcGxpdCI6OTZ9XSwyNTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBoPWUoIi4vaXMtbWVyZ2VhYmxlIiksZD1lKCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiKSxtPWUoIi4uL2xldmVsLTEvc29ydC1zZWxlY3RvcnMiKSxnPWUoIi4uL2xldmVsLTEvdGlkeS1ydWxlcyIpLHY9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxiPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHkseT1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxfPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bbnVsbCxbXSxbXV0scj10Lm9wdGlvbnMsaT1yLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLmFkamFjZW50U3BhY2Usbz1yLmxldmVsW3YuT25lXS5zZWxlY3RvcnNTb3J0aW5nTWV0aG9kLGE9ci5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLHM9ci5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyx1PXIuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubWVyZ2VMaW1pdCxsPXIuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGM9MCxmPWUubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPWVbY107cFswXT09Xy5SVUxFP25bMF09PV8uUlVMRSYmeShwWzFdKT09eShuWzFdKT8oQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoblsyXSxwWzJdKSxkKG5bMl0sITAsITAsdCkscFsyXT1bXSk6blswXT09Xy5SVUxFJiZiKHBbMl0pPT1iKG5bMl0pJiZoKHkocFsxXSksYSxzLGwpJiZoKHkoblsxXSksYSxzLGwpJiZuWzFdLmxlbmd0aDx1PyhuWzFdPWcoblsxXS5jb25jYXQocFsxXSksITEsaSwhMSx0Lndhcm5pbmdzKSxuWzFdPTE8bi5sZW5ndGg/bShuWzFdLG8pOm5bMV0scFsyXT1bXSk6bj1wOm49W251bGwsW10sW11dfX19LHsiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiOjY1LCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuLi9sZXZlbC0xL3NvcnQtc2VsZWN0b3JzIjoxNCwiLi4vbGV2ZWwtMS90aWR5LXJ1bGVzIjoxNywiLi9pcy1tZXJnZWFibGUiOjI0LCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2fV0sMjY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgQz1lKCIuL3Jlb3JkZXJhYmxlIikuY2FuUmVvcmRlcixmPWUoIi4vcmVvcmRlcmFibGUiKS5jYW5SZW9yZGVyU2luZ2xlLE89ZSgiLi9leHRyYWN0LXByb3BlcnRpZXMiKSxwPWUoIi4vcnVsZXMtb3ZlcmxhcCIpLFM9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikucnVsZXMsRD1lKCIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLFQ9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24gQihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYztmb3Iocz0wLHU9ZS5sZW5ndGg7czx1O3MrKylmb3IoaT0ocj1lW3NdKVs1XSxsPTAsYz10Lmxlbmd0aDtsPGM7bCsrKWlmKGE9KG89dFtsXSlbNV0scChpLGEsITApJiYhZihyLG8sbikpcmV0dXJuITE7cmV0dXJuITB9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQub3B0aW9ucy5sZXZlbFtELlR3b10ubWVyZ2VTZW1hbnRpY2FsbHkscj10LmNhY2hlLnNwZWNpZmljaXR5LGk9e30sbz1bXSxhPWUubGVuZ3RoLTE7MDw9YTthLS0pe3ZhciBzPWVbYV07aWYoc1swXT09VC5ORVNURURfQkxPQ0spe3ZhciB1PVMoc1sxXSksbD1pW3VdO2x8fChsPVtdLGlbdV09bCksbC5wdXNoKGEpfX1mb3IodmFyIGMgaW4gaSl7dmFyIGY9aVtjXTtlOmZvcih2YXIgcD1mLmxlbmd0aC0xOzA8cDtwLS0pe3ZhciBoPWZbcF0sZD1lW2hdLG09ZltwLTFdLGc9ZVttXTt0OmZvcih2YXIgdj0xOy0xPD12O3YtPTIpe2Zvcih2YXIgYj0xPT12LHk9Yj9oKzE6bS0xLF89Yj9tOmgsdz1iPzE6LTEsRT1iP2Q6ZyxBPWI/ZzpkLHg9TyhFKTt5IT1fOyl7dmFyIGs9TyhlW3ldKTtpZih5Kz13LCEobiYmQih4LGsscil8fEMoeCxrLHIpKSljb250aW51ZSB0fUFbMl09Yj9FWzJdLmNvbmNhdChBWzJdKTpBWzJdLmNvbmNhdChFWzJdKSxFWzJdPVtdLG8ucHVzaChBKTtjb250aW51ZSBlfX19cmV0dXJuIG99fSx7Ii4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9leHRyYWN0LXByb3BlcnRpZXMiOjIyLCIuL3Jlb3JkZXJhYmxlIjo0NywiLi9ydWxlcy1vdmVybGFwIjo1MX1dLDI3OltmdW5jdGlvbihlLHQsbil7dmFyIGc9ZSgiLi9pcy1tZXJnZWFibGUiKSx2PWUoIi4uL2xldmVsLTEvc29ydC1zZWxlY3RvcnMiKSxiPWUoIi4uL2xldmVsLTEvdGlkeS1ydWxlcyIpLHk9ZSgiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiKS5PcHRpbWl6YXRpb25MZXZlbCxfPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHksdz1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxFPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUucmVwbGFjZSgvLS1bXiAsPlwrfjpdKy9nLCIiKX1mdW5jdGlvbiBBKGUsdCl7dmFyIG49YSh3KGVbMV0pKTtmb3IodmFyIHIgaW4gdCl7dmFyIGk9dFtyXSxvPWEodyhpWzFdKSk7KC0xPG8uaW5kZXhPZihuKXx8LTE8bi5pbmRleE9mKG8pKSYmZGVsZXRlIHRbcl19fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9dC5vcHRpb25zLG89aS5sZXZlbFt5LlR3b10ubWVyZ2VTZW1hbnRpY2FsbHksYT1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLmFkamFjZW50U3BhY2Uscz1pLmxldmVsW3kuT25lXS5zZWxlY3RvcnNTb3J0aW5nTWV0aG9kLHU9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLGw9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyxjPWkuY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGY9e30scD1lLmxlbmd0aC0xOzA8PXA7cC0tKXt2YXIgaD1lW3BdO2lmKGhbMF09PUUuUlVMRSl7MDxoWzJdLmxlbmd0aCYmIW8mJihyPXcoaFsxXSksL1wufFwqfCA6Ly50ZXN0KHIpKSYmKGY9e30pLDA8aFsyXS5sZW5ndGgmJm8mJihuPXZvaWQgMCwtMTwobj13KGhbMV0pKS5pbmRleE9mKCJfXyIpfHwtMTxuLmluZGV4T2YoIi0tIikpJiZBKGgsZik7dmFyIGQ9XyhoWzJdKSxtPWZbZF07bSYmZyh3KGhbMV0pLHUsbCxjKSYmZyh3KG1bMV0pLHUsbCxjKSYmKDA8aFsyXS5sZW5ndGg/KGhbMV09YihtWzFdLmNvbmNhdChoWzFdKSwhMSxhLCExLHQud2FybmluZ3MpLGhbMV09MTxoWzFdLmxlbmd0aD92KGhbMV0scyk6aFsxXSk6aFsxXT1tWzFdLmNvbmNhdChoWzFdKSxtWzJdPVtdLGZbZF09bnVsbCksZltfKGhbMl0pXT1ofX19fSx7Ii4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vbGV2ZWwtMS9zb3J0LXNlbGVjdG9ycyI6MTQsIi4uL2xldmVsLTEvdGlkeS1ydWxlcyI6MTcsIi4vaXMtbWVyZ2VhYmxlIjoyNH1dLDI4OltmdW5jdGlvbihlLHQsbil7dmFyIEE9ZSgiLi9yZW9yZGVyYWJsZSIpLmNhblJlb3JkZXIseD1lKCIuL2V4dHJhY3QtcHJvcGVydGllcyIpLGs9ZSgiLi9wcm9wZXJ0aWVzL29wdGltaXplIiksQz1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcyxPPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dC5jYWNoZS5zcGVjaWZpY2l0eSxpPXt9LG89W107Zm9yKG49ZS5sZW5ndGgtMTswPD1uO24tLSlpZihlW25dWzBdPT1PLlJVTEUmJjAhPT1lW25dWzJdLmxlbmd0aCl7dmFyIGE9QyhlW25dWzFdKTtpW2FdPVtuXS5jb25jYXQoaVthXXx8W10pLDI9PWlbYV0ubGVuZ3RoJiZvLnB1c2goYSl9Zm9yKG49by5sZW5ndGgtMTswPD1uO24tLSl7dmFyIHM9aVtvW25dXTtlOmZvcih2YXIgdT1zLmxlbmd0aC0xOzA8dTt1LS0pe3ZhciBsPXNbdS0xXSxjPWVbbF0sZj1zW3VdLHA9ZVtmXTt0OmZvcih2YXIgaD0xOy0xPD1oO2gtPTIpe2Zvcih2YXIgZD0xPT1oLG09ZD9sKzE6Zi0xLGc9ZD9mOmwsdj1kPzE6LTEsYj1kP2M6cCx5PWQ/cDpjLF89eChiKTttIT1nOyl7dmFyIHc9eChlW21dKTttKz12O3ZhciBFPWQ/QShfLHcscik6QSh3LF8scik7aWYoIUUmJiFkKWNvbnRpbnVlIGU7aWYoIUUmJmQpY29udGludWUgdH1kPyhBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShiWzJdLHlbMl0pLHlbMl09YlsyXSk6QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoeVsyXSxiWzJdKSxrKHlbMl0sITAsITAsdCksYlsyXT1bXX19fX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9leHRyYWN0LXByb3BlcnRpZXMiOjIyLCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2LCIuL3Jlb3JkZXJhYmxlIjo0N31dLDI5OltmdW5jdGlvbihlLHQsbil7dmFyIGE9ZSgiLi9tZXJnZS1hZGphY2VudCIpLHM9ZSgiLi9tZXJnZS1tZWRpYS1xdWVyaWVzIiksdT1lKCIuL21lcmdlLW5vbi1hZGphY2VudC1ieS1ib2R5IiksbD1lKCIuL21lcmdlLW5vbi1hZGphY2VudC1ieS1zZWxlY3RvciIpLGM9ZSgiLi9yZWR1Y2Utbm9uLWFkamFjZW50IiksZj1lKCIuL3JlbW92ZS1kdXBsaWNhdGUtZm9udC1hdC1ydWxlcyIpLHA9ZSgiLi9yZW1vdmUtZHVwbGljYXRlLW1lZGlhLXF1ZXJpZXMiKSxoPWUoIi4vcmVtb3ZlLWR1cGxpY2F0ZXMiKSxkPWUoIi4vcmVtb3ZlLXVudXNlZC1hdC1ydWxlcyIpLG09ZSgiLi9yZXN0cnVjdHVyZSIpLGc9ZSgiLi9wcm9wZXJ0aWVzL29wdGltaXplIiksdj1lKCIuLi8uLi9vcHRpb25zL29wdGltaXphdGlvbi1sZXZlbCIpLk9wdGltaXphdGlvbkxldmVsLGI9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24geShlLHQsbil7dmFyIHIsaSxvPXQub3B0aW9ucy5sZXZlbFt2LlR3b107aWYoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspe3ZhciBpPWVbbl07aWYoaVswXT09Yi5ORVNURURfQkxPQ0spe3ZhciBvPS9AKC1tb3otfC1vLXwtd2Via2l0LSk/a2V5ZnJhbWVzLy50ZXN0KGlbMV1bMF1bMV0pO3koaVsyXSx0LCFvKX19fShlLHQpLGZ1bmN0aW9uIGUodCxuKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspe3ZhciBvPXRbcl07c3dpdGNoKG9bMF0pe2Nhc2UgYi5SVUxFOmcob1syXSwhMCwhMCxuKTticmVhaztjYXNlIGIuTkVTVEVEX0JMT0NLOmUob1syXSxuKX19fShlLHQpLG8ucmVtb3ZlRHVwbGljYXRlUnVsZXMmJmgoZSx0KSxvLm1lcmdlQWRqYWNlbnRSdWxlcyYmYShlLHQpLG8ucmVkdWNlTm9uQWRqYWNlbnRSdWxlcyYmYyhlLHQpLG8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiYiYm9keSIhPW8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiZsKGUsdCksby5tZXJnZU5vbkFkamFjZW50UnVsZXMmJiJzZWxlY3RvciIhPW8ubWVyZ2VOb25BZGphY2VudFJ1bGVzJiZ1KGUsdCksby5yZXN0cnVjdHVyZVJ1bGVzJiZvLm1lcmdlQWRqYWNlbnRSdWxlcyYmbiYmKG0oZSx0KSxhKGUsdCkpLG8ucmVzdHJ1Y3R1cmVSdWxlcyYmIW8ubWVyZ2VBZGphY2VudFJ1bGVzJiZuJiZtKGUsdCksby5yZW1vdmVEdXBsaWNhdGVGb250UnVsZXMmJmYoZSx0KSxvLnJlbW92ZUR1cGxpY2F0ZU1lZGlhQmxvY2tzJiZwKGUsdCksby5yZW1vdmVVbnVzZWRBdFJ1bGVzJiZkKGUsdCksby5tZXJnZU1lZGlhKWZvcihpPShyPXMoZSx0KSkubGVuZ3RoLTE7MDw9aTtpLS0peShyW2ldWzJdLHQsITEpO3JldHVybiBvLnJlbW92ZUVtcHR5JiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dFtuXSxvPSExO3N3aXRjaChpWzBdKXtjYXNlIGIuUlVMRTpvPTA9PT1pWzFdLmxlbmd0aHx8MD09PWlbMl0ubGVuZ3RoO2JyZWFrO2Nhc2UgYi5ORVNURURfQkxPQ0s6ZShpWzJdKSxvPTA9PT1pWzJdLmxlbmd0aDticmVhaztjYXNlIGIuQVRfUlVMRTpvPTA9PT1pWzFdLmxlbmd0aDticmVhaztjYXNlIGIuQVRfUlVMRV9CTE9DSzpvPTA9PT1pWzJdLmxlbmd0aH1vJiYodC5zcGxpY2UobiwxKSxuLS0sci0tKX19KGUpLGV9dC5leHBvcnRzPXl9LHsiLi4vLi4vb3B0aW9ucy9vcHRpbWl6YXRpb24tbGV2ZWwiOjY1LCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuL21lcmdlLWFkamFjZW50IjoyNSwiLi9tZXJnZS1tZWRpYS1xdWVyaWVzIjoyNiwiLi9tZXJnZS1ub24tYWRqYWNlbnQtYnktYm9keSI6MjcsIi4vbWVyZ2Utbm9uLWFkamFjZW50LWJ5LXNlbGVjdG9yIjoyOCwiLi9wcm9wZXJ0aWVzL29wdGltaXplIjozNiwiLi9yZWR1Y2Utbm9uLWFkamFjZW50Ijo0MiwiLi9yZW1vdmUtZHVwbGljYXRlLWZvbnQtYXQtcnVsZXMiOjQzLCIuL3JlbW92ZS1kdXBsaWNhdGUtbWVkaWEtcXVlcmllcyI6NDQsIi4vcmVtb3ZlLWR1cGxpY2F0ZXMiOjQ1LCIuL3JlbW92ZS11bnVzZWQtYXQtcnVsZXMiOjQ2LCIuL3Jlc3RydWN0dXJlIjo1MH1dLDMwOltmdW5jdGlvbihlLHQsbil7dmFyIGM9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL21hcmtlciIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dC52YWx1ZS5sZW5ndGgscz1uLnZhbHVlLmxlbmd0aCx1PU1hdGgubWF4KGEscyksbD1NYXRoLm1pbihhLHMpLTE7Zm9yKG89MDtvPHU7bysrKWlmKHI9dC52YWx1ZVtvXSYmdC52YWx1ZVtvXVsxXXx8cixpPW4udmFsdWVbb10mJm4udmFsdWVbb11bMV18fGksciE9Yy5DT01NQSYmaSE9Yy5DT01NQSYmIWUocixpLG8sbzw9bCkpcmV0dXJuITE7cmV0dXJuITB9fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuLi9jb21wYWN0YWJsZSIpO2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZS5jb21wb25lbnRzLmZpbHRlcih0KVswXX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubmFtZT09PWUubmFtZX19KHQpO3JldHVybiBzKGUsbil8fGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG87aWYoYVtlLm5hbWVdLnNob3J0aGFuZENvbXBvbmVudHMpZm9yKGk9MCxvPWUuY29tcG9uZW50cy5sZW5ndGg7aTxvO2krKylpZihuPWUuY29tcG9uZW50c1tpXSxyPXMobix0KSlyZXR1cm4gcn0oZSxuKX19LHsiLi4vY29tcGFjdGFibGUiOjIxfV0sMzI6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUudmFsdWUubGVuZ3RoLTE7MDw9dDt0LS0paWYoImluaGVyaXQiPT1lLnZhbHVlW3RdWzFdKXJldHVybiEwO3JldHVybiExfX0se31dLDMzOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vY29tcGFjdGFibGUiKTtmdW5jdGlvbiBpKGUsdCl7dmFyIG49cltlLm5hbWVdO3JldHVybiJjb21wb25lbnRzImluIG4mJi0xPG4uY29tcG9uZW50cy5pbmRleE9mKHQubmFtZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaShlLHQpfHwhbiYmISFyW2UubmFtZV0uc2hvcnRoYW5kQ29tcG9uZW50cyYmZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb21wb25lbnRzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSx0KX0pfShlLHQpfX0seyIuLi9jb21wYWN0YWJsZSI6MjF9XSwzNDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuImZvbnQiIT1lLm5hbWV8fC0xPT1lLnZhbHVlWzBdWzFdLmluZGV4T2Yoci5JTlRFUk5BTCl9fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sMzU6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuL2V2ZXJ5LXZhbHVlcy1wYWlyIiksdj1lKCIuL2hhcy1pbmhlcml0IiksYj1lKCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiKSx5PWUoIi4uL2NvbXBhY3RhYmxlIiksXz1lKCIuLi9jbG9uZSIpLmRlZXAsdz1lKCIuLi9yZXN0b3JlLXdpdGgtY29tcG9uZW50cyIpLEU9ZSgiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciKSxBPWUoIi4uLy4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUseD1lKCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ib2R5LGs9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIik7ZnVuY3Rpb24gZihlLHQsbixyKXt2YXIgaSxvLGEscz1lW3RdO2ZvcihpIGluIG4pdm9pZCAwIT09cyYmaT09cy5uYW1lfHwobz15W2ldLGE9bltpXSxzJiZ1KG4saSxzKT9kZWxldGUgbltpXTpvLmNvbXBvbmVudHMubGVuZ3RoPk9iamVjdC5rZXlzKGEpLmxlbmd0aHx8bChhKXx8cChhLGkscikmJmgoYSkmJihkKGEpP20oZSxhLGkscik6ZyhlLGEsaSxyKSkpfWZ1bmN0aW9uIHUoZSx0LG4pe3ZhciByLGk9eVt0XSxvPXlbbi5uYW1lXTtpZigib3ZlcnJpZGVzU2hvcnRoYW5kcyJpbiBpJiYtMTxpLm92ZXJyaWRlc1Nob3J0aGFuZHMuaW5kZXhPZihuLm5hbWUpKXJldHVybiEwO2lmKG8mJiJjb21wb25lbnRPZiJpbiBvKWZvcihyIGluIGVbdF0paWYoLTE8by5jb21wb25lbnRPZi5pbmRleE9mKHIpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwoZSl7dmFyIHQsbjtmb3IobiBpbiBlKXtpZih2b2lkIDAhPT10JiZlW25dLmltcG9ydGFudCE9dClyZXR1cm4hMDt0PWVbbl0uaW1wb3J0YW50fXJldHVybiExfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByLGksbyxhLHM9eVt0XSx1PVtrLlBST1BFUlRZLFtrLlBST1BFUlRZX05BTUUsdF0sW2suUFJPUEVSVFlfVkFMVUUscy5kZWZhdWx0VmFsdWVdXSxsPUEodSk7Zm9yKGIoW2xdLG4sW10pLG89MCxhPXMuY29tcG9uZW50cy5sZW5ndGg7bzxhO28rKylpZihyPWVbcy5jb21wb25lbnRzW29dXSxpPXlbci5uYW1lXS5jYW5PdmVycmlkZSwhYyhpLmJpbmQobnVsbCxuKSxsLmNvbXBvbmVudHNbb10scikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaChlKXt2YXIgdCxuLHIsaSxvPW51bGw7Zm9yKG4gaW4gZSlpZihyPWVbbl0sInJlc3RvcmUiaW4oaT15W25dKSl7aWYoRShbci5hbGxbci5wb3NpdGlvbl1dLHcpLHQ9aS5yZXN0b3JlKHIseSkubGVuZ3RoLG51bGwhPT1vJiZ0IT09bylyZXR1cm4hMTtvPXR9cmV0dXJuITB9ZnVuY3Rpb24gZChlKXt2YXIgdCxuLHI9bnVsbDtmb3IodCBpbiBlKXtpZihuPXYoZVt0XSksbnVsbCE9PXImJnIhPT1uKXJldHVybiEwO3I9bn1yZXR1cm4hMX1mdW5jdGlvbiBtKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsPVtdLGM9e30sZj17fSxwPXlbdF0saD1bay5QUk9QRVJUWSxbay5QUk9QRVJUWV9OQU1FLHRdLFtrLlBST1BFUlRZX1ZBTFVFLHAuZGVmYXVsdFZhbHVlXV0sZD1BKGgpO2ZvcihiKFtkXSxuLFtdKSxzPTAsdT1wLmNvbXBvbmVudHMubGVuZ3RoO3M8dTtzKyspcj1lW3AuY29tcG9uZW50c1tzXV0sdihyKT8oaT1yLmFsbFtyLnBvc2l0aW9uXS5zbGljZSgwLDIpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGksci52YWx1ZSksbC5wdXNoKGkpLChvPV8ocikpLnZhbHVlPUMoZSxvLm5hbWUpLGQuY29tcG9uZW50c1tzXT1vLGNbci5uYW1lXT1fKHIpKTooKG89XyhyKSkuYWxsPXIuYWxsLGQuY29tcG9uZW50c1tzXT1vLGZbci5uYW1lXT1yKTtyZXR1cm4gYT1PKGYsMSksaFsxXS5wdXNoKGEpLEUoW2RdLHcpLGg9aC5zbGljZSgwLDIpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZC52YWx1ZSksbC51bnNoaWZ0KGgpLFtsLGQsY119KHQsbixyKSxsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1bXSxjPXt9LGY9e30scD15W3RdLGg9W2suUFJPUEVSVFksW2suUFJPUEVSVFlfTkFNRSx0XSxbay5QUk9QRVJUWV9WQUxVRSwiaW5oZXJpdCJdXSxkPUEoaCk7Zm9yKGIoW2RdLG4sW10pLHM9MCx1PXAuY29tcG9uZW50cy5sZW5ndGg7czx1O3MrKylyPWVbcC5jb21wb25lbnRzW3NdXSx2KHIpP2Nbci5uYW1lXT1yOihpPXIuYWxsW3IucG9zaXRpb25dLnNsaWNlKDAsMiksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxyLnZhbHVlKSxsLnB1c2goaSksZltyLm5hbWVdPV8ocikpO3JldHVybiBvPU8oYywxKSxoWzFdLnB1c2gobyksYT1PKGMsMiksaFsyXS5wdXNoKGEpLGwudW5zaGlmdChoKSxbbCxkLGZdfSh0LG4sciksYz11WzBdLGY9bFswXSxwPXgoYykubGVuZ3RoPHgoZikubGVuZ3RoLGg9cD9jOmYsZD1wP3VbMV06bFsxXSxtPXA/dVsyXTpsWzJdLGc9dFtPYmplY3Qua2V5cyh0KVswXV0uYWxsO2ZvcihpIGluIGQucG9zaXRpb249Zy5sZW5ndGgsZC5zaG9ydGhhbmQ9ITAsZC5kaXJ0eT0hMCxkLmFsbD1nLGQuYWxsLnB1c2goaFswXSksZS5wdXNoKGQpLHQpKG89dFtpXSkudW51c2VkPSEwLG8ubmFtZSBpbiBtJiYoYT1tW28ubmFtZV0scz1TKGgsaSksYS5wb3NpdGlvbj1nLmxlbmd0aCxhLmFsbD1nLGEuYWxsLnB1c2gocyksZS5wdXNoKGEpKX1mdW5jdGlvbiBDKGUsdCl7dmFyIG49eVt0XTtyZXR1cm4ib3Bwb3NpdGVUbyJpbiBuP2Vbbi5vcHBvc2l0ZVRvXS52YWx1ZTpbW2suUFJPUEVSVFlfVkFMVUUsbi5kZWZhdWx0VmFsdWVdXX1mdW5jdGlvbiBPKGUsdCl7dmFyIG4scixpLG8sYT1bXTtmb3IobyBpbiBlKWk9KHI9KG49ZVtvXSkuYWxsW24ucG9zaXRpb25dKVt0XVtyW3RdLmxlbmd0aC0xXSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhLGkpO3JldHVybiBhLnNvcnQocyl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWVbMF0scj10WzBdLGk9ZVsxXSxvPXRbMV07cmV0dXJuIG48cj8tMTpuPT09ciYmaTxvPy0xOjF9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXVsxXVsxXT09dClyZXR1cm4gZVtuXX1mdW5jdGlvbiBnKGUsdCxuLHIpe3ZhciBpLG8sYSxzPXlbbl0sdT1bay5QUk9QRVJUWSxbay5QUk9QRVJUWV9OQU1FLG5dLFtrLlBST1BFUlRZX1ZBTFVFLHMuZGVmYXVsdFZhbHVlXV0sbD1BKHUpO2wuc2hvcnRoYW5kPSEwLGwuZGlydHk9ITAsYihbbF0scixbXSk7Zm9yKHZhciBjPTAsZj1zLmNvbXBvbmVudHMubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPXRbcy5jb21wb25lbnRzW2NdXTtsLmNvbXBvbmVudHNbY109XyhwKSxsLmltcG9ydGFudD1wLmltcG9ydGFudCxhPXAuYWxsfWZvcih2YXIgaCBpbiB0KXRbaF0udW51c2VkPSEwO2k9Tyh0LDEpLHVbMV0ucHVzaChpKSxvPU8odCwyKSx1WzJdLnB1c2gobyksbC5wb3NpdGlvbj1hLmxlbmd0aCxsLmFsbD1hLGwuYWxsLnB1c2godSksZS5wdXNoKGwpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw9e307aWYoIShlLmxlbmd0aDwzKSl7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspaWYoaT1lW29dLG49eVtpLm5hbWVdLCFpLnVudXNlZCYmIWkuaGFjayYmIWkuYmxvY2smJihmKGUsbyxsLHQpLG4mJm4uY29tcG9uZW50T2YpKWZvcihzPTAsdT1uLmNvbXBvbmVudE9mLmxlbmd0aDtzPHU7cysrKWxbcj1uLmNvbXBvbmVudE9mW3NdXT1sW3JdfHx7fSxsW3JdW2kubmFtZV09aTtmKGUsbyxsLHQpfX19LHsiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciOjU2LCIuLi8uLi93cmFwLWZvci1vcHRpbWl6aW5nIjo1OCwiLi4vY2xvbmUiOjIwLCIuLi9jb21wYWN0YWJsZSI6MjEsIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIjo0OCwiLi9ldmVyeS12YWx1ZXMtcGFpciI6MzAsIi4vaGFzLWluaGVyaXQiOjMyLCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiOjM5fV0sMzY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuL21lcmdlLWludG8tc2hvcnRoYW5kcyIpLGY9ZSgiLi9vdmVycmlkZS1wcm9wZXJ0aWVzIikscD1lKCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiKSxoPWUoIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIiksZD1lKCIuLi8uLi93cmFwLWZvci1vcHRpbWl6aW5nIikuYWxsLG09ZSgiLi4vLi4vcmVtb3ZlLXVudXNlZCIpLGc9ZSgiLi4vLi4vcmVzdG9yZS1mcm9tLW9wdGltaXppbmciKSx2PWUoIi4uLy4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIikuT3B0aW1pemF0aW9uTGV2ZWw7dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIsaSl7dmFyIG8sYSxzLHU9aS5vcHRpb25zLmxldmVsW3YuVHdvXSxsPWQodCwhMSx1LnNraXBQcm9wZXJ0aWVzKTtmb3IocChsLGkudmFsaWRhdG9yLGkud2FybmluZ3MpLGE9MCxzPWwubGVuZ3RoO2E8czthKyspKG89bFthXSkuYmxvY2smJmUoby52YWx1ZVswXVsxXSxuLHIsaSk7ciYmdS5tZXJnZUludG9TaG9ydGhhbmRzJiZjKGwsaS52YWxpZGF0b3IpLG4mJnUub3ZlcnJpZGVQcm9wZXJ0aWVzJiZmKGwscixpLm9wdGlvbnMuY29tcGF0aWJpbGl0eSxpLnZhbGlkYXRvciksZyhsLGgpLG0obCl9fSx7Ii4uLy4uLy4uL29wdGlvbnMvb3B0aW1pemF0aW9uLWxldmVsIjo2NSwiLi4vLi4vcmVtb3ZlLXVudXNlZCI6NTUsIi4uLy4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIjo0OCwiLi9tZXJnZS1pbnRvLXNob3J0aGFuZHMiOjM1LCIuL292ZXJyaWRlLXByb3BlcnRpZXMiOjM3LCIuL3BvcHVsYXRlLWNvbXBvbmVudHMiOjM5fV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgeT1lKCIuL2hhcy1pbmhlcml0IiksXz1lKCIuL2V2ZXJ5LXZhbHVlcy1wYWlyIiksdz1lKCIuL2ZpbmQtY29tcG9uZW50LWluIiksRT1lKCIuL2lzLWNvbXBvbmVudC1vZiIpLEE9ZSgiLi9pcy1tZXJnZWFibGUtc2hvcnRoYW5kIikseD1lKCIuL292ZXJyaWRlcy1ub24tY29tcG9uZW50LXNob3J0aGFuZCIpLGs9ZSgiLi92ZW5kb3ItcHJlZml4ZXMiKS5zYW1lLEM9ZSgiLi4vY29tcGFjdGFibGUiKSx1PWUoIi4uL2Nsb25lIikuZGVlcCxsPWUoIi4uL3Jlc3RvcmUtd2l0aC1jb21wb25lbnRzIikscz1lKCIuLi9jbG9uZSIpLnNoYWxsb3csYz1lKCIuLi8uLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyIpLGY9ZSgiLi4vLi4vLi4vdG9rZW5pemVyL3Rva2VuIikscD1lKCIuLi8uLi8uLi90b2tlbml6ZXIvbWFya2VyIikscj1lKCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiKS5wcm9wZXJ0eTtmdW5jdGlvbiBPKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmNvbXBvbmVudHMubGVuZ3RoO24rKyl7dmFyIHI9ZS5jb21wb25lbnRzW25dLGk9Q1tyLm5hbWVdLG89aSYmaS5jYW5PdmVycmlkZXx8by5zYW1lVmFsdWUsYT1zKHIpO2lmKGEudmFsdWU9W1tmLlBST1BFUlRZX1ZBTFVFLGkuZGVmYXVsdFZhbHVlXV0sIV8oby5iaW5kKG51bGwsdCksYSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBoKGUsdCl7dC51bnVzZWQ9ITAsVCh0LEIoZSkpLGUudmFsdWU9dC52YWx1ZX1mdW5jdGlvbiBkKGUsdCl7dC51bnVzZWQ9ITAsZS5tdWx0aXBsZXg9ITAsZS52YWx1ZT10LnZhbHVlfWZ1bmN0aW9uIFMoZSx0KXt0Lm11bHRpcGxleD9kKGUsdCk6ZS5tdWx0aXBsZXg/aChlLHQpOmZ1bmN0aW9uKGUsdCl7dC51bnVzZWQ9ITAsZS52YWx1ZT10LnZhbHVlfShlLHQpfWZ1bmN0aW9uIEQoZSx0KXt0LnVudXNlZD0hMDtmb3IodmFyIG49MCxyPWUuY29tcG9uZW50cy5sZW5ndGg7bjxyO24rKylTKGUuY29tcG9uZW50c1tuXSx0LmNvbXBvbmVudHNbbl0sZS5tdWx0aXBsZXgpfWZ1bmN0aW9uIFQoZSx0KXtlLm11bHRpcGxleD0hMCxDW2UubmFtZV0uc2hvcnRoYW5kP2Z1bmN0aW9uKGUsdCl7dmFyIG4scixpO2ZvcihyPTAsaT1lLmNvbXBvbmVudHMubGVuZ3RoO3I8aTtyKyspKG49ZS5jb21wb25lbnRzW3JdKS5tdWx0aXBsZXh8fG8obix0KX0oZSx0KTpvKGUsdCl9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbixyPUNbZS5uYW1lXSxpPSJyZWFsIj09ci5pbnRvTXVsdGlwbGV4TW9kZSxvPSJyZWFsIj09ci5pbnRvTXVsdGlwbGV4TW9kZT9lLnZhbHVlLnNsaWNlKDApOiJwbGFjZWhvbGRlciI9PXIuaW50b011bHRpcGxleE1vZGU/ci5wbGFjZWhvbGRlclZhbHVlOnIuZGVmYXVsdFZhbHVlLGE9QihlKSxzPW8ubGVuZ3RoO2E8dDthKyspaWYoZS52YWx1ZS5wdXNoKFtmLlBST1BFUlRZX1ZBTFVFLHAuQ09NTUFdKSxBcnJheS5pc0FycmF5KG8pKWZvcihuPTA7bjxzO24rKyllLnZhbHVlLnB1c2goaT9vW25dOltmLlBST1BFUlRZX1ZBTFVFLG9bbl1dKTtlbHNlIGUudmFsdWUucHVzaChpP286W2YuUFJPUEVSVFlfVkFMVUUsb10pfWZ1bmN0aW9uIEIoZSl7Zm9yKHZhciB0PTAsbj0wLHI9ZS52YWx1ZS5sZW5ndGg7bjxyO24rKyllLnZhbHVlW25dWzFdPT1wLkNPTU1BJiZ0Kys7cmV0dXJuIHQrMX1mdW5jdGlvbiBtKGUpe3ZhciB0PVtmLlBST1BFUlRZLFtmLlBST1BFUlRZX05BTUUsZS5uYW1lXV0uY29uY2F0KGUudmFsdWUpO3JldHVybiByKFt0XSwwKS5sZW5ndGh9ZnVuY3Rpb24gUihlLHQsbil7Zm9yKHZhciByPTAsaT10OzA8PWkmJihlW2ldLm5hbWUhPW58fGVbaV0udW51c2VkfHxyKyssISgxPHIpKTtpLS0pO3JldHVybiAxPHJ9ZnVuY3Rpb24gTChlLHQpe2Zvcih2YXIgbj0wLHI9ZS5jb21wb25lbnRzLmxlbmd0aDtuPHI7bisrKWlmKCFGKHQuaXNVcmwsZS5jb21wb25lbnRzW25dKSYmRih0LmlzRnVuY3Rpb24sZS5jb21wb25lbnRzW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBGKGUsdCl7Zm9yKHZhciBuPTAscj10LnZhbHVlLmxlbmd0aDtuPHI7bisrKWlmKHQudmFsdWVbbl1bMV0hPXAuQ09NTUEmJmUodC52YWx1ZVtuXVsxXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcShlLHQpe2lmKCFlLm11bHRpcGxleCYmIXQubXVsdGlwbGV4fHxlLm11bHRpcGxleCYmdC5tdWx0aXBsZXgpcmV0dXJuITE7dmFyIG4scj1lLm11bHRpcGxleD9lOnQsaT1lLm11bHRpcGxleD90OmUsbz11KHIpO2MoW29dLGwpO3ZhciBhPXUoaSk7YyhbYV0sbCk7dmFyIHM9bShvKSsxK20oYSk7cmV0dXJuIGUubXVsdGlwbGV4P2gobj13KG8sYSksYSk6KG49dyhhLG8pLFQoYSxCKG8pKSxkKG4sbykpLGMoW2FdLGwpLHM8PW0oYSl9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZS5uYW1lIGluIEN9ZnVuY3Rpb24gTShlLHQpe3JldHVybiFlLm11bHRpcGxleCYmKCJiYWNrZ3JvdW5kIj09ZS5uYW1lfHwiYmFja2dyb3VuZC1pbWFnZSI9PWUubmFtZSkmJnQubXVsdGlwbGV4JiYoImJhY2tncm91bmQiPT10Lm5hbWV8fCJiYWNrZ3JvdW5kLWltYWdlIj09dC5uYW1lKSYmZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAscj1bXSxpPWUubGVuZ3RoO248aTtuKyspe3ZhciBvPWVbbl07b1sxXT09cC5DT01NQT8odC5wdXNoKHIpLHI9W10pOnIucHVzaChvKX1yZXR1cm4gdC5wdXNoKHIpLHR9KGUpLG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoMT09dFtuXS5sZW5ndGgmJiJub25lIj09dFtuXVswXVsxXSlyZXR1cm4hMDtyZXR1cm4hMX0odC52YWx1ZSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGYscCxoLGQ7ZTpmb3IocD1lLmxlbmd0aC0xOzA8PXA7cC0tKWlmKFUobz1lW3BdKSYmIW8uYmxvY2spe2k9Q1tvLm5hbWVdLmNhbk92ZXJyaWRlO3Q6Zm9yKGg9cC0xOzA8PWg7aC0tKWlmKFUoYT1lW2hdKSYmIWEuYmxvY2smJiFhLnVudXNlZCYmIW8udW51c2VkJiYoIWEuaGFja3x8by5oYWNrfHxvLmltcG9ydGFudCkmJihhLmhhY2t8fGEuaW1wb3J0YW50fHwhby5oYWNrKSYmKGEuaW1wb3J0YW50IT1vLmltcG9ydGFudHx8YS5oYWNrWzBdPT1vLmhhY2tbMF0pJiYhKGEuaW1wb3J0YW50PT1vLmltcG9ydGFudCYmKGEuaGFja1swXSE9by5oYWNrWzBdfHxhLmhhY2tbMV0mJmEuaGFja1sxXSE9by5oYWNrWzFdKXx8eShvKXx8TShhLG8pKSlpZihvLnNob3J0aGFuZCYmRShvLGEpKXtpZighby5pbXBvcnRhbnQmJmEuaW1wb3J0YW50KWNvbnRpbnVlO2lmKCFrKFthXSxvLmNvbXBvbmVudHMpKWNvbnRpbnVlO2lmKCFGKHIuaXNGdW5jdGlvbixhKSYmTChvLHIpKWNvbnRpbnVlO2lmKCFBKG8pKXthLnVudXNlZD0hMDtjb250aW51ZX1zPXcobyxhKSxpPUNbYS5uYW1lXS5jYW5PdmVycmlkZSxfKGkuYmluZChudWxsLHIpLGEscykmJihhLnVudXNlZD0hMCl9ZWxzZSBpZihvLnNob3J0aGFuZCYmeChvLGEpKXtpZighby5pbXBvcnRhbnQmJmEuaW1wb3J0YW50KWNvbnRpbnVlO2lmKCFrKFthXSxvLmNvbXBvbmVudHMpKWNvbnRpbnVlO2lmKCFGKHIuaXNGdW5jdGlvbixhKSYmTChvLHIpKWNvbnRpbnVlO2ZvcihkPSh1PWEuc2hvcnRoYW5kP2EuY29tcG9uZW50czpbYV0pLmxlbmd0aC0xOzA8PWQ7ZC0tKWlmKGw9dVtkXSxjPXcobyxsKSxpPUNbbC5uYW1lXS5jYW5PdmVycmlkZSwhXyhpLmJpbmQobnVsbCxyKSxhLGMpKWNvbnRpbnVlIHQ7YS51bnVzZWQ9ITB9ZWxzZSBpZih0JiZhLnNob3J0aGFuZCYmIW8uc2hvcnRoYW5kJiZFKGEsbywhMCkpe2lmKG8uaW1wb3J0YW50JiYhYS5pbXBvcnRhbnQpY29udGludWU7aWYoIW8uaW1wb3J0YW50JiZhLmltcG9ydGFudCl7by51bnVzZWQ9ITA7Y29udGludWV9aWYoUihlLHAtMSxhLm5hbWUpKWNvbnRpbnVlO2lmKEwoYSxyKSljb250aW51ZTtpZighQShhKSljb250aW51ZTtpZihzPXcoYSxvKSxfKGkuYmluZChudWxsLHIpLHMsbykpe3ZhciBtPSFuLnByb3BlcnRpZXMuYmFja2dyb3VuZENsaXBNZXJnaW5nJiYtMTxzLm5hbWUuaW5kZXhPZigiYmFja2dyb3VuZC1jbGlwIil8fCFuLnByb3BlcnRpZXMuYmFja2dyb3VuZE9yaWdpbk1lcmdpbmcmJi0xPHMubmFtZS5pbmRleE9mKCJiYWNrZ3JvdW5kLW9yaWdpbiIpfHwhbi5wcm9wZXJ0aWVzLmJhY2tncm91bmRTaXplTWVyZ2luZyYmLTE8cy5uYW1lLmluZGV4T2YoImJhY2tncm91bmQtc2l6ZSIpLGc9Q1tvLm5hbWVdLm5vbk1lcmdlYWJsZVZhbHVlPT09by52YWx1ZVswXVsxXTtpZihtfHxnKWNvbnRpbnVlO2lmKCFuLnByb3BlcnRpZXMubWVyZ2luZyYmTyhhLHIpKWNvbnRpbnVlO2lmKHMudmFsdWVbMF1bMV0hPW8udmFsdWVbMF1bMV0mJih5KGEpfHx5KG8pKSljb250aW51ZTtpZihxKGEsbykpY29udGludWU7IWEubXVsdGlwbGV4JiZvLm11bHRpcGxleCYmVChhLEIobykpLFMocyxvKSxhLmRpcnR5PSEwfX1lbHNlIGlmKHQmJmEuc2hvcnRoYW5kJiZvLnNob3J0aGFuZCYmYS5uYW1lPT1vLm5hbWUpe2lmKCFhLm11bHRpcGxleCYmby5tdWx0aXBsZXgpY29udGludWU7aWYoIW8uaW1wb3J0YW50JiZhLmltcG9ydGFudCl7by51bnVzZWQ9ITA7Y29udGludWUgZX1pZihvLmltcG9ydGFudCYmIWEuaW1wb3J0YW50KXthLnVudXNlZD0hMDtjb250aW51ZX1pZighQShvKSl7YS51bnVzZWQ9ITA7Y29udGludWV9Zm9yKGQ9YS5jb21wb25lbnRzLmxlbmd0aC0xOzA8PWQ7ZC0tKXt2YXIgdj1hLmNvbXBvbmVudHNbZF0sYj1vLmNvbXBvbmVudHNbZF07aWYoaT1DW3YubmFtZV0uY2FuT3ZlcnJpZGUsIV8oaS5iaW5kKG51bGwsciksdixiKSljb250aW51ZSBlfUQoYSxvKSxhLmRpcnR5PSEwfWVsc2UgaWYodCYmYS5zaG9ydGhhbmQmJm8uc2hvcnRoYW5kJiZFKGEsbykpe2lmKCFhLmltcG9ydGFudCYmby5pbXBvcnRhbnQpY29udGludWU7aWYocz13KGEsbyksaT1DW28ubmFtZV0uY2FuT3ZlcnJpZGUsIV8oaS5iaW5kKG51bGwscikscyxvKSljb250aW51ZTtpZihhLmltcG9ydGFudCYmIW8uaW1wb3J0YW50KXtvLnVudXNlZD0hMDtjb250aW51ZX1pZigxPENbby5uYW1lXS5yZXN0b3JlKG8sQykubGVuZ3RoKWNvbnRpbnVlO1Mocz13KGEsbyksbyksby5kaXJ0eT0hMH1lbHNlIGlmKGEubmFtZT09by5uYW1lKXtpZihmPSEwLG8uc2hvcnRoYW5kKWZvcihkPW8uY29tcG9uZW50cy5sZW5ndGgtMTswPD1kJiZmO2QtLSlsPWEuY29tcG9uZW50c1tkXSxjPW8uY29tcG9uZW50c1tkXSxpPUNbYy5uYW1lXS5jYW5PdmVycmlkZSxmPWYmJl8oaS5iaW5kKG51bGwsciksbCxjKTtlbHNlIGk9Q1tvLm5hbWVdLmNhbk92ZXJyaWRlLGY9XyhpLmJpbmQobnVsbCxyKSxhLG8pO2lmKGEuaW1wb3J0YW50JiYhby5pbXBvcnRhbnQmJmYpe28udW51c2VkPSEwO2NvbnRpbnVlfWlmKCFhLmltcG9ydGFudCYmby5pbXBvcnRhbnQmJmYpe2EudW51c2VkPSEwO2NvbnRpbnVlfWlmKCFmKWNvbnRpbnVlO2EudW51c2VkPSEwfX19fSx7Ii4uLy4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuLi8uLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyI6NTYsIi4uL2Nsb25lIjoyMCwiLi4vY29tcGFjdGFibGUiOjIxLCIuLi9yZXN0b3JlLXdpdGgtY29tcG9uZW50cyI6NDgsIi4vZXZlcnktdmFsdWVzLXBhaXIiOjMwLCIuL2ZpbmQtY29tcG9uZW50LWluIjozMSwiLi9oYXMtaW5oZXJpdCI6MzIsIi4vaXMtY29tcG9uZW50LW9mIjozMywiLi9pcy1tZXJnZWFibGUtc2hvcnRoYW5kIjozNCwiLi9vdmVycmlkZXMtbm9uLWNvbXBvbmVudC1zaG9ydGhhbmQiOjM4LCIuL3ZlbmRvci1wcmVmaXhlcyI6NDF9XSwzODpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2NvbXBhY3RhYmxlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZSBpbiByJiYib3ZlcnJpZGVzU2hvcnRoYW5kcyJpbiByW2UubmFtZV0mJi0xPHJbZS5uYW1lXS5vdmVycmlkZXNTaG9ydGhhbmRzLmluZGV4T2YodC5uYW1lKX19LHsiLi4vY29tcGFjdGFibGUiOjIxfV0sMzk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbD1lKCIuLi9jb21wYWN0YWJsZSIpLGM9ZSgiLi4vaW52YWxpZC1wcm9wZXJ0eS1lcnJvciIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGksbyxhPWUubGVuZ3RoLTE7MDw9YTthLS0pe3ZhciBzPWVbYV0sdT1sW3MubmFtZV07aWYodSYmdS5zaG9ydGhhbmQpe3Muc2hvcnRoYW5kPSEwLHMuZGlydHk9ITA7dHJ5e2lmKHMuY29tcG9uZW50cz11LmJyZWFrVXAocyxsLHQpLHUuc2hvcnRoYW5kQ29tcG9uZW50cylmb3IoaT0wLG89cy5jb21wb25lbnRzLmxlbmd0aDtpPG87aSsrKShyPXMuY29tcG9uZW50c1tpXSkuY29tcG9uZW50cz1sW3IubmFtZV0uYnJlYWtVcChyLGwsdCl9Y2F0Y2goZSl7aWYoIShlIGluc3RhbmNlb2YgYykpdGhyb3cgZTtzLmNvbXBvbmVudHM9W10sbi5wdXNoKGUubWVzc2FnZSl9MDxzLmNvbXBvbmVudHMubGVuZ3RoP3MubXVsdGlwbGV4PXMuY29tcG9uZW50c1swXS5tdWx0aXBsZXg6cy51bnVzZWQ9ITB9fX19LHsiLi4vY29tcGFjdGFibGUiOjIxLCIuLi9pbnZhbGlkLXByb3BlcnR5LWVycm9yIjoyM31dLDQwOltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi92ZW5kb3ItcHJlZml4ZXMiKS5zYW1lO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiEoIW8odCxuKXx8aSYmZS5pc1ZhcmlhYmxlKHQpIT09ZS5pc1ZhcmlhYmxlKG4pKX19LHsiLi92ZW5kb3ItcHJlZml4ZXMiOjQxfV0sNDE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vKD86XnxcVykoXC1cdytcLSkvZztmdW5jdGlvbiBpKGUpe2Zvcih2YXIgdCxuPVtdO251bGwhPT0odD1yLmV4ZWMoZSkpOyktMT09bi5pbmRleE9mKHRbMF0pJiZuLnB1c2godFswXSk7cmV0dXJuIG59dC5leHBvcnRzPXt1bmlxdWU6aSxzYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSkuc29ydCgpLmpvaW4oIiwiKT09aSh0KS5zb3J0KCkuam9pbigiLCIpfX19LHt9XSw0MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciBfPWUoIi4vaXMtbWVyZ2VhYmxlIiksZz1lKCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiKSx2PWUoIi4uLy4uL3V0aWxzL2Nsb25lLWFycmF5IiksYj1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSx3PWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHkseT1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcztmdW5jdGlvbiBFKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKFtlW25dWzFdXSk7cmV0dXJuIHR9ZnVuY3Rpb24gQShlLHQsbixyLGkpe2Zvcih2YXIgbz1bXSxhPVtdLHM9W10sdT10Lmxlbmd0aC0xOzA8PXU7dS0tKWlmKCFuLmZpbHRlck91dCh1LG8pKXt2YXIgbD10W3VdLndoZXJlLGM9ZVtsXSxmPXYoY1syXSk7bz1vLmNvbmNhdChmKSxhLnB1c2goZikscy5wdXNoKGwpfWcobywhMCwhMSxpKTtmb3IodmFyIHA9cy5sZW5ndGgsaD1vLmxlbmd0aC0xLGQ9cC0xOzA8PWQ7KWlmKCgwPT09ZHx8b1toXSYmLTE8YVtkXS5pbmRleE9mKG9baF0pKSYmLTE8aCloLS07ZWxzZXt2YXIgbT1vLnNwbGljZShoKzEpO24uY2FsbGJhY2soZVtzW2RdXSxtLHAsZCksZC0tfX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5vcHRpb25zLHI9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9DbGFzc2VzLGk9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZWFibGVQc2V1ZG9FbGVtZW50cyxvPW4uY29tcGF0aWJpbGl0eS5zZWxlY3RvcnMubXVsdGlwbGVQc2V1ZG9NZXJnaW5nLGE9e30scz1bXSx1PWUubGVuZ3RoLTE7MDw9dTt1LS0pe3ZhciBsPWVbdV07aWYobFswXT09Yi5SVUxFJiYwIT09bFsyXS5sZW5ndGgpZm9yKHZhciBjPXkobFsxXSksZj0xPGxbMV0ubGVuZ3RoJiZfKGMscixpLG8pLHA9RShsWzFdKSxoPWY/W2NdLmNvbmNhdChwKTpbY10sZD0wLG09aC5sZW5ndGg7ZDxtO2QrKyl7dmFyIGc9aFtkXTthW2ddP3MucHVzaChnKTphW2ddPVtdLGFbZ10ucHVzaCh7d2hlcmU6dSxsaXN0OnAsaXNQYXJ0aWFsOmYmJjA8ZCxpc0NvbXBsZXg6ZiYmMD09PWR9KX19IWZ1bmN0aW9uKGUsdCxuLHIsaSl7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBjW2VdLmlzUGFydGlhbCYmMD09PXQubGVuZ3RofWZ1bmN0aW9uIGEoZSx0LG4scil7Y1tuLXItMV0uaXNQYXJ0aWFsfHwoZVsyXT10KX1mb3IodmFyIHM9MCx1PXQubGVuZ3RoO3M8dTtzKyspe3ZhciBsPXRbc10sYz1uW2xdO0EoZSxjLHtmaWx0ZXJPdXQ6byxjYWxsYmFjazphfSwwLGkpfX0oZSxzLGEsMCx0KSxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT1uLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0NsYXNzZXMsbz1uLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzLGE9bi5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tdWx0aXBsZVBzZXVkb01lcmdpbmcscz17fTtmdW5jdGlvbiB1KGUpe3JldHVybiBzLmRhdGFbZV0ud2hlcmU8cy5pbnRvUG9zaXRpb259ZnVuY3Rpb24gbChlLHQsbixyKXswPT09ciYmcy5yZWR1Y2VkQm9kaWVzLnB1c2godCl9ZTpmb3IodmFyIGMgaW4gdCl7dmFyIGY9dFtjXTtpZihmWzBdLmlzQ29tcGxleCl7dmFyIHA9ZltmLmxlbmd0aC0xXS53aGVyZSxoPWVbcF0sZD1bXSxtPV8oYyxpLG8sYSk/ZlswXS5saXN0OltjXTtzLmludG9Qb3NpdGlvbj1wLHMucmVkdWNlZEJvZGllcz1kO2Zvcih2YXIgZz0wLHY9bS5sZW5ndGg7Zzx2O2crKyl7dmFyIGI9bVtnXSx5PXRbYl07aWYoeS5sZW5ndGg8Miljb250aW51ZSBlO2lmKHMuZGF0YT15LEEoZSx5LHtmaWx0ZXJPdXQ6dSxjYWxsYmFjazpsfSwwLHIpLHcoZFtkLmxlbmd0aC0xXSkhPXcoZFswXSkpY29udGludWUgZX1oWzJdPWRbMF19fX0oZSxhLG4sdCl9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3V0aWxzL2Nsb25lLWFycmF5Ijo4NiwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OCwiLi9pcy1tZXJnZWFibGUiOjI0LCIuL3Byb3BlcnRpZXMvb3B0aW1pemUiOjM2fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSxzPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmFsbDt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbz1bXTtmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKykodD1lW3JdKVswXSE9YS5BVF9SVUxFX0JMT0NLJiYiQGZvbnQtZmFjZSIhPXRbMV1bMF1bMV18fChuPXMoW3RdKSwtMTxvLmluZGV4T2Yobik/dFsyXT1bXTpvLnB1c2gobikpfX0seyIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4fV0sNDQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcz1lKCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iKSx1PWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmFsbCxsPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLnJ1bGVzO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9e307Zm9yKGk9MCxvPWUubGVuZ3RoO2k8bztpKyspKG49ZVtpXSlbMF09PXMuTkVTVEVEX0JMT0NLJiYoKHQ9YVtyPWwoblsxXSkrIiUiK3UoblsyXSldKSYmKHRbMl09W10pLGFbcl09bil9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uLy4uL3dyaXRlci9vbmUtdGltZSI6OTh9XSw0NTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBjPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGY9ZSgiLi4vLi4vd3JpdGVyL29uZS10aW1lIikuYm9keSxwPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLnJ1bGVzO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbz17fSxhPVtdLHM9MCx1PWUubGVuZ3RoO3M8dTtzKyspKG49ZVtzXSlbMF09PWMuUlVMRSYmKG9bdD1wKG5bMV0pXSYmMT09b1t0XS5sZW5ndGg/YS5wdXNoKHQpOm9bdF09b1t0XXx8W10sb1t0XS5wdXNoKHMpKTtmb3Iocz0wLHU9YS5sZW5ndGg7czx1O3MrKyl7aT1bXTtmb3IodmFyIGw9b1t0PWFbc11dLmxlbmd0aC0xOzA8PWw7bC0tKW49ZVtvW3RdW2xdXSxyPWYoblsyXSksLTE8aS5pbmRleE9mKHIpP25bMl09W106aS5wdXNoKHIpfX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vd3JpdGVyL29uZS10aW1lIjo5OH1dLDQ2OltmdW5jdGlvbihlLHQsbil7dmFyIGY9ZSgiLi9wcm9wZXJ0aWVzL3BvcHVsYXRlLWNvbXBvbmVudHMiKSxwPWUoIi4uL3dyYXAtZm9yLW9wdGltaXppbmciKS5zaW5nbGUsaD1lKCIuLi9yZXN0b3JlLWZyb20tb3B0aW1pemluZyIpLGM9ZSgiLi4vLi4vdG9rZW5pemVyL3Rva2VuIiksZD0vXihcLW1velwtfFwtb1wtfFwtd2Via2l0XC0pP2FuaW1hdGlvbi1uYW1lJC8sbT0vXihcLW1velwtfFwtb1wtfFwtd2Via2l0XC0pP2FuaW1hdGlvbiQvLHI9L15AKFwtbW96XC18XC1vXC18XC13ZWJraXRcLSk/a2V5ZnJhbWVzIC8saT0vXHN7MCwzMX0haW1wb3J0YW50JC8sbz0vXihbJyJdPykoLiopXDEkLztmdW5jdGlvbiBnKGUpe3JldHVybiBlLnJlcGxhY2UobywiJDIiKS5yZXBsYWNlKGksIiIpfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXt9O2ZvcihzPTAsdT1lLmxlbmd0aDtzPHU7cysrKXQoZVtzXSxsKTtpZigwIT09T2JqZWN0LmtleXMobCkubGVuZ3RoKWZvcihpIGluIGZ1bmN0aW9uIGUodCxuLHIsaSl7dmFyIG89bihyKTt2YXIgYSxzO2ZvcihhPTAscz10Lmxlbmd0aDthPHM7YSsrKXN3aXRjaCh0W2FdWzBdKXtjYXNlIGMuUlVMRTpvKHRbYV0saSk7YnJlYWs7Y2FzZSBjLk5FU1RFRF9CTE9DSzplKHRbYV1bMl0sbixyLGkpfX0oZSxuLGwsciksbClmb3Iocz0wLHU9KG89bFtpXSkubGVuZ3RoO3M8dTtzKyspKGE9b1tzXSlbYVswXT09Yy5BVF9SVUxFPzE6Ml09W119ZnVuY3Rpb24gcyhlLHQpe3ZhciBuO2VbMF09PWMuQVRfUlVMRV9CTE9DSyYmMD09PWVbMV1bMF1bMV0uaW5kZXhPZigiQGNvdW50ZXItc3R5bGUiKSYmKHRbbj1lWzFdWzBdWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbztmb3IoaT0wLG89ZVsyXS5sZW5ndGg7aTxvO2krKykibGlzdC1zdHlsZSI9PShuPWVbMl1baV0pWzFdWzFdJiYocj1wKG4pLGYoW3JdLHQudmFsaWRhdG9yLHQud2FybmluZ3MpLHIuY29tcG9uZW50c1swXS52YWx1ZVswXVsxXWluIGEmJmRlbGV0ZSBhW25bMl1bMV1dLGgoW3JdKSksImxpc3Qtc3R5bGUtdHlwZSI9PW5bMV1bMV0mJm5bMl1bMV1pbiBhJiZkZWxldGUgYVtuWzJdWzFdXX19ZnVuY3Rpb24gbChlLHQpe3ZhciBuLHIsaSxvO2lmKGVbMF09PWMuQVRfUlVMRV9CTE9DSyYmIkBmb250LWZhY2UiPT1lWzFdWzBdWzFdKWZvcihpPTAsbz1lWzJdLmxlbmd0aDtpPG87aSsrKWlmKCJmb250LWZhbWlseSI9PShuPWVbMl1baV0pWzFdWzFdKXt0W3I9ZyhuWzJdWzFdLnRvTG93ZXJDYXNlKCkpXT10W3JdfHxbXSx0W3JdLnB1c2goZSk7YnJlYWt9fWZ1bmN0aW9uIHYoYyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbDtmb3IoYT0wLHM9ZVsyXS5sZW5ndGg7YTxzO2ErKyl7aWYoImZvbnQiPT0obj1lWzJdW2FdKVsxXVsxXSl7Zm9yKHI9cChuKSxmKFtyXSx0LnZhbGlkYXRvcix0Lndhcm5pbmdzKSx1PTAsbD0oaT1yLmNvbXBvbmVudHNbNl0pLnZhbHVlLmxlbmd0aDt1PGw7dSsrKShvPWcoaS52YWx1ZVt1XVsxXS50b0xvd2VyQ2FzZSgpKSlpbiBjJiZkZWxldGUgY1tvXTtoKFtyXSl9aWYoImZvbnQtZmFtaWx5Ij09blsxXVsxXSlmb3IodT0yLGw9bi5sZW5ndGg7dTxsO3UrKykobz1nKG5bdV1bMV0udG9Mb3dlckNhc2UoKSkpaW4gYyYmZGVsZXRlIGNbb119fX1mdW5jdGlvbiBiKGUsdCl7dmFyIG47ZVswXT09Yy5ORVNURURfQkxPQ0smJnIudGVzdChlWzFdWzBdWzFdKSYmKHRbbj1lWzFdWzBdWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24geShsKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHMsdTtmb3Iobz0wLGE9ZVsyXS5sZW5ndGg7bzxhO28rKyl7aWYobj1lWzJdW29dLG0udGVzdChuWzFdWzFdKSl7Zm9yKHI9cChuKSxmKFtyXSx0LnZhbGlkYXRvcix0Lndhcm5pbmdzKSxzPTAsdT0oaT1yLmNvbXBvbmVudHNbN10pLnZhbHVlLmxlbmd0aDtzPHU7cysrKWkudmFsdWVbc11bMV1pbiBsJiZkZWxldGUgbFtpLnZhbHVlW3NdWzFdXTtoKFtyXSl9aWYoZC50ZXN0KG5bMV1bMV0pKWZvcihzPTIsdT1uLmxlbmd0aDtzPHU7cysrKW5bc11bMV1pbiBsJiZkZWxldGUgbFtuW3NdWzFdXX19fWZ1bmN0aW9uIF8oZSx0KXt2YXIgbjtlWzBdPT1jLkFUX1JVTEUmJjA9PT1lWzFdLmluZGV4T2YoIkBuYW1lc3BhY2UiKSYmKHRbbj1lWzFdLnNwbGl0KCIgIilbMV1dPXRbbl18fFtdLHRbbl0ucHVzaChlKSl9ZnVuY3Rpb24gdyhzKXt2YXIgdT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKHMpLmpvaW4oIlxcfHwiKSsiXFx8IiwiZyIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE7Zm9yKHI9MCxpPWVbMV0ubGVuZ3RoO3I8aTtyKyspZm9yKG89MCxhPSh0PWVbMV1bcl1bMV0ubWF0Y2godSkpLmxlbmd0aDtvPGE7bysrKShuPXRbb10uc3Vic3RyaW5nKDAsdFtvXS5sZW5ndGgtMSkpaW4gcyYmZGVsZXRlIHNbbl19fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2EoZSxzLHUsdCksYShlLGwsdix0KSxhKGUsYix5LHQpLGEoZSxfLHcsdCl9fSx7Ii4uLy4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3Jlc3RvcmUtZnJvbS1vcHRpbWl6aW5nIjo1NiwiLi4vd3JhcC1mb3Itb3B0aW1pemluZyI6NTgsIi4vcHJvcGVydGllcy9wb3B1bGF0ZS1jb21wb25lbnRzIjozOX1dLDQ3OltmdW5jdGlvbihlLHQsbil7dmFyIGg9ZSgiLi9ydWxlcy1vdmVybGFwIiksZD1lKCIuL3NwZWNpZmljaXRpZXMtb3ZlcmxhcCIpLG09L2FsaWduXC1pdGVtc3xib3hcLWFsaWdufGJveFwtcGFja3xmbGV4fGp1c3RpZnkvLGc9L15ib3JkZXJcLSh0b3B8cmlnaHR8Ym90dG9tfGxlZnR8Y29sb3J8c3R5bGV8d2lkdGh8cmFkaXVzKS87ZnVuY3Rpb24gbyhlLHQsbil7dmFyIHI9ZVswXSxpPWVbMV0sbz1lWzJdLGE9ZVs1XSxzPWVbNl0sdT10WzBdLGw9dFsxXSxjPXRbMl0sZj10WzVdLHA9dFs2XTtyZXR1cm4hKCJmb250Ij09ciYmImxpbmUtaGVpZ2h0Ij09dXx8ImZvbnQiPT11JiYibGluZS1oZWlnaHQiPT1yKSYmKCghbS50ZXN0KHIpfHwhbS50ZXN0KHUpKSYmKCEobz09YyYmYihyKT09Yih1KSYmdihyKV52KHUpKSYmKCgiYm9yZGVyIiE9b3x8IWcudGVzdChjKXx8ISgiYm9yZGVyIj09cnx8cj09Y3x8aSE9bCYmeShyLHUpKSkmJigoImJvcmRlciIhPWN8fCFnLnRlc3Qobyl8fCEoImJvcmRlciI9PXV8fHU9PW98fGkhPWwmJnkocix1KSkpJiYoKCJib3JkZXIiIT1vfHwiYm9yZGVyIiE9Y3x8cj09dXx8IShfKHIpJiZ3KHUpfHx3KHIpJiZfKHUpKSkmJihvIT1jfHwoIShyIT11fHxvIT1jfHxpIT1sJiYhZnVuY3Rpb24oZSx0KXtyZXR1cm4gdihlKSYmdih0KSYmZS5zcGxpdCgiLSIpWzFdIT10LnNwbGl0KCItIilbMl19KGksbCkpfHwociE9dSYmbz09YyYmciE9byYmdSE9Y3x8KHIhPXUmJm89PWMmJmk9PWx8fCghKCFwfHwhc3x8RShvKXx8RShjKXx8aChmLGEsITEpKXx8IWQoYSxmLG4pKSkpKSkpKSkpKX1mdW5jdGlvbiB2KGUpe3JldHVybi9eXC0oPzptb3p8d2Via2l0fG1zfG8pXC0vLnRlc3QoZSl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXC0oPzptb3p8d2Via2l0fG1zfG8pXC0vLCIiKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGUuc3BsaXQoIi0iKS5wb3AoKT09dC5zcGxpdCgiLSIpLnBvcCgpfWZ1bmN0aW9uIF8oZSl7cmV0dXJuImJvcmRlci10b3AiPT1lfHwiYm9yZGVyLXJpZ2h0Ij09ZXx8ImJvcmRlci1ib3R0b20iPT1lfHwiYm9yZGVyLWxlZnQiPT1lfWZ1bmN0aW9uIHcoZSl7cmV0dXJuImJvcmRlci1jb2xvciI9PWV8fCJib3JkZXItc3R5bGUiPT1lfHwiYm9yZGVyLXdpZHRoIj09ZX1mdW5jdGlvbiBFKGUpe3JldHVybiJmb250Ij09ZXx8ImxpbmUtaGVpZ2h0Ij09ZXx8Imxpc3Qtc3R5bGUiPT1lfXQuZXhwb3J0cz17Y2FuUmVvcmRlcjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPXQubGVuZ3RoLTE7MDw9cjtyLS0pZm9yKHZhciBpPWUubGVuZ3RoLTE7MDw9aTtpLS0paWYoIW8oZVtpXSx0W3JdLG4pKXJldHVybiExO3JldHVybiEwfSxjYW5SZW9yZGVyU2luZ2xlOm99fSx7Ii4vcnVsZXMtb3ZlcmxhcCI6NTEsIi4vc3BlY2lmaWNpdGllcy1vdmVybGFwIjo1Mn1dLDQ4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9jb21wYWN0YWJsZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2UubmFtZV07cmV0dXJuIHQmJnQuc2hvcnRoYW5kP3QucmVzdG9yZShlLHIpOmUudmFsdWV9fSx7Ii4vY29tcGFjdGFibGUiOjIxfV0sNDk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgZz1lKCIuL2Nsb25lIikuc2hhbGxvdyx2PWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLGI9ZSgiLi4vLi4vdG9rZW5pemVyL21hcmtlciIpO2Z1bmN0aW9uIHkoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXt2YXIgcj1lW3RdWzFdO2lmKCJpbmhlcml0IiE9ciYmciE9Yi5DT01NQSYmciE9Yi5GT1JXQVJEX1NMQVNIKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5jb21wb25lbnRzLG49dFswXS52YWx1ZVswXSxyPXRbMV0udmFsdWVbMF0saT10WzJdLnZhbHVlWzBdLG89dFszXS52YWx1ZVswXTtyZXR1cm4gblsxXT09clsxXSYmblsxXT09aVsxXSYmblsxXT09b1sxXT9bbl06blsxXT09aVsxXSYmclsxXT09b1sxXT9bbixyXTpyWzFdPT1vWzFdP1tuLHIsaV06W24scixpLG9dfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciByLGksbztmb3IoaT0wLG89ZS5sZW5ndGg7aTxvO2krKylpZigocj1lW2ldKS5uYW1lPT1uJiZyLnZhbHVlWzBdWzFdPT10W25dLmRlZmF1bHRWYWx1ZSlyZXR1cm4hMDtyZXR1cm4hMX10LmV4cG9ydHM9e2JhY2tncm91bmQ6ZnVuY3Rpb24oZSxuLHQpe3ZhciByLGksbz1lLmNvbXBvbmVudHMsYT1bXTtmdW5jdGlvbiBzKGUpe0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsZS52YWx1ZSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1uW2UubmFtZV07cmV0dXJuIHQuZG91YmxlVmFsdWVzJiYxPT10LmRlZmF1bHRWYWx1ZS5sZW5ndGg/ZS52YWx1ZVswXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0mJighZS52YWx1ZVsxXXx8ZS52YWx1ZVsxXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0pOnQuZG91YmxlVmFsdWVzJiYxIT10LmRlZmF1bHRWYWx1ZS5sZW5ndGg/ZS52YWx1ZVswXVsxXT09dC5kZWZhdWx0VmFsdWVbMF0mJihlLnZhbHVlWzFdP2UudmFsdWVbMV1bMV06ZS52YWx1ZVswXVsxXSk9PXQuZGVmYXVsdFZhbHVlWzFdOmUudmFsdWVbMF1bMV09PXQuZGVmYXVsdFZhbHVlfWZvcih2YXIgbD1vLmxlbmd0aC0xOzA8PWw7bC0tKXt2YXIgYz1vW2xdLGY9dShjKTtpZigiYmFja2dyb3VuZC1jbGlwIj09Yy5uYW1lKXt2YXIgcD1vW2wtMV0saD11KHApO2k9IShyPWMudmFsdWVbMF1bMV09PXAudmFsdWVbMF1bMV0pJiYoaCYmIWZ8fCFoJiYhZnx8IWgmJmYmJmMudmFsdWVbMF1bMV0hPXAudmFsdWVbMF1bMV0pLHI/cyhwKTppJiYocyhjKSxzKHApKSxsLS19ZWxzZSBpZigiYmFja2dyb3VuZC1zaXplIj09Yy5uYW1lKXt2YXIgZD1vW2wtMV0sbT11KGQpO2k9IShyPSFtJiZmKSYmKG0mJiFmfHwhbSYmIWYpLHI/cyhkKTppPyhzKGMpLGEudW5zaGlmdChbdi5QUk9QRVJUWV9WQUxVRSxiLkZPUldBUkRfU0xBU0hdKSxzKGQpKToxPT1kLnZhbHVlLmxlbmd0aCYmcyhkKSxsLS19ZWxzZXtpZihmfHxuW2MubmFtZV0ubXVsdGlwbGV4TGFzdE9ubHkmJiF0KWNvbnRpbnVlO3MoYyl9fXJldHVybiAwPT09YS5sZW5ndGgmJjE9PWUudmFsdWUubGVuZ3RoJiYiMCI9PWUudmFsdWVbMF1bMV0mJmEucHVzaChlLnZhbHVlWzBdKSwwPT09YS5sZW5ndGgmJmEucHVzaChbdi5QUk9QRVJUWV9WQUxVRSxuW2UubmFtZV0uZGVmYXVsdFZhbHVlXSkseShhKT9bYVswXV06YX0sYm9yZGVyUmFkaXVzOmZ1bmN0aW9uKGUsdCl7aWYoZS5tdWx0aXBsZXgpe2Zvcih2YXIgbj1nKGUpLHI9ZyhlKSxpPTA7aTw0O2krKyl7dmFyIG89ZS5jb21wb25lbnRzW2ldLGE9ZyhlKTthLnZhbHVlPVtvLnZhbHVlWzBdXSxuLmNvbXBvbmVudHMucHVzaChhKTt2YXIgcz1nKGUpO3MudmFsdWU9W28udmFsdWVbMV18fG8udmFsdWVbMF1dLHIuY29tcG9uZW50cy5wdXNoKHMpfXZhciB1PWMobiksbD1jKHIpO3JldHVybiB1Lmxlbmd0aCE9bC5sZW5ndGh8fHVbMF1bMV0hPWxbMF1bMV18fDE8dS5sZW5ndGgmJnVbMV1bMV0hPWxbMV1bMV18fDI8dS5sZW5ndGgmJnVbMl1bMV0hPWxbMl1bMV18fDM8dS5sZW5ndGgmJnVbM11bMV0hPWxbM11bMV0/dS5jb25jYXQoW1t2LlBST1BFUlRZX1ZBTFVFLGIuRk9SV0FSRF9TTEFTSF1dKS5jb25jYXQobCk6dX1yZXR1cm4gYyhlKX0sZm9udDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZS5jb21wb25lbnRzLGk9W10sbz0wLGE9MDtpZigwPT09ZS52YWx1ZVswXVsxXS5pbmRleE9mKGIuSU5URVJOQUwpKXJldHVybiBlLnZhbHVlWzBdWzFdPWUudmFsdWVbMF1bMV0uc3Vic3RyaW5nKGIuSU5URVJOQUwubGVuZ3RoKSxlLnZhbHVlO2Zvcig7bzw0Oykobj1yW29dKS52YWx1ZVswXVsxXSE9dFtuLm5hbWVdLmRlZmF1bHRWYWx1ZSYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxuLnZhbHVlKSxvKys7Zm9yKEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscltvXS52YWx1ZSksclsrK29dLnZhbHVlWzBdWzFdIT10W3Jbb10ubmFtZV0uZGVmYXVsdFZhbHVlJiYoQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaSxbW3YuUFJPUEVSVFlfVkFMVUUsYi5GT1JXQVJEX1NMQVNIXV0pLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscltvXS52YWx1ZSkpLG8rKztyW29dLnZhbHVlW2FdOylpLnB1c2gocltvXS52YWx1ZVthXSkscltvXS52YWx1ZVthKzFdJiZpLnB1c2goW3YuUFJPUEVSVFlfVkFMVUUsYi5DT01NQV0pLGErKztyZXR1cm4geShpKT9baVswXV06aX0sZm91clZhbHVlczpjLG11bHRpcGxleDpmdW5jdGlvbihtKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighZS5tdWx0aXBsZXgpcmV0dXJuIG0oZSx0LCEwKTt2YXIgbixyLGk9MCxvPVtdLGE9e307Zm9yKG49MCxyPWUuY29tcG9uZW50c1swXS52YWx1ZS5sZW5ndGg7bjxyO24rKyllLmNvbXBvbmVudHNbMF0udmFsdWVbbl1bMV09PWIuQ09NTUEmJmkrKztmb3Iobj0wO248PWk7bisrKXtmb3IodmFyIHM9ZyhlKSx1PTAsbD1lLmNvbXBvbmVudHMubGVuZ3RoO3U8bDt1Kyspe3ZhciBjPWUuY29tcG9uZW50c1t1XSxmPWcoYyk7cy5jb21wb25lbnRzLnB1c2goZik7Zm9yKHZhciBwPWFbZi5uYW1lXXx8MCxoPWMudmFsdWUubGVuZ3RoO3A8aDtwKyspe2lmKGMudmFsdWVbcF1bMV09PWIuQ09NTUEpe2FbZi5uYW1lXT1wKzE7YnJlYWt9Zi52YWx1ZS5wdXNoKGMudmFsdWVbcF0pfX12YXIgZD1tKHMsdCxuPT1pKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvLGQpLG48aSYmby5wdXNoKFt2LlBST1BFUlRZX1ZBTFVFLGIuQ09NTUFdKX1yZXR1cm4gb319LHdpdGhvdXREZWZhdWx0czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmNvbXBvbmVudHMscj1bXSxpPW4ubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBvPW5baV0sYT10W28ubmFtZV07KG8udmFsdWVbMF1bMV0hPWEuZGVmYXVsdFZhbHVlfHwia2VlcFVubGVzc0RlZmF1bHQiaW4gYSYmIXMobix0LGEua2VlcFVubGVzc0RlZmF1bHQpKSYmci51bnNoaWZ0KG8udmFsdWVbMF0pfXJldHVybiAwPT09ci5sZW5ndGgmJnIucHVzaChbdi5QUk9QRVJUWV9WQUxVRSx0W2UubmFtZV0uZGVmYXVsdFZhbHVlXSkseShyKT9bclswXV06cn19fSx7Ii4uLy4uL3Rva2VuaXplci9tYXJrZXIiOjgzLCIuLi8uLi90b2tlbml6ZXIvdG9rZW4iOjg0LCIuL2Nsb25lIjoyMH1dLDUwOltmdW5jdGlvbihlLHQsbil7dmFyIEs9ZSgiLi9yZW9yZGVyYWJsZSIpLmNhblJlb3JkZXJTaW5nbGUsRz1lKCIuL2V4dHJhY3QtcHJvcGVydGllcyIpLFk9ZSgiLi9pcy1tZXJnZWFibGUiKSxXPWUoIi4vdGlkeS1ydWxlLWR1cGxpY2F0ZXMiKSxRPWUoIi4uLy4uL3Rva2VuaXplci90b2tlbiIpLFo9ZSgiLi4vLi4vdXRpbHMvY2xvbmUtYXJyYXkiKSxKPWUoIi4uLy4uL3dyaXRlci9vbmUtdGltZSIpLmJvZHksWD1lKCIuLi8uLi93cml0ZXIvb25lLXRpbWUiKS5ydWxlcztmdW5jdGlvbiBlZShlLHQpe3JldHVybiB0PGU/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZyxlKXt2YXIgdCxuLHIsaT1lLm9wdGlvbnMsbz1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0NsYXNzZXMsYT1pLmNvbXBhdGliaWxpdHkuc2VsZWN0b3JzLm1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzLHM9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tZXJnZUxpbWl0LHU9aS5jb21wYXRpYmlsaXR5LnNlbGVjdG9ycy5tdWx0aXBsZVBzZXVkb01lcmdpbmcsbD1lLmNhY2hlLnNwZWNpZmljaXR5LHA9e30sYz1bXSxoPXt9LGY9W10sZD0yLG09IiUiO2Z1bmN0aW9uIHYoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0LnB1c2goWChlW25dWzFdKSk7cmV0dXJuIHQuam9pbihtKX0odCk7cmV0dXJuIGhbbl09aFtuXXx8W10saFtuXS5wdXNoKFtlLHRdKSxufWZ1bmN0aW9uIGIoZSl7dmFyIHQsbj1lLnNwbGl0KG0pLHI9W107Zm9yKHZhciBpIGluIGgpe3ZhciBvPWkuc3BsaXQobSk7Zm9yKHQ9by5sZW5ndGgtMTswPD10O3QtLSlpZigtMTxuLmluZGV4T2Yob1t0XSkpe3IucHVzaChpKTticmVha319Zm9yKHQ9ci5sZW5ndGgtMTswPD10O3QtLSlkZWxldGUgaFtyW3RdXX1mdW5jdGlvbiB5KGUpe2Zvcih2YXIgdD1bXSxuPVtdLHI9ZS5sZW5ndGgtMTswPD1yO3ItLSlZKFgoZVtyXVsxXSksbyxhLHUpJiYobi51bnNoaWZ0KGVbcl0pLDA8ZVtyXVsyXS5sZW5ndGgmJi0xPT10LmluZGV4T2YoZVtyXSkmJnQucHVzaChlW3JdKSk7cmV0dXJuIDE8dC5sZW5ndGg/bjpbXX1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dFswXSxyPXRbMV0saT10WzRdLG89bi5sZW5ndGgrci5sZW5ndGgrMSxhPVtdLHM9W10sdT15KHBbaV0pO2lmKCEodS5sZW5ndGg8Mikpe3ZhciBsPUUodSxvLDEpLGM9bFswXTtpZigwPGNbMV0pcmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi5sZW5ndGgtMTswPD1yO3ItLSl7dmFyIGk9dih0LG5bcl1bMF0pO2lmKDE8aFtpXS5sZW5ndGgmJkMoZSxoW2ldKSl7YihpKTticmVha319fShlLHQsbCk7Zm9yKHZhciBmPWNbMF0ubGVuZ3RoLTE7MDw9ZjtmLS0pYT1jWzBdW2ZdWzFdLmNvbmNhdChhKSxzLnVuc2hpZnQoY1swXVtmXSk7eChlLFt0XSxhPVcoYSkscyl9fWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm4gZVsxXT50WzFdPzE6ZVsxXT09dFsxXT8wOi0xfWZ1bmN0aW9uIEUoZSx0LG4pe3JldHVybiBmdW5jdGlvbiBlKHQsbixyLGkpe3ZhciBvPVtbdCxBKHQsbixyKV1dO2lmKDI8dC5sZW5ndGgmJjA8aSlmb3IodmFyIGE9dC5sZW5ndGgtMTswPD1hO2EtLSl7dmFyIHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwKTtzLnNwbGljZShhLDEpLG89by5jb25jYXQoZShzLG4scixpLTEpKX1yZXR1cm4gb30oZSx0LG4sZC0xKS5zb3J0KHcpfWZ1bmN0aW9uIEEoZSx0LG4pe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGgtMTswPD1pO2ktLSlyKz1lW2ldWzJdLmxlbmd0aD5uP1goZVtpXVsxXSkubGVuZ3RoOi0xO3JldHVybiByLShlLmxlbmd0aC0xKSp0KzF9ZnVuY3Rpb24geChlLHQsbixyKXt2YXIgaSxvLGEscyx1PVtdO2ZvcihpPXIubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBsPXJbaV07Zm9yKG89bFsyXS5sZW5ndGgtMTswPD1vO28tLSl7dmFyIGM9bFsyXVtvXTtmb3IoYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7dmFyIGY9dFthXSxwPWNbMV1bMV0saD1mWzBdLGQ9Zls0XTtpZihwPT1oJiZKKFtjXSk9PWQpe2xbMl0uc3BsaWNlKG8sMSk7YnJlYWt9fX19Zm9yKGk9dC5sZW5ndGgtMTswPD1pO2ktLSl1LnVuc2hpZnQodFtpXVszXSk7dmFyIG09W1EuUlVMRSxuLHVdO2cuc3BsaWNlKGUsMCxtKX1mdW5jdGlvbiBrKGUsdCl7dmFyIG49dFs0XSxyPXBbbl07ciYmMTxyLmxlbmd0aCYmKGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPVtdLG89W10sYT10WzRdLHM9eShwW2FdKTtpZighKHMubGVuZ3RoPDIpKXtlOmZvcih2YXIgdSBpbiBwKXt2YXIgbD1wW3VdO2ZvcihuPXMubGVuZ3RoLTE7MDw9bjtuLS0paWYoLTE9PWwuaW5kZXhPZihzW25dKSljb250aW51ZSBlO2kucHVzaCh1KX1pZihpLmxlbmd0aDwyKXJldHVybiExO2ZvcihuPWkubGVuZ3RoLTE7MDw9bjtuLS0pZm9yKHI9Yy5sZW5ndGgtMTswPD1yO3ItLSlpZihjW3JdWzRdPT1pW25dKXtvLnVuc2hpZnQoW2Nbcl0sc10pO2JyZWFrfXJldHVybiBDKGUsbyl9fShlLHQpfHxfKGUsdCkpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIG4scj0wLGk9W10sbz10Lmxlbmd0aC0xOzA8PW87by0tKXIrPShuPXRbb11bMF0pWzRdLmxlbmd0aCsoMDxvPzE6MCksaS5wdXNoKG4pO3ZhciBhPUUodFswXVsxXSxyLGkubGVuZ3RoKVswXTtpZigwPGFbMV0pcmV0dXJuITE7dmFyIHM9W10sdT1bXTtmb3Iobz1hWzBdLmxlbmd0aC0xOzA8PW87by0tKXM9YVswXVtvXVsxXS5jb25jYXQocyksdS51bnNoaWZ0KGFbMF1bb10pO2Zvcih4KGUsaSxzPVcocyksdSksbz1pLmxlbmd0aC0xOzA8PW87by0tKXtuPWlbb107dmFyIGw9Yy5pbmRleE9mKG4pO2RlbGV0ZSBwW25bNF1dLC0xPGwmJi0xPT1mLmluZGV4T2YobCkmJmYucHVzaChsKX1yZXR1cm4hMH1mdW5jdGlvbiBPKGUsdCxuKXtpZihlWzBdIT10WzBdKXJldHVybiExO3ZhciByPXRbNF0saT1wW3JdO3JldHVybiBpJiYtMTxpLmluZGV4T2Yobil9Zm9yKHZhciBTPWcubGVuZ3RoLTE7MDw9UztTLS0pe3ZhciBELFQsQixSLEwsRj1nW1NdO2lmKEZbMF09PVEuUlVMRSlEPSEwO2Vsc2V7aWYoRlswXSE9US5ORVNURURfQkxPQ0spY29udGludWU7RD0hMX12YXIgcT1jLmxlbmd0aCxVPUcoRik7Zj1bXTt2YXIgTT1bXTtmb3IoVD1VLmxlbmd0aC0xOzA8PVQ7VC0tKWZvcihCPVQtMTswPD1CO0ItLSlpZighSyhVW1RdLFVbQl0sbCkpe00ucHVzaChUKTticmVha31mb3IoVD1VLmxlbmd0aC0xOzA8PVQ7VC0tKXt2YXIgTj1VW1RdLFA9ITE7Zm9yKEI9MDtCPHE7QisrKXt2YXIgST1jW0JdOy0xPT1mLmluZGV4T2YoQikmJighSyhOLEksbCkmJiFPKE4sSSxGKXx8cFtJWzRdXSYmcFtJWzRdXS5sZW5ndGg9PT1zKSYmKGsoUysxLEkpLC0xPT1mLmluZGV4T2YoQikmJihmLnB1c2goQiksZGVsZXRlIHBbSVs0XV0pKSxQfHwoUD1OWzBdPT1JWzBdJiZOWzFdPT1JWzFdKSYmKEw9Qil9aWYoRCYmISgtMTxNLmluZGV4T2YoVCkpKXt2YXIgej1OWzRdO1AmJmNbTF1bNV0ubGVuZ3RoK05bNV0ubGVuZ3RoPnM/KGsoUysxLGNbTF0pLGMuc3BsaWNlKEwsMSkscFt6XT1bRl0sUD0hMSk6KHBbel09cFt6XXx8W10scFt6XS5wdXNoKEYpKSxQP2NbTF09KHQ9Y1tMXSxuPU4scj12b2lkIDAsKHI9Wih0KSlbNV09cls1XS5jb25jYXQobls1XSkscik6Yy5wdXNoKE4pfX1mb3IoVD0wLFI9KGY9Zi5zb3J0KGVlKSkubGVuZ3RoO1Q8UjtUKyspe3ZhciBqPWZbVF0tVDtjLnNwbGljZShqLDEpfX1mb3IodmFyIFY9Z1swXSYmZ1swXVswXT09US5BVF9SVUxFJiYwPT09Z1swXVsxXS5pbmRleE9mKCJAY2hhcnNldCIpPzE6MDtWPGcubGVuZ3RoLTE7VisrKXt2YXIgSD1nW1ZdWzBdPT09US5BVF9SVUxFJiYwPT09Z1tWXVsxXS5pbmRleE9mKCJAaW1wb3J0IiksJD1nW1ZdWzBdPT09US5DT01NRU5UO2lmKCFIJiYhJClicmVha31mb3IoUz0wO1M8Yy5sZW5ndGg7UysrKWsoVixjW1NdKX19LHsiLi4vLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vLi4vdXRpbHMvY2xvbmUtYXJyYXkiOjg2LCIuLi8uLi93cml0ZXIvb25lLXRpbWUiOjk4LCIuL2V4dHJhY3QtcHJvcGVydGllcyI6MjIsIi4vaXMtbWVyZ2VhYmxlIjoyNCwiLi9yZW9yZGVyYWJsZSI6NDcsIi4vdGlkeS1ydWxlLWR1cGxpY2F0ZXMiOjU0fV0sNTE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXC1cLS4rJC87ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5yZXBsYWNlKHIsIiIpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1O2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWZvcihyPWVbb11bMV0scz0wLHU9dC5sZW5ndGg7czx1O3MrKyl7aWYocj09KGk9dFtzXVsxXSkpcmV0dXJuITA7aWYobiYmbChyKT09bChpKSlyZXR1cm4hMH1yZXR1cm4hMX19LHt9XSw1MjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vc3BlY2lmaWNpdHkiKTtmdW5jdGlvbiBsKGUsdCl7dmFyIG47cmV0dXJuIGUgaW4gdHx8KHRbZV09bj1yKGUpKSxufHx0W2VdfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1O2ZvcihvPTAsYT1lLmxlbmd0aDtvPGE7bysrKWZvcihyPWwoZVtvXVsxXSxuKSxzPTAsdT10Lmxlbmd0aDtzPHU7cysrKWlmKGk9bCh0W3NdWzFdLG4pLHJbMF09PT1pWzBdJiZyWzFdPT09aVsxXSYmclsyXT09PWlbMl0pcmV0dXJuITA7cmV0dXJuITF9fSx7Ii4vc3BlY2lmaWNpdHkiOjUzfV0sNTM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgaD1lKCIuLi8uLi90b2tlbml6ZXIvbWFya2VyIiksZD0iLiIsbT0iIyIsZz0iOiIsdj0vW2EtekEtWl0vLGI9Ijpub3QoIix5PS9bXHMsXCg+flwrXS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHUsbD1bMCwwLDBdLGM9MCxmPSExLHA9ITE7Zm9yKGE9MCxzPWUubGVuZ3RoO2E8czthKyspe2lmKHQ9ZVthXSxuKTtlbHNlIGlmKHQhPWguU0lOR0xFX1FVT1RFfHxpfHxyKWlmKHQ9PWguU0lOR0xFX1FVT1RFJiYhaSYmcilyPSExO2Vsc2UgaWYodCE9aC5ET1VCTEVfUVVPVEV8fGl8fHIpaWYodD09aC5ET1VCTEVfUVVPVEUmJmkmJiFyKWk9ITE7ZWxzZXtpZihyfHxpKWNvbnRpbnVlOzA8YyYmIWZ8fCh0PT1oLk9QRU5fUk9VTkRfQlJBQ0tFVD9jKys6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUJiYxPT1jPyhjLS0sZj0hMSk6dD09aC5DTE9TRV9ST1VORF9CUkFDS0VUP2MtLTp0PT1tP2xbMF0rKzp0PT1kfHx0PT1oLk9QRU5fU1FVQVJFX0JSQUNLRVQ/bFsxXSsrOnQhPWd8fHB8fCh1PWEsZS5pbmRleE9mKGIsdSk9PT11KT90PT1nP2Y9ITA6KDA9PT1hfHxvKSYmdi50ZXN0KHQpJiZsWzJdKys6KGxbMV0rKyxmPSExKSl9ZWxzZSBpPSEwO2Vsc2Ugcj0hMDtuPXQ9PWguQkFDS19TTEFTSCxwPXQ9PWcsbz0hbiYmeS50ZXN0KHQpfXJldHVybiBsfX0seyIuLi8uLi90b2tlbml6ZXIvbWFya2VyIjo4M31dLDU0OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBlWzFdPnRbMV0/MTotMX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49W10scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZVtyXTstMT09bi5pbmRleE9mKG9bMV0pJiYobi5wdXNoKG9bMV0pLHQucHVzaChvKSl9cmV0dXJuIHQuc29ydChhKX19LHt9XSw1NTpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgtMTswPD10O3QtLSl7dmFyIG49ZVt0XTtuLnVudXNlZCYmbi5hbGwuc3BsaWNlKG4ucG9zaXRpb24sMSl9fX0se31dLDU2OltmdW5jdGlvbihlLHQsbil7dmFyIHU9ZSgiLi9oYWNrIiksbD1lKCIuLi90b2tlbml6ZXIvbWFya2VyIiksYz0iKiIsZj0iXFwiLHA9IiFpbXBvcnRhbnQiLGg9Il8iLGQ9IiFpZSI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtmb3Iobz1lLmxlbmd0aC0xOzA8PW87by0tKShuPWVbb10pLnVudXNlZHx8KG4uZGlydHl8fG4uaW1wb3J0YW50fHxuLmhhY2spJiYodD8ocj10KG4pLG4udmFsdWU9cik6cj1uLnZhbHVlLG4uaW1wb3J0YW50JiYoKGE9bikudmFsdWVbYS52YWx1ZS5sZW5ndGgtMV1bMV0rPXApLG4uaGFjayYmKHM9bixzLmhhY2tbMF09PXUuVU5ERVJTQ09SRT9zLm5hbWU9aCtzLm5hbWU6cy5oYWNrWzBdPT11LkFTVEVSSVNLP3MubmFtZT1jK3MubmFtZTpzLmhhY2tbMF09PXUuQkFDS1NMQVNIP3MudmFsdWVbcy52YWx1ZS5sZW5ndGgtMV1bMV0rPWYrcy5oYWNrWzFdOnMuaGFja1swXT09dS5CQU5HJiYocy52YWx1ZVtzLnZhbHVlLmxlbmd0aC0xXVsxXSs9bC5TUEFDRStkKSksImFsbCJpbiBuJiYoKGk9bi5hbGxbbi5wb3NpdGlvbl0pWzFdWzFdPW4ubmFtZSxpLnNwbGljZSgyLGkubGVuZ3RoLTEpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGkscikpKTt2YXIgc319LHsiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4vaGFjayI6OH1dLDU3OltmdW5jdGlvbihlLHQsbil7dmFyIHI9InZhclxcKFxcLVxcLVteXFwpXStcXCkiLGk9bmV3IFJlZ0V4cCgiXihcXC1tb3pcXC18XFwtd2Via2l0XFwtKT9jYWxjXFwoW15cXCldK1xcKSQiLCJpIiksYT0vWzAtOV0vLG89bmV3IFJlZ0V4cCgiXih2YXJcXChcXC1cXC1bXlxcKV0rXFwpfFtBLVpdKyhcXC18W0EtWl18WzAtOV0pK1xcKC4qP1xcKXxcXC0oXFwtfFtBLVpdfFswLTldKStcXCguKj9cXCkpJCIsImkiKSxzPS9eaHNsXChcc3swLDMxfVtcLVwuXT9cZCtcc3swLDMxfSxcc3swLDMxfVwuP1xkKyVcc3swLDMxfSxcc3swLDMxfVwuP1xkKyVcc3swLDMxfVwpfGhzbGFcKFxzezAsMzF9W1wtXC5dP1xkK1xzezAsMzF9LFxzezAsMzF9XC4/XGQrJVxzezAsMzF9LFxzezAsMzF9XC4/XGQrJVxzezAsMzF9LFxzezAsMzF9XC4/XGQrXHN7MCwzMX1cKSQvLHU9L14oXC1bYS16MC05X11bYS16MC05XC1fXSp8W2Etel1bYS16MC05XC1fXSopJC9pLGw9L15bYS16XSskL2ksYz0vXi0oW2EtejAtOV18LSkqJC9pLGY9L15yZ2JcKFxzezAsMzF9W1xkXXsxLDN9XHN7MCwzMX0sXHN7MCwzMX1bXGRdezEsM31cc3swLDMxfSxcc3swLDMxfVtcZF17MSwzfVxzezAsMzF9XCl8cmdiYVwoXHN7MCwzMX1bXGRdezEsM31cc3swLDMxfSxcc3swLDMxfVtcZF17MSwzfVxzezAsMzF9LFxzezAsMzF9W1xkXXsxLDN9XHN7MCwzMX0sXHN7MCwzMX1bXC5cZF0rXHN7MCwzMX1cKSQvLHA9L14oY3ViaWNcLWJlemllcnxzdGVwcylcKFteXCldK1wpJC8saD1bIm1zIiwicyJdLGQ9L151cmxcKFtcc1xTXStcKSQvaSxtPW5ldyBSZWdFeHAoIl4iK3IrIiQiLCJpIiksZz0vXiNbMC05YS1mXXs4fSQvaSx2PS9eI1swLTlhLWZdezR9JC9pLGI9L14jWzAtOWEtZl17Nn0kL2kseT0vXiNbMC05YS1mXXszfSQvaSxfPSIuIix3PSItIixFPSIrIixBPXsiXiI6WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il0sIiotc3R5bGUiOlsiYXV0byIsImRhc2hlZCIsImRvdHRlZCIsImRvdWJsZSIsImdyb292ZSIsImhpZGRlbiIsImluc2V0Iiwibm9uZSIsIm91dHNldCIsInJpZGdlIiwic29saWQiXSwiKi10aW1pbmctZnVuY3Rpb24iOlsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLWluLW91dCIsImVhc2Utb3V0IiwibGluZWFyIiwic3RlcC1lbmQiLCJzdGVwLXN0YXJ0Il0sImFuaW1hdGlvbi1kaXJlY3Rpb24iOlsiYWx0ZXJuYXRlIiwiYWx0ZXJuYXRlLXJldmVyc2UiLCJub3JtYWwiLCJyZXZlcnNlIl0sImFuaW1hdGlvbi1maWxsLW1vZGUiOlsiYmFja3dhcmRzIiwiYm90aCIsImZvcndhcmRzIiwibm9uZSJdLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IjpbImluZmluaXRlIl0sImFuaW1hdGlvbi1uYW1lIjpbIm5vbmUiXSwiYW5pbWF0aW9uLXBsYXktc3RhdGUiOlsicGF1c2VkIiwicnVubmluZyJdLCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOlsiZml4ZWQiLCJpbmhlcml0IiwibG9jYWwiLCJzY3JvbGwiXSwiYmFja2dyb3VuZC1jbGlwIjpbImJvcmRlci1ib3giLCJjb250ZW50LWJveCIsImluaGVyaXQiLCJwYWRkaW5nLWJveCIsInRleHQiXSwiYmFja2dyb3VuZC1vcmlnaW4iOlsiYm9yZGVyLWJveCIsImNvbnRlbnQtYm94IiwiaW5oZXJpdCIsInBhZGRpbmctYm94Il0sImJhY2tncm91bmQtcG9zaXRpb24iOlsiYm90dG9tIiwiY2VudGVyIiwibGVmdCIsInJpZ2h0IiwidG9wIl0sImJhY2tncm91bmQtcmVwZWF0IjpbIm5vLXJlcGVhdCIsImluaGVyaXQiLCJyZXBlYXQiLCJyZXBlYXQteCIsInJlcGVhdC15Iiwicm91bmQiLCJzcGFjZSJdLCJiYWNrZ3JvdW5kLXNpemUiOlsiYXV0byIsImNvdmVyIiwiY29udGFpbiJdLCJib3JkZXItY29sbGFwc2UiOlsiY29sbGFwc2UiLCJpbmhlcml0Iiwic2VwYXJhdGUiXSxib3R0b206WyJhdXRvIl0sY2xlYXI6WyJib3RoIiwibGVmdCIsIm5vbmUiLCJyaWdodCJdLGNvbG9yOlsidHJhbnNwYXJlbnQiXSxjdXJzb3I6WyJhbGwtc2Nyb2xsIiwiYXV0byIsImNvbC1yZXNpemUiLCJjcm9zc2hhaXIiLCJkZWZhdWx0IiwiZS1yZXNpemUiLCJoZWxwIiwibW92ZSIsIm4tcmVzaXplIiwibmUtcmVzaXplIiwibm8tZHJvcCIsIm5vdC1hbGxvd2VkIiwibnctcmVzaXplIiwicG9pbnRlciIsInByb2dyZXNzIiwicm93LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIiwic3ctcmVzaXplIiwidGV4dCIsInZlcnRpY2FsLXRleHQiLCJ3LXJlc2l6ZSIsIndhaXQiXSxkaXNwbGF5OlsiYmxvY2siLCJpbmxpbmUiLCJpbmxpbmUtYmxvY2siLCJpbmxpbmUtdGFibGUiLCJsaXN0LWl0ZW0iLCJub25lIiwidGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdyIsInRhYmxlLXJvdy1ncm91cCJdLGZsb2F0OlsibGVmdCIsIm5vbmUiLCJyaWdodCJdLGxlZnQ6WyJhdXRvIl0sZm9udDpbImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiLCJ1bnNldCJdLCJmb250LXNpemUiOlsibGFyZ2UiLCJsYXJnZXIiLCJtZWRpdW0iLCJzbWFsbCIsInNtYWxsZXIiLCJ4LWxhcmdlIiwieC1zbWFsbCIsInh4LWxhcmdlIiwieHgtc21hbGwiXSwiZm9udC1zdHJldGNoIjpbImNvbmRlbnNlZCIsImV4cGFuZGVkIiwiZXh0cmEtY29uZGVuc2VkIiwiZXh0cmEtZXhwYW5kZWQiLCJub3JtYWwiLCJzZW1pLWNvbmRlbnNlZCIsInNlbWktZXhwYW5kZWQiLCJ1bHRyYS1jb25kZW5zZWQiLCJ1bHRyYS1leHBhbmRlZCJdLCJmb250LXN0eWxlIjpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXSwiZm9udC12YXJpYW50IjpbIm5vcm1hbCIsInNtYWxsLWNhcHMiXSwiZm9udC13ZWlnaHQiOlsiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCJub3JtYWwiXSwibGluZS1oZWlnaHQiOlsibm9ybWFsIl0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlsiaW5zaWRlIiwib3V0c2lkZSJdLCJsaXN0LXN0eWxlLXR5cGUiOlsiYXJtZW5pYW4iLCJjaXJjbGUiLCJkZWNpbWFsIiwiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCJkaXNjIiwiZGVjaW1hbHxkaXNjIiwiZ2VvcmdpYW4iLCJsb3dlci1hbHBoYSIsImxvd2VyLWdyZWVrIiwibG93ZXItbGF0aW4iLCJsb3dlci1yb21hbiIsIm5vbmUiLCJzcXVhcmUiLCJ1cHBlci1hbHBoYSIsInVwcGVyLWxhdGluIiwidXBwZXItcm9tYW4iXSxvdmVyZmxvdzpbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiLCJ2aXNpYmxlIl0scG9zaXRpb246WyJhYnNvbHV0ZSIsImZpeGVkIiwicmVsYXRpdmUiLCJzdGF0aWMiXSxyaWdodDpbImF1dG8iXSwidGV4dC1hbGlnbiI6WyJjZW50ZXIiLCJqdXN0aWZ5IiwibGVmdCIsImxlZnR8cmlnaHQiLCJyaWdodCJdLCJ0ZXh0LWRlY29yYXRpb24iOlsibGluZS10aHJvdWdoIiwibm9uZSIsIm92ZXJsaW5lIiwidW5kZXJsaW5lIl0sInRleHQtb3ZlcmZsb3ciOlsiY2xpcCIsImVsbGlwc2lzIl0sdG9wOlsiYXV0byJdLCJ2ZXJ0aWNhbC1hbGlnbiI6WyJiYXNlbGluZSIsImJvdHRvbSIsIm1pZGRsZSIsInN1YiIsInN1cGVyIiwidGV4dC1ib3R0b20iLCJ0ZXh0LXRvcCIsInRvcCJdLHZpc2liaWxpdHk6WyJjb2xsYXBzZSIsImhpZGRlbiIsInZpc2libGUiXSwid2hpdGUtc3BhY2UiOlsibm9ybWFsIiwibm93cmFwIiwicHJlIl0sd2lkdGg6WyJpbmhlcml0IiwiaW5pdGlhbCIsIm1lZGl1bSIsInRoaWNrIiwidGhpbiJdfSx4PVsiJSIsImNoIiwiY20iLCJlbSIsImV4IiwiaW4iLCJtbSIsInBjIiwicHQiLCJweCIsInJlbSIsInZoIiwidm0iLCJ2bWF4Iiwidm1pbiIsInZ3Il07ZnVuY3Rpb24gayhlKXtyZXR1cm4iYXV0byIhPWUmJihSKCJjb2xvciIpKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4geS50ZXN0KGUpfHx2LnRlc3QoZSl8fGIudGVzdChlKXx8Zy50ZXN0KGUpfShlKXx8QyhlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGwudGVzdChlKX0oZSkpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIEYoZSl8fEQoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gaS50ZXN0KGUpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIG8udGVzdChlKX1mdW5jdGlvbiBEKGUpe3JldHVybiBzLnRlc3QoZSl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gdS50ZXN0KGUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIm5vbmUiPT1lfHwiaW5oZXJpdCI9PWV8fFAoZSl9ZnVuY3Rpb24gUih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLTE8QVt0XS5pbmRleE9mKGUpfX1mdW5jdGlvbiBMKGUpe3JldHVybiB6KGUpPT1lLmxlbmd0aH1mdW5jdGlvbiBGKGUpe3JldHVybiBmLnRlc3QoZSl9ZnVuY3Rpb24gcShlKXtyZXR1cm4gYy50ZXN0KGUpfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIEwoZSkmJjA8PXBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4gbS50ZXN0KGUpfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9eihlKTtyZXR1cm4gdD09ZS5sZW5ndGgmJjA9PT1wYXJzZUludChlKXx8LTE8dCYmLTE8aC5pbmRleE9mKGUuc2xpY2UodCsxKSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4gZC50ZXN0KGUpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuImF1dG8iPT1lfHxMKGUpfHxSKCJeIikoZSl9ZnVuY3Rpb24geihlKXt2YXIgdCxuLHIsaT0hMSxvPSExO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKHQ9ZVtuXSwwIT09bnx8dCE9RSYmdCE9dyl7aWYoMDxuJiZvJiYodD09RXx8dD09dykpcmV0dXJuIG4tMTtpZih0IT1ffHxpKXtpZih0PT1fJiZpKXJldHVybiBuLTE7aWYoYS50ZXN0KHQpKWNvbnRpbnVlO3JldHVybiBuLTF9aT0hMH1lbHNlIG89ITA7cmV0dXJuIG59dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXguc2xpY2UoMCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEoZSBpbiB0LnVuaXRzKXx8ITA9PT10LnVuaXRzW2VdfSk7cmV0dXJue2NvbG9yT3BhY2l0eTp0LmNvbG9ycy5vcGFjaXR5LGlzQW5pbWF0aW9uRGlyZWN0aW9uS2V5d29yZDpSKCJhbmltYXRpb24tZGlyZWN0aW9uIiksaXNBbmltYXRpb25GaWxsTW9kZUtleXdvcmQ6UigiYW5pbWF0aW9uLWZpbGwtbW9kZSIpLGlzQW5pbWF0aW9uSXRlcmF0aW9uQ291bnRLZXl3b3JkOlIoImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiKSxpc0FuaW1hdGlvbk5hbWVLZXl3b3JkOlIoImFuaW1hdGlvbi1uYW1lIiksaXNBbmltYXRpb25QbGF5U3RhdGVLZXl3b3JkOlIoImFuaW1hdGlvbi1wbGF5LXN0YXRlIiksaXNUaW1pbmdGdW5jdGlvbjpmdW5jdGlvbigpe3ZhciB0PVIoIiotdGltaW5nLWZ1bmN0aW9uIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfHxwLnRlc3QoZSl9fSgpLGlzQmFja2dyb3VuZEF0dGFjaG1lbnRLZXl3b3JkOlIoImJhY2tncm91bmQtYXR0YWNobWVudCIpLGlzQmFja2dyb3VuZENsaXBLZXl3b3JkOlIoImJhY2tncm91bmQtY2xpcCIpLGlzQmFja2dyb3VuZE9yaWdpbktleXdvcmQ6UigiYmFja2dyb3VuZC1vcmlnaW4iKSxpc0JhY2tncm91bmRQb3NpdGlvbktleXdvcmQ6UigiYmFja2dyb3VuZC1wb3NpdGlvbiIpLGlzQmFja2dyb3VuZFJlcGVhdEtleXdvcmQ6UigiYmFja2dyb3VuZC1yZXBlYXQiKSxpc0JhY2tncm91bmRTaXplS2V5d29yZDpSKCJiYWNrZ3JvdW5kLXNpemUiKSxpc0NvbG9yOmssaXNDb2xvckZ1bmN0aW9uOkMsaXNEeW5hbWljVW5pdDpPLGlzRm9udEtleXdvcmQ6UigiZm9udCIpLGlzRm9udFNpemVLZXl3b3JkOlIoImZvbnQtc2l6ZSIpLGlzRm9udFN0cmV0Y2hLZXl3b3JkOlIoImZvbnQtc3RyZXRjaCIpLGlzRm9udFN0eWxlS2V5d29yZDpSKCJmb250LXN0eWxlIiksaXNGb250VmFyaWFudEtleXdvcmQ6UigiZm9udC12YXJpYW50IiksaXNGb250V2VpZ2h0S2V5d29yZDpSKCJmb250LXdlaWdodCIpLGlzRnVuY3Rpb246Uyxpc0dsb2JhbDpSKCJeIiksaXNIc2xDb2xvcjpELGlzSWRlbnRpZmllcjpULGlzSW1hZ2U6Qixpc0tleXdvcmQ6Uixpc0xpbmVIZWlnaHRLZXl3b3JkOlIoImxpbmUtaGVpZ2h0IiksaXNMaXN0U3R5bGVQb3NpdGlvbktleXdvcmQ6UigibGlzdC1zdHlsZS1wb3NpdGlvbiIpLGlzTGlzdFN0eWxlVHlwZUtleXdvcmQ6UigibGlzdC1zdHlsZS10eXBlIiksaXNOdW1iZXI6TCxpc1ByZWZpeGVkOnEsaXNQb3NpdGl2ZU51bWJlcjpVLGlzUmdiQ29sb3I6Rixpc1N0eWxlS2V5d29yZDpSKCIqLXN0eWxlIiksaXNUaW1lOk4saXNVbml0OmZ1bmN0aW9uKGUsdCl7dmFyIG49eih0KTtyZXR1cm4gbj09dC5sZW5ndGgmJjA9PT1wYXJzZUludCh0KXx8LTE8biYmLTE8ZS5pbmRleE9mKHQuc2xpY2UobisxKSl8fCJhdXRvIj09dHx8ImluaGVyaXQiPT10fS5iaW5kKG51bGwsZSksaXNVcmw6UCxpc1ZhcmlhYmxlOk0saXNXaWR0aDpSKCJ3aWR0aCIpLGlzWkluZGV4Okl9fX0se31dLDU4OltmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSgiLi9oYWNrIiksbz1lKCIuLi90b2tlbml6ZXIvbWFya2VyIikscz1lKCIuLi90b2tlbml6ZXIvdG9rZW4iKSxhPXtBU1RFUklTSzoiKiIsQkFDS1NMQVNIOiJcXCIsQkFORzoiISIsQkFOR19TVUZGSVhfUEFUVEVSTjovIVx3KyQvLElNUE9SVEFOVF9UT0tFTjoiIWltcG9ydGFudCIsSU1QT1JUQU5UX1RPS0VOX1BBVFRFUk46bmV3IFJlZ0V4cCgiIWltcG9ydGFudCQiLCJpIiksSU1QT1JUQU5UX1dPUkQ6ImltcG9ydGFudCIsSU1QT1JUQU5UX1dPUkRfUEFUVEVSTjpuZXcgUmVnRXhwKCJpbXBvcnRhbnQkIiwiaSIpLFNVRkZJWF9CQU5HX1BBVFRFUk46LyEkLyxVTkRFUlNDT1JFOiJfIixWQVJJQUJMRV9SRUZFUkVOQ0VfUEFUVEVSTjovdmFyXCgtLS4rXCkkL307ZnVuY3Rpb24gdShlKXt2YXIgdCxuLHIsaTtmb3IodD0yLG49ZS5sZW5ndGg7dDxuO3QrKylpZigocj1lW3RdKVswXT09cy5QUk9QRVJUWV9WQUxVRSYmKGk9clsxXSxhLlZBUklBQkxFX1JFRkVSRU5DRV9QQVRURVJOLnRlc3QoaSkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8MylyZXR1cm4hMTt2YXIgdD1lW2UubGVuZ3RoLTFdO3JldHVybiEhYS5JTVBPUlRBTlRfVE9LRU5fUEFUVEVSTi50ZXN0KHRbMV0pfHwhKCFhLklNUE9SVEFOVF9XT1JEX1BBVFRFUk4udGVzdCh0WzFdKXx8IWEuU1VGRklYX0JBTkdfUEFUVEVSTi50ZXN0KGVbZS5sZW5ndGgtMl1bMV0pKX0oZSk7dCYmZnVuY3Rpb24oZSl7dmFyIHQ9ZVtlLmxlbmd0aC0xXSxuPWVbZS5sZW5ndGgtMl07YS5JTVBPUlRBTlRfVE9LRU5fUEFUVEVSTi50ZXN0KHRbMV0pP3RbMV09dFsxXS5yZXBsYWNlKGEuSU1QT1JUQU5UX1RPS0VOX1BBVFRFUk4sIiIpOih0WzFdPXRbMV0ucmVwbGFjZShhLklNUE9SVEFOVF9XT1JEX1BBVFRFUk4sIiIpLG5bMV09blsxXS5yZXBsYWNlKGEuU1VGRklYX0JBTkdfUEFUVEVSTiwiIikpLDA9PT10WzFdLmxlbmd0aCYmZS5wb3AoKSwwPT09blsxXS5sZW5ndGgmJmUucG9wKCl9KGUpO3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PSExLG49ZVsxXVsxXSxyPWVbZS5sZW5ndGgtMV07cmV0dXJuIG5bMF09PWEuVU5ERVJTQ09SRT90PVtpLlVOREVSU0NPUkVdOm5bMF09PWEuQVNURVJJU0s/dD1baS5BU1RFUklTS106clsxXVswXSE9YS5CQU5HfHxyWzFdLm1hdGNoKGEuSU1QT1JUQU5UX1dPUkRfUEFUVEVSTik/MDxyWzFdLmluZGV4T2YoYS5CQU5HKSYmIXJbMV0ubWF0Y2goYS5JTVBPUlRBTlRfV09SRF9QQVRURVJOKSYmYS5CQU5HX1NVRkZJWF9QQVRURVJOLnRlc3QoclsxXSk/dD1baS5CQU5HXTowPHJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCkmJnJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCk9PXJbMV0ubGVuZ3RoLWEuQkFDS1NMQVNILmxlbmd0aC0xP3Q9W2kuQkFDS1NMQVNILHJbMV0uc3Vic3RyaW5nKHJbMV0uaW5kZXhPZihhLkJBQ0tTTEFTSCkrMSldOjA9PT1yWzFdLmluZGV4T2YoYS5CQUNLU0xBU0gpJiYyPT1yWzFdLmxlbmd0aCYmKHQ9W2kuQkFDS1NMQVNILHJbMV0uc3Vic3RyaW5nKDEpXSk6dD1baS5CQU5HXSx0fShlKTtyZXR1cm4gblswXT09aS5BU1RFUklTS3x8blswXT09aS5VTkRFUlNDT1JFP2Z1bmN0aW9uKGUpe2VbMV1bMV09ZVsxXVsxXS5zdWJzdHJpbmcoMSl9KGUpOm5bMF0hPWkuQkFDS1NMQVNIJiZuWzBdIT1pLkJBTkd8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVtlLmxlbmd0aC0xXTtuWzFdPW5bMV0uc3Vic3RyaW5nKDAsblsxXS5pbmRleE9mKHRbMF09PWkuQkFDS1NMQVNIP2EuQkFDS1NMQVNIOmEuQkFORykpLnRyaW0oKSwwPT09blsxXS5sZW5ndGgmJmUucG9wKCl9KGUsbikse2Jsb2NrOmVbMl0mJmVbMl1bMF09PXMuUFJPUEVSVFlfQkxPQ0ssY29tcG9uZW50czpbXSxkaXJ0eTohMSxoYWNrOm4saW1wb3J0YW50OnQsbmFtZTplWzFdWzFdLG11bHRpcGxleDozPGUubGVuZ3RoJiZmdW5jdGlvbihlKXt2YXIgdCxuLHI7Zm9yKG49MyxyPWUubGVuZ3RoO248cjtuKyspaWYoKHQ9ZVtuXSlbMF09PXMuUFJPUEVSVFlfVkFMVUUmJih0WzFdPT1vLkNPTU1BfHx0WzFdPT1vLkZPUldBUkRfU0xBU0gpKXJldHVybiEwO3JldHVybiExfShlKSxwb3NpdGlvbjowLHNob3J0aGFuZDohMSx1bnVzZWQ6ITEsdmFsdWU6ZS5zbGljZSgyKX19dC5leHBvcnRzPXthbGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPVtdO2ZvcihvPWUubGVuZ3RoLTE7MDw9bztvLS0pKGk9ZVtvXSlbMF09PXMuUFJPUEVSVFkmJighdCYmdShpKXx8biYmLTE8bi5pbmRleE9mKGlbMV1bMV0pfHwoKHI9bChpKSkuYWxsPWUsci5wb3NpdGlvbj1vLGEudW5zaGlmdChyKSkpO3JldHVybiBhfSxzaW5nbGU6bH19LHsiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4vaGFjayI6OH1dLDU5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9eyIqIjp7Y29sb3JzOntvcGFjaXR5OiEwfSxwcm9wZXJ0aWVzOntiYWNrZ3JvdW5kQ2xpcE1lcmdpbmc6ITAsYmFja2dyb3VuZE9yaWdpbk1lcmdpbmc6ITAsYmFja2dyb3VuZFNpemVNZXJnaW5nOiEwLGNvbG9yczohMCxpZUJhbmdIYWNrOiExLGllRmlsdGVyczohMSxpZVByZWZpeEhhY2s6ITEsaWVTdWZmaXhIYWNrOiExLG1lcmdpbmc6ITAsc2hvcnRlckxlbmd0aFVuaXRzOiExLHNwYWNlQWZ0ZXJDbG9zaW5nQnJhY2U6ITAsdXJsUXVvdGVzOiExLHplcm9Vbml0czohMH0sc2VsZWN0b3JzOnthZGphY2VudFNwYWNlOiExLGllN0hhY2s6ITEsbWVyZ2VhYmxlUHNldWRvQ2xhc3NlczpbIjphY3RpdmUiLCI6YWZ0ZXIiLCI6YmVmb3JlIiwiOmVtcHR5IiwiOmNoZWNrZWQiLCI6ZGlzYWJsZWQiLCI6ZW1wdHkiLCI6ZW5hYmxlZCIsIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6Zmlyc3QtbGluZSIsIjpmaXJzdC1vZi10eXBlIiwiOmZvY3VzIiwiOmhvdmVyIiwiOmxhbmciLCI6bGFzdC1jaGlsZCIsIjpsYXN0LW9mLXR5cGUiLCI6bGluayIsIjpub3QiLCI6bnRoLWNoaWxkIiwiOm50aC1sYXN0LWNoaWxkIiwiOm50aC1sYXN0LW9mLXR5cGUiLCI6bnRoLW9mLXR5cGUiLCI6b25seS1jaGlsZCIsIjpvbmx5LW9mLXR5cGUiLCI6cm9vdCIsIjp0YXJnZXQiLCI6dmlzaXRlZCJdLG1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzOlsiOjphZnRlciIsIjo6YmVmb3JlIiwiOjpmaXJzdC1sZXR0ZXIiLCI6OmZpcnN0LWxpbmUiXSxtZXJnZUxpbWl0OjgxOTEsbXVsdGlwbGVQc2V1ZG9NZXJnaW5nOiEwfSx1bml0czp7Y2g6ITAsaW46ITAscGM6ITAscHQ6ITAscmVtOiEwLHZoOiEwLHZtOiEwLHZtYXg6ITAsdm1pbjohMCx2dzohMH19fTtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07Im9iamVjdCIhPXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpP3Rbbl09biBpbiB0P3Rbbl06cjp0W25dPWkocix0W25dfHx7fSl9cmV0dXJuIHR9ci5pZTExPXJbIioiXSxyLmllMTA9clsiKiJdLHIuaWU5PWkoclsiKiJdLHtwcm9wZXJ0aWVzOntpZUZpbHRlcnM6ITAsaWVTdWZmaXhIYWNrOiEwfX0pLHIuaWU4PWkoci5pZTkse2NvbG9yczp7b3BhY2l0eTohMX0scHJvcGVydGllczp7YmFja2dyb3VuZENsaXBNZXJnaW5nOiExLGJhY2tncm91bmRPcmlnaW5NZXJnaW5nOiExLGJhY2tncm91bmRTaXplTWVyZ2luZzohMSxpZVByZWZpeEhhY2s6ITAsbWVyZ2luZzohMX0sc2VsZWN0b3JzOnttZXJnZWFibGVQc2V1ZG9DbGFzc2VzOlsiOmFmdGVyIiwiOmJlZm9yZSIsIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6Zm9jdXMiLCI6aG92ZXIiLCI6dmlzaXRlZCJdLG1lcmdlYWJsZVBzZXVkb0VsZW1lbnRzOltdfSx1bml0czp7Y2g6ITEscmVtOiExLHZoOiExLHZtOiExLHZtYXg6ITEsdm1pbjohMSx2dzohMX19KSxyLmllNz1pKHIuaWU4LHtwcm9wZXJ0aWVzOntpZUJhbmdIYWNrOiEwfSxzZWxlY3RvcnM6e2llN0hhY2s6ITAsbWVyZ2VhYmxlUHNldWRvQ2xhc3NlczpbIjpmaXJzdC1jaGlsZCIsIjpmaXJzdC1sZXR0ZXIiLCI6aG92ZXIiLCI6dmlzaXRlZCJdfX0pLHQuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShyWyIqIl0sZnVuY3Rpb24obyl7aWYoIm9iamVjdCI9PXR5cGVvZiBvKXJldHVybiBvO2lmKCEvWyxcK1wtXS8udGVzdChvKSlyZXR1cm4gcltvXXx8clsiKiJdO3ZhciBlPW8uc3BsaXQoIiwiKSx0PWVbMF1pbiByP3JbZS5zaGlmdCgpXTpyWyIqIl07cmV0dXJuIG89e30sZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSIrIj09ZVswXSxuPWUuc3Vic3RyaW5nKDEpLnNwbGl0KCIuIikscj1uWzBdLGk9blsxXTtvW3JdPW9bcl18fHt9LG9bcl1baV09dH0pLGkodCxvKX0oZSkpfX0se31dLDYwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vcmVhZGVyL2xvYWQtcmVtb3RlLXJlc291cmNlIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxyfX0seyIuLi9yZWFkZXIvbG9hZC1yZW1vdGUtcmVzb3VyY2UiOjc0fV0sNjE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJvcyIpLkVPTCxpPWUoIi4uL3V0aWxzL292ZXJyaWRlIiksbz17QWZ0ZXJBdFJ1bGU6ImFmdGVyQXRSdWxlIixBZnRlckJsb2NrQmVnaW5zOiJhZnRlckJsb2NrQmVnaW5zIixBZnRlckJsb2NrRW5kczoiYWZ0ZXJCbG9ja0VuZHMiLEFmdGVyQ29tbWVudDoiYWZ0ZXJDb21tZW50IixBZnRlclByb3BlcnR5OiJhZnRlclByb3BlcnR5IixBZnRlclJ1bGVCZWdpbnM6ImFmdGVyUnVsZUJlZ2lucyIsQWZ0ZXJSdWxlRW5kczoiYWZ0ZXJSdWxlRW5kcyIsQmVmb3JlQmxvY2tFbmRzOiJiZWZvcmVCbG9ja0VuZHMiLEJldHdlZW5TZWxlY3RvcnM6ImJldHdlZW5TZWxlY3RvcnMifSxhPXtDYXJyaWFnZVJldHVybkxpbmVGZWVkOiJcclxuIixMaW5lRmVlZDoiXG4iLFN5c3RlbTpyfSxzPXtTcGFjZToiICIsVGFiOiJcdCJ9LHU9e0Fyb3VuZFNlbGVjdG9yUmVsYXRpb246ImFyb3VuZFNlbGVjdG9yUmVsYXRpb24iLEJlZm9yZUJsb2NrQmVnaW5zOiJiZWZvcmVCbG9ja0JlZ2lucyIsQmVmb3JlVmFsdWU6ImJlZm9yZVZhbHVlIn0sbD17YnJlYWtzOmIoITEpLGJyZWFrV2l0aDphLlN5c3RlbSxpbmRlbnRCeTowLGluZGVudFdpdGg6cy5TcGFjZSxzcGFjZXM6eSghMSksd3JhcEF0OiExLHNlbWljb2xvbkFmdGVyTGFzdFByb3BlcnR5OiExfSxjPSI7IixmPSI6IixwPSIsIixoPSI9IixkPSJmYWxzZSIsbT0ib2ZmIixnPSJ0cnVlIix2PSJvbiI7ZnVuY3Rpb24gYihlKXt2YXIgdD17fTtyZXR1cm4gdFtvLkFmdGVyQXRSdWxlXT1lLHRbby5BZnRlckJsb2NrQmVnaW5zXT1lLHRbby5BZnRlckJsb2NrRW5kc109ZSx0W28uQWZ0ZXJDb21tZW50XT1lLHRbby5BZnRlclByb3BlcnR5XT1lLHRbby5BZnRlclJ1bGVCZWdpbnNdPWUsdFtvLkFmdGVyUnVsZUVuZHNdPWUsdFtvLkJlZm9yZUJsb2NrRW5kc109ZSx0W28uQmV0d2VlblNlbGVjdG9yc109ZSx0fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9e307cmV0dXJuIHRbdS5Bcm91bmRTZWxlY3RvclJlbGF0aW9uXT1lLHRbdS5CZWZvcmVCbG9ja0JlZ2luc109ZSx0W3UuQmVmb3JlVmFsdWVdPWUsdH1mdW5jdGlvbiBfKGUpe3N3aXRjaChlKXtjYXNlIndpbmRvd3MiOmNhc2UiY3JsZiI6Y2FzZSBhLkNhcnJpYWdlUmV0dXJuTGluZUZlZWQ6cmV0dXJuIGEuQ2FycmlhZ2VSZXR1cm5MaW5lRmVlZDtjYXNlInVuaXgiOmNhc2UibGYiOmNhc2UgYS5MaW5lRmVlZDpyZXR1cm4gYS5MaW5lRmVlZDtkZWZhdWx0OnJldHVybiByfX1mdW5jdGlvbiB3KGUpe3N3aXRjaChlKXtjYXNlInNwYWNlIjpyZXR1cm4gcy5TcGFjZTtjYXNlInRhYiI6cmV0dXJuIHMuVGFiO2RlZmF1bHQ6cmV0dXJuIGV9fXQuZXhwb3J0cz17QnJlYWtzOm8sU3BhY2VzOnUsZm9ybWF0RnJvbTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmITEhPT1lJiYoIm9iamVjdCI9PXR5cGVvZiBlJiYiYnJlYWtXaXRoImluIGUmJihlPWkoZSx7YnJlYWtXaXRoOl8oZS5icmVha1dpdGgpfSkpLCJvYmplY3QiPT10eXBlb2YgZSYmImluZGVudEJ5ImluIGUmJihlPWkoZSx7aW5kZW50Qnk6cGFyc2VJbnQoZS5pbmRlbnRCeSl9KSksIm9iamVjdCI9PXR5cGVvZiBlJiYiaW5kZW50V2l0aCJpbiBlJiYoZT1pKGUse2luZGVudFdpdGg6dyhlLmluZGVudFdpdGgpfSkpLCJvYmplY3QiPT10eXBlb2YgZT9pKGwsZSk6Im9iamVjdCI9PXR5cGVvZiBlP2kobCxlKToic3RyaW5nIj09dHlwZW9mIGUmJiJiZWF1dGlmeSI9PWU/aShsLHticmVha3M6YighMCksaW5kZW50Qnk6MixzcGFjZXM6eSghMCl9KToic3RyaW5nIj09dHlwZW9mIGUmJiJrZWVwLWJyZWFrcyI9PWU/aShsLHticmVha3M6e2FmdGVyQXRSdWxlOiEwLGFmdGVyQmxvY2tCZWdpbnM6ITAsYWZ0ZXJCbG9ja0VuZHM6ITAsYWZ0ZXJDb21tZW50OiEwLGFmdGVyUnVsZUVuZHM6ITAsYmVmb3JlQmxvY2tFbmRzOiEwfX0pOiJzdHJpbmciPT10eXBlb2YgZT9pKGwsZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoYykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdChmKSxyPW5bMF0saT1uWzFdO3JldHVybiJicmVha3MiPT1yfHwic3BhY2VzIj09cj9lW3JdPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KHApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BsaXQoaCkscj1uWzBdLGk9blsxXTtyZXR1cm4gZVtyXT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBkOmNhc2UgbTpyZXR1cm4hMTtjYXNlIGc6Y2FzZSB2OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuIGV9fShpKSxlfSx7fSl9KGkpOiJpbmRlbnRCeSI9PXJ8fCJ3cmFwQXQiPT1yP2Vbcl09cGFyc2VJbnQoaSk6ImluZGVudFdpdGgiPT1yP2Vbcl09dyhpKToiYnJlYWtXaXRoIj09ciYmKGVbcl09XyhpKSksZX0se30pfShlKSk6bCl9fX0seyIuLi91dGlscy9vdmVycmlkZSI6OTUsb3M6MTA5fV0sNjI6W2Z1bmN0aW9uKGUsaSx0KXsoZnVuY3Rpb24odCl7dmFyIG49ZSgidXJsIikscj1lKCIuLi91dGlscy9vdmVycmlkZSIpO2kuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihmdW5jdGlvbihlKXtyZXR1cm4gZT97aG9zdG5hbWU6bi5wYXJzZShlKS5ob3N0bmFtZSxwb3J0OnBhcnNlSW50KG4ucGFyc2UoZSkucG9ydCl9Ont9fSh0LmVudi5IVFRQX1BST1hZfHx0LmVudi5odHRwX3Byb3h5KSxlfHx7fSl9fSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIikpfSx7Ii4uL3V0aWxzL292ZXJyaWRlIjo5NSxfcHJvY2VzczoxMTIsdXJsOjE2Mn1dLDYzOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlfHw1ZTN9fSx7fV0sNjQ6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTohMT09PWU/WyJub25lIl06dm9pZCAwPT09ZT9bImxvY2FsIl06ZS5zcGxpdCgiLCIpfX0se31dLDY1OltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi9yb3VuZGluZy1wcmVjaXNpb24iKS5yb3VuZGluZ1ByZWNpc2lvbkZyb20sYT1lKCIuLi91dGlscy9vdmVycmlkZSIpLHM9e1plcm86IjAiLE9uZToiMSIsVHdvOiIyIn0sdT17fTt1W3MuWmVyb109e30sdVtzLk9uZV09e2NsZWFudXBDaGFyc2V0czohMCxub3JtYWxpemVVcmxzOiEwLG9wdGltaXplQmFja2dyb3VuZDohMCxvcHRpbWl6ZUJvcmRlclJhZGl1czohMCxvcHRpbWl6ZUZpbHRlcjohMCxvcHRpbWl6ZUZvbnRXZWlnaHQ6ITAsb3B0aW1pemVPdXRsaW5lOiEwLHJlbW92ZUVtcHR5OiEwLHJlbW92ZU5lZ2F0aXZlUGFkZGluZ3M6ITAscmVtb3ZlUXVvdGVzOiEwLHJlbW92ZVdoaXRlc3BhY2U6ITAscmVwbGFjZU11bHRpcGxlWmVyb3M6ITAscmVwbGFjZVRpbWVVbml0czohMCxyZXBsYWNlWmVyb1VuaXRzOiEwLHJvdW5kaW5nUHJlY2lzaW9uOm8odm9pZCAwKSxzZWxlY3RvcnNTb3J0aW5nTWV0aG9kOiJzdGFuZGFyZCIsc3BlY2lhbENvbW1lbnRzOiJhbGwiLHRpZHlBdFJ1bGVzOiEwLHRpZHlCbG9ja1Njb3BlczohMCx0aWR5U2VsZWN0b3JzOiEwLHRyYW5zZm9ybTpmdW5jdGlvbigpe319LHVbcy5Ud29dPXttZXJnZUFkamFjZW50UnVsZXM6ITAsbWVyZ2VJbnRvU2hvcnRoYW5kczohMCxtZXJnZU1lZGlhOiEwLG1lcmdlTm9uQWRqYWNlbnRSdWxlczohMCxtZXJnZVNlbWFudGljYWxseTohMSxvdmVycmlkZVByb3BlcnRpZXM6ITAscmVtb3ZlRW1wdHk6ITAscmVkdWNlTm9uQWRqYWNlbnRSdWxlczohMCxyZW1vdmVEdXBsaWNhdGVGb250UnVsZXM6ITAscmVtb3ZlRHVwbGljYXRlTWVkaWFCbG9ja3M6ITAscmVtb3ZlRHVwbGljYXRlUnVsZXM6ITAscmVtb3ZlVW51c2VkQXRSdWxlczohMSxyZXN0cnVjdHVyZVJ1bGVzOiExLHNraXBQcm9wZXJ0aWVzOltdfTt2YXIgbD0iKiIsYz0iYWxsIixyPSJmYWxzZSIsaT0ib2ZmIixmPSJ0cnVlIixwPSJvbiIsaD0iOyIsZD0iOiI7ZnVuY3Rpb24gbShlLHQpe3ZhciBuLHI9YSh1W2VdLHt9KTtmb3IobiBpbiByKSJib29sZWFuIj09dHlwZW9mIHJbbl0mJihyW25dPXQpO3JldHVybiByfWZ1bmN0aW9uIGcoZSl7c3dpdGNoKGUpe2Nhc2UgcjpjYXNlIGk6cmV0dXJuITE7Y2FzZSBmOmNhc2UgcDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiB2KGUsbyl7cmV0dXJuIGUuc3BsaXQoaCkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdChkKSxyPW5bMF0saT1nKG5bMV0pO3JldHVybiBsPT1yfHxjPT1yP2U9YShlLG0obyxpKSk6ZVtyXT1pLGV9LHt9KX10LmV4cG9ydHM9e09wdGltaXphdGlvbkxldmVsOnMsb3B0aW1pemF0aW9uTGV2ZWxGcm9tOmZ1bmN0aW9uKGUpe3ZhciB0PWEodSx7fSksbj1zLlplcm8scj1zLk9uZSxpPXMuVHdvO3JldHVybiB2b2lkIDA9PT1lP2RlbGV0ZSB0W2ldOigic3RyaW5nIj09dHlwZW9mIGUmJihlPXBhcnNlSW50KGUpKSwibnVtYmVyIj09dHlwZW9mIGUmJmU9PT1wYXJzZUludChpKXx8KCJudW1iZXIiPT10eXBlb2YgZSYmZT09PXBhcnNlSW50KHIpP2RlbGV0ZSB0W2ldOiJudW1iZXIiPT10eXBlb2YgZSYmZT09PXBhcnNlSW50KG4pPyhkZWxldGUgdFtpXSxkZWxldGUgdFtyXSk6KCJvYmplY3QiPT10eXBlb2YgZSYmKGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWEoZSx7fSk7Zm9yKG49MDtuPD0yO24rKykodD0iIituKWluIHImJih2b2lkIDA9PT1yW3RdfHwhMT09PXJbdF0pJiZkZWxldGUgclt0XSx0IGluIHImJiEwPT09clt0XSYmKHJbdF09e30pLHQgaW4gciYmInN0cmluZyI9PXR5cGVvZiByW3RdJiYoclt0XT12KHJbdF0sdCkpO3JldHVybiByfShlKSksciBpbiBlJiYicm91bmRpbmdQcmVjaXNpb24iaW4gZVtyXSYmKGVbcl0ucm91bmRpbmdQcmVjaXNpb249byhlW3JdLnJvdW5kaW5nUHJlY2lzaW9uKSksaSBpbiBlJiYic2tpcFByb3BlcnRpZXMiaW4gZVtpXSYmInN0cmluZyI9PXR5cGVvZiBlW2ldLnNraXBQcm9wZXJ0aWVzJiYoZVtpXS5za2lwUHJvcGVydGllcz1lW2ldLnNraXBQcm9wZXJ0aWVzLnNwbGl0KCIsIikpLChuIGluIGV8fHIgaW4gZXx8aSBpbiBlKSYmKHRbbl09YSh0W25dLGVbbl0pKSxyIGluIGUmJmwgaW4gZVtyXSYmKHRbcl09YSh0W3JdLG0ocixnKGVbcl1bbF0pKSksZGVsZXRlIGVbcl1bbF0pLHIgaW4gZSYmYyBpbiBlW3JdJiYodFtyXT1hKHRbcl0sbShyLGcoZVtyXVtjXSkpKSxkZWxldGUgZVtyXVtjXSksciBpbiBlfHxpIGluIGU/dFtyXT1hKHRbcl0sZVtyXSk6ZGVsZXRlIHRbcl0saSBpbiBlJiZsIGluIGVbaV0mJih0W2ldPWEodFtpXSxtKGksZyhlW2ldW2xdKSkpLGRlbGV0ZSBlW2ldW2xdKSxpIGluIGUmJmMgaW4gZVtpXSYmKHRbaV09YSh0W2ldLG0oaSxnKGVbaV1bY10pKSksZGVsZXRlIGVbaV1bY10pLGkgaW4gZT90W2ldPWEodFtpXSxlW2ldKTpkZWxldGUgdFtpXSkpKSx0fX19LHsiLi4vdXRpbHMvb3ZlcnJpZGUiOjk1LCIuL3JvdW5kaW5nLXByZWNpc2lvbiI6Njh9XSw2NjpbZnVuY3Rpb24oZSxyLHQpeyhmdW5jdGlvbih0KXt2YXIgbj1lKCJwYXRoIik7ci5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlP24ucmVzb2x2ZShlKTp0LmN3ZCgpfX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjExMixwYXRoOjExMH1dLDY3OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwhIWV9fSx7fV0sNjg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbz1lKCIuLi91dGlscy9vdmVycmlkZSIpLHI9L15cZCskLyxhPVsiKiIsImFsbCJdLHM9Im9mZiIsaT0iLCIsdT0iPSI7ZnVuY3Rpb24gbChlKXtyZXR1cm57Y2g6ZSxjbTplLGVtOmUsZXg6ZSxpbjplLG1tOmUscGM6ZSxwdDplLHB4OmUscTplLHJlbTplLHZoOmUsdm1heDplLHZtaW46ZSx2dzplLCIlIjplfX10LmV4cG9ydHM9e0RFRkFVTFQ6cyxyb3VuZGluZ1ByZWNpc2lvbkZyb206ZnVuY3Rpb24oZSl7cmV0dXJuIG8obChzKSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT97fToiYm9vbGVhbiI9PXR5cGVvZiBlP3t9OiJudW1iZXIiPT10eXBlb2YgZSYmLTE9PWU/bChzKToibnVtYmVyIj09dHlwZW9mIGU/bChlKToic3RyaW5nIj09dHlwZW9mIGUmJnIudGVzdChlKT9sKHBhcnNlSW50KGUpKToic3RyaW5nIiE9dHlwZW9mIGV8fGUhPXM/Im9iamVjdCIhPXR5cGVvZiBlP2Uuc3BsaXQoaSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGxpdCh1KSxyPW5bMF0saT1wYXJzZUludChuWzFdKTtyZXR1cm4oaXNOYU4oaSl8fC0xPT1pKSYmKGk9cyksLTE8YS5pbmRleE9mKHIpP2U9byhlLGwoaSkpOmVbcl09aSxlfSx7fSk6ZTpsKHMpfShlKSl9fX0seyIuLi91dGlscy9vdmVycmlkZSI6OTV9XSw2OTpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihzLHUpe3ZhciBsPWUoImZzIiksYz1lKCJwYXRoIiksZj1lKCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiKSxwPWUoIi4vbWF0Y2gtZGF0YS11cmkiKSxoPWUoIi4vcmViYXNlLWxvY2FsLW1hcCIpLGQ9ZSgiLi9yZWJhc2UtcmVtb3RlLW1hcCIpLGE9ZSgiLi4vdG9rZW5pemVyL3Rva2VuIiksbT1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxnPWUoIi4uL3V0aWxzL2lzLWRhdGEtdXJpLXJlc291cmNlIiksdj1lKCIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiKSxiPS9eXC9cKiMgc291cmNlTWFwcGluZ1VSTD0oXFMrKSBcKlwvJC87ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaT1bXSxvPXkoZS5zb3VyY2VUb2tlbnNbMF0pO2ZvcihyPWUuc291cmNlVG9rZW5zLmxlbmd0aDtlLmluZGV4PHI7ZS5pbmRleCsrKWlmKCh0PXkobj1lLnNvdXJjZVRva2Vuc1tlLmluZGV4XSkpIT1vJiYoaT1bXSxvPXQpLGkucHVzaChuKSxlLnByb2Nlc3NlZFRva2Vucy5wdXNoKG4pLG5bMF09PWEuQ09NTUVOVCYmYi50ZXN0KG5bMV0pKXJldHVybiBfKG5bMV0sdCxpLGUpO3JldHVybiBlLmNhbGxiYWNrKGUucHJvY2Vzc2VkVG9rZW5zKX1mdW5jdGlvbiB5KGUpe3JldHVybihlWzBdPT1hLkFUX1JVTEV8fGVbMF09PWEuQ09NTUVOVD9lWzJdWzBdOmVbMV1bMF1bMl1bMF0pWzJdfWZ1bmN0aW9uIF8oZSx0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1iLmV4ZWMoZSlbMV07cmV0dXJuIGcoYSk/KGk9ZnVuY3Rpb24oZSl7dmFyIHQ9cChlKSxuPXRbMl0/dFsyXS5zcGxpdCgvWz07XS8pWzJdOiJ1cy1hc2NpaSIscj10WzNdP3RbM10uc3BsaXQoIjsiKVsxXToidXRmOCIsaT0idXRmOCI9PXI/cy51bmVzY2FwZSh0WzRdKTp0WzRdLG89bmV3IHUoaSxyKTtyZXR1cm4gby5jaGFyc2V0PW4sSlNPTi5wYXJzZShvLnRvU3RyaW5nKCkpfShhKSxuKGkpKTp2KGEpP2Z1bmN0aW9uKG4scixpKXt2YXIgZT1mKG4sITAsci5pbmxpbmUpLHQ9IW0obik7e2lmKHIubG9jYWxPbmx5KXJldHVybiByLndhcm5pbmdzLnB1c2goJ0Nhbm5vdCBmZXRjaCByZW1vdGUgcmVzb3VyY2UgZnJvbSAiJytuKyciIGFzIG5vIGNhbGxiYWNrIGdpdmVuLicpLGkobnVsbCk7aWYodClyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggIicrbisnIiBhcyBubyBwcm90b2NvbCBnaXZlbi4nKSxpKG51bGwpO2lmKCFlKXJldHVybiByLndhcm5pbmdzLnB1c2goJ0Nhbm5vdCBmZXRjaCAiJytuKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLGkobnVsbCl9ci5mZXRjaChuLHIuaW5saW5lUmVxdWVzdCxyLmlubGluZVRpbWVvdXQsZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiByLndhcm5pbmdzLnB1c2goJ01pc3Npbmcgc291cmNlIG1hcCBhdCAiJytuKyciIC0gJytlKSxpKG51bGwpO2kodCl9KX0oYSx0LGZ1bmN0aW9uKGUpe3ZhciB0O2U/KHQ9SlNPTi5wYXJzZShlKSxvPWQodCxhKSxuKG8pKTpuKG51bGwpfSk6KHI9Yy5yZXNvbHZlKHQucmViYXNlVG8sYSksKGk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWYoZSwhMSx0LmlubGluZSk7e2lmKCFsLmV4aXN0c1N5bmMoZSl8fCFsLnN0YXRTeW5jKGUpLmlzRmlsZSgpKXJldHVybiB0Lndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIHNvdXJjZSBtYXAgYXQgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpLG51bGw7aWYoIXIpcmV0dXJuIHQud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK2UrJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQuJyksbnVsbH1yZXR1cm4gbj1sLnJlYWRGaWxlU3luYyhlLCJ1dGYtOCIpLEpTT04ucGFyc2Uobil9KHIsdCkpPyhvPWgoaSxyLHQucmViYXNlVG8pLG4obykpOm4obnVsbCkpfShlLHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihyLmlucHV0U291cmNlTWFwVHJhY2tlci50cmFjayh0LGUpLGZ1bmN0aW9uIGUodCxuKXt2YXIgcjt2YXIgaSxvO2ZvcihpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXN3aXRjaCgocj10W2ldKVswXSl7Y2FzZSBhLkFUX1JVTEU6dyhyLG4pO2JyZWFrO2Nhc2UgYS5BVF9SVUxFX0JMT0NLOmUoclsxXSxuKSxlKHJbMl0sbik7YnJlYWs7Y2FzZSBhLkFUX1JVTEVfQkxPQ0tfU0NPUEU6dyhyLG4pO2JyZWFrO2Nhc2UgYS5ORVNURURfQkxPQ0s6ZShyWzFdLG4pLGUoclsyXSxuKTticmVhaztjYXNlIGEuTkVTVEVEX0JMT0NLX1NDT1BFOmNhc2UgYS5DT01NRU5UOncocixuKTticmVhaztjYXNlIGEuUFJPUEVSVFk6ZShyLG4pO2JyZWFrO2Nhc2UgYS5QUk9QRVJUWV9CTE9DSzplKHJbMV0sbik7YnJlYWs7Y2FzZSBhLlBST1BFUlRZX05BTUU6Y2FzZSBhLlBST1BFUlRZX1ZBTFVFOncocixuKTticmVhaztjYXNlIGEuUlVMRTplKHJbMV0sbiksZShyWzJdLG4pO2JyZWFrO2Nhc2UgYS5SVUxFX1NDT1BFOncocixuKX1yZXR1cm4gdH0obixyLmlucHV0U291cmNlTWFwVHJhY2tlcikpLHIuaW5kZXgrKyxpKHIpfSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuLHIsaT1lWzFdLG89ZVsyXSxhPVtdO2ZvcihuPTAscj1vLmxlbmd0aDtuPHI7bisrKWEucHVzaCh0Lm9yaWdpbmFsUG9zaXRpb25Gb3Iob1tuXSxpLmxlbmd0aCkpO2VbMl09YX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtjYWxsYmFjazpuLGZldGNoOnQub3B0aW9ucy5mZXRjaCxpbmRleDowLGlubGluZTp0Lm9wdGlvbnMuaW5saW5lLGlubGluZVJlcXVlc3Q6dC5vcHRpb25zLmlubGluZVJlcXVlc3QsaW5saW5lVGltZW91dDp0Lm9wdGlvbnMuaW5saW5lVGltZW91dCxpbnB1dFNvdXJjZU1hcFRyYWNrZXI6dC5pbnB1dFNvdXJjZU1hcFRyYWNrZXIsbG9jYWxPbmx5OnQubG9jYWxPbmx5LHByb2Nlc3NlZFRva2VuczpbXSxyZWJhc2VUbzp0Lm9wdGlvbnMucmViYXNlVG8sc291cmNlVG9rZW5zOmUsd2FybmluZ3M6dC53YXJuaW5nc307cmV0dXJuIHQub3B0aW9ucy5zb3VyY2VNYXAmJjA8ZS5sZW5ndGg/aShyKTpuKGUpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LGUoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi4vdG9rZW5pemVyL3Rva2VuIjo4NCwiLi4vdXRpbHMvaGFzLXByb3RvY29sIjo4OCwiLi4vdXRpbHMvaXMtZGF0YS11cmktcmVzb3VyY2UiOjg5LCIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiOjkzLCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiOjcyLCIuL21hdGNoLWRhdGEtdXJpIjo3NSwiLi9yZWJhc2UtbG9jYWwtbWFwIjo3OCwiLi9yZWJhc2UtcmVtb3RlLW1hcCI6NzksYnVmZmVyOjQsZnM6MyxwYXRoOjExMH1dLDcwOltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi4vdXRpbHMvc3BsaXQiKSxpPS9eXCgvLG89L1wpJC8sYT0vXkBpbXBvcnQvaSxzPS9bJyJdXHMqLyx1PS9ccypbJyJdLyxsPS9edXJsXChccyovaSxjPS9ccypcKS9pO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiB0PWUucmVwbGFjZShhLCIiKS50cmltKCkucmVwbGFjZShsLCIoIikucmVwbGFjZShjLCIpIikucmVwbGFjZShzLCIiKS5yZXBsYWNlKHUsIiIpLFsobj1yKHQsIiAiKSlbMF0ucmVwbGFjZShpLCIiKS5yZXBsYWNlKG8sIiIpLG4uc2xpY2UoMSkuam9pbigiICIpXX19LHsiLi4vdXRpbHMvc3BsaXQiOjk2fV0sNzE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJzb3VyY2UtbWFwIikuU291cmNlTWFwQ29uc3VtZXI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJue2FsbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0uYmluZChudWxsLGUpLGlzVHJhY2tpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbiBlfS5iaW5kKG51bGwsZSksb3JpZ2luYWxQb3NpdGlvbkZvcjpmdW5jdGlvbiBlKHQsbixyLGkpe2Zvcih2YXIgbyxhLHM9blswXSx1PW5bMV0sbD1uWzJdLGM9e2xpbmU6cyxjb2x1bW46dStyfTshbyYmYy5jb2x1bW4+dTspYy5jb2x1bW4tLSxvPXRbbF0ub3JpZ2luYWxQb3NpdGlvbkZvcihjKTtyZXR1cm4hb3x8by5jb2x1bW48MD9uOm51bGw9PT1vLmxpbmUmJjE8cyYmMDxpP2UodCxbcy0xLHUsbF0scixpLTEpOm51bGwhPT1vLmxpbmU/WyhhPW8pLmxpbmUsYS5jb2x1bW4sYS5zb3VyY2VdOm59LmJpbmQobnVsbCxlKSx0cmFjazpmdW5jdGlvbihlLHQsbil7ZVt0XT1uZXcgcihuKX0uYmluZChudWxsLGUpfX19LHsic291cmNlLW1hcCI6MTU1fV0sNzI6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgZj1lKCJwYXRoIikscD1lKCJ1cmwiKSxyPWUoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpLGg9ZSgiLi4vdXRpbHMvaGFzLXByb3RvY29sIiksZD0iaHR0cDoiO2Z1bmN0aW9uIG0oZSl7cmV0dXJuIHIoZSl8fHAucGFyc2UoZCsiLy8iK2UpLmhvc3Q9PWV9dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjPSFuO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4hMTtmb3IobiYmIWgodCkmJih0PWQrdCksaT1uP3AucGFyc2UodCkuaG9zdDp0LG89bj90OmYucmVzb2x2ZSh0KSxsPTA7bDxyLmxlbmd0aDtsKyspcz0iISI9PShhPXJbbF0pWzBdLHU9YS5zdWJzdHJpbmcoMSksYz1zJiZuJiZtKHUpP2MmJiFlKHQsITAsW3VdKTohc3x8bnx8bSh1KT9zP2MmJiEwOiJhbGwiPT1hfHwobiYmImxvY2FsIj09YT9jfHwhMTohKCFufHwicmVtb3RlIiE9YSl8fCEoIW4mJiJyZW1vdGUiPT1hKSYmKCFuJiYibG9jYWwiPT1hfHxhPT09aXx8YT09PXR8fCEoIW58fDAhPT1vLmluZGV4T2YoYSkpfHwhbiYmMD09PW8uaW5kZXhPZihmLnJlc29sdmUoYSkpfHxuIT1tKHUpJiZjJiYhMCkpOmMmJiFlKHQsITEsW3VdKTtyZXR1cm4gY319LHsiLi4vdXRpbHMvaGFzLXByb3RvY29sIjo4OCwiLi4vdXRpbHMvaXMtcmVtb3RlLXJlc291cmNlIjo5MyxwYXRoOjExMCx1cmw6MTYyfV0sNzM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT1lKCJmcyIpLG89ZSgicGF0aCIpLGE9ZSgiLi9pcy1hbGxvd2VkLXJlc291cmNlIikscz1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxyPWUoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpO2Z1bmN0aW9uIHUoZSl7dmFyIHQsbixyLGk9T2JqZWN0LmtleXMoZS51cmlUb1NvdXJjZSk7Zm9yKHI9aS5sZW5ndGg7ZS5pbmRleDxyO2UuaW5kZXgrKyl7aWYodD1pW2UuaW5kZXhdLCEobj1lLnVyaVRvU291cmNlW3RdKSlyZXR1cm4gbCh0LGUpO2Uuc291cmNlc0NvbnRlbnRbdF09bn1yZXR1cm4gZS5jYWxsYmFjaygpfWZ1bmN0aW9uIGwodCxuKXt2YXIgZTtyZXR1cm4gcih0KT9mdW5jdGlvbihuLHIsaSl7dmFyIGU9YShuLCEwLHIuaW5saW5lKSx0PSFzKG4pO3tpZihyLmxvY2FsT25seSlyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggcmVtb3RlIHJlc291cmNlIGZyb20gIicrbisnIiBhcyBubyBjYWxsYmFjayBnaXZlbi4nKSxpKG51bGwpO2lmKHQpcmV0dXJuIHIud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK24rJyIgYXMgbm8gcHJvdG9jb2wgZ2l2ZW4uJyksaShudWxsKTtpZighZSlyZXR1cm4gci53YXJuaW5ncy5wdXNoKCdDYW5ub3QgZmV0Y2ggIicrbisnIiBhcyByZXNvdXJjZSBpcyBub3QgYWxsb3dlZC4nKSxpKG51bGwpfXIuZmV0Y2gobixyLmlubGluZVJlcXVlc3Qsci5pbmxpbmVUaW1lb3V0LGZ1bmN0aW9uKGUsdCl7ZSYmci53YXJuaW5ncy5wdXNoKCdNaXNzaW5nIG9yaWdpbmFsIHNvdXJjZSBhdCAiJytuKyciIC0gJytlKSxpKHQpfSl9KHQsbixmdW5jdGlvbihlKXtyZXR1cm4gbi5pbmRleCsrLG4uc291cmNlc0NvbnRlbnRbdF09ZSx1KG4pfSk6KGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hKGUsITEsdC5pbmxpbmUpLHI9by5yZXNvbHZlKHQucmViYXNlVG8sZSk7e2lmKCFpLmV4aXN0c1N5bmMocil8fCFpLnN0YXRTeW5jKHIpLmlzRmlsZSgpKXJldHVybiB0Lndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIHNvdXJjZSBtYXAgYXQgIicrcisnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpLG51bGw7aWYoIW4pcmV0dXJuIHQud2FybmluZ3MucHVzaCgnQ2Fubm90IGZldGNoICInK3IrJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQuJyksbnVsbH1yZXR1cm4gaS5yZWFkRmlsZVN5bmMociwidXRmOCIpfSh0LG4pLG4uaW5kZXgrKyxuLnNvdXJjZXNDb250ZW50W3RdPWUsdShuKSl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49e2NhbGxiYWNrOnQsZmV0Y2g6ZS5vcHRpb25zLmZldGNoLGluZGV4OjAsaW5saW5lOmUub3B0aW9ucy5pbmxpbmUsaW5saW5lUmVxdWVzdDplLm9wdGlvbnMuaW5saW5lUmVxdWVzdCxpbmxpbmVUaW1lb3V0OmUub3B0aW9ucy5pbmxpbmVUaW1lb3V0LGxvY2FsT25seTplLmxvY2FsT25seSxyZWJhc2VUbzplLm9wdGlvbnMucmViYXNlVG8sc291cmNlc0NvbnRlbnQ6ZS5zb3VyY2VzQ29udGVudCx1cmlUb1NvdXJjZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9e307Zm9yKHIgaW4gZSlmb3IodD1lW3JdLGk9MCxvPXQuc291cmNlcy5sZW5ndGg7aTxvO2krKyluPXQuc291cmNlc1tpXSxyPXQuc291cmNlQ29udGVudEZvcihuLCEwKSxhW25dPXI7cmV0dXJuIGF9KGUuaW5wdXRTb3VyY2VNYXBUcmFja2VyLmFsbCgpKSx3YXJuaW5nczplLndhcm5pbmdzfTtyZXR1cm4gZS5vcHRpb25zLnNvdXJjZU1hcCYmZS5vcHRpb25zLnNvdXJjZU1hcElubGluZVNvdXJjZXM/dShuKTp0KCl9fSx7Ii4uL3V0aWxzL2hhcy1wcm90b2NvbCI6ODgsIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSI6OTMsIi4vaXMtYWxsb3dlZC1yZXNvdXJjZSI6NzIsZnM6MyxwYXRoOjExMH1dLDc0OltmdW5jdGlvbihlLHQsbil7dmFyIHU9ZSgiaHR0cCIpLGw9ZSgiaHR0cHMiKSxjPWUoInVybCIpLGY9ZSgiLi4vdXRpbHMvaXMtaHR0cC1yZXNvdXJjZSIpLHA9ZSgiLi4vdXRpbHMvaXMtaHR0cHMtcmVzb3VyY2UiKSxoPWUoIi4uL3V0aWxzL292ZXJyaWRlIiksZD0iaHR0cDoiO3QuZXhwb3J0cz1mdW5jdGlvbiBuKHIsaSxvLGEpe3ZhciBlLHQ9aS5wcm90b2NvbHx8aS5ob3N0bmFtZSxzPSExO2U9aChjLnBhcnNlKHIpLGl8fHt9KSx2b2lkIDAhPT1pLmhvc3RuYW1lJiYoZS5wcm90b2NvbD1pLnByb3RvY29sfHxkLGUucGF0aD1lLmhyZWYpLCh0JiYhcCh0KXx8ZihyKT91LmdldDpsLmdldCkoZSxmdW5jdGlvbihlKXt2YXIgdD1bXTtpZighcyl7aWYoZS5zdGF0dXNDb2RlPDIwMHx8Mzk5PGUuc3RhdHVzQ29kZSlyZXR1cm4gYShlLnN0YXR1c0NvZGUsbnVsbCk7aWYoMjk5PGUuc3RhdHVzQ29kZSlyZXR1cm4gbihjLnJlc29sdmUocixlLmhlYWRlcnMubG9jYXRpb24pLGksbyxhKTtlLm9uKCJkYXRhIixmdW5jdGlvbihlKXt0LnB1c2goZS50b1N0cmluZygpKX0pLGUub24oImVuZCIsZnVuY3Rpb24oKXt2YXIgZT10LmpvaW4oIiIpO2EobnVsbCxlKX0pfX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oZSl7c3x8KHM9ITAsYShlLm1lc3NhZ2UsbnVsbCkpfSkub24oInRpbWVvdXQiLGZ1bmN0aW9uKCl7c3x8KHM9ITAsYSgidGltZW91dCIsbnVsbCkpfSkuc2V0VGltZW91dChvKX19LHsiLi4vdXRpbHMvaXMtaHR0cC1yZXNvdXJjZSI6OTAsIi4uL3V0aWxzL2lzLWh0dHBzLXJlc291cmNlIjo5MSwiLi4vdXRpbHMvb3ZlcnJpZGUiOjk1LGh0dHA6MTU2LGh0dHBzOjEwNCx1cmw6MTYyfV0sNzU6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmRhdGE6KFxTKj8pPyg7Y2hhcnNldD1bXjtdKyk/KDtbXixdKz8pPywoLispLzt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZXhlYyhlKX19LHt9XSw3NjpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPS9cXC9nO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHIsIi8iKX19LHt9XSw3NzpbZnVuY3Rpb24oZSxTLHQpeyhmdW5jdGlvbihyLGMpe3ZhciBmPWUoImZzIikscD1lKCJwYXRoIiksaT1lKCIuL2FwcGx5LXNvdXJjZS1tYXBzIiksaD1lKCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiKSxkPWUoIi4vaXMtYWxsb3dlZC1yZXNvdXJjZSIpLG89ZSgiLi9sb2FkLW9yaWdpbmFsLXNvdXJjZXMiKSxtPWUoIi4vbm9ybWFsaXplLXBhdGgiKSxhPWUoIi4vcmViYXNlIiksZz1lKCIuL3JlYmFzZS1sb2NhbC1tYXAiKSx2PWUoIi4vcmViYXNlLXJlbW90ZS1tYXAiKSx0PWUoIi4vcmVzdG9yZS1pbXBvcnQiKSxzPWUoIi4uL3Rva2VuaXplci90b2tlbml6ZSIpLGI9ZSgiLi4vdG9rZW5pemVyL3Rva2VuIiksbj1lKCIuLi90b2tlbml6ZXIvbWFya2VyIikseT1lKCIuLi91dGlscy9oYXMtcHJvdG9jb2wiKSxfPWUoIi4uL3V0aWxzL2lzLWltcG9ydCIpLHc9ZSgiLi4vdXRpbHMvaXMtcmVtb3RlLXJlc291cmNlIiksRT0idXJpOnVua25vd24iO2Z1bmN0aW9uIHUoZSx0LG4pe3JldHVybiB0LnNvdXJjZT12b2lkIDAsdC5zb3VyY2VzQ29udGVudFt2b2lkIDBdPWUsdC5zdGF0cy5vcmlnaW5hbFNpemUrPWUubGVuZ3RoLGsoZSx0LHtpbmxpbmU6dC5vcHRpb25zLmlubGluZX0sbil9ZnVuY3Rpb24gbChlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYztmb3IociBpbiBlKW89ZVtyXSxpPUEociksbi5wdXNoKHgoaSkpLHQuc291cmNlc0NvbnRlbnRbaV09by5zdHlsZXMsby5zb3VyY2VNYXAmJihhPW8uc291cmNlTWFwLHM9aSx1PXQsdm9pZCAwLGw9InN0cmluZyI9PXR5cGVvZiBhP0pTT04ucGFyc2UoYSk6YSxjPXcocyk/dihsLHMpOmcobCxzfHxFLHUub3B0aW9ucy5yZWJhc2VUbyksdS5pbnB1dFNvdXJjZU1hcFRyYWNrZXIudHJhY2socyxjKSk7cmV0dXJuIG59ZnVuY3Rpb24gQShlKXt2YXIgdCxuLHI9cC5yZXNvbHZlKCIiKTtyZXR1cm4gdyhlKT9lOih0PXAuaXNBYnNvbHV0ZShlKT9lOnAucmVzb2x2ZShlKSxuPXAucmVsYXRpdmUocix0KSxtKG4pKX1mdW5jdGlvbiB4KGUpe3JldHVybiB0KCJ1cmwoIitlKyIpIiwiIikrbi5TRU1JQ09MT059ZnVuY3Rpb24gayhlLHQsbixyKXt2YXIgaSxvPXt9O3JldHVybiB0LnNvdXJjZT93KHQuc291cmNlKT8oby5mcm9tQmFzZT10LnNvdXJjZSxvLnRvQmFzZT10LnNvdXJjZSk6KHAuaXNBYnNvbHV0ZSh0LnNvdXJjZSk/by5mcm9tQmFzZT1wLmRpcm5hbWUodC5zb3VyY2UpOm8uZnJvbUJhc2U9cC5kaXJuYW1lKHAucmVzb2x2ZSh0LnNvdXJjZSkpLG8udG9CYXNlPXQub3B0aW9ucy5yZWJhc2VUbyk6KG8uZnJvbUJhc2U9cC5yZXNvbHZlKCIiKSxvLnRvQmFzZT10Lm9wdGlvbnMucmViYXNlVG8pLGk9cyhlLHQpLGk9YShpLHQub3B0aW9ucy5yZWJhc2UsdC52YWxpZGF0b3IsbyksZnVuY3Rpb24oZSl7cmV0dXJuISgxPT1lLmxlbmd0aCYmIm5vbmUiPT1lWzBdKX0obi5pbmxpbmUpP2Z1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDKHthZnRlckNvbnRlbnQ6ITEsY2FsbGJhY2s6cixlcnJvcnM6dC5lcnJvcnMsZXh0ZXJuYWxDb250ZXh0OnQsZmV0Y2g6dC5vcHRpb25zLmZldGNoLGlubGluZWRTdHlsZXNoZWV0czpuLmlubGluZWRTdHlsZXNoZWV0c3x8dC5pbmxpbmVkU3R5bGVzaGVldHMsaW5saW5lOm4uaW5saW5lLGlubGluZVJlcXVlc3Q6dC5vcHRpb25zLmlubGluZVJlcXVlc3QsaW5saW5lVGltZW91dDp0Lm9wdGlvbnMuaW5saW5lVGltZW91dCxpc1JlbW90ZTpuLmlzUmVtb3RlfHwhMSxsb2NhbE9ubHk6dC5sb2NhbE9ubHksb3V0cHV0VG9rZW5zOltdLHJlYmFzZVRvOnQub3B0aW9ucy5yZWJhc2VUbyxzb3VyY2VUb2tlbnM6ZSx3YXJuaW5nczp0Lndhcm5pbmdzfSl9KGksdCxuLHIpOnIoaSl9ZnVuY3Rpb24gQyhlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGw7Zm9yKG49MCxyPWUuc291cmNlVG9rZW5zLmxlbmd0aDtuPHI7bisrKXtpZigodD1lLnNvdXJjZVRva2Vuc1tuXSlbMF09PWIuQVRfUlVMRSYmXyh0WzFdKSlyZXR1cm4gZS5zb3VyY2VUb2tlbnMuc3BsaWNlKDAsbiksbz1lLHZvaWQgMCxhPWgoKGk9dClbMV0pLHM9YVswXSx1PWFbMV0sbD1pWzJdLHcocyk/ZnVuY3Rpb24obixyLGksbyl7dmFyIGU9ZChuLCEwLG8uaW5saW5lKSxhPW4sdD1uIGluIG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50LHM9IXkobik7e2lmKC0xPG8uaW5saW5lZFN0eWxlc2hlZXRzLmluZGV4T2YobikpcmV0dXJuIG8ud2FybmluZ3MucHVzaCgnSWdub3JpbmcgcmVtb3RlIEBpbXBvcnQgb2YgIicrbisnIiBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLicpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoby5sb2NhbE9ubHkmJm8uYWZ0ZXJDb250ZW50KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gY2FsbGJhY2sgZ2l2ZW4gYW5kIGFmdGVyIG90aGVyIGNvbnRlbnQuJyksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKTtpZihzKXJldHVybiBvLndhcm5pbmdzLnB1c2goJ1NraXBwaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gcHJvdG9jb2wgZ2l2ZW4uJyksby5vdXRwdXRUb2tlbnM9by5vdXRwdXRUb2tlbnMuY29uY2F0KG8uc291cmNlVG9rZW5zLnNsaWNlKDAsMSkpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoby5sb2NhbE9ubHkmJiF0KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ1NraXBwaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgbm8gY2FsbGJhY2sgZ2l2ZW4uJyksby5vdXRwdXRUb2tlbnM9by5vdXRwdXRUb2tlbnMuY29uY2F0KG8uc291cmNlVG9rZW5zLnNsaWNlKDAsMSkpLG8uc291cmNlVG9rZW5zPW8uc291cmNlVG9rZW5zLnNsaWNlKDEpLEMobyk7aWYoIWUmJm8uYWZ0ZXJDb250ZW50KXJldHVybiBvLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIHJlbW90ZSBAaW1wb3J0IG9mICInK24rJyIgYXMgcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQgYW5kIGFmdGVyIG90aGVyIGNvbnRlbnQuJyksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKTtpZighZSlyZXR1cm4gby53YXJuaW5ncy5wdXNoKCdTa2lwcGluZyByZW1vdGUgQGltcG9ydCBvZiAiJytuKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLG8ub3V0cHV0VG9rZW5zPW8ub3V0cHV0VG9rZW5zLmNvbmNhdChvLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKSxvLnNvdXJjZVRva2Vucz1vLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKG8pfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gZT8oby5lcnJvcnMucHVzaCgnQnJva2VuIEBpbXBvcnQgZGVjbGFyYXRpb24gb2YgIicrbisnIiAtICcrZSksYy5uZXh0VGljayhmdW5jdGlvbigpe28ub3V0cHV0VG9rZW5zPW8ub3V0cHV0VG9rZW5zLmNvbmNhdChvLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKSxvLnNvdXJjZVRva2Vucz1vLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKG8pfSkpOihvLmlubGluZT1vLmV4dGVybmFsQ29udGV4dC5vcHRpb25zLmlubGluZSxvLmlzUmVtb3RlPSEwLG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZT1hLG8uZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50W25dPXQsby5leHRlcm5hbENvbnRleHQuc3RhdHMub3JpZ2luYWxTaXplKz10Lmxlbmd0aCxrKHQsby5leHRlcm5hbENvbnRleHQsbyxmdW5jdGlvbihlKXtyZXR1cm4gZT1PKGUscixpKSxvLm91dHB1dFRva2Vucz1vLm91dHB1dFRva2Vucy5jb25jYXQoZSksby5zb3VyY2VUb2tlbnM9by5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhvKX0pKX1yZXR1cm4gby5pbmxpbmVkU3R5bGVzaGVldHMucHVzaChuKSx0P3UobnVsbCxvLmV4dGVybmFsQ29udGV4dC5zb3VyY2VzQ29udGVudFtuXSk6by5mZXRjaChuLG8uaW5saW5lUmVxdWVzdCxvLmlubGluZVRpbWVvdXQsdSl9KHMsdSxsLG8pOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89cC5yZXNvbHZlKCIiKSxhPXAuaXNBYnNvbHV0ZShlKT9wLnJlc29sdmUobywiLyI9PWVbMF0/ZS5zdWJzdHJpbmcoMSk6ZSk6cC5yZXNvbHZlKHIucmViYXNlVG8sZSkscz1wLnJlbGF0aXZlKG8sYSksdT1kKGUsITEsci5pbmxpbmUpLGw9bShzKSxjPWwgaW4gci5leHRlcm5hbENvbnRleHQuc291cmNlc0NvbnRlbnQ7aWYoLTE8ci5pbmxpbmVkU3R5bGVzaGVldHMuaW5kZXhPZihhKSlyLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLicpO2Vsc2UgaWYoY3x8Zi5leGlzdHNTeW5jKGEpJiZmLnN0YXRTeW5jKGEpLmlzRmlsZSgpKWlmKCF1JiZyLmFmdGVyQ29udGVudClyLndhcm5pbmdzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBub3QgYWxsb3dlZCBhbmQgYWZ0ZXIgb3RoZXIgY29udGVudC4nKTtlbHNlIGlmKHIuYWZ0ZXJDb250ZW50KXIud2FybmluZ3MucHVzaCgnSWdub3JpbmcgbG9jYWwgQGltcG9ydCBvZiAiJytlKyciIGFzIGFmdGVyIG90aGVyIGNvbnRlbnQuJyk7ZWxzZXtpZih1KXJldHVybiBpPWM/ci5leHRlcm5hbENvbnRleHQuc291cmNlc0NvbnRlbnRbbF06Zi5yZWFkRmlsZVN5bmMoYSwidXRmLTgiKSxyLmlubGluZWRTdHlsZXNoZWV0cy5wdXNoKGEpLHIuaW5saW5lPXIuZXh0ZXJuYWxDb250ZXh0Lm9wdGlvbnMuaW5saW5lLHIuZXh0ZXJuYWxDb250ZXh0LnNvdXJjZT1sLHIuZXh0ZXJuYWxDb250ZXh0LnNvdXJjZXNDb250ZW50W2xdPWksci5leHRlcm5hbENvbnRleHQuc3RhdHMub3JpZ2luYWxTaXplKz1pLmxlbmd0aCxrKGksci5leHRlcm5hbENvbnRleHQscixmdW5jdGlvbihlKXtyZXR1cm4gZT1PKGUsdCxuKSxyLm91dHB1dFRva2Vucz1yLm91dHB1dFRva2Vucy5jb25jYXQoZSksci5zb3VyY2VUb2tlbnM9ci5zb3VyY2VUb2tlbnMuc2xpY2UoMSksQyhyKX0pO3Iud2FybmluZ3MucHVzaCgnU2tpcHBpbmcgbG9jYWwgQGltcG9ydCBvZiAiJytlKyciIGFzIHJlc291cmNlIGlzIG5vdCBhbGxvd2VkLicpLHIub3V0cHV0VG9rZW5zPXIub3V0cHV0VG9rZW5zLmNvbmNhdChyLnNvdXJjZVRva2Vucy5zbGljZSgwLDEpKX1lbHNlIHIuZXJyb3JzLnB1c2goJ0lnbm9yaW5nIGxvY2FsIEBpbXBvcnQgb2YgIicrZSsnIiBhcyByZXNvdXJjZSBpcyBtaXNzaW5nLicpO3JldHVybiByLnNvdXJjZVRva2Vucz1yLnNvdXJjZVRva2Vucy5zbGljZSgxKSxDKHIpfShzLHUsbCxvKTt0WzBdPT1iLkFUX1JVTEV8fHRbMF09PWIuQ09NTUVOVD9lLm91dHB1dFRva2Vucy5wdXNoKHQpOihlLm91dHB1dFRva2Vucy5wdXNoKHQpLGUuYWZ0ZXJDb250ZW50PSEwKX1yZXR1cm4gZS5zb3VyY2VUb2tlbnM9W10sZS5jYWxsYmFjayhlLm91dHB1dFRva2Vucyl9ZnVuY3Rpb24gTyhlLHQsbil7cmV0dXJuIHQ/W1tiLk5FU1RFRF9CTE9DSyxbW2IuTkVTVEVEX0JMT0NLX1NDT1BFLCJAbWVkaWEgIit0LG5dXSxlXV06ZX1TLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3UoZSx0LG4pOnIuaXNCdWZmZXIoZSk/dShlLnRvU3RyaW5nKCksdCxuKTpBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKGUsbix0KXtyZXR1cm4gayhlLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQpe3JldHVybiB0LnB1c2goeChBKGUpKSksdH0odCxlKTpsKHQsbixlKX0sW10pLmpvaW4oIiIpLG4se2lubGluZTpbImFsbCJdfSx0KX0oZSx0LG4pOiJvYmplY3QiPT10eXBlb2YgZT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGsobChlLHQsW10pLmpvaW4oIiIpLHQse2lubGluZTpbImFsbCJdfSxuKX0oZSx0LG4pOnZvaWQgMH0oZSx0LGZ1bmN0aW9uKGUpe3JldHVybiBpKGUsdCxmdW5jdGlvbigpe3JldHVybiBvKHQsZnVuY3Rpb24oKXtyZXR1cm4gbihlKX0pfSl9KX19KS5jYWxsKHRoaXMse2lzQnVmZmVyOmUoIi4uLy4uLy4uL2lzLWJ1ZmZlci9pbmRleC5qcyIpfSxlKCJfcHJvY2VzcyIpKX0seyIuLi8uLi8uLi9pcy1idWZmZXIvaW5kZXguanMiOjEwNywiLi4vdG9rZW5pemVyL21hcmtlciI6ODMsIi4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3Rva2VuaXplci90b2tlbml6ZSI6ODUsIi4uL3V0aWxzL2hhcy1wcm90b2NvbCI6ODgsIi4uL3V0aWxzL2lzLWltcG9ydCI6OTIsIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSI6OTMsIi4vYXBwbHktc291cmNlLW1hcHMiOjY5LCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiOjcwLCIuL2lzLWFsbG93ZWQtcmVzb3VyY2UiOjcyLCIuL2xvYWQtb3JpZ2luYWwtc291cmNlcyI6NzMsIi4vbm9ybWFsaXplLXBhdGgiOjc2LCIuL3JlYmFzZSI6ODAsIi4vcmViYXNlLWxvY2FsLW1hcCI6NzgsIi4vcmViYXNlLXJlbW90ZS1tYXAiOjc5LCIuL3Jlc3RvcmUtaW1wb3J0Ijo4MSxfcHJvY2VzczoxMTIsZnM6MyxwYXRoOjExMH1dLDc4OltmdW5jdGlvbihlLHQsbil7dmFyIGE9ZSgicGF0aCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHI9YS5yZXNvbHZlKCIiKSxpPWEucmVzb2x2ZShyLHQpLG89YS5kaXJuYW1lKGkpO3JldHVybiBlLnNvdXJjZXM9ZS5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5yZWxhdGl2ZShuLGEucmVzb2x2ZShvLGUpKX0pLGV9fSx7cGF0aDoxMTB9XSw3OTpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoInBhdGgiKSxpPWUoInVybCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXIuZGlybmFtZSh0KTtyZXR1cm4gZS5zb3VyY2VzPWUuc291cmNlcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkucmVzb2x2ZShuLGUpfSksZX19LHtwYXRoOjExMCx1cmw6MTYyfV0sODA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuL2V4dHJhY3QtaW1wb3J0LXVybC1hbmQtbWVkaWEiKSxzPWUoIi4vcmVzdG9yZS1pbXBvcnQiKSxjPWUoIi4vcmV3cml0ZS11cmwiKSxmPWUoIi4uL3Rva2VuaXplci90b2tlbiIpLHU9ZSgiLi4vdXRpbHMvaXMtaW1wb3J0IikscD0vXlwvXCojIHNvdXJjZU1hcHBpbmdVUkw9KFxTKykgXCpcLyQvO2Z1bmN0aW9uIGgoZSx0LG4pe2lmKHUoZVsxXSkpe3ZhciByPWEoZVsxXSksaT1jKHJbMF0sbiksbz1yWzFdO2VbMV09cyhpLG8pfX1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcixpLG8sYSxzLHU7Zm9yKG89MCxhPWUubGVuZ3RoO288YTtvKyspZm9yKHM9Mix1PShyPWVbb10pLmxlbmd0aDtzPHU7cysrKWk9cltzXVsxXSx0LmlzVXJsKGkpJiYocltzXVsxXT1jKGksbikpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdD9mdW5jdGlvbiBlKHQsbixyKXt2YXIgaSxvLGEscyx1LGw7Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspc3dpdGNoKChpPXRbb10pWzBdKXtjYXNlIGYuQVRfUlVMRTpoKGksMCxyKTticmVhaztjYXNlIGYuQVRfUlVMRV9CTE9DSzpkKGlbMl0sbixyKTticmVhaztjYXNlIGYuQ09NTUVOVDpzPWksdT1yLGw9dm9pZCAwLChsPXAuZXhlYyhzWzFdKSkmJi0xPT09bFsxXS5pbmRleE9mKCJkYXRhOiIpJiYoc1sxXT1zWzFdLnJlcGxhY2UobFsxXSxjKGxbMV0sdSwhMCkpKTticmVhaztjYXNlIGYuTkVTVEVEX0JMT0NLOmUoaVsyXSxuLHIpO2JyZWFrO2Nhc2UgZi5SVUxFOmQoaVsyXSxuLHIpfXJldHVybiB0fShlLG4scik6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbztmb3IoaT0wLG89ZS5sZW5ndGg7aTxvO2krKylzd2l0Y2goKHI9ZVtpXSlbMF0pe2Nhc2UgZi5BVF9SVUxFOmgociwwLG4pfXJldHVybiBlfShlLDAscil9fSx7Ii4uL3Rva2VuaXplci90b2tlbiI6ODQsIi4uL3V0aWxzL2lzLWltcG9ydCI6OTIsIi4vZXh0cmFjdC1pbXBvcnQtdXJsLWFuZC1tZWRpYSI6NzAsIi4vcmVzdG9yZS1pbXBvcnQiOjgxLCIuL3Jld3JpdGUtdXJsIjo4Mn1dLDgxOltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKCJAaW1wb3J0ICIrZSsiICIrdCkudHJpbSgpfX0se31dLDgyOltmdW5jdGlvbihnLHYsZSl7KGZ1bmN0aW9uKGUpe3ZhciBuPWcoInBhdGgiKSxyPWcoInVybCIpLGE9JyInLHM9IiciLHU9L15bIiddLyxsPS9bIiddJC8sdD0vW1woXCldLyxjPS9edXJsXCgvaSxmPS9cKSQvLGk9L1xzLyxvPSJ3aW4zMiI9PWUucGxhdGZvcm07ZnVuY3Rpb24gcChlLHQpe3JldHVybiB0P2Z1bmN0aW9uKGUpe3JldHVybiBuLmlzQWJzb2x1dGUoZSl9KGUpJiYhaCh0LnRvQmFzZSk/ZTpoKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iIyI9PWVbMF19KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4vXlx3KzpcdysvLnRlc3QoZSl9KGUpP2U6ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmluZGV4T2YoImRhdGE6Iil9KGUpPyInIitlKyInIjpoKHQudG9CYXNlKT9yLnJlc29sdmUodC50b0Jhc2UsZSk6dC5hYnNvbHV0ZT9kKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmVzb2x2ZShuLmpvaW4odC5mcm9tQmFzZXx8IiIsZSkpLnJlcGxhY2UodC50b0Jhc2UsIiIpfShlLHQpKTpkKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmVsYXRpdmUodC50b0Jhc2Usbi5qb2luKHQuZnJvbUJhc2V8fCIiLGUpKX0oZSx0KSk6ZX1mdW5jdGlvbiBoKGUpe3JldHVybi9eW146XSs/OlwvXC8vLnRlc3QoZSl8fDA9PT1lLmluZGV4T2YoIi8vIil9ZnVuY3Rpb24gZChlKXtyZXR1cm4gbz9lLnJlcGxhY2UoL1xcL2csIi8iKTplfWZ1bmN0aW9uIG0oZSl7cmV0dXJuLTE8ZS5pbmRleE9mKHMpP2E6LTE8ZS5pbmRleE9mKGEpP3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGVzdChlKX0oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoZSl9KGUpP3M6IiJ9di5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLnJlcGxhY2UoYywiIikucmVwbGFjZShmLCIiKS50cmltKCksaT1yLnJlcGxhY2UodSwiIikucmVwbGFjZShsLCIiKS50cmltKCksbz1yWzBdPT1zfHxyWzBdPT1hP3JbMF06bShpKTtyZXR1cm4gbj9wKGksdCk6InVybCgiK28rcChpLHQpK28rIikifX0pLmNhbGwodGhpcyxnKCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjExMixwYXRoOjExMCx1cmw6MTYyfV0sODM6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FTVEVSSVNLOiIqIixBVDoiQCIsQkFDS19TTEFTSDoiXFwiLENBUlJJQUdFX1JFVFVSTjoiXHIiLENMT1NFX0NVUkxZX0JSQUNLRVQ6In0iLENMT1NFX1JPVU5EX0JSQUNLRVQ6IikiLENMT1NFX1NRVUFSRV9CUkFDS0VUOiJdIixDT0xPTjoiOiIsQ09NTUE6IiwiLERPVUJMRV9RVU9URTonIicsRVhDTEFNQVRJT046IiEiLEZPUldBUkRfU0xBU0g6Ii8iLElOVEVSTkFMOiItY2xlYW4tY3NzLSIsTkVXX0xJTkVfTklYOiJcbiIsT1BFTl9DVVJMWV9CUkFDS0VUOiJ7IixPUEVOX1JPVU5EX0JSQUNLRVQ6IigiLE9QRU5fU1FVQVJFX0JSQUNLRVQ6IlsiLFNFTUlDT0xPTjoiOyIsU0lOR0xFX1FVT1RFOiInIixTUEFDRToiICIsVEFCOiJcdCIsVU5ERVJTQ09SRToiXyJ9fSx7fV0sODQ6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9e0FUX1JVTEU6ImF0LXJ1bGUiLEFUX1JVTEVfQkxPQ0s6ImF0LXJ1bGUtYmxvY2siLEFUX1JVTEVfQkxPQ0tfU0NPUEU6ImF0LXJ1bGUtYmxvY2stc2NvcGUiLENPTU1FTlQ6ImNvbW1lbnQiLE5FU1RFRF9CTE9DSzoibmVzdGVkLWJsb2NrIixORVNURURfQkxPQ0tfU0NPUEU6Im5lc3RlZC1ibG9jay1zY29wZSIsUFJPUEVSVFk6InByb3BlcnR5IixQUk9QRVJUWV9CTE9DSzoicHJvcGVydHktYmxvY2siLFBST1BFUlRZX05BTUU6InByb3BlcnR5LW5hbWUiLFBST1BFUlRZX1ZBTFVFOiJwcm9wZXJ0eS12YWx1ZSIsUkFXOiJyYXciLFJVTEU6InJ1bGUiLFJVTEVfU0NPUEU6InJ1bGUtc2NvcGUifX0se31dLDg1OltmdW5jdGlvbihlLHQsbil7dmFyIHo9ZSgiLi9tYXJrZXIiKSxqPWUoIi4vdG9rZW4iKSxWPWUoIi4uL3V0aWxzL2Zvcm1hdC1wb3NpdGlvbiIpLEg9e0JMT0NLOiJibG9jayIsQ09NTUVOVDoiY29tbWVudCIsRE9VQkxFX1FVT1RFOiJkb3VibGUtcXVvdGUiLFJVTEU6InJ1bGUiLFNJTkdMRV9RVU9URToic2luZ2xlLXF1b3RlIn0scj1bIkBjaGFyc2V0IiwiQGltcG9ydCJdLGk9WyJALW1vei1kb2N1bWVudCIsIkBkb2N1bWVudCIsIkAtbW96LWtleWZyYW1lcyIsIkAtbXMta2V5ZnJhbWVzIiwiQC1vLWtleWZyYW1lcyIsIkAtd2Via2l0LWtleWZyYW1lcyIsIkBrZXlmcmFtZXMiLCJAbWVkaWEiLCJAc3VwcG9ydHMiXSwkPS9cL1wqIGNsZWFuXC1jc3MgaWdub3JlOmVuZCBcKlwvJC8sSz0vXlwvXCogY2xlYW5cLWNzcyBpZ25vcmU6c3RhcnQgXCpcLy8sRz1bIkBib3R0b20tY2VudGVyIiwiQGJvdHRvbS1sZWZ0IiwiQGJvdHRvbS1sZWZ0LWNvcm5lciIsIkBib3R0b20tcmlnaHQiLCJAYm90dG9tLXJpZ2h0LWNvcm5lciIsIkBsZWZ0LWJvdHRvbSIsIkBsZWZ0LW1pZGRsZSIsIkBsZWZ0LXRvcCIsIkByaWdodC1ib3R0b20iLCJAcmlnaHQtbWlkZGxlIiwiQHJpZ2h0LXRvcCIsIkB0b3AtY2VudGVyIiwiQHRvcC1sZWZ0IiwiQHRvcC1sZWZ0LWNvcm5lciIsIkB0b3AtcmlnaHQiLCJAdG9wLXJpZ2h0LWNvcm5lciJdLFk9WyJAZm9vdG5vdGUiLCJAZm9vdG5vdGVzIiwiQGxlZnQiLCJAcGFnZS1mbG9hdC1ib3R0b20iLCJAcGFnZS1mbG9hdC10b3AiLCJAcmlnaHQiXSxXPS9eXFtcc3swLDMxfVxkK1xzezAsMzF9XF0kLyxvPS9bXHNcKF0vLFE9L1tcc3xcfV0qJC87ZnVuY3Rpb24gWihlLHQsbixyKXt2YXIgaT1lWzJdO3JldHVybiBuLmlucHV0U291cmNlTWFwVHJhY2tlci5pc1RyYWNraW5nKGkpP24uaW5wdXRTb3VyY2VNYXBUcmFja2VyLm9yaWdpbmFsUG9zaXRpb25Gb3IoZSx0Lmxlbmd0aCxyKTplfWZ1bmN0aW9uIEooZSl7dmFyIHQ9ZVswXT09ei5BVHx8ZVswXT09ei5VTkRFUlNDT1JFLG49ZS5qb2luKCIiKS5zcGxpdChvKVswXTtyZXR1cm4gdCYmLTE8aS5pbmRleE9mKG4pP2ouTkVTVEVEX0JMT0NLOnQmJi0xPHIuaW5kZXhPZihuKT9qLkFUX1JVTEU6dD9qLkFUX1JVTEVfQkxPQ0s6ai5SVUxFfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGU9PWouUlVMRT9qLlJVTEVfU0NPUEU6ZT09ai5ORVNURURfQkxPQ0s/ai5ORVNURURfQkxPQ0tfU0NPUEU6ZT09ai5BVF9SVUxFX0JMT0NLP2ouQVRfUlVMRV9CTE9DS19TQ09QRTp2b2lkIDB9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmLHAsaCxkLG0sZyx2LGIseSxfLHcsRSxBLHgsaz1bXSxDPWssTz1bXSxTPVtdLEQ9ci5sZXZlbCxUPVtdLEI9W10sUj1bXSxMPTAsRj0hMSxxPSExLFU9ITEsTT0hMSxOPSExLFA9ci5wb3NpdGlvbjtQLmluZGV4PHQubGVuZ3RoO1AuaW5kZXgrKyl7dmFyIEk9dFtQLmluZGV4XTtpZihmPUQ9PUguU0lOR0xFX1FVT1RFfHxEPT1ILkRPVUJMRV9RVU9URSxwPUk9PXouU1BBQ0V8fEk9PXouVEFCLGg9ST09ei5ORVdfTElORV9OSVgsZD1JPT16Lk5FV19MSU5FX05JWCYmdFtQLmluZGV4LTFdPT16LkNBUlJJQUdFX1JFVFVSTixtPUk9PXouQ0FSUklBR0VfUkVUVVJOJiZ0W1AuaW5kZXgrMV0mJnRbUC5pbmRleCsxXSE9ei5ORVdfTElORV9OSVgsZz0hcSYmRCE9SC5DT01NRU5UJiYhZiYmST09ei5BU1RFUklTSyYmdFtQLmluZGV4LTFdPT16LkZPUldBUkRfU0xBU0gsYj0hRiYmIWYmJkk9PXouRk9SV0FSRF9TTEFTSCYmdFtQLmluZGV4LTFdPT16LkFTVEVSSVNLLHY9RD09SC5DT01NRU5UJiZiLEw9TWF0aC5tYXgoTCwwKSx1PTA9PT1CLmxlbmd0aD9bUC5saW5lLFAuY29sdW1uLFAuc291cmNlXTp1LHkpQi5wdXNoKEkpO2Vsc2UgaWYodnx8RCE9SC5DT01NRU5UKWlmKGd8fHZ8fCFVKWlmKGcmJihEPT1ILkJMT0NLfHxEPT1ILlJVTEUpJiYxPEIubGVuZ3RoKVMucHVzaCh1KSxCLnB1c2goSSksUi5wdXNoKEIuc2xpY2UoMCxCLmxlbmd0aC0yKSksQj1CLnNsaWNlKEIubGVuZ3RoLTIpLHU9W1AubGluZSxQLmNvbHVtbi0xLFAuc291cmNlXSxULnB1c2goRCksRD1ILkNPTU1FTlQ7ZWxzZSBpZihnKVQucHVzaChEKSxEPUguQ09NTUVOVCxCLnB1c2goSSk7ZWxzZSBpZih2JiYoeD1CLEsudGVzdCh4LmpvaW4oIiIpK3ouRk9SV0FSRF9TTEFTSCkpKWw9Qi5qb2luKCIiKS50cmltKCkrSSxvPVtqLkNPTU1FTlQsbCxbWih1LGwsbildXSxDLnB1c2gobyksVT0hMCx1PVMucG9wKCl8fG51bGwsQj1SLnBvcCgpfHxbXTtlbHNlIGlmKHYmJihBPUIsJC50ZXN0KEEuam9pbigiIikrei5GT1JXQVJEX1NMQVNIKSkpbD1CLmpvaW4oIiIpK0ksXz1sLmxhc3RJbmRleE9mKHouRk9SV0FSRF9TTEFTSCt6LkFTVEVSSVNLKSxjPWwuc3Vic3RyaW5nKDAsXyksbz1bai5SQVcsYyxbWih1LGMsbildXSxDLnB1c2gobyksYz1sLnN1YnN0cmluZyhfKSx1PVtQLmxpbmUsUC5jb2x1bW4tYy5sZW5ndGgrMSxQLnNvdXJjZV0sbz1bai5DT01NRU5ULGMsW1oodSxjLG4pXV0sQy5wdXNoKG8pLFU9ITEsRD1ULnBvcCgpLHU9Uy5wb3AoKXx8bnVsbCxCPVIucG9wKCl8fFtdO2Vsc2UgaWYodilsPUIuam9pbigiIikudHJpbSgpK0ksbz1bai5DT01NRU5ULGwsW1oodSxsLG4pXV0sQy5wdXNoKG8pLEQ9VC5wb3AoKSx1PVMucG9wKCl8fG51bGwsQj1SLnBvcCgpfHxbXTtlbHNlIGlmKGImJnRbUC5pbmRleCsxXSE9ei5BU1RFUklTSyluLndhcm5pbmdzLnB1c2goIlVuZXhwZWN0ZWQgJyovJyBhdCAiK1YoW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV0pKyIuIiksQj1bXTtlbHNlIGlmKEkhPXouU0lOR0xFX1FVT1RFfHxmKWlmKEk9PXouU0lOR0xFX1FVT1RFJiZEPT1ILlNJTkdMRV9RVU9URSlEPVQucG9wKCksQi5wdXNoKEkpO2Vsc2UgaWYoSSE9ei5ET1VCTEVfUVVPVEV8fGYpaWYoST09ei5ET1VCTEVfUVVPVEUmJkQ9PUguRE9VQkxFX1FVT1RFKUQ9VC5wb3AoKSxCLnB1c2goSSk7ZWxzZSBpZighZyYmIXYmJkkhPXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmSSE9ei5PUEVOX1JPVU5EX0JSQUNLRVQmJkQhPUguQ09NTUVOVCYmIWYmJjA8TClCLnB1c2goSSk7ZWxzZSBpZihJIT16Lk9QRU5fUk9VTkRfQlJBQ0tFVHx8Znx8RD09SC5DT01NRU5UfHxNKWlmKEkhPXouQ0xPU0VfUk9VTkRfQlJBQ0tFVHx8Znx8RD09SC5DT01NRU5UfHxNKWlmKEk9PXouU0VNSUNPTE9OJiZEPT1ILkJMT0NLJiZCWzBdPT16LkFUKWw9Qi5qb2luKCIiKS50cmltKCksay5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksQj1bXTtlbHNlIGlmKEk9PXouQ09NTUEmJkQ9PUguQkxPQ0smJmEpbD1CLmpvaW4oIiIpLnRyaW0oKSxhWzFdLnB1c2goW1goYVswXSksbCxbWih1LGwsbixhWzFdLmxlbmd0aCldXSksQj1bXTtlbHNlIGlmKEk9PXouQ09NTUEmJkQ9PUguQkxPQ0smJkooQik9PWouQVRfUlVMRSlCLnB1c2goSSk7ZWxzZSBpZihJPT16LkNPTU1BJiZEPT1ILkJMT0NLKWE9W0ooQiksW10sW11dLGw9Qi5qb2luKCIiKS50cmltKCksYVsxXS5wdXNoKFtYKGFbMF0pLGwsW1oodSxsLG4sMCldXSksQj1bXTtlbHNlIGlmKEk9PXouT1BFTl9DVVJMWV9CUkFDS0VUJiZEPT1ILkJMT0NLJiZhJiZhWzBdPT1qLk5FU1RFRF9CTE9DSylsPUIuam9pbigiIikudHJpbSgpLGFbMV0ucHVzaChbai5ORVNURURfQkxPQ0tfU0NPUEUsbCxbWih1LGwsbildXSksay5wdXNoKGEpLFQucHVzaChEKSxQLmNvbHVtbisrLFAuaW5kZXgrKyxCPVtdLGFbMl09ZSh0LG4sciwhMCksYT1udWxsO2Vsc2UgaWYoST09ei5PUEVOX0NVUkxZX0JSQUNLRVQmJkQ9PUguQkxPQ0smJkooQik9PWouTkVTVEVEX0JMT0NLKWw9Qi5qb2luKCIiKS50cmltKCksKGE9YXx8W2ouTkVTVEVEX0JMT0NLLFtdLFtdXSlbMV0ucHVzaChbai5ORVNURURfQkxPQ0tfU0NPUEUsbCxbWih1LGwsbildXSksay5wdXNoKGEpLFQucHVzaChEKSxQLmNvbHVtbisrLFAuaW5kZXgrKyxCPVtdLGFbMl09ZSh0LG4sciwhMCksYT1udWxsO2Vsc2UgaWYoST09ei5PUEVOX0NVUkxZX0JSQUNLRVQmJkQ9PUguQkxPQ0spbD1CLmpvaW4oIiIpLnRyaW0oKSwoYT1hfHxbSihCKSxbXSxbXV0pWzFdLnB1c2goW1goYVswXSksbCxbWih1LGwsbixhWzFdLmxlbmd0aCldXSksQz1hWzJdLGsucHVzaChhKSxULnB1c2goRCksRD1ILlJVTEUsQj1bXTtlbHNlIGlmKEk9PXouT1BFTl9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJk0pTy5wdXNoKGEpLGE9W2ouUFJPUEVSVFlfQkxPQ0ssW11dLHMucHVzaChhKSxDPWFbMV0sVC5wdXNoKEQpLEQ9SC5SVUxFLE09ITE7ZWxzZSBpZihJPT16Lk9QRU5fQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiYoRT1CLmpvaW4oIiIpLnRyaW0oKSwtMTxHLmluZGV4T2YoRSl8fC0xPFkuaW5kZXhPZihFKSkpbD1CLmpvaW4oIiIpLnRyaW0oKSxPLnB1c2goYSksKGE9W2ouQVRfUlVMRV9CTE9DSyxbXSxbXV0pWzFdLnB1c2goW2ouQVRfUlVMRV9CTE9DS19TQ09QRSxsLFtaKHUsbCxuKV1dKSxDLnB1c2goYSksQz1hWzJdLFQucHVzaChEKSxEPUguUlVMRSxCPVtdO2Vsc2UgaWYoSSE9ei5DT0xPTnx8RCE9SC5SVUxFfHxNKWlmKEk9PXouU0VNSUNPTE9OJiZEPT1ILlJVTEUmJnMmJjA8Ty5sZW5ndGgmJjA8Qi5sZW5ndGgmJkJbMF09PXouQVQpbD1CLmpvaW4oIiIpLnRyaW0oKSxhWzFdLnB1c2goW2ouQVRfUlVMRSxsLFtaKHUsbCxuKV1dKSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmcyYmMDxCLmxlbmd0aClsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzPW51bGwsTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmcyYmMD09PUIubGVuZ3RoKXM9bnVsbCxNPSExO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmMDxCLmxlbmd0aCYmQlswXT09ei5BVClsPUIuam9pbigiIiksQy5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5TRU1JQ09MT04mJkQ9PUguUlVMRSYmTilOPSExLEI9W107ZWxzZSBpZihJPT16LlNFTUlDT0xPTiYmRD09SC5SVUxFJiYwPT09Qi5sZW5ndGgpO2Vsc2UgaWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJnMmJk0mJjA8Qi5sZW5ndGgmJjA8Ty5sZW5ndGgpbD1CLmpvaW4oIiIpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzPW51bGwsYT1PLnBvcCgpLEM9YVsyXSxEPVQucG9wKCksTT0hMSxCPVtdO2Vsc2UgaWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILlJVTEUmJnMmJjA8Qi5sZW5ndGgmJkJbMF09PXouQVQmJjA8Ty5sZW5ndGgpbD1CLmpvaW4oIiIpLGFbMV0ucHVzaChbai5BVF9SVUxFLGwsW1oodSxsLG4pXV0pLHM9bnVsbCxhPU8ucG9wKCksQz1hWzJdLEQ9VC5wb3AoKSxNPSExLEI9W107ZWxzZSBpZihJPT16LkNMT1NFX0NVUkxZX0JSQUNLRVQmJkQ9PUguUlVMRSYmcyYmMDxPLmxlbmd0aClzPW51bGwsYT1PLnBvcCgpLEM9YVsyXSxEPVQucG9wKCksTT0hMTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiZzJiYwPEIubGVuZ3RoKWw9Qi5qb2luKCIiKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSkscz1udWxsLGE9Ty5wb3AoKSxDPWssRD1ULnBvcCgpLE09ITEsQj1bXTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFJiYwPEIubGVuZ3RoJiZCWzBdPT16LkFUKWE9cz1udWxsLGw9Qi5qb2luKCIiKS50cmltKCksQy5wdXNoKFtqLkFUX1JVTEUsbCxbWih1LGwsbildXSksQz1rLEQ9VC5wb3AoKSxNPSExLEI9W107ZWxzZSBpZihJPT16LkNMT1NFX0NVUkxZX0JSQUNLRVQmJkQ9PUguUlVMRSYmVFtULmxlbmd0aC0xXT09SC5SVUxFKXM9bnVsbCxhPU8ucG9wKCksQz1hWzJdLEQ9VC5wb3AoKSxOPSEoTT0hMSksQj1bXTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5SVUxFKWE9cz1udWxsLEM9ayxEPVQucG9wKCksTT0hMTtlbHNlIGlmKEk9PXouQ0xPU0VfQ1VSTFlfQlJBQ0tFVCYmRD09SC5CTE9DSyYmIWkmJlAuaW5kZXg8PXQubGVuZ3RoLTEpbi53YXJuaW5ncy5wdXNoKCJVbmV4cGVjdGVkICd9JyBhdCAiK1YoW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV0pKyIuIiksQi5wdXNoKEkpO2Vsc2V7aWYoST09ei5DTE9TRV9DVVJMWV9CUkFDS0VUJiZEPT1ILkJMT0NLKWJyZWFrO0k9PXouT1BFTl9ST1VORF9CUkFDS0VUJiZEPT1ILlJVTEUmJk0/KEIucHVzaChJKSxMKyspOkk9PXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmRD09SC5SVUxFJiZNJiYxPT1MPyhCLnB1c2goSSksbD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksTC0tLEI9W10pOkk9PXouQ0xPU0VfUk9VTkRfQlJBQ0tFVCYmRD09SC5SVUxFJiZNPyhCLnB1c2goSSksTC0tKTpJPT16LkZPUldBUkRfU0xBU0gmJnRbUC5pbmRleCsxXSE9ei5BU1RFUklTSyYmRD09SC5SVUxFJiZNJiYwPEIubGVuZ3RoPyhsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsSSxbW1AubGluZSxQLmNvbHVtbixQLnNvdXJjZV1dXSksQj1bXSk6ST09ei5GT1JXQVJEX1NMQVNIJiZ0W1AuaW5kZXgrMV0hPXouQVNURVJJU0smJkQ9PUguUlVMRSYmTT8ocy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ09NTUEmJkQ9PUguUlVMRSYmTSYmMDxCLmxlbmd0aD8obD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSkscy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ09NTUEmJkQ9PUguUlVMRSYmTT8ocy5wdXNoKFtqLlBST1BFUlRZX1ZBTFVFLEksW1tQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdXV0pLEI9W10pOkk9PXouQ0xPU0VfU1FVQVJFX0JSQUNLRVQmJnMmJjE8cy5sZW5ndGgmJjA8Qi5sZW5ndGgmJih3PUIsVy50ZXN0KHcuam9pbigiIikrei5DTE9TRV9TUVVBUkVfQlJBQ0tFVCkpPyhCLnB1c2goSSksbD1CLmpvaW4oIiIpLnRyaW0oKSxzW3MubGVuZ3RoLTFdWzFdKz1sLEI9W10pOihwfHxoJiYhZCkmJkQ9PUguUlVMRSYmTSYmcyYmMDxCLmxlbmd0aD8obD1CLmpvaW4oIiIpLnRyaW0oKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksQj1bXSk6ZCYmRD09SC5SVUxFJiZNJiZzJiYxPEIubGVuZ3RoPyhsPUIuam9pbigiIikudHJpbSgpLHMucHVzaChbai5QUk9QRVJUWV9WQUxVRSxsLFtaKHUsbCxuKV1dKSxCPVtdKTpkJiZEPT1ILlJVTEUmJk0/Qj1bXToxPT1CLmxlbmd0aCYmZD9CLnBvcCgpOigwPEIubGVuZ3RofHwhcCYmIWgmJiFkJiYhbSkmJkIucHVzaChJKX1lbHNlIGw9Qi5qb2luKCIiKS50cmltKCkscz1bai5QUk9QRVJUWSxbai5QUk9QRVJUWV9OQU1FLGwsW1oodSxsLG4pXV1dLEMucHVzaChzKSxNPSEwLEI9W107ZWxzZSBCLnB1c2goSSksTC0tO2Vsc2UgQi5wdXNoKEkpLEwrKztlbHNlIFQucHVzaChEKSxEPUguRE9VQkxFX1FVT1RFLEIucHVzaChJKTtlbHNlIFQucHVzaChEKSxEPUguU0lOR0xFX1FVT1RFLEIucHVzaChJKTtlbHNlIEIucHVzaChJKTtlbHNlIEIucHVzaChJKTt5PSF5JiZJPT16LkJBQ0tfU0xBU0gsRj1nLHE9dixQLmxpbmU9ZHx8aHx8bT9QLmxpbmUrMTpQLmxpbmUsUC5jb2x1bW49ZHx8aHx8bT8wOlAuY29sdW1uKzF9cmV0dXJuIE0mJm4ud2FybmluZ3MucHVzaCgiTWlzc2luZyAnfScgYXQgIitWKFtQLmxpbmUsUC5jb2x1bW4sUC5zb3VyY2VdKSsiLiIpLE0mJjA8Qi5sZW5ndGgmJihsPUIuam9pbigiIikucmVwbGFjZShRLCIiKSxzLnB1c2goW2ouUFJPUEVSVFlfVkFMVUUsbCxbWih1LGwsbildXSksQj1bXSksMDxCLmxlbmd0aCYmbi53YXJuaW5ncy5wdXNoKCJJbnZhbGlkIGNoYXJhY3RlcihzKSAnIitCLmpvaW4oIiIpKyInIGF0ICIrVih1KSsiLiBJZ25vcmluZy4iKSxrfShlLHQse2xldmVsOkguQkxPQ0sscG9zaXRpb246e3NvdXJjZTp0LnNvdXJjZXx8dm9pZCAwLGxpbmU6MSxjb2x1bW46MCxpbmRleDowfX0sITEpfX0seyIuLi91dGlscy9mb3JtYXQtcG9zaXRpb24iOjg3LCIuL21hcmtlciI6ODMsIi4vdG9rZW4iOjg0fV0sODY6W2Z1bmN0aW9uKGUsdCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24gZSh0KXtmb3IodmFyIG49dC5zbGljZSgwKSxyPTAsaT1uLmxlbmd0aDtyPGk7cisrKUFycmF5LmlzQXJyYXkobltyXSkmJihuW3JdPWUobltyXSkpO3JldHVybiBufX0se31dLDg3OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdLHI9ZVsyXTtyZXR1cm4gcj9yKyI6Iit0KyI6IituOnQrIjoiK259fSx7fV0sODg6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXlwvXC8vO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hci50ZXN0KGUpfX0se31dLDg5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9L15kYXRhOihcUyo/KT8oO2NoYXJzZXQ9W147XSspPyg7W14sXSs/KT8sKC4rKS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTA6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmh0dHA6XC9cLy87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTE6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXmh0dHBzOlwvXC8vO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gci50ZXN0KGUpfX0se31dLDkyOltmdW5jdGlvbihlLHQsbil7dmFyIHI9L15AaW1wb3J0L2k7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj0vXihcdys6XC9cL3xcL1wvKS87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZSl9fSx7fV0sOTQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgdT0vKFswLTldKykvO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIiIrcGFyc2VJbnQoZSk9PWU/cGFyc2VJbnQoZSk6ZX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhPSgiIitlKS5zcGxpdCh1KS5tYXAobCkscz0oIiIrdCkuc3BsaXQodSkubWFwKGwpO2ZvcihpPTAsbz1NYXRoLm1pbihhLmxlbmd0aCxzLmxlbmd0aCk7aTxvO2krKylpZigobj1hW2ldKSE9KHI9c1tpXSkpcmV0dXJuIHI8bj8xOi0xO3JldHVybiBhLmxlbmd0aD5zLmxlbmd0aD8xOmEubGVuZ3RoPT1zLmxlbmd0aD8wOi0xfX0se31dLDk1OltmdW5jdGlvbihlLHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpLG8sYT17fTtmb3IociBpbiB0KW89dFtyXSxBcnJheS5pc0FycmF5KG8pP2Fbcl09by5zbGljZSgwKTphW3JdPSJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8/ZShvLHt9KTpvO2ZvcihpIGluIG4pbz1uW2ldLGkgaW4gYSYmQXJyYXkuaXNBcnJheShvKT9hW2ldPW8uc2xpY2UoMCk6YVtpXT1pIGluIGEmJiJvYmplY3QiPT10eXBlb2YgbyYmbnVsbCE9PW8/ZShhW2ldLG8pOm87cmV0dXJuIGF9fSx7fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYz1lKCIuLi90b2tlbml6ZXIvbWFya2VyIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1jLk9QRU5fUk9VTkRfQlJBQ0tFVCxpPWMuQ0xPU0VfUk9VTkRfQlJBQ0tFVCxvPTAsYT0wLHM9MCx1PWUubGVuZ3RoLGw9W107aWYoLTE9PWUuaW5kZXhPZih0KSlyZXR1cm5bZV07aWYoLTE9PWUuaW5kZXhPZihyKSlyZXR1cm4gZS5zcGxpdCh0KTtmb3IoO2E8dTspZVthXT09cj9vKys6ZVthXT09aSYmby0tLDA9PT1vJiYwPGEmJmErMTx1JiZlW2FdPT10JiYobC5wdXNoKGUuc3Vic3RyaW5nKHMsYSkpLHM9YSsxKSxhKys7cmV0dXJuIHM8YSsxJiYoKG49ZS5zdWJzdHJpbmcocykpW24ubGVuZ3RoLTFdPT10JiYobj1uLnN1YnN0cmluZygwLG4ubGVuZ3RoLTEpKSxsLnB1c2gobikpLGx9fSx7Ii4uL3Rva2VuaXplci9tYXJrZXIiOjgzfV0sOTc6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgbD0iIixjPWUoIi4uL29wdGlvbnMvZm9ybWF0IikuQnJlYWtzLGY9ZSgiLi4vb3B0aW9ucy9mb3JtYXQiKS5TcGFjZXMscD1lKCIuLi90b2tlbml6ZXIvbWFya2VyIiksaD1lKCIuLi90b2tlbml6ZXIvdG9rZW4iKTtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4hZS5zcGFjZUFmdGVyQ2xvc2luZ0JyYWNlJiZmdW5jdGlvbihlKXtyZXR1cm4iYmFja2dyb3VuZCI9PWVbMV1bMV18fCJ0cmFuc2Zvcm0iPT1lWzFdWzFdfHwic3JjIj09ZVsxXVsxXX0odCkmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF1bMV1bZVt0XVsxXS5sZW5ndGgtMV09PXAuQ0xPU0VfUk9VTkRfQlJBQ0tFVH0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0KzFdJiZlW3QrMV1bMV09PXAuRk9SV0FSRF9TTEFTSH0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XVsxXT09cC5GT1JXQVJEX1NMQVNIfSh0LG4pfHxmdW5jdGlvbihlLHQpe3JldHVybiBlW3QrMV0mJmVbdCsxXVsxXT09cC5DT01NQX0odCxuKXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XVsxXT09cC5DT01NQX0odCxuKX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciBuLHI9ZS5zdG9yZSxpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXIoZSx0W2ldKSxpPG8tMSYmcihlLChuPWUpLmZvcm1hdD9wLkNPTU1BKyh1KG4sYy5CZXR3ZWVuU2VsZWN0b3JzKT9uLmZvcm1hdC5icmVha1dpdGg6bCkrbi5pbmRlbnRXaXRoOnAuQ09NTUEpfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLTE7MDw9dCYmZVt0XVswXT09aC5DT01NRU5UO3QtLSk7cmV0dXJuIHR9KHQpLHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbyhlLHQscixuKX1mdW5jdGlvbiBvKGUsdCxuLHIpe3ZhciBpLG89ZS5zdG9yZSxhPXRbbl0scz1hWzJdWzBdPT1oLlBST1BFUlRZX0JMT0NLO2k9ZS5mb3JtYXQ/ISghZS5mb3JtYXQuc2VtaWNvbG9uQWZ0ZXJMYXN0UHJvcGVydHkmJiFzKXx8bjxyOm48cnx8czt2YXIgdT1uPT09cjtzd2l0Y2goYVswXSl7Y2FzZSBoLkFUX1JVTEU6byhlLGEpLG8oZSxfKGUsYy5BZnRlclByb3BlcnR5LCExKSk7YnJlYWs7Y2FzZSBoLkFUX1JVTEVfQkxPQ0s6ZChlLGFbMV0pLG8oZSxiKGUsYy5BZnRlclJ1bGVCZWdpbnMsITApKSxtKGUsYVsyXSksbyhlLHkoZSxjLkFmdGVyUnVsZUVuZHMsITEsdSkpO2JyZWFrO2Nhc2UgaC5DT01NRU5UOm8oZSxhKTticmVhaztjYXNlIGguUFJPUEVSVFk6byhlLGFbMV0pLG8oZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5mb3JtYXQ/cC5DT0xPTisodihlLGYuQmVmb3JlVmFsdWUpP3AuU1BBQ0U6bCk6cC5DT0xPTn0oZSkpLGcoZSxhKSxvKGUsaT9fKGUsYy5BZnRlclByb3BlcnR5LHUpOmwpO2JyZWFrO2Nhc2UgaC5SQVc6byhlLGEpfX1mdW5jdGlvbiBnKGUsdCl7dmFyIG4scixpLG89ZS5zdG9yZTtpZih0WzJdWzBdPT1oLlBST1BFUlRZX0JMT0NLKW8oZSxiKGUsYy5BZnRlckJsb2NrQmVnaW5zLCExKSksbShlLHRbMl1bMV0pLG8oZSx5KGUsYy5BZnRlckJsb2NrRW5kcywhMSwhMCkpO2Vsc2UgZm9yKG49MixyPXQubGVuZ3RoO248cjtuKyspbyhlLHRbbl0pLG48ci0xJiYoImZpbHRlciI9PShpPXQpWzFdWzFdfHwiLW1zLWZpbHRlciI9PWlbMV1bMV18fCFhKGUsdCxuKSkmJm8oZSxwLlNQQUNFKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGUuZm9ybWF0JiZlLmZvcm1hdC5icmVha3NbdF19ZnVuY3Rpb24gdihlLHQpe3JldHVybiBlLmZvcm1hdCYmZS5mb3JtYXQuc3BhY2VzW3RdfWZ1bmN0aW9uIGIoZSx0LG4pe3JldHVybiBlLmZvcm1hdD8oZS5pbmRlbnRCeSs9ZS5mb3JtYXQuaW5kZW50QnksZS5pbmRlbnRXaXRoPWUuZm9ybWF0LmluZGVudFdpdGgucmVwZWF0KGUuaW5kZW50QnkpLChuJiZ2KGUsZi5CZWZvcmVCbG9ja0JlZ2lucyk/cC5TUEFDRTpsKStwLk9QRU5fQ1VSTFlfQlJBQ0tFVCsodShlLHQpP2UuZm9ybWF0LmJyZWFrV2l0aDpsKStlLmluZGVudFdpdGgpOnAuT1BFTl9DVVJMWV9CUkFDS0VUfWZ1bmN0aW9uIHkoZSx0LG4scil7cmV0dXJuIGUuZm9ybWF0PyhlLmluZGVudEJ5LT1lLmZvcm1hdC5pbmRlbnRCeSxlLmluZGVudFdpdGg9ZS5mb3JtYXQuaW5kZW50V2l0aC5yZXBlYXQoZS5pbmRlbnRCeSksKHUoZSxjLkFmdGVyUHJvcGVydHkpfHxuJiZ1KGUsYy5CZWZvcmVCbG9ja0VuZHMpP2UuZm9ybWF0LmJyZWFrV2l0aDpsKStlLmluZGVudFdpdGgrcC5DTE9TRV9DVVJMWV9CUkFDS0VUKyhyP2w6KHUoZSx0KT9lLmZvcm1hdC5icmVha1dpdGg6bCkrZS5pbmRlbnRXaXRoKSk6cC5DTE9TRV9DVVJMWV9CUkFDS0VUfWZ1bmN0aW9uIF8oZSx0LG4pe3JldHVybiBlLmZvcm1hdD9wLlNFTUlDT0xPTisobnx8IXUoZSx0KT9sOmUuZm9ybWF0LmJyZWFrV2l0aCtlLmluZGVudFdpdGgpOnAuU0VNSUNPTE9OfXQuZXhwb3J0cz17YWxsOmZ1bmN0aW9uIGUodCxuKXt2YXIgcixpLG8sYSxzPXQuc3RvcmU7Zm9yKG89MCxhPW4ubGVuZ3RoO288YTtvKyspc3dpdGNoKGk9bz09YS0xLChyPW5bb10pWzBdKXtjYXNlIGguQVRfUlVMRTpzKHQscikscyh0LF8odCxjLkFmdGVyQXRSdWxlLGkpKTticmVhaztjYXNlIGguQVRfUlVMRV9CTE9DSzpkKHQsclsxXSkscyh0LGIodCxjLkFmdGVyUnVsZUJlZ2lucywhMCkpLG0odCxyWzJdKSxzKHQseSh0LGMuQWZ0ZXJSdWxlRW5kcywhMSxpKSk7YnJlYWs7Y2FzZSBoLk5FU1RFRF9CTE9DSzpkKHQsclsxXSkscyh0LGIodCxjLkFmdGVyQmxvY2tCZWdpbnMsITApKSxlKHQsclsyXSkscyh0LHkodCxjLkFmdGVyQmxvY2tFbmRzLCEwLGkpKTticmVhaztjYXNlIGguQ09NTUVOVDpzKHQscikscyh0LHUodCxjLkFmdGVyQ29tbWVudCk/dC5mb3JtYXQuYnJlYWtXaXRoOmwpO2JyZWFrO2Nhc2UgaC5SQVc6cyh0LHIpO2JyZWFrO2Nhc2UgaC5SVUxFOmQodCxyWzFdKSxzKHQsYih0LGMuQWZ0ZXJSdWxlQmVnaW5zLCEwKSksbSh0LHJbMl0pLHModCx5KHQsYy5BZnRlclJ1bGVFbmRzLCExLGkpKX19LGJvZHk6bSxwcm9wZXJ0eTpvLHJ1bGVzOmQsdmFsdWU6Z319LHsiLi4vb3B0aW9ucy9mb3JtYXQiOjYxLCIuLi90b2tlbml6ZXIvbWFya2VyIjo4MywiLi4vdG9rZW5pemVyL3Rva2VuIjo4NH1dLDk4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gaShlLHQpe2Uub3V0cHV0LnB1c2goInN0cmluZyI9PXR5cGVvZiB0P3Q6dFsxXSl9ZnVuY3Rpb24gbygpe3JldHVybntvdXRwdXQ6W10sc3RvcmU6aX19dC5leHBvcnRzPXthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiByLmFsbCh0LGUpLHQub3V0cHV0LmpvaW4oIiIpfSxib2R5OmZ1bmN0aW9uKGUpe3ZhciB0PW8oKTtyZXR1cm4gci5ib2R5KHQsZSksdC5vdXRwdXQuam9pbigiIil9LHByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7dmFyIG49bygpO3JldHVybiByLnByb3BlcnR5KG4sZSx0LCEwKSxuLm91dHB1dC5qb2luKCIiKX0scnVsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiByLnJ1bGVzKHQsZSksdC5vdXRwdXQuam9pbigiIil9LHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW8oKTtyZXR1cm4gci52YWx1ZSh0LGUpLHQub3V0cHV0LmpvaW4oIiIpfX19LHsiLi9oZWxwZXJzIjo5N31dLDk5OltmdW5jdGlvbihlLHQsbil7dmFyIHI9ZSgiLi9oZWxwZXJzIikuYWxsO2Z1bmN0aW9uIGkoZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHQ/dDp0WzFdOygwLGUud3JhcCkoZSxuKSxhKGUsbiksZS5vdXRwdXQucHVzaChuKX1mdW5jdGlvbiBvKGUsdCl7ZS5jb2x1bW4rdC5sZW5ndGg+ZS5mb3JtYXQud3JhcEF0JiYoYShlLGUuZm9ybWF0LmJyZWFrV2l0aCksZS5vdXRwdXQucHVzaChlLmZvcm1hdC5icmVha1dpdGgpKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dC5zcGxpdCgiXG4iKTtlLmxpbmUrPW4ubGVuZ3RoLTEsZS5jb2x1bW49MTxuLmxlbmd0aD8wOmUuY29sdW1uK24ucG9wKCkubGVuZ3RofXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXtjb2x1bW46MCxmb3JtYXQ6dC5vcHRpb25zLmZvcm1hdCxpbmRlbnRCeTowLGluZGVudFdpdGg6IiIsbGluZToxLG91dHB1dDpbXSxzcGFjZUFmdGVyQ2xvc2luZ0JyYWNlOnQub3B0aW9ucy5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxzdG9yZTppLHdyYXA6dC5vcHRpb25zLmZvcm1hdC53cmFwQXQ/bzpmdW5jdGlvbigpe319O3JldHVybiByKG4sZSkse3N0eWxlczpuLm91dHB1dC5qb2luKCIiKX19fSx7Ii4vaGVscGVycyI6OTd9XSwxMDA6W2Z1bmN0aW9uKHQsbixlKXsoZnVuY3Rpb24oZSl7dmFyIHI9dCgic291cmNlLW1hcCIpLlNvdXJjZU1hcEdlbmVyYXRvcixpPXQoIi4vaGVscGVycyIpLmFsbCxzPXQoIi4uL3V0aWxzL2lzLXJlbW90ZS1yZXNvdXJjZSIpLHU9IndpbjMyIj09ZS5wbGF0Zm9ybSxsPS9cLy9nLGM9IiRzdGRpbiIsZj0iXFwiO2Z1bmN0aW9uIG8oZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHQscj1uP3Q6dFsxXSxpPW4/bnVsbDp0WzJdOygwLGUud3JhcCkoZSxyKSxwKGUscixpKSxlLm91dHB1dC5wdXNoKHIpfWZ1bmN0aW9uIGEoZSx0KXtlLmNvbHVtbit0Lmxlbmd0aD5lLmZvcm1hdC53cmFwQXQmJihwKGUsZS5mb3JtYXQuYnJlYWtXaXRoLCExKSxlLm91dHB1dC5wdXNoKGUuZm9ybWF0LmJyZWFrV2l0aCkpfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByPXQuc3BsaXQoIlxuIik7biYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaChlLHRbbl0pfShlLG4pLGUubGluZSs9ci5sZW5ndGgtMSxlLmNvbHVtbj0xPHIubGVuZ3RoPzA6ZS5jb2x1bW4rci5wb3AoKS5sZW5ndGh9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPXRbMF0scj10WzFdLGk9dFsyXSxvPWksYT1vfHxjO3UmJm8mJiFzKG8pJiYoYT1vLnJlcGxhY2UobCxmKSksZS5vdXRwdXRNYXAuYWRkTWFwcGluZyh7Z2VuZXJhdGVkOntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW59LHNvdXJjZTphLG9yaWdpbmFsOntsaW5lOm4sY29sdW1uOnJ9fSksZS5pbmxpbmVTb3VyY2VzJiZpIGluIGUuc291cmNlc0NvbnRlbnQmJmUub3V0cHV0TWFwLnNldFNvdXJjZUNvbnRlbnQoYSxlLnNvdXJjZXNDb250ZW50W2ldKX1uLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17Y29sdW1uOjAsZm9ybWF0OnQub3B0aW9ucy5mb3JtYXQsaW5kZW50Qnk6MCxpbmRlbnRXaXRoOiIiLGlubGluZVNvdXJjZXM6dC5vcHRpb25zLnNvdXJjZU1hcElubGluZVNvdXJjZXMsbGluZToxLG91dHB1dDpbXSxvdXRwdXRNYXA6bmV3IHIsc291cmNlc0NvbnRlbnQ6dC5zb3VyY2VzQ29udGVudCxzcGFjZUFmdGVyQ2xvc2luZ0JyYWNlOnQub3B0aW9ucy5jb21wYXRpYmlsaXR5LnByb3BlcnRpZXMuc3BhY2VBZnRlckNsb3NpbmdCcmFjZSxzdG9yZTpvLHdyYXA6dC5vcHRpb25zLmZvcm1hdC53cmFwQXQ/YTpmdW5jdGlvbigpe319O3JldHVybiBpKG4sZSkse3NvdXJjZU1hcDpuLm91dHB1dE1hcCxzdHlsZXM6bi5vdXRwdXQuam9pbigiIil9fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuLi91dGlscy9pcy1yZW1vdGUtcmVzb3VyY2UiOjkzLCIuL2hlbHBlcnMiOjk3LF9wcm9jZXNzOjExMiwic291cmNlLW1hcCI6MTU1fV0sMTAxOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1uLmlzQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKToiW29iamVjdCBBcnJheV0iPT09dChlKX0sbi5pc0Jvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sbi5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxuLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxuLmlzTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sbi5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LG4uaXNTeW1ib2w9ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfSxuLmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSxuLmlzUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09dChlKX0sbi5pc09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfSxuLmlzRGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT10KGUpfSxuLmlzRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PXQoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcn0sbi5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfSxuLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGV8fCJzeW1ib2wiPT10eXBlb2YgZXx8dm9pZCAwPT09ZX0sbi5pc0J1ZmZlcj1lLmlzQnVmZmVyfSkuY2FsbCh0aGlzLHtpc0J1ZmZlcjplKCIuLi8uLi9pcy1idWZmZXIvaW5kZXguanMiKX0pfSx7Ii4uLy4uL2lzLWJ1ZmZlci9pbmRleC5qcyI6MTA3fV0sMTAyOltmdW5jdGlvbihlLHQsbil7dmFyIHU9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXt9O3JldHVybiB0LnByb3RvdHlwZT1lLG5ldyB0fSxhPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5wdXNoKG4pO3JldHVybiBufSxvPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19O2Z1bmN0aW9uIHIoKXt0aGlzLl9ldmVudHMmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCJfZXZlbnRzIil8fCh0aGlzLl9ldmVudHM9dShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9KCh0LmV4cG9ydHM9cikuRXZlbnRFbWl0dGVyPXIpLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgaSxzPTEwO3RyeXt2YXIgbD17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJ4Iix7dmFsdWU6MH0pLGk9MD09PWwueH1jYXRjaChlKXtpPSExfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIHZvaWQgMD09PWUuX21heExpc3RlbmVycz9yLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIGksbyxhO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKG89ZS5fZXZlbnRzKT8oby5uZXdMaXN0ZW5lciYmKGUuZW1pdCgibmV3TGlzdGVuZXIiLHQsbi5saXN0ZW5lcj9uLmxpc3RlbmVyOm4pLG89ZS5fZXZlbnRzKSxhPW9bdF0pOihvPWUuX2V2ZW50cz11KG51bGwpLGUuX2V2ZW50c0NvdW50PTApLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2E9b1t0XT1yP1tuLGFdOlthLG5dOnI/YS51bnNoaWZ0KG4pOmEucHVzaChuKSwhYS53YXJuZWQmJihpPWMoZSkpJiYwPGkmJmEubGVuZ3RoPmkpe2Eud2FybmVkPSEwO3ZhciBzPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK2EubGVuZ3RoKycgIicrU3RyaW5nKHQpKyciIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7cy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHMuZW1pdHRlcj1lLHMudHlwZT10LHMuY291bnQ9YS5sZW5ndGgsIm9iamVjdCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiJXM6ICVzIixzLm5hbWUscy5tZXNzYWdlKX19ZWxzZSBhPW9bdF09biwrK2UuX2V2ZW50c0NvdW50O3JldHVybiBlfWZ1bmN0aW9uIHAoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNlIDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdD0wO3Q8ZS5sZW5ndGg7Kyt0KWVbdF09YXJndW1lbnRzW3RdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsZSl9fWZ1bmN0aW9uIGgoZSx0LG4pe3ZhciByPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpufSxpPW8uY2FsbChwLHIpO3JldHVybiBpLmxpc3RlbmVyPW4sci53cmFwRm49aX1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcj1lLl9ldmVudHM7aWYoIXIpcmV0dXJuW107dmFyIGk9clt0XTtyZXR1cm4gaT8iZnVuY3Rpb24iPT10eXBlb2YgaT9uP1tpLmxpc3RlbmVyfHxpXTpbaV06bj9mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXT1lW25dLmxpc3RlbmVyfHxlW25dO3JldHVybiB0fShpKTpnKGksaS5sZW5ndGgpOltdfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9dGhpcy5fZXZlbnRzO2lmKHQpe3ZhciBuPXRbZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIDE7aWYobilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpbltyXT1lW3JdO3JldHVybiBufWk/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlfHxlPDB8fGUhPWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtzPWV9fSk6ci5kZWZhdWx0TWF4TGlzdGVuZXJzPXMsci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwfHxpc05hTihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzKX0sci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz0iZXJyb3IiPT09ZTtpZihhPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PWEuZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgmJih0PWFyZ3VtZW50c1sxXSksdCBpbnN0YW5jZW9mIEVycm9yKXRocm93IHQ7dmFyIHU9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrdCsiKSIpO3Rocm93IHUuY29udGV4dD10LHV9aWYoIShuPWFbZV0pKXJldHVybiExO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3N3aXRjaChyPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24oZSx0LG4pe2lmKHQpZS5jYWxsKG4pO2Vsc2UgZm9yKHZhciByPWUubGVuZ3RoLGk9ZyhlLHIpLG89MDtvPHI7KytvKWlbb10uY2FsbChuKX0obixsLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24oZSx0LG4scil7aWYodCllLmNhbGwobixyKTtlbHNlIGZvcih2YXIgaT1lLmxlbmd0aCxvPWcoZSxpKSxhPTA7YTxpOysrYSlvW2FdLmNhbGwobixyKX0obixsLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodCllLmNhbGwobixyLGkpO2Vsc2UgZm9yKHZhciBvPWUubGVuZ3RoLGE9ZyhlLG8pLHM9MDtzPG87KytzKWFbc10uY2FsbChuLHIsaSl9KG4sbCx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKHQpZS5jYWxsKG4scixpLG8pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLHM9ZyhlLGEpLHU9MDt1PGE7Kyt1KXNbdV0uY2FsbChuLHIsaSxvKX0obixsLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGk9bmV3IEFycmF5KHItMSksbz0xO288cjtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTshZnVuY3Rpb24oZSx0LG4scil7aWYodCllLmFwcGx5KG4scik7ZWxzZSBmb3IodmFyIGk9ZS5sZW5ndGgsbz1nKGUsaSksYT0wO2E8aTsrK2Epb1thXS5hcHBseShuLHIpfShuLGwsdGhpcyxpKX1yZXR1cm4hMH0sci5wcm90b3R5cGUub249ci5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZih0aGlzLGUsdCwhMSl9LHIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBmKHRoaXMsZSx0LCEwKX0sci5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24oZSxoKHRoaXMsZSx0KSksdGhpc30sci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKGUsaCh0aGlzLGUsdCkpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEobj1yW2VdKSlyZXR1cm4gdGhpcztpZihuPT09dHx8bi5saXN0ZW5lcj09PXQpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9dShudWxsKTooZGVsZXRlIHJbZV0sci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxuLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil7Zm9yKGk9LTEsbz1uLmxlbmd0aC0xOzA8PW87by0tKWlmKG5bb109PT10fHxuW29dLmxpc3RlbmVyPT09dCl7YT1uW29dLmxpc3RlbmVyLGk9bzticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/bi5zaGlmdCgpOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQscj1uKzEsaT1lLmxlbmd0aDtyPGk7bis9MSxyKz0xKWVbbl09ZVtyXTtlLnBvcCgpfShuLGkpLDE9PT1uLmxlbmd0aCYmKHJbZV09blswXSksci5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxhfHx0KX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZighKG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighbi5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz11KG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOm5bZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz11KG51bGwpOmRlbGV0ZSBuW2VdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgaSxvPWEobik7Zm9yKHI9MDtyPG8ubGVuZ3RoOysrcikicmVtb3ZlTGlzdGVuZXIiIT09KGk9b1tyXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGkpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9dShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9bltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodClmb3Iocj10Lmxlbmd0aC0xOzA8PXI7ci0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W3JdKTtyZXR1cm4gdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBkKHRoaXMsZSwhMCl9LHIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gZCh0aGlzLGUsITEpfSxyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5saXN0ZW5lckNvdW50P2UubGlzdGVuZXJDb3VudCh0KTptLmNhbGwoZSx0KX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1tLHIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLl9ldmVudHNDb3VudD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSwxMDM6W2Z1bmN0aW9uKGUsQixSKXsoZnVuY3Rpb24oVCl7IWZ1bmN0aW9uKGUpe3ZhciB0PSJvYmplY3QiPT10eXBlb2YgUiYmUixuPSJvYmplY3QiPT10eXBlb2YgQiYmQiYmQi5leHBvcnRzPT10JiZCLHI9Im9iamVjdCI9PXR5cGVvZiBUJiZUO3IuZ2xvYmFsIT09ciYmci53aW5kb3chPT1yfHwoZT1yKTt2YXIgcz0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csdT0vW1x4MDEtXHg3Rl0vZyxsPS9bXHgwMS1cdFx4MEJcZlx4MEUtXHgxRlx4N0ZceDgxXHg4RFx4OEZceDkwXHg5RFx4QTAtXHVGRkZGXS9nLGM9LzxcdTIwRDJ8PVx1MjBFNXw+XHUyMEQyfFx1MjA1Rlx1MjAwQXxcdTIxOURcdTAzMzh8XHUyMjAyXHUwMzM4fFx1MjIyMFx1MjBEMnxcdTIyMjlcdUZFMDB8XHUyMjJBXHVGRTAwfFx1MjIzQ1x1MjBEMnxcdTIyM0RcdTAzMzF8XHUyMjNFXHUwMzMzfFx1MjI0Mlx1MDMzOHxcdTIyNEJcdTAzMzh8XHUyMjREXHUyMEQyfFx1MjI0RVx1MDMzOHxcdTIyNEZcdTAzMzh8XHUyMjUwXHUwMzM4fFx1MjI2MVx1MjBFNXxcdTIyNjRcdTIwRDJ8XHUyMjY1XHUyMEQyfFx1MjI2Nlx1MDMzOHxcdTIyNjdcdTAzMzh8XHUyMjY4XHVGRTAwfFx1MjI2OVx1RkUwMHxcdTIyNkFcdTAzMzh8XHUyMjZBXHUyMEQyfFx1MjI2Qlx1MDMzOHxcdTIyNkJcdTIwRDJ8XHUyMjdGXHUwMzM4fFx1MjI4Mlx1MjBEMnxcdTIyODNcdTIwRDJ8XHUyMjhBXHVGRTAwfFx1MjI4Qlx1RkUwMHxcdTIyOEZcdTAzMzh8XHUyMjkwXHUwMzM4fFx1MjI5M1x1RkUwMHxcdTIyOTRcdUZFMDB8XHUyMkI0XHUyMEQyfFx1MjJCNVx1MjBEMnxcdTIyRDhcdTAzMzh8XHUyMkQ5XHUwMzM4fFx1MjJEQVx1RkUwMHxcdTIyREJcdUZFMDB8XHUyMkY1XHUwMzM4fFx1MjJGOVx1MDMzOHxcdTI5MzNcdTAzMzh8XHUyOUNGXHUwMzM4fFx1MjlEMFx1MDMzOHxcdTJBNkRcdTAzMzh8XHUyQTcwXHUwMzM4fFx1MkE3RFx1MDMzOHxcdTJBN0VcdTAzMzh8XHUyQUExXHUwMzM4fFx1MkFBMlx1MDMzOHxcdTJBQUNcdUZFMDB8XHUyQUFEXHVGRTAwfFx1MkFBRlx1MDMzOHxcdTJBQjBcdTAzMzh8XHUyQUM1XHUwMzM4fFx1MkFDNlx1MDMzOHxcdTJBQ0JcdUZFMDB8XHUyQUNDXHVGRTAwfFx1MkFGRFx1MjBFNXxbXHhBMC1cdTAxMTNcdTAxMTYtXHUwMTIyXHUwMTI0LVx1MDEyQlx1MDEyRS1cdTAxNERcdTAxNTAtXHUwMTdFXHUwMTkyXHUwMUI1XHUwMUY1XHUwMjM3XHUwMkM2XHUwMkM3XHUwMkQ4LVx1MDJERFx1MDMxMVx1MDM5MS1cdTAzQTFcdTAzQTMtXHUwM0E5XHUwM0IxLVx1MDNDOVx1MDNEMVx1MDNEMlx1MDNENVx1MDNENlx1MDNEQ1x1MDNERFx1MDNGMFx1MDNGMVx1MDNGNVx1MDNGNlx1MDQwMS1cdTA0MENcdTA0MEUtXHUwNDRGXHUwNDUxLVx1MDQ1Q1x1MDQ1RVx1MDQ1Rlx1MjAwMi1cdTIwMDVcdTIwMDctXHUyMDEwXHUyMDEzLVx1MjAxNlx1MjAxOC1cdTIwMUFcdTIwMUMtXHUyMDFFXHUyMDIwLVx1MjAyMlx1MjAyNVx1MjAyNlx1MjAzMC1cdTIwMzVcdTIwMzlcdTIwM0FcdTIwM0VcdTIwNDFcdTIwNDNcdTIwNDRcdTIwNEZcdTIwNTdcdTIwNUYtXHUyMDYzXHUyMEFDXHUyMERCXHUyMERDXHUyMTAyXHUyMTA1XHUyMTBBLVx1MjExM1x1MjExNS1cdTIxMUVcdTIxMjJcdTIxMjRcdTIxMjctXHUyMTI5XHUyMTJDXHUyMTJEXHUyMTJGLVx1MjEzMVx1MjEzMy1cdTIxMzhcdTIxNDUtXHUyMTQ4XHUyMTUzLVx1MjE1RVx1MjE5MC1cdTIxOUJcdTIxOUQtXHUyMUE3XHUyMUE5LVx1MjFBRVx1MjFCMC1cdTIxQjNcdTIxQjUtXHUyMUI3XHUyMUJBLVx1MjFEQlx1MjFERFx1MjFFNFx1MjFFNVx1MjFGNVx1MjFGRC1cdTIyMDVcdTIyMDctXHUyMjA5XHUyMjBCXHUyMjBDXHUyMjBGLVx1MjIxNFx1MjIxNi1cdTIyMThcdTIyMUFcdTIyMUQtXHUyMjM4XHUyMjNBLVx1MjI1N1x1MjI1OVx1MjI1QVx1MjI1Q1x1MjI1Ri1cdTIyNjJcdTIyNjQtXHUyMjhCXHUyMjhELVx1MjI5Qlx1MjI5RC1cdTIyQTVcdTIyQTctXHUyMkIwXHUyMkIyLVx1MjJCQlx1MjJCRC1cdTIyREJcdTIyREUtXHUyMkUzXHUyMkU2LVx1MjJGN1x1MjJGOS1cdTIyRkVcdTIzMDVcdTIzMDZcdTIzMDgtXHUyMzEwXHUyMzEyXHUyMzEzXHUyMzE1XHUyMzE2XHUyMzFDLVx1MjMxRlx1MjMyMlx1MjMyM1x1MjMyRFx1MjMyRVx1MjMzNlx1MjMzRFx1MjMzRlx1MjM3Q1x1MjNCMFx1MjNCMVx1MjNCNC1cdTIzQjZcdTIzREMtXHUyM0RGXHUyM0UyXHUyM0U3XHUyNDIzXHUyNEM4XHUyNTAwXHUyNTAyXHUyNTBDXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFDXHUyNTI0XHUyNTJDXHUyNTM0XHUyNTNDXHUyNTUwLVx1MjU2Q1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU5MS1cdTI1OTNcdTI1QTFcdTI1QUFcdTI1QUJcdTI1QURcdTI1QUVcdTI1QjFcdTI1QjMtXHUyNUI1XHUyNUI4XHUyNUI5XHUyNUJELVx1MjVCRlx1MjVDMlx1MjVDM1x1MjVDQVx1MjVDQlx1MjVFQ1x1MjVFRlx1MjVGOC1cdTI1RkNcdTI2MDVcdTI2MDZcdTI2MEVcdTI2NDBcdTI2NDJcdTI2NjBcdTI2NjNcdTI2NjVcdTI2NjZcdTI2NkFcdTI2NkQtXHUyNjZGXHUyNzEzXHUyNzE3XHUyNzIwXHUyNzM2XHUyNzU4XHUyNzcyXHUyNzczXHUyN0M4XHUyN0M5XHUyN0U2LVx1MjdFRFx1MjdGNS1cdTI3RkFcdTI3RkNcdTI3RkZcdTI5MDItXHUyOTA1XHUyOTBDLVx1MjkxM1x1MjkxNlx1MjkxOS1cdTI5MjBcdTI5MjMtXHUyOTJBXHUyOTMzXHUyOTM1LVx1MjkzOVx1MjkzQ1x1MjkzRFx1Mjk0NVx1Mjk0OC1cdTI5NEJcdTI5NEUtXHUyOTc2XHUyOTc4XHUyOTc5XHUyOTdCLVx1Mjk3Rlx1Mjk4NVx1Mjk4Nlx1Mjk4Qi1cdTI5OTZcdTI5OUFcdTI5OUNcdTI5OURcdTI5QTQtXHUyOUI3XHUyOUI5XHUyOUJCXHUyOUJDXHUyOUJFLVx1MjlDNVx1MjlDOVx1MjlDRC1cdTI5RDBcdTI5REMtXHUyOURFXHUyOUUzLVx1MjlFNVx1MjlFQlx1MjlGNFx1MjlGNlx1MkEwMC1cdTJBMDJcdTJBMDRcdTJBMDZcdTJBMENcdTJBMERcdTJBMTAtXHUyQTE3XHUyQTIyLVx1MkEyN1x1MkEyOVx1MkEyQVx1MkEyRC1cdTJBMzFcdTJBMzMtXHUyQTNDXHUyQTNGXHUyQTQwXHUyQTQyLVx1MkE0RFx1MkE1MFx1MkE1My1cdTJBNThcdTJBNUEtXHUyQTVEXHUyQTVGXHUyQTY2XHUyQTZBXHUyQTZELVx1MkE3NVx1MkE3Ny1cdTJBOUFcdTJBOUQtXHUyQUEyXHUyQUE0LVx1MkFCMFx1MkFCMy1cdTJBQzhcdTJBQ0JcdTJBQ0NcdTJBQ0YtXHUyQURCXHUyQUU0XHUyQUU2LVx1MkFFOVx1MkFFQi1cdTJBRjNcdTJBRkRcdUZCMDAtXHVGQjA0XXxcdUQ4MzVbXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1RENDRlx1REQwNFx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERDZCXS9nLGY9eyLCrSI6InNoeSIsIuKAjCI6Inp3bmoiLCLigI0iOiJ6d2oiLCLigI4iOiJscm0iLCLigaMiOiJpYyIsIuKBoiI6Iml0Iiwi4oGhIjoiYWYiLCLigI8iOiJybG0iLCLigIsiOiJaZXJvV2lkdGhTcGFjZSIsIuKBoCI6Ik5vQnJlYWsiLCLMkSI6IkRvd25CcmV2ZSIsIuKDmyI6InRkb3QiLCLig5wiOiJEb3REb3QiLCJcdCI6IlRhYiIsIlxuIjoiTmV3TGluZSIsIuKAiCI6InB1bmNzcCIsIuKBnyI6Ik1lZGl1bVNwYWNlIiwi4oCJIjoidGhpbnNwIiwi4oCKIjoiaGFpcnNwIiwi4oCEIjoiZW1zcDEzIiwi4oCCIjoiZW5zcCIsIuKAhSI6ImVtc3AxNCIsIuKAgyI6ImVtc3AiLCLigIciOiJudW1zcCIsIsKgIjoibmJzcCIsIuKBn+KAiiI6IlRoaWNrU3BhY2UiLCLigL4iOiJvbGluZSIsXzoibG93YmFyIiwi4oCQIjoiZGFzaCIsIuKAkyI6Im5kYXNoIiwi4oCUIjoibWRhc2giLCLigJUiOiJob3JiYXIiLCIsIjoiY29tbWEiLCI7Ijoic2VtaSIsIuKBjyI6ImJzZW1pIiwiOiI6ImNvbG9uIiwi4qm0IjoiQ29sb25lIiwiISI6ImV4Y2wiLCLCoSI6ImlleGNsIiwiPyI6InF1ZXN0Iiwiwr8iOiJpcXVlc3QiLCIuIjoicGVyaW9kIiwi4oClIjoibmxkciIsIuKApiI6Im1sZHIiLCLCtyI6Im1pZGRvdCIsIiciOiJhcG9zIiwi4oCYIjoibHNxdW8iLCLigJkiOiJyc3F1byIsIuKAmiI6InNicXVvIiwi4oC5IjoibHNhcXVvIiwi4oC6IjoicnNhcXVvIiwnIic6InF1b3QiLCLigJwiOiJsZHF1byIsIuKAnSI6InJkcXVvIiwi4oCeIjoiYmRxdW8iLCLCqyI6ImxhcXVvIiwiwrsiOiJyYXF1byIsIigiOiJscGFyIiwiKSI6InJwYXIiLCJbIjoibHNxYiIsIl0iOiJyc3FiIiwieyI6ImxjdWIiLCJ9IjoicmN1YiIsIuKMiCI6ImxjZWlsIiwi4oyJIjoicmNlaWwiLCLijIoiOiJsZmxvb3IiLCLijIsiOiJyZmxvb3IiLCLipoUiOiJsb3BhciIsIuKmhiI6InJvcGFyIiwi4qaLIjoibGJya2UiLCLipowiOiJyYnJrZSIsIuKmjSI6ImxicmtzbHUiLCLipo4iOiJyYnJrc2xkIiwi4qaPIjoibGJya3NsZCIsIuKmkCI6InJicmtzbHUiLCLippEiOiJsYW5nZCIsIuKmkiI6InJhbmdkIiwi4qaTIjoibHBhcmx0Iiwi4qaUIjoicnBhcmd0Iiwi4qaVIjoiZ3RsUGFyIiwi4qaWIjoibHRyUGFyIiwi4p+mIjoibG9icmsiLCLin6ciOiJyb2JyayIsIuKfqCI6ImxhbmciLCLin6kiOiJyYW5nIiwi4p+qIjoiTGFuZyIsIuKfqyI6IlJhbmciLCLin6wiOiJsb2FuZyIsIuKfrSI6InJvYW5nIiwi4p2yIjoibGJicmsiLCLinbMiOiJyYmJyayIsIuKAliI6IlZlcnQiLCLCpyI6InNlY3QiLCLCtiI6InBhcmEiLCJAIjoiY29tbWF0IiwiKiI6ImFzdCIsIi8iOiJzb2wiLHVuZGVmaW5lZDpudWxsLCImIjoiYW1wIiwiIyI6Im51bSIsIiUiOiJwZXJjbnQiLCLigLAiOiJwZXJtaWwiLCLigLEiOiJwZXJ0ZW5rIiwi4oCgIjoiZGFnZ2VyIiwi4oChIjoiRGFnZ2VyIiwi4oCiIjoiYnVsbCIsIuKBgyI6Imh5YnVsbCIsIuKAsiI6InByaW1lIiwi4oCzIjoiUHJpbWUiLCLigLQiOiJ0cHJpbWUiLCLigZciOiJxcHJpbWUiLCLigLUiOiJicHJpbWUiLCLigYEiOiJjYXJldCIsImAiOiJncmF2ZSIsIsK0IjoiYWN1dGUiLCLLnCI6InRpbGRlIiwiXiI6IkhhdCIsIsKvIjoibWFjciIsIsuYIjoiYnJldmUiLCLLmSI6ImRvdCIsIsKoIjoiZGllIiwiy5oiOiJyaW5nIiwiy50iOiJkYmxhYyIsIsK4IjoiY2VkaWwiLCLLmyI6Im9nb24iLCLLhiI6ImNpcmMiLCLLhyI6ImNhcm9uIiwiwrAiOiJkZWciLCLCqSI6ImNvcHkiLCLCriI6InJlZyIsIuKElyI6ImNvcHlzciIsIuKEmCI6IndwIiwi4oSeIjoicngiLCLihKciOiJtaG8iLCLihKkiOiJpaW90YSIsIuKGkCI6ImxhcnIiLCLihpoiOiJubGFyciIsIuKGkiI6InJhcnIiLCLihpsiOiJucmFyciIsIuKGkSI6InVhcnIiLCLihpMiOiJkYXJyIiwi4oaUIjoiaGFyciIsIuKGriI6Im5oYXJyIiwi4oaVIjoidmFyciIsIuKGliI6Im53YXJyIiwi4oaXIjoibmVhcnIiLCLihpgiOiJzZWFyciIsIuKGmSI6InN3YXJyIiwi4oadIjoicmFycnciLCLihp3MuCI6Im5yYXJydyIsIuKGniI6IkxhcnIiLCLihp8iOiJVYXJyIiwi4oagIjoiUmFyciIsIuKGoSI6IkRhcnIiLCLihqIiOiJsYXJydGwiLCLihqMiOiJyYXJydGwiLCLihqQiOiJtYXBzdG9sZWZ0Iiwi4oalIjoibWFwc3RvdXAiLCLihqYiOiJtYXAiLCLihqciOiJtYXBzdG9kb3duIiwi4oapIjoibGFycmhrIiwi4oaqIjoicmFycmhrIiwi4oarIjoibGFycmxwIiwi4oasIjoicmFycmxwIiwi4oatIjoiaGFycnciLCLihrAiOiJsc2giLCLihrEiOiJyc2giLCLihrIiOiJsZHNoIiwi4oazIjoicmRzaCIsIuKGtSI6ImNyYXJyIiwi4oa2IjoiY3VsYXJyIiwi4oa3IjoiY3VyYXJyIiwi4oa6Ijoib2xhcnIiLCLihrsiOiJvcmFyciIsIuKGvCI6ImxoYXJ1Iiwi4oa9IjoibGhhcmQiLCLihr4iOiJ1aGFyciIsIuKGvyI6InVoYXJsIiwi4oeAIjoicmhhcnUiLCLih4EiOiJyaGFyZCIsIuKHgiI6ImRoYXJyIiwi4oeDIjoiZGhhcmwiLCLih4QiOiJybGFyciIsIuKHhSI6InVkYXJyIiwi4oeGIjoibHJhcnIiLCLih4ciOiJsbGFyciIsIuKHiCI6InV1YXJyIiwi4oeJIjoicnJhcnIiLCLih4oiOiJkZGFyciIsIuKHiyI6ImxyaGFyIiwi4oeMIjoicmxoYXIiLCLih5AiOiJsQXJyIiwi4oeNIjoibmxBcnIiLCLih5EiOiJ1QXJyIiwi4oeSIjoickFyciIsIuKHjyI6Im5yQXJyIiwi4oeTIjoiZEFyciIsIuKHlCI6ImlmZiIsIuKHjiI6Im5oQXJyIiwi4oeVIjoidkFyciIsIuKHliI6Im53QXJyIiwi4oeXIjoibmVBcnIiLCLih5giOiJzZUFyciIsIuKHmSI6InN3QXJyIiwi4oeaIjoibEFhcnIiLCLih5siOiJyQWFyciIsIuKHnSI6InppZ3JhcnIiLCLih6QiOiJsYXJyYiIsIuKHpSI6InJhcnJiIiwi4oe1IjoiZHVhcnIiLCLih70iOiJsb2FyciIsIuKHviI6InJvYXJyIiwi4oe/IjoiaG9hcnIiLCLiiIAiOiJmb3JhbGwiLCLiiIEiOiJjb21wIiwi4oiCIjoicGFydCIsIuKIgsy4IjoibnBhcnQiLCLiiIMiOiJleGlzdCIsIuKIhCI6Im5leGlzdCIsIuKIhSI6ImVtcHR5Iiwi4oiHIjoiRGVsIiwi4oiIIjoiaW4iLCLiiIkiOiJub3RpbiIsIuKIiyI6Im5pIiwi4oiMIjoibm90bmkiLCLPtiI6ImJlcHNpIiwi4oiPIjoicHJvZCIsIuKIkCI6ImNvcHJvZCIsIuKIkSI6InN1bSIsIisiOiJwbHVzIiwiwrEiOiJwbSIsIsO3IjoiZGl2Iiwiw5ciOiJ0aW1lcyIsIjwiOiJsdCIsIuKJriI6Im5sdCIsIjzig5IiOiJudmx0IiwiPSI6ImVxdWFscyIsIuKJoCI6Im5lIiwiPeKDpSI6ImJuZSIsIuKptSI6IkVxdWFsIiwiPiI6Imd0Iiwi4omvIjoibmd0IiwiPuKDkiI6Im52Z3QiLCLCrCI6Im5vdCIsInwiOiJ2ZXJ0IiwiwqYiOiJicnZiYXIiLCLiiJIiOiJtaW51cyIsIuKIkyI6Im1wIiwi4oiUIjoicGx1c2RvIiwi4oGEIjoiZnJhc2wiLCLiiJYiOiJzZXRtbiIsIuKIlyI6Imxvd2FzdCIsIuKImCI6ImNvbXBmbiIsIuKImiI6IlNxcnQiLCLiiJ0iOiJwcm9wIiwi4oieIjoiaW5maW4iLCLiiJ8iOiJhbmdydCIsIuKIoCI6ImFuZyIsIuKIoOKDkiI6Im5hbmciLCLiiKEiOiJhbmdtc2QiLCLiiKIiOiJhbmdzcGgiLCLiiKMiOiJtaWQiLCLiiKQiOiJubWlkIiwi4oilIjoicGFyIiwi4oimIjoibnBhciIsIuKIpyI6ImFuZCIsIuKIqCI6Im9yIiwi4oipIjoiY2FwIiwi4oip77iAIjoiY2FwcyIsIuKIqiI6ImN1cCIsIuKIqu+4gCI6ImN1cHMiLCLiiKsiOiJpbnQiLCLiiKwiOiJJbnQiLCLiiK0iOiJ0aW50Iiwi4qiMIjoicWludCIsIuKIriI6Im9pbnQiLCLiiK8iOiJDb25pbnQiLCLiiLAiOiJDY29uaW50Iiwi4oixIjoiY3dpbnQiLCLiiLIiOiJjd2NvbmludCIsIuKIsyI6ImF3Y29uaW50Iiwi4oi0IjoidGhlcmU0Iiwi4oi1IjoiYmVjYXVzIiwi4oi2IjoicmF0aW8iLCLiiLciOiJDb2xvbiIsIuKIuCI6Im1pbnVzZCIsIuKIuiI6Im1ERG90Iiwi4oi7IjoiaG9tdGh0Iiwi4oi8Ijoic2ltIiwi4omBIjoibnNpbSIsIuKIvOKDkiI6Im52c2ltIiwi4oi9IjoiYnNpbSIsIuKIvcyxIjoicmFjZSIsIuKIviI6ImFjIiwi4oi+zLMiOiJhY0UiLCLiiL8iOiJhY2QiLCLiiYAiOiJ3ciIsIuKJgiI6ImVzaW0iLCLiiYLMuCI6Im5lc2ltIiwi4omDIjoic2ltZSIsIuKJhCI6Im5zaW1lIiwi4omFIjoiY29uZyIsIuKJhyI6Im5jb25nIiwi4omGIjoic2ltbmUiLCLiiYgiOiJhcCIsIuKJiSI6Im5hcCIsIuKJiiI6ImFwZSIsIuKJiyI6ImFwaWQiLCLiiYvMuCI6Im5hcGlkIiwi4omMIjoiYmNvbmciLCLiiY0iOiJDdXBDYXAiLCLiia0iOiJOb3RDdXBDYXAiLCLiiY3ig5IiOiJudmFwIiwi4omOIjoiYnVtcCIsIuKJjsy4IjoibmJ1bXAiLCLiiY8iOiJidW1wZSIsIuKJj8y4IjoibmJ1bXBlIiwi4omQIjoiZG90ZXEiLCLiiZDMuCI6Im5lZG90Iiwi4omRIjoiZURvdCIsIuKJkiI6ImVmRG90Iiwi4omTIjoiZXJEb3QiLCLiiZQiOiJjb2xvbmUiLCLiiZUiOiJlY29sb24iLCLiiZYiOiJlY2lyIiwi4omXIjoiY2lyZSIsIuKJmSI6IndlZGdlcSIsIuKJmiI6InZlZWVxIiwi4omcIjoidHJpZSIsIuKJnyI6ImVxdWVzdCIsIuKJoSI6ImVxdWl2Iiwi4omiIjoibmVxdWl2Iiwi4omh4oOlIjoiYm5lcXVpdiIsIuKJpCI6ImxlIiwi4omwIjoibmxlIiwi4omk4oOSIjoibnZsZSIsIuKJpSI6ImdlIiwi4omxIjoibmdlIiwi4oml4oOSIjoibnZnZSIsIuKJpiI6ImxFIiwi4ommzLgiOiJubEUiLCLiiaciOiJnRSIsIuKJp8y4IjoibmdFIiwi4omo77iAIjoibHZuRSIsIuKJqCI6ImxuRSIsIuKJqSI6ImduRSIsIuKJqe+4gCI6Imd2bkUiLCLiiaoiOiJsbCIsIuKJqsy4Ijoibkx0diIsIuKJquKDkiI6Im5MdCIsIuKJqyI6ImdnIiwi4omrzLgiOiJuR3R2Iiwi4omr4oOSIjoibkd0Iiwi4omsIjoidHdpeHQiLCLiibIiOiJsc2ltIiwi4om0IjoibmxzaW0iLCLiibMiOiJnc2ltIiwi4om1IjoibmdzaW0iLCLiibYiOiJsZyIsIuKJuCI6Im50bGciLCLiibciOiJnbCIsIuKJuSI6Im50Z2wiLCLiiboiOiJwciIsIuKKgCI6Im5wciIsIuKJuyI6InNjIiwi4oqBIjoibnNjIiwi4om8IjoicHJjdWUiLCLii6AiOiJucHJjdWUiLCLiib0iOiJzY2N1ZSIsIuKLoSI6Im5zY2N1ZSIsIuKJviI6InByc2ltIiwi4om/Ijoic2NzaW0iLCLiib/MuCI6Ik5vdFN1Y2NlZWRzVGlsZGUiLCLiioIiOiJzdWIiLCLiioQiOiJuc3ViIiwi4oqC4oOSIjoidm5zdWIiLCLiioMiOiJzdXAiLCLiioUiOiJuc3VwIiwi4oqD4oOSIjoidm5zdXAiLCLiioYiOiJzdWJlIiwi4oqIIjoibnN1YmUiLCLiiociOiJzdXBlIiwi4oqJIjoibnN1cGUiLCLiiorvuIAiOiJ2c3VibmUiLCLiiooiOiJzdWJuZSIsIuKKi++4gCI6InZzdXBuZSIsIuKKiyI6InN1cG5lIiwi4oqNIjoiY3VwZG90Iiwi4oqOIjoidXBsdXMiLCLiio8iOiJzcXN1YiIsIuKKj8y4IjoiTm90U3F1YXJlU3Vic2V0Iiwi4oqQIjoic3FzdXAiLCLiipDMuCI6Ik5vdFNxdWFyZVN1cGVyc2V0Iiwi4oqRIjoic3FzdWJlIiwi4ouiIjoibnNxc3ViZSIsIuKKkiI6InNxc3VwZSIsIuKLoyI6Im5zcXN1cGUiLCLiipMiOiJzcWNhcCIsIuKKk++4gCI6InNxY2FwcyIsIuKKlCI6InNxY3VwIiwi4oqU77iAIjoic3FjdXBzIiwi4oqVIjoib3BsdXMiLCLiipYiOiJvbWludXMiLCLiipciOiJvdGltZXMiLCLiipgiOiJvc29sIiwi4oqZIjoib2RvdCIsIuKKmiI6Im9jaXIiLCLiipsiOiJvYXN0Iiwi4oqdIjoib2Rhc2giLCLiip4iOiJwbHVzYiIsIuKKnyI6Im1pbnVzYiIsIuKKoCI6InRpbWVzYiIsIuKKoSI6InNkb3RiIiwi4oqiIjoidmRhc2giLCLiiqwiOiJudmRhc2giLCLiiqMiOiJkYXNodiIsIuKKpCI6InRvcCIsIuKKpSI6ImJvdCIsIuKKpyI6Im1vZGVscyIsIuKKqCI6InZEYXNoIiwi4oqtIjoibnZEYXNoIiwi4oqpIjoiVmRhc2giLCLiiq4iOiJuVmRhc2giLCLiiqoiOiJWdmRhc2giLCLiiqsiOiJWRGFzaCIsIuKKryI6Im5WRGFzaCIsIuKKsCI6InBydXJlbCIsIuKKsiI6InZsdHJpIiwi4ouqIjoibmx0cmkiLCLiirMiOiJ2cnRyaSIsIuKLqyI6Im5ydHJpIiwi4oq0IjoibHRyaWUiLCLii6wiOiJubHRyaWUiLCLiirTig5IiOiJudmx0cmllIiwi4oq1IjoicnRyaWUiLCLii60iOiJucnRyaWUiLCLiirXig5IiOiJudnJ0cmllIiwi4oq2Ijoib3JpZ29mIiwi4oq3IjoiaW1vZiIsIuKKuCI6Im11bWFwIiwi4oq5IjoiaGVyY29uIiwi4oq6IjoiaW50Y2FsIiwi4oq7IjoidmVlYmFyIiwi4oq9IjoiYmFydmVlIiwi4oq+IjoiYW5ncnR2YiIsIuKKvyI6ImxydHJpIiwi4ouAIjoiV2VkZ2UiLCLii4EiOiJWZWUiLCLii4IiOiJ4Y2FwIiwi4ouDIjoieGN1cCIsIuKLhCI6ImRpYW0iLCLii4UiOiJzZG90Iiwi4ouGIjoiU3RhciIsIuKLhyI6ImRpdm9ueCIsIuKLiCI6ImJvd3RpZSIsIuKLiSI6Imx0aW1lcyIsIuKLiiI6InJ0aW1lcyIsIuKLiyI6Imx0aHJlZSIsIuKLjCI6InJ0aHJlZSIsIuKLjSI6ImJzaW1lIiwi4ouOIjoiY3V2ZWUiLCLii48iOiJjdXdlZCIsIuKLkCI6IlN1YiIsIuKLkSI6IlN1cCIsIuKLkiI6IkNhcCIsIuKLkyI6IkN1cCIsIuKLlCI6ImZvcmsiLCLii5UiOiJlcGFyIiwi4ouWIjoibHRkb3QiLCLii5ciOiJndGRvdCIsIuKLmCI6IkxsIiwi4ouYzLgiOiJuTGwiLCLii5kiOiJHZyIsIuKLmcy4IjoibkdnIiwi4oua77iAIjoibGVzZyIsIuKLmiI6ImxlZyIsIuKLmyI6ImdlbCIsIuKLm++4gCI6Imdlc2wiLCLii54iOiJjdWVwciIsIuKLnyI6ImN1ZXNjIiwi4oumIjoibG5zaW0iLCLii6ciOiJnbnNpbSIsIuKLqCI6InBybnNpbSIsIuKLqSI6InNjbnNpbSIsIuKLriI6InZlbGxpcCIsIuKLryI6ImN0ZG90Iiwi4ouwIjoidXRkb3QiLCLii7EiOiJkdGRvdCIsIuKLsiI6ImRpc2luIiwi4ouzIjoiaXNpbnN2Iiwi4ou0IjoiaXNpbnMiLCLii7UiOiJpc2luZG90Iiwi4ou1zLgiOiJub3RpbmRvdCIsIuKLtiI6Im5vdGludmMiLCLii7ciOiJub3RpbnZiIiwi4ou5IjoiaXNpbkUiLCLii7nMuCI6Im5vdGluRSIsIuKLuiI6Im5pc2QiLCLii7siOiJ4bmlzIiwi4ou8IjoibmlzIiwi4ou9Ijoibm90bml2YyIsIuKLviI6Im5vdG5pdmIiLCLijIUiOiJiYXJ3ZWQiLCLijIYiOiJCYXJ3ZWQiLCLijIwiOiJkcmNyb3AiLCLijI0iOiJkbGNyb3AiLCLijI4iOiJ1cmNyb3AiLCLijI8iOiJ1bGNyb3AiLCLijJAiOiJibm90Iiwi4oySIjoicHJvZmxpbmUiLCLijJMiOiJwcm9mc3VyZiIsIuKMlSI6InRlbHJlYyIsIuKMliI6InRhcmdldCIsIuKMnCI6InVsY29ybiIsIuKMnSI6InVyY29ybiIsIuKMniI6ImRsY29ybiIsIuKMnyI6ImRyY29ybiIsIuKMoiI6ImZyb3duIiwi4oyjIjoic21pbGUiLCLijK0iOiJjeWxjdHkiLCLijK4iOiJwcm9mYWxhciIsIuKMtiI6InRvcGJvdCIsIuKMvSI6Im92YmFyIiwi4oy/Ijoic29sYmFyIiwi4o28IjoiYW5nemFyciIsIuKOsCI6Imxtb3VzdCIsIuKOsSI6InJtb3VzdCIsIuKOtCI6InRicmsiLCLijrUiOiJiYnJrIiwi4o62IjoiYmJya3RicmsiLCLij5wiOiJPdmVyUGFyZW50aGVzaXMiLCLij50iOiJVbmRlclBhcmVudGhlc2lzIiwi4o+eIjoiT3ZlckJyYWNlIiwi4o+fIjoiVW5kZXJCcmFjZSIsIuKPoiI6InRycGV6aXVtIiwi4o+nIjoiZWxpbnRlcnMiLCLikKMiOiJibGFuayIsIuKUgCI6ImJveGgiLCLilIIiOiJib3h2Iiwi4pSMIjoiYm94ZHIiLCLilJAiOiJib3hkbCIsIuKUlCI6ImJveHVyIiwi4pSYIjoiYm94dWwiLCLilJwiOiJib3h2ciIsIuKUpCI6ImJveHZsIiwi4pSsIjoiYm94aGQiLCLilLQiOiJib3hodSIsIuKUvCI6ImJveHZoIiwi4pWQIjoiYm94SCIsIuKVkSI6ImJveFYiLCLilZIiOiJib3hkUiIsIuKVkyI6ImJveERyIiwi4pWUIjoiYm94RFIiLCLilZUiOiJib3hkTCIsIuKVliI6ImJveERsIiwi4pWXIjoiYm94REwiLCLilZgiOiJib3h1UiIsIuKVmSI6ImJveFVyIiwi4pWaIjoiYm94VVIiLCLilZsiOiJib3h1TCIsIuKVnCI6ImJveFVsIiwi4pWdIjoiYm94VUwiLCLilZ4iOiJib3h2UiIsIuKVnyI6ImJveFZyIiwi4pWgIjoiYm94VlIiLCLilaEiOiJib3h2TCIsIuKVoiI6ImJveFZsIiwi4pWjIjoiYm94VkwiLCLilaQiOiJib3hIZCIsIuKVpSI6ImJveGhEIiwi4pWmIjoiYm94SEQiLCLilaciOiJib3hIdSIsIuKVqCI6ImJveGhVIiwi4pWpIjoiYm94SFUiLCLilaoiOiJib3h2SCIsIuKVqyI6ImJveFZoIiwi4pWsIjoiYm94VkgiLCLiloAiOiJ1aGJsayIsIuKWhCI6ImxoYmxrIiwi4paIIjoiYmxvY2siLCLilpEiOiJibGsxNCIsIuKWkiI6ImJsazEyIiwi4paTIjoiYmxrMzQiLCLilqEiOiJzcXUiLCLilqoiOiJzcXVmIiwi4parIjoiRW1wdHlWZXJ5U21hbGxTcXVhcmUiLCLilq0iOiJyZWN0Iiwi4pauIjoibWFya2VyIiwi4paxIjoiZmx0bnMiLCLilrMiOiJ4dXRyaSIsIuKWtCI6InV0cmlmIiwi4pa1IjoidXRyaSIsIuKWuCI6InJ0cmlmIiwi4pa5IjoicnRyaSIsIuKWvSI6InhkdHJpIiwi4pa+IjoiZHRyaWYiLCLilr8iOiJkdHJpIiwi4peCIjoibHRyaWYiLCLil4MiOiJsdHJpIiwi4peKIjoibG96Iiwi4peLIjoiY2lyIiwi4pesIjoidHJpZG90Iiwi4pevIjoieGNpcmMiLCLil7giOiJ1bHRyaSIsIuKXuSI6InVydHJpIiwi4pe6IjoibGx0cmkiLCLil7siOiJFbXB0eVNtYWxsU3F1YXJlIiwi4pe8IjoiRmlsbGVkU21hbGxTcXVhcmUiLCLimIUiOiJzdGFyZiIsIuKYhiI6InN0YXIiLCLimI4iOiJwaG9uZSIsIuKZgCI6ImZlbWFsZSIsIuKZgiI6Im1hbGUiLCLimaAiOiJzcGFkZXMiLCLimaMiOiJjbHVicyIsIuKZpSI6ImhlYXJ0cyIsIuKZpiI6ImRpYW1zIiwi4pmqIjoic3VuZyIsIuKckyI6ImNoZWNrIiwi4pyXIjoiY3Jvc3MiLCLinKAiOiJtYWx0Iiwi4py2Ijoic2V4dCIsIuKdmCI6IlZlcnRpY2FsU2VwYXJhdG9yIiwi4p+IIjoiYnNvbGhzdWIiLCLin4kiOiJzdXBoc29sIiwi4p+1IjoieGxhcnIiLCLin7YiOiJ4cmFyciIsIuKftyI6InhoYXJyIiwi4p+4IjoieGxBcnIiLCLin7kiOiJ4ckFyciIsIuKfuiI6InhoQXJyIiwi4p+8IjoieG1hcCIsIuKfvyI6ImR6aWdyYXJyIiwi4qSCIjoibnZsQXJyIiwi4qSDIjoibnZyQXJyIiwi4qSEIjoibnZIYXJyIiwi4qSFIjoiTWFwIiwi4qSMIjoibGJhcnIiLCLipI0iOiJyYmFyciIsIuKkjiI6ImxCYXJyIiwi4qSPIjoickJhcnIiLCLipJAiOiJSQmFyciIsIuKkkSI6IkREb3RyYWhkIiwi4qSSIjoiVXBBcnJvd0JhciIsIuKkkyI6IkRvd25BcnJvd0JhciIsIuKkliI6IlJhcnJ0bCIsIuKkmSI6ImxhdGFpbCIsIuKkmiI6InJhdGFpbCIsIuKkmyI6ImxBdGFpbCIsIuKknCI6InJBdGFpbCIsIuKknSI6ImxhcnJmcyIsIuKkniI6InJhcnJmcyIsIuKknyI6ImxhcnJiZnMiLCLipKAiOiJyYXJyYmZzIiwi4qSjIjoibndhcmhrIiwi4qSkIjoibmVhcmhrIiwi4qSlIjoic2VhcmhrIiwi4qSmIjoic3dhcmhrIiwi4qSnIjoibnduZWFyIiwi4qSoIjoidG9lYSIsIuKkqSI6InRvc2EiLCLipKoiOiJzd253YXIiLCLipLMiOiJyYXJyYyIsIuKks8y4IjoibnJhcnJjIiwi4qS1IjoiY3VkYXJyciIsIuKktiI6ImxkY2EiLCLipLciOiJyZGNhIiwi4qS4IjoiY3VkYXJybCIsIuKkuSI6ImxhcnJwbCIsIuKkvCI6ImN1cmFycm0iLCLipL0iOiJjdWxhcnJwIiwi4qWFIjoicmFycnBsIiwi4qWIIjoiaGFycmNpciIsIuKliSI6IlVhcnJvY2lyIiwi4qWKIjoibHVyZHNoYXIiLCLipYsiOiJsZHJ1c2hhciIsIuKljiI6IkxlZnRSaWdodFZlY3RvciIsIuKljyI6IlJpZ2h0VXBEb3duVmVjdG9yIiwi4qWQIjoiRG93bkxlZnRSaWdodFZlY3RvciIsIuKlkSI6IkxlZnRVcERvd25WZWN0b3IiLCLipZIiOiJMZWZ0VmVjdG9yQmFyIiwi4qWTIjoiUmlnaHRWZWN0b3JCYXIiLCLipZQiOiJSaWdodFVwVmVjdG9yQmFyIiwi4qWVIjoiUmlnaHREb3duVmVjdG9yQmFyIiwi4qWWIjoiRG93bkxlZnRWZWN0b3JCYXIiLCLipZciOiJEb3duUmlnaHRWZWN0b3JCYXIiLCLipZgiOiJMZWZ0VXBWZWN0b3JCYXIiLCLipZkiOiJMZWZ0RG93blZlY3RvckJhciIsIuKlmiI6IkxlZnRUZWVWZWN0b3IiLCLipZsiOiJSaWdodFRlZVZlY3RvciIsIuKlnCI6IlJpZ2h0VXBUZWVWZWN0b3IiLCLipZ0iOiJSaWdodERvd25UZWVWZWN0b3IiLCLipZ4iOiJEb3duTGVmdFRlZVZlY3RvciIsIuKlnyI6IkRvd25SaWdodFRlZVZlY3RvciIsIuKloCI6IkxlZnRVcFRlZVZlY3RvciIsIuKloSI6IkxlZnREb3duVGVlVmVjdG9yIiwi4qWiIjoibEhhciIsIuKloyI6InVIYXIiLCLipaQiOiJySGFyIiwi4qWlIjoiZEhhciIsIuKlpiI6Imx1cnVoYXIiLCLipaciOiJsZHJkaGFyIiwi4qWoIjoicnVsdWhhciIsIuKlqSI6InJkbGRoYXIiLCLipaoiOiJsaGFydWwiLCLipasiOiJsbGhhcmQiLCLipawiOiJyaGFydWwiLCLipa0iOiJscmhhcmQiLCLipa4iOiJ1ZGhhciIsIuKlryI6ImR1aGFyIiwi4qWwIjoiUm91bmRJbXBsaWVzIiwi4qWxIjoiZXJhcnIiLCLipbIiOiJzaW1yYXJyIiwi4qWzIjoibGFycnNpbSIsIuKltCI6InJhcnJzaW0iLCLipbUiOiJyYXJyYXAiLCLipbYiOiJsdGxhcnIiLCLipbgiOiJndHJhcnIiLCLipbkiOiJzdWJyYXJyIiwi4qW7Ijoic3VwbGFyciIsIuKlvCI6ImxmaXNodCIsIuKlvSI6InJmaXNodCIsIuKlviI6InVmaXNodCIsIuKlvyI6ImRmaXNodCIsIuKmmiI6InZ6aWd6YWciLCLippwiOiJ2YW5ncnQiLCLipp0iOiJhbmdydHZiZCIsIuKmpCI6ImFuZ2UiLCLipqUiOiJyYW5nZSIsIuKmpiI6ImR3YW5nbGUiLCLipqciOiJ1d2FuZ2xlIiwi4qaoIjoiYW5nbXNkYWEiLCLipqkiOiJhbmdtc2RhYiIsIuKmqiI6ImFuZ21zZGFjIiwi4qarIjoiYW5nbXNkYWQiLCLipqwiOiJhbmdtc2RhZSIsIuKmrSI6ImFuZ21zZGFmIiwi4qauIjoiYW5nbXNkYWciLCLipq8iOiJhbmdtc2RhaCIsIuKmsCI6ImJlbXB0eXYiLCLiprEiOiJkZW1wdHl2Iiwi4qayIjoiY2VtcHR5diIsIuKmsyI6InJhZW1wdHl2Iiwi4qa0IjoibGFlbXB0eXYiLCLiprUiOiJvaGJhciIsIuKmtiI6Im9taWQiLCLiprciOiJvcGFyIiwi4qa5Ijoib3BlcnAiLCLiprsiOiJvbGNyb3NzIiwi4qa8Ijoib2Rzb2xkIiwi4qa+Ijoib2xjaXIiLCLipr8iOiJvZmNpciIsIuKngCI6Im9sdCIsIuKngSI6Im9ndCIsIuKngiI6ImNpcnNjaXIiLCLip4MiOiJjaXJFIiwi4qeEIjoic29sYiIsIuKnhSI6ImJzb2xiIiwi4qeJIjoiYm94Ym94Iiwi4qeNIjoidHJpc2IiLCLip44iOiJydHJpbHRyaSIsIuKnjyI6IkxlZnRUcmlhbmdsZUJhciIsIuKnj8y4IjoiTm90TGVmdFRyaWFuZ2xlQmFyIiwi4qeQIjoiUmlnaHRUcmlhbmdsZUJhciIsIuKnkMy4IjoiTm90UmlnaHRUcmlhbmdsZUJhciIsIuKnnCI6ImlpbmZpbiIsIuKnnSI6ImluZmludGllIiwi4qeeIjoibnZpbmZpbiIsIuKnoyI6ImVwYXJzbCIsIuKnpCI6InNtZXBhcnNsIiwi4qelIjoiZXF2cGFyc2wiLCLip6siOiJsb3pmIiwi4qe0IjoiUnVsZURlbGF5ZWQiLCLip7YiOiJkc29sIiwi4qiAIjoieG9kb3QiLCLiqIEiOiJ4b3BsdXMiLCLiqIIiOiJ4b3RpbWUiLCLiqIQiOiJ4dXBsdXMiLCLiqIYiOiJ4c3FjdXAiLCLiqI0iOiJmcGFydGludCIsIuKokCI6ImNpcmZuaW50Iiwi4qiRIjoiYXdpbnQiLCLiqJIiOiJycHBvbGludCIsIuKokyI6InNjcG9saW50Iiwi4qiUIjoibnBvbGludCIsIuKolSI6InBvaW50aW50Iiwi4qiWIjoicXVhdGludCIsIuKolyI6ImludGxhcmhrIiwi4qiiIjoicGx1c2NpciIsIuKooyI6InBsdXNhY2lyIiwi4qikIjoic2ltcGx1cyIsIuKopSI6InBsdXNkdSIsIuKopiI6InBsdXNzaW0iLCLiqKciOiJwbHVzdHdvIiwi4qipIjoibWNvbW1hIiwi4qiqIjoibWludXNkdSIsIuKorSI6ImxvcGx1cyIsIuKoriI6InJvcGx1cyIsIuKoryI6IkNyb3NzIiwi4qiwIjoidGltZXNkIiwi4qixIjoidGltZXNiYXIiLCLiqLMiOiJzbWFzaHAiLCLiqLQiOiJsb3RpbWVzIiwi4qi1Ijoicm90aW1lcyIsIuKotiI6Im90aW1lc2FzIiwi4qi3IjoiT3RpbWVzIiwi4qi4Ijoib2RpdiIsIuKouSI6InRyaXBsdXMiLCLiqLoiOiJ0cmltaW51cyIsIuKouyI6InRyaXRpbWUiLCLiqLwiOiJpcHJvZCIsIuKovyI6ImFtYWxnIiwi4qmAIjoiY2FwZG90Iiwi4qmCIjoibmN1cCIsIuKpgyI6Im5jYXAiLCLiqYQiOiJjYXBhbmQiLCLiqYUiOiJjdXBvciIsIuKphiI6ImN1cGNhcCIsIuKphyI6ImNhcGN1cCIsIuKpiCI6ImN1cGJyY2FwIiwi4qmJIjoiY2FwYnJjdXAiLCLiqYoiOiJjdXBjdXAiLCLiqYsiOiJjYXBjYXAiLCLiqYwiOiJjY3VwcyIsIuKpjSI6ImNjYXBzIiwi4qmQIjoiY2N1cHNzbSIsIuKpkyI6IkFuZCIsIuKplCI6Ik9yIiwi4qmVIjoiYW5kYW5kIiwi4qmWIjoib3JvciIsIuKplyI6Im9yc2xvcGUiLCLiqZgiOiJhbmRzbG9wZSIsIuKpmiI6ImFuZHYiLCLiqZsiOiJvcnYiLCLiqZwiOiJhbmRkIiwi4qmdIjoib3JkIiwi4qmfIjoid2VkYmFyIiwi4qmmIjoic2RvdGUiLCLiqaoiOiJzaW1kb3QiLCLiqa0iOiJjb25nZG90Iiwi4qmtzLgiOiJuY29uZ2RvdCIsIuKpriI6ImVhc3RlciIsIuKpryI6ImFwYWNpciIsIuKpsCI6ImFwRSIsIuKpsMy4IjoibmFwRSIsIuKpsSI6ImVwbHVzIiwi4qmyIjoicGx1c2UiLCLiqbMiOiJFc2ltIiwi4qm3IjoiZUREb3QiLCLiqbgiOiJlcXVpdkREIiwi4qm5IjoibHRjaXIiLCLiqboiOiJndGNpciIsIuKpuyI6Imx0cXVlc3QiLCLiqbwiOiJndHF1ZXN0Iiwi4qm9IjoibGVzIiwi4qm9zLgiOiJubGVzIiwi4qm+IjoiZ2VzIiwi4qm+zLgiOiJuZ2VzIiwi4qm/IjoibGVzZG90Iiwi4qqAIjoiZ2VzZG90Iiwi4qqBIjoibGVzZG90byIsIuKqgiI6Imdlc2RvdG8iLCLiqoMiOiJsZXNkb3RvciIsIuKqhCI6Imdlc2RvdG9sIiwi4qqFIjoibGFwIiwi4qqGIjoiZ2FwIiwi4qqHIjoibG5lIiwi4qqIIjoiZ25lIiwi4qqJIjoibG5hcCIsIuKqiiI6ImduYXAiLCLiqosiOiJsRWciLCLiqowiOiJnRWwiLCLiqo0iOiJsc2ltZSIsIuKqjiI6ImdzaW1lIiwi4qqPIjoibHNpbWciLCLiqpAiOiJnc2ltbCIsIuKqkSI6ImxnRSIsIuKqkiI6ImdsRSIsIuKqkyI6Imxlc2dlcyIsIuKqlCI6Imdlc2xlcyIsIuKqlSI6ImVscyIsIuKqliI6ImVncyIsIuKqlyI6ImVsc2RvdCIsIuKqmCI6ImVnc2RvdCIsIuKqmSI6ImVsIiwi4qqaIjoiZWciLCLiqp0iOiJzaW1sIiwi4qqeIjoic2ltZyIsIuKqnyI6InNpbWxFIiwi4qqgIjoic2ltZ0UiLCLiqqEiOiJMZXNzTGVzcyIsIuKqocy4IjoiTm90TmVzdGVkTGVzc0xlc3MiLCLiqqIiOiJHcmVhdGVyR3JlYXRlciIsIuKqosy4IjoiTm90TmVzdGVkR3JlYXRlckdyZWF0ZXIiLCLiqqQiOiJnbGoiLCLiqqUiOiJnbGEiLCLiqqYiOiJsdGNjIiwi4qqnIjoiZ3RjYyIsIuKqqCI6Imxlc2NjIiwi4qqpIjoiZ2VzY2MiLCLiqqoiOiJzbXQiLCLiqqsiOiJsYXQiLCLiqqwiOiJzbXRlIiwi4qqs77iAIjoic210ZXMiLCLiqq0iOiJsYXRlIiwi4qqt77iAIjoibGF0ZXMiLCLiqq4iOiJidW1wRSIsIuKqryI6InByZSIsIuKqr8y4IjoibnByZSIsIuKqsCI6InNjZSIsIuKqsMy4IjoibnNjZSIsIuKqsyI6InByRSIsIuKqtCI6InNjRSIsIuKqtSI6InBybkUiLCLiqrYiOiJzY25FIiwi4qq3IjoicHJhcCIsIuKquCI6InNjYXAiLCLiqrkiOiJwcm5hcCIsIuKquiI6InNjbmFwIiwi4qq7IjoiUHIiLCLiqrwiOiJTYyIsIuKqvSI6InN1YmRvdCIsIuKqviI6InN1cGRvdCIsIuKqvyI6InN1YnBsdXMiLCLiq4AiOiJzdXBwbHVzIiwi4quBIjoic3VibXVsdCIsIuKrgiI6InN1cG11bHQiLCLiq4MiOiJzdWJlZG90Iiwi4quEIjoic3VwZWRvdCIsIuKrhSI6InN1YkUiLCLiq4XMuCI6Im5zdWJFIiwi4quGIjoic3VwRSIsIuKrhsy4IjoibnN1cEUiLCLiq4ciOiJzdWJzaW0iLCLiq4giOiJzdXBzaW0iLCLiq4vvuIAiOiJ2c3VibkUiLCLiq4siOiJzdWJuRSIsIuKrjO+4gCI6InZzdXBuRSIsIuKrjCI6InN1cG5FIiwi4quPIjoiY3N1YiIsIuKrkCI6ImNzdXAiLCLiq5EiOiJjc3ViZSIsIuKrkiI6ImNzdXBlIiwi4quTIjoic3Vic3VwIiwi4quUIjoic3Vwc3ViIiwi4quVIjoic3Vic3ViIiwi4quWIjoic3Vwc3VwIiwi4quXIjoic3VwaHN1YiIsIuKrmCI6InN1cGRzdWIiLCLiq5kiOiJmb3JrdiIsIuKrmiI6InRvcGZvcmsiLCLiq5siOiJtbGNwIiwi4qukIjoiRGFzaHYiLCLiq6YiOiJWZGFzaGwiLCLiq6ciOiJCYXJ2Iiwi4quoIjoidkJhciIsIuKrqSI6InZCYXJ2Iiwi4qurIjoiVmJhciIsIuKrrCI6Ik5vdCIsIuKrrSI6ImJOb3QiLCLiq64iOiJybm1pZCIsIuKrryI6ImNpcm1pZCIsIuKrsCI6Im1pZGNpciIsIuKrsSI6InRvcGNpciIsIuKrsiI6Im5ocGFyIiwi4quzIjoicGFyc2ltIiwi4qu9IjoicGFyc2wiLCLiq73ig6UiOiJucGFyc2wiLCLima0iOiJmbGF0Iiwi4pmuIjoibmF0dXIiLCLima8iOiJzaGFycCIsIsKkIjoiY3VycmVuIiwiwqIiOiJjZW50IiwkOiJkb2xsYXIiLCLCoyI6InBvdW5kIiwiwqUiOiJ5ZW4iLCLigqwiOiJldXJvIiwiwrkiOiJzdXAxIiwiwr0iOiJoYWxmIiwi4oWTIjoiZnJhYzEzIiwiwrwiOiJmcmFjMTQiLCLihZUiOiJmcmFjMTUiLCLihZkiOiJmcmFjMTYiLCLihZsiOiJmcmFjMTgiLCLCsiI6InN1cDIiLCLihZQiOiJmcmFjMjMiLCLihZYiOiJmcmFjMjUiLCLCsyI6InN1cDMiLCLCviI6ImZyYWMzNCIsIuKFlyI6ImZyYWMzNSIsIuKFnCI6ImZyYWMzOCIsIuKFmCI6ImZyYWM0NSIsIuKFmiI6ImZyYWM1NiIsIuKFnSI6ImZyYWM1OCIsIuKFniI6ImZyYWM3OCIsIvCdkrYiOiJhc2NyIiwi8J2VkiI6ImFvcGYiLCLwnZSeIjoiYWZyIiwi8J2UuCI6IkFvcGYiLCLwnZSEIjoiQWZyIiwi8J2SnCI6IkFzY3IiLCLCqiI6Im9yZGYiLCLDoSI6ImFhY3V0ZSIsIsOBIjoiQWFjdXRlIiwiw6AiOiJhZ3JhdmUiLCLDgCI6IkFncmF2ZSIsIsSDIjoiYWJyZXZlIiwixIIiOiJBYnJldmUiLCLDoiI6ImFjaXJjIiwiw4IiOiJBY2lyYyIsIsOlIjoiYXJpbmciLCLDhSI6ImFuZ3N0Iiwiw6QiOiJhdW1sIiwiw4QiOiJBdW1sIiwiw6MiOiJhdGlsZGUiLCLDgyI6IkF0aWxkZSIsIsSFIjoiYW9nb24iLCLEhCI6IkFvZ29uIiwixIEiOiJhbWFjciIsIsSAIjoiQW1hY3IiLCLDpiI6ImFlbGlnIiwiw4YiOiJBRWxpZyIsIvCdkrciOiJic2NyIiwi8J2VkyI6ImJvcGYiLCLwnZSfIjoiYmZyIiwi8J2UuSI6IkJvcGYiLCLihKwiOiJCc2NyIiwi8J2UhSI6IkJmciIsIvCdlKAiOiJjZnIiLCLwnZK4IjoiY3NjciIsIvCdlZQiOiJjb3BmIiwi4oStIjoiQ2ZyIiwi8J2SniI6IkNzY3IiLCLihIIiOiJDb3BmIiwixIciOiJjYWN1dGUiLCLEhiI6IkNhY3V0ZSIsIsSJIjoiY2NpcmMiLCLEiCI6IkNjaXJjIiwixI0iOiJjY2Fyb24iLCLEjCI6IkNjYXJvbiIsIsSLIjoiY2RvdCIsIsSKIjoiQ2RvdCIsIsOnIjoiY2NlZGlsIiwiw4ciOiJDY2VkaWwiLCLihIUiOiJpbmNhcmUiLCLwnZShIjoiZGZyIiwi4oWGIjoiZGQiLCLwnZWVIjoiZG9wZiIsIvCdkrkiOiJkc2NyIiwi8J2SnyI6IkRzY3IiLCLwnZSHIjoiRGZyIiwi4oWFIjoiREQiLCLwnZS7IjoiRG9wZiIsIsSPIjoiZGNhcm9uIiwixI4iOiJEY2Fyb24iLCLEkSI6ImRzdHJvayIsIsSQIjoiRHN0cm9rIiwiw7AiOiJldGgiLCLDkCI6IkVUSCIsIuKFhyI6ImVlIiwi4oSvIjoiZXNjciIsIvCdlKIiOiJlZnIiLCLwnZWWIjoiZW9wZiIsIuKEsCI6IkVzY3IiLCLwnZSIIjoiRWZyIiwi8J2UvCI6IkVvcGYiLCLDqSI6ImVhY3V0ZSIsIsOJIjoiRWFjdXRlIiwiw6giOiJlZ3JhdmUiLCLDiCI6IkVncmF2ZSIsIsOqIjoiZWNpcmMiLCLDiiI6IkVjaXJjIiwixJsiOiJlY2Fyb24iLCLEmiI6IkVjYXJvbiIsIsOrIjoiZXVtbCIsIsOLIjoiRXVtbCIsIsSXIjoiZWRvdCIsIsSWIjoiRWRvdCIsIsSZIjoiZW9nb24iLCLEmCI6IkVvZ29uIiwixJMiOiJlbWFjciIsIsSSIjoiRW1hY3IiLCLwnZSjIjoiZmZyIiwi8J2VlyI6ImZvcGYiLCLwnZK7IjoiZnNjciIsIvCdlIkiOiJGZnIiLCLwnZS9IjoiRm9wZiIsIuKEsSI6IkZzY3IiLCLvrIAiOiJmZmxpZyIsIu+sgyI6ImZmaWxpZyIsIu+shCI6ImZmbGxpZyIsIu+sgSI6ImZpbGlnIixmajoiZmpsaWciLCLvrIIiOiJmbGxpZyIsIsaSIjoiZm5vZiIsIuKEiiI6ImdzY3IiLCLwnZWYIjoiZ29wZiIsIvCdlKQiOiJnZnIiLCLwnZKiIjoiR3NjciIsIvCdlL4iOiJHb3BmIiwi8J2UiiI6IkdmciIsIse1IjoiZ2FjdXRlIiwixJ8iOiJnYnJldmUiLCLEniI6IkdicmV2ZSIsIsSdIjoiZ2NpcmMiLCLEnCI6IkdjaXJjIiwixKEiOiJnZG90IiwixKAiOiJHZG90IiwixKIiOiJHY2VkaWwiLCLwnZSlIjoiaGZyIiwi4oSOIjoicGxhbmNraCIsIvCdkr0iOiJoc2NyIiwi8J2VmSI6ImhvcGYiLCLihIsiOiJIc2NyIiwi4oSMIjoiSGZyIiwi4oSNIjoiSG9wZiIsIsSlIjoiaGNpcmMiLCLEpCI6IkhjaXJjIiwi4oSPIjoiaGJhciIsIsSnIjoiaHN0cm9rIiwixKYiOiJIc3Ryb2siLCLwnZWaIjoiaW9wZiIsIvCdlKYiOiJpZnIiLCLwnZK+IjoiaXNjciIsIuKFiCI6ImlpIiwi8J2VgCI6IklvcGYiLCLihJAiOiJJc2NyIiwi4oSRIjoiSW0iLCLDrSI6ImlhY3V0ZSIsIsONIjoiSWFjdXRlIiwiw6wiOiJpZ3JhdmUiLCLDjCI6IklncmF2ZSIsIsOuIjoiaWNpcmMiLCLDjiI6IkljaXJjIiwiw68iOiJpdW1sIiwiw48iOiJJdW1sIiwixKkiOiJpdGlsZGUiLCLEqCI6Ikl0aWxkZSIsIsSwIjoiSWRvdCIsIsSvIjoiaW9nb24iLCLEriI6IklvZ29uIiwixKsiOiJpbWFjciIsIsSqIjoiSW1hY3IiLCLEsyI6ImlqbGlnIiwixLIiOiJJSmxpZyIsIsSxIjoiaW1hdGgiLCLwnZK/IjoianNjciIsIvCdlZsiOiJqb3BmIiwi8J2UpyI6ImpmciIsIvCdkqUiOiJKc2NyIiwi8J2UjSI6IkpmciIsIvCdlYEiOiJKb3BmIiwixLUiOiJqY2lyYyIsIsS0IjoiSmNpcmMiLCLItyI6ImptYXRoIiwi8J2VnCI6ImtvcGYiLCLwnZOAIjoia3NjciIsIvCdlKgiOiJrZnIiLCLwnZKmIjoiS3NjciIsIvCdlYIiOiJLb3BmIiwi8J2UjiI6IktmciIsIsS3Ijoia2NlZGlsIiwixLYiOiJLY2VkaWwiLCLwnZSpIjoibGZyIiwi8J2TgSI6ImxzY3IiLCLihJMiOiJlbGwiLCLwnZWdIjoibG9wZiIsIuKEkiI6IkxzY3IiLCLwnZSPIjoiTGZyIiwi8J2VgyI6IkxvcGYiLCLEuiI6ImxhY3V0ZSIsIsS5IjoiTGFjdXRlIiwixL4iOiJsY2Fyb24iLCLEvSI6IkxjYXJvbiIsIsS8IjoibGNlZGlsIiwixLsiOiJMY2VkaWwiLCLFgiI6ImxzdHJvayIsIsWBIjoiTHN0cm9rIiwixYAiOiJsbWlkb3QiLCLEvyI6IkxtaWRvdCIsIvCdlKoiOiJtZnIiLCLwnZWeIjoibW9wZiIsIvCdk4IiOiJtc2NyIiwi8J2UkCI6Ik1mciIsIvCdlYQiOiJNb3BmIiwi4oSzIjoiTXNjciIsIvCdlKsiOiJuZnIiLCLwnZWfIjoibm9wZiIsIvCdk4MiOiJuc2NyIiwi4oSVIjoiTm9wZiIsIvCdkqkiOiJOc2NyIiwi8J2UkSI6Ik5mciIsIsWEIjoibmFjdXRlIiwixYMiOiJOYWN1dGUiLCLFiCI6Im5jYXJvbiIsIsWHIjoiTmNhcm9uIiwiw7EiOiJudGlsZGUiLCLDkSI6Ik50aWxkZSIsIsWGIjoibmNlZGlsIiwixYUiOiJOY2VkaWwiLCLihJYiOiJudW1lcm8iLCLFiyI6ImVuZyIsIsWKIjoiRU5HIiwi8J2VoCI6Im9vcGYiLCLwnZSsIjoib2ZyIiwi4oS0Ijoib3NjciIsIvCdkqoiOiJPc2NyIiwi8J2UkiI6Ik9mciIsIvCdlYYiOiJPb3BmIiwiwroiOiJvcmRtIiwiw7MiOiJvYWN1dGUiLCLDkyI6Ik9hY3V0ZSIsIsOyIjoib2dyYXZlIiwiw5IiOiJPZ3JhdmUiLCLDtCI6Im9jaXJjIiwiw5QiOiJPY2lyYyIsIsO2Ijoib3VtbCIsIsOWIjoiT3VtbCIsIsWRIjoib2RibGFjIiwixZAiOiJPZGJsYWMiLCLDtSI6Im90aWxkZSIsIsOVIjoiT3RpbGRlIiwiw7giOiJvc2xhc2giLCLDmCI6Ik9zbGFzaCIsIsWNIjoib21hY3IiLCLFjCI6Ik9tYWNyIiwixZMiOiJvZWxpZyIsIsWSIjoiT0VsaWciLCLwnZStIjoicGZyIiwi8J2ThSI6InBzY3IiLCLwnZWhIjoicG9wZiIsIuKEmSI6IlBvcGYiLCLwnZSTIjoiUGZyIiwi8J2SqyI6IlBzY3IiLCLwnZWiIjoicW9wZiIsIvCdlK4iOiJxZnIiLCLwnZOGIjoicXNjciIsIvCdkqwiOiJRc2NyIiwi8J2UlCI6IlFmciIsIuKEmiI6IlFvcGYiLCLEuCI6ImtncmVlbiIsIvCdlK8iOiJyZnIiLCLwnZWjIjoicm9wZiIsIvCdk4ciOiJyc2NyIiwi4oSbIjoiUnNjciIsIuKEnCI6IlJlIiwi4oSdIjoiUm9wZiIsIsWVIjoicmFjdXRlIiwixZQiOiJSYWN1dGUiLCLFmSI6InJjYXJvbiIsIsWYIjoiUmNhcm9uIiwixZciOiJyY2VkaWwiLCLFliI6IlJjZWRpbCIsIvCdlaQiOiJzb3BmIiwi8J2TiCI6InNzY3IiLCLwnZSwIjoic2ZyIiwi8J2ViiI6IlNvcGYiLCLwnZSWIjoiU2ZyIiwi8J2SriI6IlNzY3IiLCLik4giOiJvUyIsIsWbIjoic2FjdXRlIiwixZoiOiJTYWN1dGUiLCLFnSI6InNjaXJjIiwixZwiOiJTY2lyYyIsIsWhIjoic2Nhcm9uIiwixaAiOiJTY2Fyb24iLCLFnyI6InNjZWRpbCIsIsWeIjoiU2NlZGlsIiwiw58iOiJzemxpZyIsIvCdlLEiOiJ0ZnIiLCLwnZOJIjoidHNjciIsIvCdlaUiOiJ0b3BmIiwi8J2SryI6IlRzY3IiLCLwnZSXIjoiVGZyIiwi8J2ViyI6IlRvcGYiLCLFpSI6InRjYXJvbiIsIsWkIjoiVGNhcm9uIiwixaMiOiJ0Y2VkaWwiLCLFoiI6IlRjZWRpbCIsIuKEoiI6InRyYWRlIiwixaciOiJ0c3Ryb2siLCLFpiI6IlRzdHJvayIsIvCdk4oiOiJ1c2NyIiwi8J2VpiI6InVvcGYiLCLwnZSyIjoidWZyIiwi8J2VjCI6IlVvcGYiLCLwnZSYIjoiVWZyIiwi8J2SsCI6IlVzY3IiLCLDuiI6InVhY3V0ZSIsIsOaIjoiVWFjdXRlIiwiw7kiOiJ1Z3JhdmUiLCLDmSI6IlVncmF2ZSIsIsWtIjoidWJyZXZlIiwixawiOiJVYnJldmUiLCLDuyI6InVjaXJjIiwiw5siOiJVY2lyYyIsIsWvIjoidXJpbmciLCLFriI6IlVyaW5nIiwiw7wiOiJ1dW1sIiwiw5wiOiJVdW1sIiwixbEiOiJ1ZGJsYWMiLCLFsCI6IlVkYmxhYyIsIsWpIjoidXRpbGRlIiwixagiOiJVdGlsZGUiLCLFsyI6InVvZ29uIiwixbIiOiJVb2dvbiIsIsWrIjoidW1hY3IiLCLFqiI6IlVtYWNyIiwi8J2UsyI6InZmciIsIvCdlaciOiJ2b3BmIiwi8J2TiyI6InZzY3IiLCLwnZSZIjoiVmZyIiwi8J2VjSI6IlZvcGYiLCLwnZKxIjoiVnNjciIsIvCdlagiOiJ3b3BmIiwi8J2TjCI6IndzY3IiLCLwnZS0Ijoid2ZyIiwi8J2SsiI6IldzY3IiLCLwnZWOIjoiV29wZiIsIvCdlJoiOiJXZnIiLCLFtSI6IndjaXJjIiwixbQiOiJXY2lyYyIsIvCdlLUiOiJ4ZnIiLCLwnZONIjoieHNjciIsIvCdlakiOiJ4b3BmIiwi8J2VjyI6IlhvcGYiLCLwnZSbIjoiWGZyIiwi8J2SsyI6IlhzY3IiLCLwnZS2IjoieWZyIiwi8J2TjiI6InlzY3IiLCLwnZWqIjoieW9wZiIsIvCdkrQiOiJZc2NyIiwi8J2UnCI6IllmciIsIvCdlZAiOiJZb3BmIiwiw70iOiJ5YWN1dGUiLCLDnSI6IllhY3V0ZSIsIsW3IjoieWNpcmMiLCLFtiI6IlljaXJjIiwiw78iOiJ5dW1sIiwixbgiOiJZdW1sIiwi8J2TjyI6InpzY3IiLCLwnZS3IjoiemZyIiwi8J2VqyI6InpvcGYiLCLihKgiOiJaZnIiLCLihKQiOiJab3BmIiwi8J2StSI6IlpzY3IiLCLFuiI6InphY3V0ZSIsIsW5IjoiWmFjdXRlIiwixb4iOiJ6Y2Fyb24iLCLFvSI6IlpjYXJvbiIsIsW8IjoiemRvdCIsIsW7IjoiWmRvdCIsIsa1IjoiaW1wZWQiLCLDviI6InRob3JuIiwiw54iOiJUSE9STiIsIsWJIjoibmFwb3MiLCLOsSI6ImFscGhhIiwizpEiOiJBbHBoYSIsIs6yIjoiYmV0YSIsIs6SIjoiQmV0YSIsIs6zIjoiZ2FtbWEiLCLOkyI6IkdhbW1hIiwizrQiOiJkZWx0YSIsIs6UIjoiRGVsdGEiLCLOtSI6ImVwc2kiLCLPtSI6ImVwc2l2IiwizpUiOiJFcHNpbG9uIiwiz50iOiJnYW1tYWQiLCLPnCI6IkdhbW1hZCIsIs62IjoiemV0YSIsIs6WIjoiWmV0YSIsIs63IjoiZXRhIiwizpciOiJFdGEiLCLOuCI6InRoZXRhIiwiz5EiOiJ0aGV0YXYiLCLOmCI6IlRoZXRhIiwizrkiOiJpb3RhIiwizpkiOiJJb3RhIiwizroiOiJrYXBwYSIsIs+wIjoia2FwcGF2IiwizpoiOiJLYXBwYSIsIs67IjoibGFtYmRhIiwizpsiOiJMYW1iZGEiLCLOvCI6Im11IiwiwrUiOiJtaWNybyIsIs6cIjoiTXUiLCLOvSI6Im51Iiwizp0iOiJOdSIsIs6+IjoieGkiLCLOniI6IlhpIiwizr8iOiJvbWljcm9uIiwizp8iOiJPbWljcm9uIiwiz4AiOiJwaSIsIs+WIjoicGl2IiwizqAiOiJQaSIsIs+BIjoicmhvIiwiz7EiOiJyaG92IiwizqEiOiJSaG8iLCLPgyI6InNpZ21hIiwizqMiOiJTaWdtYSIsIs+CIjoic2lnbWFmIiwiz4QiOiJ0YXUiLCLOpCI6IlRhdSIsIs+FIjoidXBzaSIsIs6lIjoiVXBzaWxvbiIsIs+SIjoiVXBzaSIsIs+GIjoicGhpIiwiz5UiOiJwaGl2IiwizqYiOiJQaGkiLCLPhyI6ImNoaSIsIs6nIjoiQ2hpIiwiz4giOiJwc2kiLCLOqCI6IlBzaSIsIs+JIjoib21lZ2EiLCLOqSI6Im9obSIsItCwIjoiYWN5Iiwi0JAiOiJBY3kiLCLQsSI6ImJjeSIsItCRIjoiQmN5Iiwi0LIiOiJ2Y3kiLCLQkiI6IlZjeSIsItCzIjoiZ2N5Iiwi0JMiOiJHY3kiLCLRkyI6ImdqY3kiLCLQgyI6IkdKY3kiLCLQtCI6ImRjeSIsItCUIjoiRGN5Iiwi0ZIiOiJkamN5Iiwi0IIiOiJESmN5Iiwi0LUiOiJpZWN5Iiwi0JUiOiJJRWN5Iiwi0ZEiOiJpb2N5Iiwi0IEiOiJJT2N5Iiwi0ZQiOiJqdWtjeSIsItCEIjoiSnVrY3kiLCLQtiI6InpoY3kiLCLQliI6IlpIY3kiLCLQtyI6InpjeSIsItCXIjoiWmN5Iiwi0ZUiOiJkc2N5Iiwi0IUiOiJEU2N5Iiwi0LgiOiJpY3kiLCLQmCI6IkljeSIsItGWIjoiaXVrY3kiLCLQhiI6Ikl1a2N5Iiwi0ZciOiJ5aWN5Iiwi0IciOiJZSWN5Iiwi0LkiOiJqY3kiLCLQmSI6IkpjeSIsItGYIjoianNlcmN5Iiwi0IgiOiJKc2VyY3kiLCLQuiI6ImtjeSIsItCaIjoiS2N5Iiwi0ZwiOiJramN5Iiwi0IwiOiJLSmN5Iiwi0LsiOiJsY3kiLCLQmyI6IkxjeSIsItGZIjoibGpjeSIsItCJIjoiTEpjeSIsItC8IjoibWN5Iiwi0JwiOiJNY3kiLCLQvSI6Im5jeSIsItCdIjoiTmN5Iiwi0ZoiOiJuamN5Iiwi0IoiOiJOSmN5Iiwi0L4iOiJvY3kiLCLQniI6Ik9jeSIsItC/IjoicGN5Iiwi0J8iOiJQY3kiLCLRgCI6InJjeSIsItCgIjoiUmN5Iiwi0YEiOiJzY3kiLCLQoSI6IlNjeSIsItGCIjoidGN5Iiwi0KIiOiJUY3kiLCLRmyI6InRzaGN5Iiwi0IsiOiJUU0hjeSIsItGDIjoidWN5Iiwi0KMiOiJVY3kiLCLRniI6InVicmN5Iiwi0I4iOiJVYnJjeSIsItGEIjoiZmN5Iiwi0KQiOiJGY3kiLCLRhSI6ImtoY3kiLCLQpSI6IktIY3kiLCLRhiI6InRzY3kiLCLQpiI6IlRTY3kiLCLRhyI6ImNoY3kiLCLQpyI6IkNIY3kiLCLRnyI6ImR6Y3kiLCLQjyI6IkRaY3kiLCLRiCI6InNoY3kiLCLQqCI6IlNIY3kiLCLRiSI6InNoY2hjeSIsItCpIjoiU0hDSGN5Iiwi0YoiOiJoYXJkY3kiLCLQqiI6IkhBUkRjeSIsItGLIjoieWN5Iiwi0KsiOiJZY3kiLCLRjCI6InNvZnRjeSIsItCsIjoiU09GVGN5Iiwi0Y0iOiJlY3kiLCLQrSI6IkVjeSIsItGOIjoieXVjeSIsItCuIjoiWVVjeSIsItGPIjoieWFjeSIsItCvIjoiWUFjeSIsIuKEtSI6ImFsZXBoIiwi4oS2IjoiYmV0aCIsIuKEtyI6ImdpbWVsIiwi4oS4IjoiZGFsZXRoIn0scD0vWyImJzw+YF0vZyxpPXsnIic6IiZxdW90OyIsIiYiOiImYW1wOyIsIiciOiImI3gyNzsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwiYCI6IiYjeDYwOyJ9LG89LyYjKD86W3hYXVteYS1mQS1GMC05XXxbXjAtOXhYXSkvLGg9L1tcMC1ceDA4XHgwQlx4MEUtXHgxRlx4N0YtXHg5Rlx1RkREMC1cdUZERUZcdUZGRkVcdUZGRkZdfFtcdUQ4M0ZcdUQ4N0ZcdUQ4QkZcdUQ4RkZcdUQ5M0ZcdUQ5N0ZcdUQ5QkZcdUQ5RkZcdURBM0ZcdURBN0ZcdURBQkZcdURBRkZcdURCM0ZcdURCN0ZcdURCQkZcdURCRkZdW1x1REZGRVx1REZGRl18W1x1RDgwMC1cdURCRkZdKD8hW1x1REMwMC1cdURGRkZdKXwoPzpbXlx1RDgwMC1cdURCRkZdfF4pW1x1REMwMC1cdURGRkZdLyxhPS8mKENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWx8RG91YmxlTG9uZ0xlZnRSaWdodEFycm93fENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldEVxdWFsfERpYWNyaXRpY2FsRG91YmxlQWN1dGV8Tm90UmlnaHRUcmlhbmdsZUVxdWFsfE5vdFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RQcmVjZWRlc1NsYW50RXF1YWx8Q2xvc2VDdXJseURvdWJsZVF1b3RlfE5lZ2F0aXZlVmVyeVRoaW5TcGFjZXxEb3VibGVDb250b3VySW50ZWdyYWx8RmlsbGVkVmVyeVNtYWxsU3F1YXJlfENhcGl0YWxEaWZmZXJlbnRpYWxEfE9wZW5DdXJseURvdWJsZVF1b3RlfEVtcHR5VmVyeVNtYWxsU3F1YXJlfE5lc3RlZEdyZWF0ZXJHcmVhdGVyfERvdWJsZUxvbmdSaWdodEFycm93fE5vdExlZnRUcmlhbmdsZUVxdWFsfE5vdEdyZWF0ZXJTbGFudEVxdWFsfFJldmVyc2VVcEVxdWlsaWJyaXVtfERvdWJsZUxlZnRSaWdodEFycm93fE5vdFNxdWFyZVN1YnNldEVxdWFsfE5vdERvdWJsZVZlcnRpY2FsQmFyfFJpZ2h0QXJyb3dMZWZ0QXJyb3d8Tm90R3JlYXRlckZ1bGxFcXVhbHxOb3RSaWdodFRyaWFuZ2xlQmFyfFNxdWFyZVN1cGVyc2V0RXF1YWx8RG93bkxlZnRSaWdodFZlY3RvcnxEb3VibGVMb25nTGVmdEFycm93fGxlZnRyaWdodHNxdWlnYXJyb3d8TGVmdEFycm93UmlnaHRBcnJvd3xOZWdhdGl2ZU1lZGl1bVNwYWNlfGJsYWNrdHJpYW5nbGVyaWdodHxSaWdodERvd25WZWN0b3JCYXJ8UHJlY2VkZXNTbGFudEVxdWFsfFJpZ2h0RG91YmxlQnJhY2tldHxTdWNjZWVkc1NsYW50RXF1YWx8Tm90TGVmdFRyaWFuZ2xlQmFyfFJpZ2h0VHJpYW5nbGVFcXVhbHxTcXVhcmVJbnRlcnNlY3Rpb258UmlnaHREb3duVGVlVmVjdG9yfFJldmVyc2VFcXVpbGlicml1bXxOZWdhdGl2ZVRoaWNrU3BhY2V8bG9uZ2xlZnRyaWdodGFycm93fExvbmdsZWZ0cmlnaHRhcnJvd3xMb25nTGVmdFJpZ2h0QXJyb3d8RG93blJpZ2h0VGVlVmVjdG9yfERvd25SaWdodFZlY3RvckJhcnxHcmVhdGVyU2xhbnRFcXVhbHxTcXVhcmVTdWJzZXRFcXVhbHxMZWZ0RG93blZlY3RvckJhcnxMZWZ0RG91YmxlQnJhY2tldHxWZXJ0aWNhbFNlcGFyYXRvcnxyaWdodGxlZnRoYXJwb29uc3xOb3RHcmVhdGVyR3JlYXRlcnxOb3RTcXVhcmVTdXBlcnNldHxibGFja3RyaWFuZ2xlbGVmdHxibGFja3RyaWFuZ2xlZG93bnxOZWdhdGl2ZVRoaW5TcGFjZXxMZWZ0RG93blRlZVZlY3RvcnxOb3RMZXNzU2xhbnRFcXVhbHxsZWZ0cmlnaHRoYXJwb29uc3xEb3VibGVVcERvd25BcnJvd3xEb3VibGVWZXJ0aWNhbEJhcnxMZWZ0VHJpYW5nbGVFcXVhbHxGaWxsZWRTbWFsbFNxdWFyZXx0d29oZWFkcmlnaHRhcnJvd3xOb3ROZXN0ZWRMZXNzTGVzc3xEb3duTGVmdFRlZVZlY3RvcnxEb3duTGVmdFZlY3RvckJhcnxSaWdodEFuZ2xlQnJhY2tldHxOb3RUaWxkZUZ1bGxFcXVhbHxOb3RSZXZlcnNlRWxlbWVudHxSaWdodFVwRG93blZlY3RvcnxEaWFjcml0aWNhbFRpbGRlfE5vdFN1Y2NlZWRzVGlsZGV8Y2lyY2xlYXJyb3dyaWdodHxOb3RQcmVjZWRlc0VxdWFsfHJpZ2h0aGFycG9vbmRvd258RG91YmxlUmlnaHRBcnJvd3xOb3RTdWNjZWVkc0VxdWFsfE5vbkJyZWFraW5nU3BhY2V8Tm90UmlnaHRUcmlhbmdsZXxMZXNzRXF1YWxHcmVhdGVyfFJpZ2h0VXBUZWVWZWN0b3J8TGVmdEFuZ2xlQnJhY2tldHxHcmVhdGVyRnVsbEVxdWFsfERvd25BcnJvd1VwQXJyb3d8UmlnaHRVcFZlY3RvckJhcnx0d29oZWFkbGVmdGFycm93fEdyZWF0ZXJFcXVhbExlc3N8ZG93bmhhcnBvb25yaWdodHxSaWdodFRyaWFuZ2xlQmFyfG50cmlhbmdsZXJpZ2h0ZXF8Tm90U3VwZXJzZXRFcXVhbHxMZWZ0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsQWN1dGV8cmlnaHRyaWdodGFycm93c3x2YXJ0cmlhbmdsZXJpZ2h0fFVwQXJyb3dEb3duQXJyb3d8RGlhY3JpdGljYWxHcmF2ZXxVbmRlclBhcmVudGhlc2lzfEVtcHR5U21hbGxTcXVhcmV8TGVmdFVwVmVjdG9yQmFyfGxlZnRyaWdodGFycm93c3xEb3duUmlnaHRWZWN0b3J8ZG93bmhhcnBvb25sZWZ0fHRyaWFuZ2xlcmlnaHRlcXxTaG9ydFJpZ2h0QXJyb3d8T3ZlclBhcmVudGhlc2lzfERvdWJsZUxlZnRBcnJvd3xEb3VibGVEb3duQXJyb3d8Tm90U3F1YXJlU3Vic2V0fGJpZ3RyaWFuZ2xlZG93bnxudHJpYW5nbGVsZWZ0ZXF8VXBwZXJSaWdodEFycm93fGN1cnZlYXJyb3dyaWdodHx2YXJ0cmlhbmdsZWxlZnR8Tm90TGVmdFRyaWFuZ2xlfG5sZWZ0cmlnaHRhcnJvd3xMb3dlclJpZ2h0QXJyb3d8Tm90SHVtcERvd25IdW1wfE5vdEdyZWF0ZXJUaWxkZXxyaWdodHRocmVldGltZXN8TGVmdFVwVGVlVmVjdG9yfE5vdEdyZWF0ZXJFcXVhbHxzdHJhaWdodGVwc2lsb258TGVmdFRyaWFuZ2xlQmFyfHJpZ2h0c3F1aWdhcnJvd3xDb250b3VySW50ZWdyYWx8cmlnaHRsZWZ0YXJyb3dzfENsb3NlQ3VybHlRdW90ZXxSaWdodERvd25WZWN0b3J8TGVmdFJpZ2h0VmVjdG9yfG5MZWZ0cmlnaHRhcnJvd3xsZWZ0aGFycG9vbmRvd258Y2lyY2xlYXJyb3dsZWZ0fFNxdWFyZVN1cGVyc2V0fE9wZW5DdXJseVF1b3RlfGhvb2tyaWdodGFycm93fEhvcml6b250YWxMaW5lfERpYWNyaXRpY2FsRG90fE5vdExlc3NHcmVhdGVyfG50cmlhbmdsZXJpZ2h0fERvdWJsZVJpZ2h0VGVlfEludmlzaWJsZUNvbW1hfEludmlzaWJsZVRpbWVzfExvd2VyTGVmdEFycm93fERvd25MZWZ0VmVjdG9yfE5vdFN1YnNldEVxdWFsfGN1cnZlYXJyb3dsZWZ0fHRyaWFuZ2xlbGVmdGVxfE5vdFZlcnRpY2FsQmFyfFRpbGRlRnVsbEVxdWFsfGRvd25kb3duYXJyb3dzfE5vdEdyZWF0ZXJMZXNzfFJpZ2h0VGVlVmVjdG9yfFplcm9XaWR0aFNwYWNlfGxvb3BhcnJvd3JpZ2h0fExvbmdSaWdodEFycm93fGRvdWJsZWJhcndlZGdlfFNob3J0TGVmdEFycm93fFNob3J0RG93bkFycm93fFJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJHcmVhdGVyfFJldmVyc2VFbGVtZW50fHJpZ2h0aGFycG9vbnVwfExlc3NTbGFudEVxdWFsfGxlZnR0aHJlZXRpbWVzfHVwaGFycG9vbnJpZ2h0fHJpZ2h0YXJyb3d0YWlsfExlZnREb3duVmVjdG9yfExvbmdyaWdodGFycm93fE5lc3RlZExlc3NMZXNzfFVwcGVyTGVmdEFycm93fG5zaG9ydHBhcmFsbGVsfGxlZnRsZWZ0YXJyb3dzfGxlZnRyaWdodGFycm93fExlZnRyaWdodGFycm93fExlZnRSaWdodEFycm93fGxvbmdyaWdodGFycm93fHVwaGFycG9vbmxlZnR8UmlnaHRBcnJvd0JhcnxBcHBseUZ1bmN0aW9ufExlZnRUZWVWZWN0b3J8bGVmdGFycm93dGFpbHxOb3RFcXVhbFRpbGRlfHZhcnN1YnNldG5lcXF8dmFyc3Vwc2V0bmVxcXxSaWdodFRlZUFycm93fFN1Y2NlZWRzRXF1YWx8U3VjY2VlZHNUaWxkZXxMZWZ0VmVjdG9yQmFyfFN1cGVyc2V0RXF1YWx8aG9va2xlZnRhcnJvd3xEaWZmZXJlbnRpYWxEfFZlcnRpY2FsVGlsZGV8VmVyeVRoaW5TcGFjZXxibGFja3RyaWFuZ2xlfGJpZ3RyaWFuZ2xldXB8TGVzc0Z1bGxFcXVhbHxkaXZpZGVvbnRpbWVzfGxlZnRoYXJwb29udXB8VXBFcXVpbGlicml1bXxudHJpYW5nbGVsZWZ0fFJpZ2h0VHJpYW5nbGV8bWVhc3VyZWRhbmdsZXxzaG9ydHBhcmFsbGVsfGxvbmdsZWZ0YXJyb3d8TG9uZ2xlZnRhcnJvd3xMb25nTGVmdEFycm93fERvdWJsZUxlZnRUZWV8UG9pbmNhcmVwbGFuZXxQcmVjZWRlc0VxdWFsfHRyaWFuZ2xlcmlnaHR8RG91YmxlVXBBcnJvd3xSaWdodFVwVmVjdG9yfGZhbGxpbmdkb3RzZXF8bG9vcGFycm93bGVmdHxQcmVjZWRlc1RpbGRlfE5vdFRpbGRlRXF1YWx8Tm90VGlsZGVUaWxkZXxzbWFsbHNldG1pbnVzfFByb3BvcnRpb25hbHx0cmlhbmdsZWxlZnR8dHJpYW5nbGVkb3dufFVuZGVyQnJhY2tldHxOb3RIdW1wRXF1YWx8ZXhwb25lbnRpYWxlfEV4cG9uZW50aWFsRXxOb3RMZXNzVGlsZGV8SGlsYmVydFNwYWNlfFJpZ2h0Q2VpbGluZ3xibGFja2xvemVuZ2V8dmFyc3Vwc2V0bmVxfEh1bXBEb3duSHVtcHxHcmVhdGVyRXF1YWx8VmVydGljYWxMaW5lfExlZnRUZWVBcnJvd3xOb3RMZXNzRXF1YWx8RG93blRlZUFycm93fExlZnRUcmlhbmdsZXx2YXJzdWJzZXRuZXF8SW50ZXJzZWN0aW9ufE5vdENvbmdydWVudHxEb3duQXJyb3dCYXJ8TGVmdFVwVmVjdG9yfExlZnRBcnJvd0JhcnxyaXNpbmdkb3RzZXF8R3JlYXRlclRpbGRlfFJvdW5kSW1wbGllc3xTcXVhcmVTdWJzZXR8U2hvcnRVcEFycm93fE5vdFN1cGVyc2V0fHF1YXRlcm5pb25zfHByZWNuYXBwcm94fGJhY2tlcHNpbG9ufHByZWNjdXJseWVxfE92ZXJCcmFja2V0fGJsYWNrc3F1YXJlfE1lZGl1bVNwYWNlfFZlcnRpY2FsQmFyfGNpcmNsZWRjaXJjfGNpcmNsZWRkYXNofENpcmNsZU1pbnVzfENpcmNsZVRpbWVzfExlc3NHcmVhdGVyfGN1cmx5ZXFwcmVjfGN1cmx5ZXFzdWNjfGRpYW1vbmRzdWl0fFVwRG93bkFycm93fFVwZG93bmFycm93fFJ1bGVEZWxheWVkfFJyaWdodGFycm93fHVwZG93bmFycm93fFJpZ2h0VmVjdG9yfG5SaWdodGFycm93fG5yaWdodGFycm93fGVxc2xhbnRsZXNzfExlZnRDZWlsaW5nfEVxdWlsaWJyaXVtfFNtYWxsQ2lyY2xlfGV4cGVjdGF0aW9ufE5vdFN1Y2NlZWRzfHRoaWNrYXBwcm94fEdyZWF0ZXJMZXNzfFNxdWFyZVVuaW9ufE5vdFByZWNlZGVzfE5vdExlc3NMZXNzfHN0cmFpZ2h0cGhpfHN1Y2NuYXBwcm94fHN1Y2NjdXJseWVxfFN1YnNldEVxdWFsfHNxc3Vwc2V0ZXF8UHJvcG9ydGlvbnxMYXBsYWNldHJmfEltYWdpbmFyeUl8c3Vwc2V0bmVxcXxOb3RHcmVhdGVyfGd0cmVxcWxlc3N8Tm90RWxlbWVudHxUaGlja1NwYWNlfFRpbGRlRXF1YWx8VGlsZGVUaWxkZXxGb3VyaWVydHJmfHJtb3VzdGFjaGV8RXF1YWxUaWxkZXxlcXNsYW50Z3RyfFVuZGVyQnJhY2V8TGVmdFZlY3RvcnxVcEFycm93QmFyfG5MZWZ0YXJyb3d8bnN1YnNldGVxcXxzdWJzZXRuZXFxfG5zdXBzZXRlcXF8bmxlZnRhcnJvd3xzdWNjYXBwcm94fGxlc3NhcHByb3h8VXBUZWVBcnJvd3x1cHVwYXJyb3dzfGN1cmx5d2VkZ2V8bGVzc2VxcWd0cnx2YXJlcHNpbG9ufHZhcm5vdGhpbmd8UmlnaHRGbG9vcnxjb21wbGVtZW50fENpcmNsZVBsdXN8c3FzdWJzZXRlcXxMbGVmdGFycm93fGNpcmNsZWRhc3R8UmlnaHRBcnJvd3xSaWdodGFycm93fHJpZ2h0YXJyb3d8bG1vdXN0YWNoZXxCZXJub3VsbGlzfHByZWNhcHByb3h8bWFwc3RvbGVmdHxtYXBzdG9kb3dufGxvbmdtYXBzdG98ZG90c3F1YXJlfGRvd25hcnJvd3xEb3VibGVEb3R8bnN1YnNldGVxfHN1cHNldG5lcXxsZWZ0YXJyb3d8bnN1cHNldGVxfHN1YnNldG5lcXxUaGluU3BhY2V8bmdlcXNsYW50fHN1YnNldGVxcXxIdW1wRXF1YWx8Tm90U3Vic2V0fHRyaWFuZ2xlcXxOb3RDdXBDYXB8bGVzc2VxZ3RyfGhlYXJ0c3VpdHxUcmlwbGVEb3R8TGVmdGFycm93fENvcHJvZHVjdHxDb25ncnVlbnR8dmFycHJvcHRvfGNvbXBsZXhlc3xndmVydG5lcXF8TGVmdEFycm93fExlc3NUaWxkZXxzdXBzZXRlcXF8TWludXNQbHVzfENpcmNsZURvdHxubGVxc2xhbnR8Tm90RXhpc3RzfGd0cmVxbGVzc3xucGFyYWxsZWx8VW5pb25QbHVzfExlZnRGbG9vcnxjaGVja21hcmt8Q2VudGVyRG90fGNlbnRlcmRvdHxNZWxsaW50cmZ8Z3RyYXBwcm94fGJpZ290aW1lc3xPdmVyQnJhY2V8c3BhZGVzdWl0fHRoZXJlZm9yZXxwaXRjaGZvcmt8cmF0aW9uYWxzfFBsdXNNaW51c3xCYWNrc2xhc2h8VGhlcmVmb3JlfERvd25CcmV2ZXxiYWNrc2ltZXF8YmFja3ByaW1lfERvd25BcnJvd3xuc2hvcnRtaWR8RG93bmFycm93fGx2ZXJ0bmVxcXxlcXZwYXJzbHxpbWFnbGluZXxpbWFncGFydHxpbmZpbnRpZXxpbnRlZ2Vyc3xJbnRlZ3JhbHxpbnRlcmNhbHxMZXNzTGVzc3xVYXJyb2NpcnxpbnRsYXJoa3xzcXN1cHNldHxhbmdtc2RhZnxzcXN1YnNldHxsbGNvcm5lcnx2YXJ0aGV0YXxjdXBicmNhcHxsbmFwcHJveHxTdXBlcnNldHxTdWNoVGhhdHxzdWNjbnNpbXxzdWNjbmVxcXxhbmdtc2RhZ3xiaWd1cGx1c3xjdXJseXZlZXx0cnBleml1bXxTdWNjZWVkc3xOb3RUaWxkZXxiaWd3ZWRnZXxhbmdtc2RhaHxhbmdydHZiZHx0cmltaW51c3xjd2NvbmludHxmcGFydGludHxscmNvcm5lcnxzbWVwYXJzbHxzdWJzZXRlcXx1cmNvcm5lcnxsdXJkc2hhcnxsYWVtcHR5dnxERG90cmFoZHxhcHByb3hlcXxsZHJ1c2hhcnxhd2NvbmludHxtYXBzdG91cHxiYWNrY29uZ3xzaG9ydG1pZHx0cmlhbmdsZXxnZXFzbGFudHxnZXNkb3RvbHx0aW1lc2JhcnxjaXJjbGVkUnxjaXJjbGVkU3xzZXRtaW51c3xtdWx0aW1hcHxuYXR1cmFsc3xzY3BvbGludHxuY29uZ2RvdHxSaWdodFRlZXxib3htaW51c3xnbmFwcHJveHxib3h0aW1lc3xhbmRzbG9wZXx0aGlja3NpbXxhbmdtc2RhYXx2YXJzaWdtYXxjaXJmbmludHxydHJpbHRyaXxhbmdtc2RhYnxycHBvbGludHxhbmdtc2RhY3xiYXJ3ZWRnZXxkcmJrYXJvd3xjbHVic3VpdHx0aGV0YXN5bXxic29saHN1YnxjYXBicmN1cHxkemlncmFycnxkb3RlcWRvdHxEb3RFcXVhbHxkb3RtaW51c3xVbmRlckJhcnxOb3RFcXVhbHxyZWFscGFydHxvdGltZXNhc3x1bGNvcm5lcnxoa3NlYXJvd3xoa3N3YXJvd3xwYXJhbGxlbHxQYXJ0aWFsRHxlbGludGVyc3xlbXB0eXNldHxwbHVzYWNpcnxiYnJrdGJya3xhbmdtc2RhZHxwb2ludGludHxiaWdvcGx1c3xhbmdtc2RhZXxQcmVjZWRlc3xiaWdzcWN1cHx2YXJrYXBwYXxub3RpbmRvdHxzdXBzZXRlcXxwcmVjbmVxcXxwcmVjbnNpbXxwcm9mYWxhcnxwcm9mbGluZXxwcm9mc3VyZnxsZXFzbGFudHxsZXNkb3RvcnxyYWVtcHR5dnxzdWJwbHVzfG5vdG5pdmJ8bm90bml2Y3xzdWJyYXJyfHppZ3JhcnJ8dnppZ3phZ3xzdWJtdWx0fHN1YmVkb3R8RWxlbWVudHxiZXR3ZWVufGNpcnNjaXJ8bGFycmJmc3xsYXJyc2ltfGxvdGltZXN8bGJya3NsZHxsYnJrc2x1fGxvemVuZ2V8bGRyZGhhcnxkYmthcm93fGJpZ2NpcmN8ZXBzaWxvbnxzaW1yYXJyfHNpbXBsdXN8bHRxdWVzdHxFcHNpbG9ufGx1cnVoYXJ8Z3RxdWVzdHxtYWx0ZXNlfG5wb2xpbnR8ZXFjb2xvbnxucHJlY2VxfGJpZ29kb3R8ZGRhZ2dlcnxndHJsZXNzfGJuZXF1aXZ8aGFycmNpcnxkZG90c2VxfGVxdWl2RER8YmFja3NpbXxkZW1wdHl2fG5zcXN1YmV8bnNxc3VwZXxVcHNpbG9ufG5zdWJzZXR8dXBzaWxvbnxtaW51c2R1fG5zdWNjZXF8c3dhcnJvd3xuc3Vwc2V0fGNvbG9uZXF8c2VhcnJvd3xib3hwbHVzfG5hcHByb3h8bmF0dXJhbHxhc3ltcGVxfGFsZWZzeW18Y29uZ2RvdHxuZWFycm93fGJpZ3N0YXJ8ZGlhbW9uZHxzdXBwbHVzfHRyaXRpbWV8TGVmdFRlZXxudmluZmlufHRyaXBsdXN8TmV3TGluZXxudmx0cmllfG52cnRyaWV8bndhcnJvd3xuZXhpc3RzfERpYW1vbmR8cnVsdWhhcnxJbXBsaWVzfHN1cG11bHR8YW5nemFycnxzdXBsYXJyfHN1cGhzdWJ8cXVlc3RlcXxiZWNhdXNlfGRpZ2FtbWF8QmVjYXVzZXxvbGNyb3NzfGJlbXB0eXZ8b21pY3JvbnxPbWljcm9ufHJvdGltZXN8Tm9CcmVha3xpbnRwcm9kfGFuZ3J0dmJ8b3JkZXJvZnx1d2FuZ2xlfHN1cGhzb2x8bGVzZG90b3xvcnNsb3BlfERvd25UZWV8cmVhbGluZXxjdWRhcnJsfHJkbGRoYXJ8T3ZlckJhcnxzdXBlZG90fGxlc3Nkb3R8c3VwZHN1Ynx0b3Bmb3JrfHN1Y2NzaW18cmJya3NsdXxyYnJrc2xkfHBlcnRlbmt8Y3VkYXJycnxpc2luZG90fHBsYW5ja2h8bGVzc2d0cnxwbHVzY2lyfGdlc2RvdG98cGx1c3NpbXxwbHVzdHdvfGxlc3NzaW18Y3VsYXJycHxyYXJyc2ltfENheWxleXN8bm90aW52YXxub3RpbnZifG5vdGludmN8VXBBcnJvd3xVcGFycm93fHVwYXJyb3d8Tm90TGVzc3xkd2FuZ2xlfHByZWNzaW18UHJvZHVjdHxjdXJhcnJtfENjb25pbnR8ZG90cGx1c3xyYXJyYmZzfGNjdXBzc218Q2VkaWxsYXxjZW1wdHl2fG5vdG5pdmF8cXVhdGludHxmcmFjMzV8ZnJhYzM4fGZyYWM0NXxmcmFjNTZ8ZnJhYzU4fGZyYWM3OHx0cmlkb3R8eG9wbHVzfGdhY3V0ZXxnYW1tYWR8R2FtbWFkfGxmaXNodHxsZmxvb3J8YmlnY3VwfHNxc3VwZXxnYnJldmV8R2JyZXZlfGxoYXJ1bHxzcXN1YmV8c3FjdXBzfEdjZWRpbHxhcGFjaXJ8bGxoYXJkfGxtaWRvdHxMbWlkb3R8bG1vdXN0fGFuZGFuZHxzcWNhcHN8YXBwcm94fEFicmV2ZXxzcGFkZXN8Y2lyY2VxfHRwcmltZXxkaXZpZGV8dG9wY2lyfEFzc2lnbnx0b3Bib3R8Z2VzZG90fGRpdm9ueHx4dXBsdXN8dGltZXNkfGdlc2xlc3xhdGlsZGV8c29sYmFyfFNPRlRjeXxsb3BsdXN8dGltZXNifGxvd2FzdHxsb3diYXJ8ZGxjb3JufGRsY3JvcHxzb2Z0Y3l8ZG9sbGFyfGxwYXJsdHx0aGtzaW18bHJoYXJkfEF0aWxkZXxsc2FxdW98c21hc2hwfGJpZ3ZlZXx0aGluc3B8d3JlYXRofGJrYXJvd3xsc3F1b3J8bHN0cm9rfExzdHJva3xsdGhyZWV8bHRpbWVzfGx0bGFycnxEb3REb3R8c2ltZG90fGx0clBhcnx3ZWllcnB8eHNxY3VwfGFuZ21zZHxzaWdtYXZ8c2lnbWFmfHplZXRyZnxaY2Fyb258emNhcm9ufG1hcHN0b3x2c3VwbmV8dGhldGF2fGNpcm1pZHxtYXJrZXJ8bWNvbW1hfFphY3V0ZXx2c3VibkV8dGhlcmU0fGd0bFBhcnx2c3VibmV8Ym90dG9tfGd0cmFycnxTSENIY3l8c2hjaGN5fG1pZGFzdHxtaWRjaXJ8bWlkZG90fG1pbnVzYnxtaW51c2R8Z3RyZG90fGJvd3RpZXxzZnJvd258bW5wbHVzfG1vZGVsc3xjb2xvbmV8c2Vzd2FyfENvbG9uZXxtc3Rwb3N8c2VhcmhrfGd0cnNpbXxuYWN1dGV8TmFjdXRlfGJveGJveHx0ZWxyZWN8aGFpcnNwfFRjZWRpbHxuYnVtcGV8c2Nuc2ltfG5jYXJvbnxOY2Fyb258bmNlZGlsfE5jZWRpbHxoYW1pbHR8U2NlZGlsfG5lYXJoa3xoYXJkY3l8SEFSRGN5fHRjZWRpbHxUY2Fyb258Y29tbWF0fG5lcXVpdnxuZXNlYXJ8dGNhcm9ufHRhcmdldHxoZWFydHN8bmV4aXN0fHZhcnJob3xzY2VkaWx8U2Nhcm9ufHNjYXJvbnxoZWxsaXB8U2FjdXRlfHNhY3V0ZXxoZXJjb258c3dud2FyfGNvbXBmbnxydGltZXN8cnRocmVlfHJzcXVvcnxyc2FxdW98emFjdXRlfHdlZGdlcXxob210aHR8YmFydmVlfGJhcndlZHxCYXJ3ZWR8cnBhcmd0fGhvcmJhcnxjb25pbnR8c3dhcmhrfHJvcGx1c3xubHRyaWV8aHNsYXNofGhzdHJva3xIc3Ryb2t8cm1vdXN0fENvbmludHxicHJpbWV8aHlidWxsfGh5cGhlbnxpYWN1dGV8SWFjdXRlfHN1cHN1cHxzdXBzdWJ8c3Vwc2ltfHZhcnBoaXxjb3Byb2R8YnJ2YmFyfGFncmF2ZXxTdXBzZXR8c3Vwc2V0fGlncmF2ZXxJZ3JhdmV8bm90aW5FfEFncmF2ZXxpaWlpbnR8aWluZmlufGNvcHlzcnx3ZWRiYXJ8VmVyYmFyfHZhbmdydHxiZWNhdXN8aW5jYXJlfHZlcmJhcnxpbm9kb3R8YnVsbGV0fGRyY29ybnxpbnRjYWx8ZHJjcm9wfGN1bGFycnx2ZWxsaXB8VXRpbGRlfGJ1bXBlcXxjdXBjYXB8ZHN0cm9rfERzdHJva3xDdXBDYXB8Y3VwY3VwfGN1cGRvdHxlYWN1dGV8RWFjdXRlfHN1cGRvdHxpcXVlc3R8ZWFzdGVyfGVjYXJvbnxFY2Fyb258ZWNvbG9ufGlzaW5zdnx1dGlsZGV8aXRpbGRlfEl0aWxkZXxjdXJhcnJ8c3VjY2VxfEJ1bXBlcXxjYWN1dGV8dWxjcm9wfG5wYXJzbHxDYWN1dGV8bnByY3VlfGVncmF2ZXxFZ3JhdmV8bnJhcnJjfG5yYXJyd3xzdWJzdXB8c3Vic3VifG5ydHJpZXxqc2VyY3l8bnNjY3VlfEpzZXJjeXxrYXBwYXZ8a2NlZGlsfEtjZWRpbHxzdWJzaW18dWxjb3JufG5zaW1lcXxlZ3Nkb3R8dmVlYmFyfGtncmVlbnxjYXBhbmR8ZWxzZG90fFN1YnNldHxzdWJzZXR8Y3VycmVufGFhY3V0ZXxsYWN1dGV8TGFjdXRlfGVtcHR5dnxudGlsZGV8TnRpbGRlfGxhZ3JhbnxsYW1iZGF8TGFtYmRhfGNhcGNhcHxVZ3JhdmV8bGFuZ2xlfHN1YmRvdHxlbXNwMTN8bnVtZXJvfGVtc3AxNHxudmRhc2h8bnZEYXNofG5WZGFzaHxuVkRhc2h8dWdyYXZlfHVmaXNodHxudkhhcnJ8bGFycmZzfG52bEFycnxsYXJyaGt8bGFycmxwfGxhcnJwbHxudnJBcnJ8VWRibGFjfG53YXJoa3xsYXJydGx8bnduZWFyfG9hY3V0ZXxPYWN1dGV8bGF0YWlsfGxBdGFpbHxzc3RhcmZ8bGJyYWNlfG9kYmxhY3xPZGJsYWN8bGJyYWNrfHVkYmxhY3xvZHNvbGR8ZXBhcnNsfGxjYXJvbnxMY2Fyb258b2dyYXZlfE9ncmF2ZXxsY2VkaWx8TGNlZGlsfEFhY3V0ZXxzc21pbGV8c3NldG1ufHNxdWFyZnxsZHF1b3J8Y2FwY3VwfG9taW51c3xjeWxjdHl8cmhhcnVsfGVxY2lyY3xkYWdnZXJ8cmZsb29yfHJmaXNodHxEYWdnZXJ8ZGFsZXRofGVxdWFsc3xvcmlnb2Z8Y2FwZG90fGVxdWVzdHxkY2Fyb258RGNhcm9ufHJkcXVvcnxvc2xhc2h8T3NsYXNofG90aWxkZXxPdGlsZGV8b3RpbWVzfE90aW1lc3x1cmNyb3B8VWJyZXZlfHVicmV2ZXxZYWN1dGV8VWFjdXRlfHVhY3V0ZXxSY2VkaWx8cmNlZGlsfHVyY29ybnxwYXJzaW18UmNhcm9ufFZkYXNobHxyY2Fyb258VHN0cm9rfHBlcmNudHxwZXJpb2R8cGVybWlsfEV4aXN0c3x5YWN1dGV8cmJyYWNrfHJicmFjZXxwaG1tYXR8Y2Nhcm9ufENjYXJvbnxwbGFuY2t8Y2NlZGlsfHBsYW5rdnx0c3Ryb2t8ZmVtYWxlfHBsdXNkb3xwbHVzZHV8ZmZpbGlnfHBsdXNtbnxmZmxsaWd8Q2NlZGlsfHJBdGFpbHxkZmlzaHR8YmVybm91fHJhdGFpbHxSYXJydGx8cmFycnRsfGFuZ3NwaHxyYXJycGx8cmFycmxwfHJhcnJoa3x4d2VkZ2V8eG90aW1lfGZvcmFsbHxGb3JBbGx8VnZkYXNofHZzdXBuRXxwcmVjZXF8YmlnY2FwfGZyYWMxMnxmcmFjMTN8ZnJhYzE0fHByaW1lc3xyYXJyZnN8cHJuc2ltfGZyYWMxNXxTcXVhcmV8ZnJhYzE2fHNxdWFyZXxsZXNkb3R8ZnJhYzE4fGZyYWMyM3xwcm9wdG98cHJ1cmVsfHJhcnJhcHxyYW5nbGV8cHVuY3NwfGZyYWMyNXxSYWN1dGV8cXByaW1lfHJhY3V0ZXxsZXNnZXN8ZnJhYzM0fGFicmV2ZXxBRWxpZ3xlcXNpbXx1dGRvdHxzZXRtbnx1cnRyaXxFcXVhbHxVcmluZ3xzZUFycnx1cmluZ3xzZWFycnxkYXNodnxEYXNodnxtdW1hcHxuYWJsYXxpb2dvbnxJb2dvbnxzZG90ZXxzZG90YnxzY3NpbXxuYXBpZHxuYXBvc3xlcXVpdnxuYXR1cnxBY2lyY3xkYmxhY3xlcmFycnxuYnVtcHxpcHJvZHxlckRvdHx1Y2lyY3xhd2ludHxlc2RvdHxhbmdydHxuY29uZ3xpc2luRXxzY25hcHxTY2lyY3xzY2lyY3xuZGFzaHxpc2luc3xVYnJjeXxuZWFycnxuZUFycnxpc2ludnxuZWRvdHx1YnJjeXxhY3V0ZXxZY2lyY3xpdWtjeXxJdWtjeXx4dXRyaXxuZXNpbXxjYXJldHxqY2lyY3xKY2lyY3xjYXJvbnx0d2l4dHxkZGFycnxzY2N1ZXxleGlzdHxqbWF0aHxzYnF1b3xuZ2VxcXxhbmdzdHxjY2Fwc3xsY2VpbHxuZ3NpbXxVcFRlZXxkZWx0YXxEZWx0YXxydHJpZnxuaGFycnxuaEFycnxuaHBhcnxydHJpZXxqdWtjeXxKdWtjeXxrYXBwYXxyc3F1b3xLYXBwYXxubGFycnxubEFycnxUU0hjeXxycmFycnxhb2dvbnxBb2dvbnxmZmxpZ3x4cmFycnx0c2hjeXxjY2lyY3xubGVxcXxmaWxpZ3x1cHNpaHxubGVzc3xkaGFybHxubHNpbXxmamxpZ3xyb3BhcnxubHRyaXxkaGFycnxyb2Jya3xyb2FycnxmbGxpZ3xmbHRuc3xyb2FuZ3xybm1pZHxzdWJuRXxzdWJuZXxsQWFycnx0cmlzYnxDY2lyY3xhY2lyY3xjY3Vwc3xibGFua3xWRGFzaHxmb3JrdnxWZGFzaHxsYW5nZHxjZWRpbHxibGsxMnxibGsxNHxsYXF1b3xzdHJuc3xkaWFtc3xub3Rpbnx2RGFzaHxsYXJyYnxibGszNHxibG9ja3xkaXNpbnx1cGx1c3x2ZGFzaHx2QmFydnxhZWxpZ3xzdGFyZnxXZWRnZXxjaGVja3x4ckFycnxsYXRlc3xsYmFycnxsQmFycnxub3RuaXxsYmJya3xiY29uZ3xmcmFzbHxsYnJrZXxmcm93bnx2cnRyaXx2cHJvcHx2bnN1cHxnYW1tYXxHYW1tYXx3ZWRnZXx4b2RvdHxiZHF1b3xzcmFycnxkb3RlcXxsZHF1b3xib3hkbHxib3hkTHxnY2lyY3xHY2lyY3xib3hEbHxib3hETHxib3hkcnxib3hkUnxib3hEcnxUUkFERXx0cmFkZXxybGhhcnxib3hEUnx2bnN1YnxucGFydHx2bHRyaXxybGFycnxib3hoZHxib3hoRHxucHJlY3xnZXNjY3xucmFycnxuckFycnxib3hIZHxib3hIRHxib3hodXxib3hoVXxucnRyaXxib3hIdXxjbHVic3xib3hIVXx0aW1lc3xjb2xvbnxDb2xvbnxnaW1lbHx4bEFycnxUaWxkZXxuc2ltZXx0aWxkZXxuc21pZHxuc3BhcnxUSE9STnx0aG9ybnx4bGFycnxuc3ViZXxuc3ViRXx0aGthcHx4aEFycnxjb21tYXxuc3VjY3xib3h1bHxib3h1THxuc3VwZXxuc3VwRXxnbmVxcXxnbnNpbXxib3hVbHxib3hVTHxncmF2ZXxib3h1cnxib3h1Unxib3hVcnxib3hVUnxsZXNjY3xhbmdsZXxiZXBzaXxib3h2aHx2YXJwaXxib3h2SHxudW1zcHxUaGV0YXxnc2ltZXxnc2ltbHx0aGV0YXxib3hWaHxib3hWSHxib3h2bHxndGNpcnxndGRvdHxib3h2THxib3hWbHxib3hWTHxjcmFycnxjcm9zc3xDcm9zc3xudnNpbXxib3h2cnxud2Fycnxud0FycnxzcXN1cHxkdGRvdHxVb2dvbnxsaGFyZHxsaGFydXxkdHJpZnxvY2lyY3xPY2lyY3xsaGJsa3xkdWFycnxvZGFzaHxzcXN1YnxIYWNla3xzcWN1cHxsbGFycnxkdWhhcnxvZWxpZ3xPRWxpZ3xvZmNpcnxib3h2Unx1b2dvbnxsbHRyaXxib3hWcnxjc3ViZXx1dWFycnxvaGJhcnxjc3VwZXxjdGRvdHxvbGFycnxvbGNpcnxoYXJyd3xvbGluZXxzcWNhcHxvbWFjcnxPbWFjcnxvbWVnYXxPbWVnYXxib3hWUnxhbGVwaHxsbmVxcXxsbnNpbXxsb2FuZ3xsb2FycnxyaGFydXxsb2Jya3xoY2lyY3xvcGVycHxvcGx1c3xyaGFyZHxIY2lyY3xvcmFycnxVbmlvbnxvcmRlcnxlY2lyY3xFY2lyY3xjdWVwcnxzemxpZ3xjdWVzY3xicmV2ZXxyZWFsc3xlRERvdHxCcmV2ZXxob2Fycnxsb3Bhcnx1dHJpZnxyZHF1b3xVbWFjcnx1bWFjcnxlZkRvdHxzd0Fycnx1bHRyaXxhbHBoYXxyY2VpbHxvdmJhcnxzd2FycnxXY2lyY3x3Y2lyY3xzbXRlc3xzbWlsZXxic2VtaXxscmFycnxhcmluZ3xwYXJzbHxscmhhcnxic2ltZXx1aGJsa3xscnRyaXxjdXBvcnxBcmluZ3x1aGFycnx1aGFybHxzbGFycnxyYnJrZXxic29sYnxsc2ltZXxyYmJya3xSQmFycnxsc2ltZ3xwaG9uZXxyQmFycnxyYmFycnxpY2lyY3xsc3F1b3xJY2lyY3xlbWFjcnxFbWFjcnxyYXRpb3xzaW1uZXxwbHVzYnxzaW1sRXxzaW1nRXxzaW1lcXxwbHVzZXxsdGNpcnxsdGRvdHxlbXB0eXx4aGFycnx4ZHRyaXxpZXhjbHxBbHBoYXxsdHJpZXxyYXJyd3xwb3VuZHxsdHJpZnx4Y2lyY3xidW1wZXxwcmN1ZXxidW1wRXxhc3ltcHxhbWFjcnxjdXZlZXxTaWdtYXxzaWdtYXxpaWludHx1ZGhhcnxpaW90YXxpamxpZ3xJSmxpZ3xzdXBuRXxpbWFjcnxJbWFjcnxwcmltZXxQcmltZXxpbWFnZXxwcm5hcHxlb2dvbnxFb2dvbnxyYXJyY3xtZGFzaHxtRERvdHxjdXdlZHxpbWF0aHxzdXBuZXxpbXBlZHxBbWFjcnx1ZGFycnxwcnNpbXxtaWNyb3xyYXJyYnxjd2ludHxyYXF1b3xpbmZpbnxlcGx1c3xyYW5nZXxyYW5nZHxVY2lyY3xyYWRpY3xtaW51c3xhbWFsZ3x2ZWVlcXxyQWFycnxlcHNpdnx5Y2lyY3xxdWVzdHxzaGFycHxxdW90fHp3bmp8UXNjcnxyYWNlfHFzY3J8UW9wZnxxb3BmfHFpbnR8cmFuZ3xSYW5nfFpzY3J8enNjcnxab3BmfHpvcGZ8cmFycnxyQXJyfFJhcnJ8UHNjcnxwc2NyfHByb3B8cHJvZHxwcm5FfHByZWN8WkhjeXx6aGN5fHByYXB8WmV0YXx6ZXRhfFBvcGZ8cG9wZnxaZG90fHBsdXN8emRvdHxZdW1sfHl1bWx8cGhpdnxZVWN5fHl1Y3l8WXNjcnx5c2NyfHBlcnB8WW9wZnx5b3BmfHBhcnR8cGFyYXxZSWN5fE91bWx8cmN1Ynx5aWN5fFlBY3l8cmRjYXxvdW1sfG9zb2x8T3NjcnxyZHNofHlhY3l8cmVhbHxvc2NyfHh2ZWV8YW5kZHxyZWN0fGFuZHZ8WHNjcnxvcm9yfG9yZG18b3JkZnx4c2NyfGFuZ2V8YW9wZnxBb3BmfHJIYXJ8WG9wZnxvcGFyfE9vcGZ8eG9wZnx4bmlzfHJob3Z8b29wZnxvbWlkfHhtYXB8b2ludHxhcGlkfGFwb3N8b2dvbnxhc2NyfEFzY3J8b2RvdHxvZGl2fHhjdXB8eGNhcHxvY2lyfG9hc3R8bnZsdHxudmxlfG52Z3R8bnZnZXxudmFwfFdzY3J8d3NjcnxhdW1sfG50bGd8bnRnbHxuc3VwfG5zdWJ8bnNpbXxOc2NyfG5zY3J8bnNjZXxXb3BmfHJpbmd8bnByZXx3b3BmfG5wYXJ8QXVtbHxCYXJ2fGJicmt8Tm9wZnxub3BmfG5taWR8bkx0dnxiZXRhfHJvcGZ8Um9wZnxCZXRhfGJldGh8bmxlc3xycGFyfG5sZXF8Ym5vdHxiTm90fG5sZHJ8TkpjeXxyc2NyfFJzY3J8VnNjcnx2c2NyfHJzcWJ8bmpjeXxib3BmfG5pc2R8Qm9wZnxydHJpfFZvcGZ8bkd0dnxuZ3RyfHZvcGZ8Ym94aHxib3hIfGJveHZ8bmdlc3xuZ2VxfGJveFZ8YnNjcnxzY2FwfEJzY3J8YnNpbXxWZXJ0fHZlcnR8YnNvbHxidWxsfGJ1bXB8Y2Fwc3xjZG90fG5jdXB8c2NuRXxuY2FwfG5ic3B8bmFwRXxDZG90fGNlbnR8c2RvdHxWYmFyfG5hbmd8dkJhcnxjaGN5fE1zY3J8bXNjcnxzZWN0fHNlbWl8Q0hjeXxNb3BmfG1vcGZ8c2V4dHxjaXJjfGNpcmV8bWxkcnxtbGNwfGNpckV8Y29tcHxzaGN5fFNIY3l8dkFycnx2YXJyfGNvbmd8Y29wZnxDb3BmfGNvcHl8Q09QWXxtYWx0fG1hbGV8bWFjcnxsdm5FfGNzY3J8bHRyaXxzaW1lfGx0Y2N8c2ltZ3xDc2NyfHNpbWx8Y3N1YnxVdW1sfGxzcWJ8bHNpbXx1dW1sfGNzdXB8THNjcnxsc2NyfHV0cml8c21pZHxscGFyfGN1cHN8c210ZXxsb3pmfGRhcnJ8TG9wZnxVc2NyfHNvbGJ8bG9wZnxzb3BmfFNvcGZ8bG5lcXx1c2NyfHNwYXJ8ZEFycnxsbmFwfERhcnJ8ZGFzaHxTcXJ0fExKY3l8bGpjeXxsSGFyfGRIYXJ8VXBzaXx1cHNpfGRpYW18bGVzZ3xkamN5fERKY3l8bGVxcXxkb3BmfERvcGZ8ZHNjcnxEc2NyfGRzY3l8bGRzaHxsZGNhfHNxdWZ8RFNjeXxzc2NyfFNzY3J8ZHNvbHxsY3VifGxhdGV8c3RhcnxTdGFyfFVvcGZ8TGFycnxsQXJyfGxhcnJ8dW9wZnxkdHJpfGR6Y3l8c3ViZXxzdWJFfExhbmd8bGFuZ3xLc2NyfGtzY3J8S29wZnxrb3BmfEtKY3l8a2pjeXxLSGN5fGtoY3l8RFpjeXxlY2lyfGVkb3R8ZURvdHxKc2NyfGpzY3J8c3VjY3xKb3BmfGpvcGZ8RWRvdHx1SGFyfGVtc3B8ZW5zcHxJdW1sfGl1bWx8ZW9wZnxpc2lufElzY3J8aXNjcnxFb3BmfGVwYXJ8c3VuZ3xlcHNpfGVzY3J8c3VwMXxzdXAyfHN1cDN8SW90YXxpb3RhfHN1cGV8c3VwRXxJb3BmfGlvcGZ8SU9jeXxpb2N5fEVzY3J8ZXNpbXxFc2ltfGltb2Z8VWFycnxRVU9UfHVBcnJ8dWFycnxldW1sfElFY3l8aWVjeXxJZG90fEV1bWx8ZXVyb3xleGNsfEhzY3J8aHNjcnxIb3BmfGhvcGZ8VFNjeXx0c2N5fFRzY3J8aGJhcnx0c2NyfGZsYXR8dGJya3xmbm9mfGhBcnJ8aGFycnxoYWxmfGZvcGZ8Rm9wZnx0ZG90fGd2bkV8Zm9ya3x0cmllfGd0Y2N8ZnNjcnxGc2NyfGdkb3R8Z3NpbXxHc2NyfGdzY3J8R29wZnxnb3BmfGduZXF8R2RvdHx0b3NhfGduYXB8VG9wZnx0b3BmfGdlcXF8dG9lYXxHSmN5fGdqY3l8dGludHxnZXNsfG1pZHxTZnJ8Z2dnfHRvcHxnZXN8Z2xhfGdsRXxnbGp8Z2VxfGduZXxnRWx8Z2VsfGduRXxHY3l8Z2N5fGdhcHxUZnJ8dGZyfFRjeXx0Y3l8SGF0fFRhdXxGZnJ8dGF1fFRhYnxoZnJ8SGZyfGZmcnxGY3l8ZmN5fGljeXxJY3l8aWZmfEVUSHxldGh8aWZyfElmcnxFdGF8ZXRhfGludHxJbnR8U3VwfHN1cHx1Y3l8VWN5fFN1bXxzdW18amN5fEVOR3x1ZnJ8VWZyfGVuZ3xKY3l8amZyfGVsc3xlbGx8ZWdzfEVmcnxlZnJ8SmZyfHVtbHxrY3l8S2N5fEVjeXxlY3l8a2ZyfEtmcnxsYXB8U3VifHN1YnxsYXR8bGN5fExjeXxsZWd8RG90fGRvdHxsRWd8bGVxfGxlc3xzcXV8ZGl2fGRpZXxsZnJ8TGZyfGxnRXxEZnJ8ZGZyfERlbHxkZWd8RGN5fGRjeXxsbmV8bG5FfHNvbHxsb3p8c210fEN1cHxscm18Y3VwfGxzaHxMc2h8c2ltfHNoeXxtYXB8TWFwfG1jeXxNY3l8bWZyfE1mcnxtaG98Z2ZyfEdmcnxzZnJ8Y2lyfENoaXxjaGl8bmFwfENmcnx2Y3l8VmN5fGNmcnxTY3l8c2N5fG5jeXxOY3l8dmVlfFZlZXxDYXB8Y2FwfG5mcnxzY0V8c2NlfE5mcnxuZ2V8bmdFfG5HZ3x2ZnJ8VmZyfG5ndHxib3R8bkd0fG5pc3xuaXZ8UnNofHJzaHxubGV8bmxFfGJuZXxCZnJ8YmZyfG5MbHxubHR8bkx0fEJjeXxiY3l8bm90fE5vdHxybG18d2ZyfFdmcnxucHJ8bnNjfG51bXxvY3l8YXN0fE9jeXxvZnJ8eGZyfFhmcnxPZnJ8b2d0fG9obXxhcEV8b2x0fFJob3xhcGV8cmhvfFJmcnxyZnJ8b3JkfFJFR3xhbmd8cmVnfG9ydnxBbmR8YW5kfEFNUHxSY3l8YW1wfEFmcnx5Y3l8WWN5fHllbnx5ZnJ8WWZyfHJjeXxwYXJ8cGN5fFBjeXxwZnJ8UGZyfHBoaXxQaGl8YWZyfEFjeXxhY3l8emN5fFpjeXxwaXZ8YWNFfGFjZHx6ZnJ8WmZyfHByZXxwckV8cHNpfFBzaXxxZnJ8UWZyfHp3anxPcnxnZXxHZ3xndHxnZ3xlbHxvU3xsdHxMdHxMVHxSZXxsZ3xnbHxlZ3xuZXxJbXxpdHxsZXxERHx3cHx3cnxudXxOdXxkZHxsRXxTY3xzY3xwaXxQaXxlZXxhZnxsbHxMbHxyeHxnRXx4aXxwbXxYaXxpY3xwcnxQcnxpbnxuaXxtcHxtdXxhY3xNdXxvcnxhcHxHdHxHVHxpaSk7fCYoQWFjdXRlfEFncmF2ZXxBdGlsZGV8Q2NlZGlsfEVhY3V0ZXxFZ3JhdmV8SWFjdXRlfElncmF2ZXxOdGlsZGV8T2FjdXRlfE9ncmF2ZXxPc2xhc2h8T3RpbGRlfFVhY3V0ZXxVZ3JhdmV8WWFjdXRlfGFhY3V0ZXxhZ3JhdmV8YXRpbGRlfGJydmJhcnxjY2VkaWx8Y3VycmVufGRpdmlkZXxlYWN1dGV8ZWdyYXZlfGZyYWMxMnxmcmFjMTR8ZnJhYzM0fGlhY3V0ZXxpZ3JhdmV8aXF1ZXN0fG1pZGRvdHxudGlsZGV8b2FjdXRlfG9ncmF2ZXxvc2xhc2h8b3RpbGRlfHBsdXNtbnx1YWN1dGV8dWdyYXZlfHlhY3V0ZXxBRWxpZ3xBY2lyY3xBcmluZ3xFY2lyY3xJY2lyY3xPY2lyY3xUSE9STnxVY2lyY3xhY2lyY3xhY3V0ZXxhZWxpZ3xhcmluZ3xjZWRpbHxlY2lyY3xpY2lyY3xpZXhjbHxsYXF1b3xtaWNyb3xvY2lyY3xwb3VuZHxyYXF1b3xzemxpZ3x0aG9ybnx0aW1lc3x1Y2lyY3xBdW1sfENPUFl8RXVtbHxJdW1sfE91bWx8UVVPVHxVdW1sfGF1bWx8Y2VudHxjb3B5fGV1bWx8aXVtbHxtYWNyfG5ic3B8b3JkZnxvcmRtfG91bWx8cGFyYXxxdW90fHNlY3R8c3VwMXxzdXAyfHN1cDN8dXVtbHx5dW1sfEFNUHxFVEh8UkVHfGFtcHxkZWd8ZXRofG5vdHxyZWd8c2h5fHVtbHx5ZW58R1R8TFR8Z3R8bHQpKD8hOykoWz1hLXpBLVowLTldPyl8JiMoWzAtOV0rKSg7Pyl8JiNbeFhdKFthLWZBLUYwLTldKykoOz8pfCYoWzAtOWEtekEtWl0rKS9nLHY9e2FhY3V0ZToiw6EiLEFhY3V0ZToiw4EiLGFicmV2ZToixIMiLEFicmV2ZToixIIiLGFjOiLiiL4iLGFjZDoi4oi/IixhY0U6IuKIvsyzIixhY2lyYzoiw6IiLEFjaXJjOiLDgiIsYWN1dGU6IsK0IixhY3k6ItCwIixBY3k6ItCQIixhZWxpZzoiw6YiLEFFbGlnOiLDhiIsYWY6IuKBoSIsYWZyOiLwnZSeIixBZnI6IvCdlIQiLGFncmF2ZToiw6AiLEFncmF2ZToiw4AiLGFsZWZzeW06IuKEtSIsYWxlcGg6IuKEtSIsYWxwaGE6Is6xIixBbHBoYToizpEiLGFtYWNyOiLEgSIsQW1hY3I6IsSAIixhbWFsZzoi4qi/IixhbXA6IiYiLEFNUDoiJiIsYW5kOiLiiKciLEFuZDoi4qmTIixhbmRhbmQ6IuKplSIsYW5kZDoi4qmcIixhbmRzbG9wZToi4qmYIixhbmR2OiLiqZoiLGFuZzoi4oigIixhbmdlOiLipqQiLGFuZ2xlOiLiiKAiLGFuZ21zZDoi4oihIixhbmdtc2RhYToi4qaoIixhbmdtc2RhYjoi4qapIixhbmdtc2RhYzoi4qaqIixhbmdtc2RhZDoi4qarIixhbmdtc2RhZToi4qasIixhbmdtc2RhZjoi4qatIixhbmdtc2RhZzoi4qauIixhbmdtc2RhaDoi4qavIixhbmdydDoi4oifIixhbmdydHZiOiLiir4iLGFuZ3J0dmJkOiLipp0iLGFuZ3NwaDoi4oiiIixhbmdzdDoiw4UiLGFuZ3phcnI6IuKNvCIsYW9nb246IsSFIixBb2dvbjoixIQiLGFvcGY6IvCdlZIiLEFvcGY6IvCdlLgiLGFwOiLiiYgiLGFwYWNpcjoi4qmvIixhcGU6IuKJiiIsYXBFOiLiqbAiLGFwaWQ6IuKJiyIsYXBvczoiJyIsQXBwbHlGdW5jdGlvbjoi4oGhIixhcHByb3g6IuKJiCIsYXBwcm94ZXE6IuKJiiIsYXJpbmc6IsOlIixBcmluZzoiw4UiLGFzY3I6IvCdkrYiLEFzY3I6IvCdkpwiLEFzc2lnbjoi4omUIixhc3Q6IioiLGFzeW1wOiLiiYgiLGFzeW1wZXE6IuKJjSIsYXRpbGRlOiLDoyIsQXRpbGRlOiLDgyIsYXVtbDoiw6QiLEF1bWw6IsOEIixhd2NvbmludDoi4oizIixhd2ludDoi4qiRIixiYWNrY29uZzoi4omMIixiYWNrZXBzaWxvbjoiz7YiLGJhY2twcmltZToi4oC1IixiYWNrc2ltOiLiiL0iLGJhY2tzaW1lcToi4ouNIixCYWNrc2xhc2g6IuKIliIsQmFydjoi4qunIixiYXJ2ZWU6IuKKvSIsYmFyd2VkOiLijIUiLEJhcndlZDoi4oyGIixiYXJ3ZWRnZToi4oyFIixiYnJrOiLijrUiLGJicmt0YnJrOiLijrYiLGJjb25nOiLiiYwiLGJjeToi0LEiLEJjeToi0JEiLGJkcXVvOiLigJ4iLGJlY2F1czoi4oi1IixiZWNhdXNlOiLiiLUiLEJlY2F1c2U6IuKItSIsYmVtcHR5djoi4qawIixiZXBzaToiz7YiLGJlcm5vdToi4oSsIixCZXJub3VsbGlzOiLihKwiLGJldGE6Is6yIixCZXRhOiLOkiIsYmV0aDoi4oS2IixiZXR3ZWVuOiLiiawiLGJmcjoi8J2UnyIsQmZyOiLwnZSFIixiaWdjYXA6IuKLgiIsYmlnY2lyYzoi4pevIixiaWdjdXA6IuKLgyIsYmlnb2RvdDoi4qiAIixiaWdvcGx1czoi4qiBIixiaWdvdGltZXM6IuKogiIsYmlnc3FjdXA6IuKohiIsYmlnc3Rhcjoi4piFIixiaWd0cmlhbmdsZWRvd246IuKWvSIsYmlndHJpYW5nbGV1cDoi4pazIixiaWd1cGx1czoi4qiEIixiaWd2ZWU6IuKLgSIsYmlnd2VkZ2U6IuKLgCIsYmthcm93OiLipI0iLGJsYWNrbG96ZW5nZToi4qerIixibGFja3NxdWFyZToi4paqIixibGFja3RyaWFuZ2xlOiLilrQiLGJsYWNrdHJpYW5nbGVkb3duOiLilr4iLGJsYWNrdHJpYW5nbGVsZWZ0OiLil4IiLGJsYWNrdHJpYW5nbGVyaWdodDoi4pa4IixibGFuazoi4pCjIixibGsxMjoi4paSIixibGsxNDoi4paRIixibGszNDoi4paTIixibG9jazoi4paIIixibmU6Ij3ig6UiLGJuZXF1aXY6IuKJoeKDpSIsYm5vdDoi4oyQIixiTm90OiLiq60iLGJvcGY6IvCdlZMiLEJvcGY6IvCdlLkiLGJvdDoi4oqlIixib3R0b206IuKKpSIsYm93dGllOiLii4giLGJveGJveDoi4qeJIixib3hkbDoi4pSQIixib3hkTDoi4pWVIixib3hEbDoi4pWWIixib3hETDoi4pWXIixib3hkcjoi4pSMIixib3hkUjoi4pWSIixib3hEcjoi4pWTIixib3hEUjoi4pWUIixib3hoOiLilIAiLGJveEg6IuKVkCIsYm94aGQ6IuKUrCIsYm94aEQ6IuKVpSIsYm94SGQ6IuKVpCIsYm94SEQ6IuKVpiIsYm94aHU6IuKUtCIsYm94aFU6IuKVqCIsYm94SHU6IuKVpyIsYm94SFU6IuKVqSIsYm94bWludXM6IuKKnyIsYm94cGx1czoi4oqeIixib3h0aW1lczoi4oqgIixib3h1bDoi4pSYIixib3h1TDoi4pWbIixib3hVbDoi4pWcIixib3hVTDoi4pWdIixib3h1cjoi4pSUIixib3h1Ujoi4pWYIixib3hVcjoi4pWZIixib3hVUjoi4pWaIixib3h2OiLilIIiLGJveFY6IuKVkSIsYm94dmg6IuKUvCIsYm94dkg6IuKVqiIsYm94Vmg6IuKVqyIsYm94Vkg6IuKVrCIsYm94dmw6IuKUpCIsYm94dkw6IuKVoSIsYm94Vmw6IuKVoiIsYm94Vkw6IuKVoyIsYm94dnI6IuKUnCIsYm94dlI6IuKVniIsYm94VnI6IuKVnyIsYm94VlI6IuKVoCIsYnByaW1lOiLigLUiLGJyZXZlOiLLmCIsQnJldmU6IsuYIixicnZiYXI6IsKmIixic2NyOiLwnZK3IixCc2NyOiLihKwiLGJzZW1pOiLigY8iLGJzaW06IuKIvSIsYnNpbWU6IuKLjSIsYnNvbDoiXFwiLGJzb2xiOiLip4UiLGJzb2xoc3ViOiLin4giLGJ1bGw6IuKAoiIsYnVsbGV0OiLigKIiLGJ1bXA6IuKJjiIsYnVtcGU6IuKJjyIsYnVtcEU6IuKqriIsYnVtcGVxOiLiiY8iLEJ1bXBlcToi4omOIixjYWN1dGU6IsSHIixDYWN1dGU6IsSGIixjYXA6IuKIqSIsQ2FwOiLii5IiLGNhcGFuZDoi4qmEIixjYXBicmN1cDoi4qmJIixjYXBjYXA6IuKpiyIsY2FwY3VwOiLiqYciLGNhcGRvdDoi4qmAIixDYXBpdGFsRGlmZmVyZW50aWFsRDoi4oWFIixjYXBzOiLiiKnvuIAiLGNhcmV0OiLigYEiLGNhcm9uOiLLhyIsQ2F5bGV5czoi4oStIixjY2Fwczoi4qmNIixjY2Fyb246IsSNIixDY2Fyb246IsSMIixjY2VkaWw6IsOnIixDY2VkaWw6IsOHIixjY2lyYzoixIkiLENjaXJjOiLEiCIsQ2NvbmludDoi4oiwIixjY3Vwczoi4qmMIixjY3Vwc3NtOiLiqZAiLGNkb3Q6IsSLIixDZG90OiLEiiIsY2VkaWw6IsK4IixDZWRpbGxhOiLCuCIsY2VtcHR5djoi4qayIixjZW50OiLCoiIsY2VudGVyZG90OiLCtyIsQ2VudGVyRG90OiLCtyIsY2ZyOiLwnZSgIixDZnI6IuKErSIsY2hjeToi0YciLENIY3k6ItCnIixjaGVjazoi4pyTIixjaGVja21hcms6IuKckyIsY2hpOiLPhyIsQ2hpOiLOpyIsY2lyOiLil4siLGNpcmM6IsuGIixjaXJjZXE6IuKJlyIsY2lyY2xlYXJyb3dsZWZ0OiLihroiLGNpcmNsZWFycm93cmlnaHQ6IuKGuyIsY2lyY2xlZGFzdDoi4oqbIixjaXJjbGVkY2lyYzoi4oqaIixjaXJjbGVkZGFzaDoi4oqdIixDaXJjbGVEb3Q6IuKKmSIsY2lyY2xlZFI6IsKuIixjaXJjbGVkUzoi4pOIIixDaXJjbGVNaW51czoi4oqWIixDaXJjbGVQbHVzOiLiipUiLENpcmNsZVRpbWVzOiLiipciLGNpcmU6IuKJlyIsY2lyRToi4qeDIixjaXJmbmludDoi4qiQIixjaXJtaWQ6IuKrryIsY2lyc2Npcjoi4qeCIixDbG9ja3dpc2VDb250b3VySW50ZWdyYWw6IuKIsiIsQ2xvc2VDdXJseURvdWJsZVF1b3RlOiLigJ0iLENsb3NlQ3VybHlRdW90ZToi4oCZIixjbHViczoi4pmjIixjbHVic3VpdDoi4pmjIixjb2xvbjoiOiIsQ29sb246IuKItyIsY29sb25lOiLiiZQiLENvbG9uZToi4qm0Iixjb2xvbmVxOiLiiZQiLGNvbW1hOiIsIixjb21tYXQ6IkAiLGNvbXA6IuKIgSIsY29tcGZuOiLiiJgiLGNvbXBsZW1lbnQ6IuKIgSIsY29tcGxleGVzOiLihIIiLGNvbmc6IuKJhSIsY29uZ2RvdDoi4qmtIixDb25ncnVlbnQ6IuKJoSIsY29uaW50OiLiiK4iLENvbmludDoi4oivIixDb250b3VySW50ZWdyYWw6IuKIriIsY29wZjoi8J2VlCIsQ29wZjoi4oSCIixjb3Byb2Q6IuKIkCIsQ29wcm9kdWN0OiLiiJAiLGNvcHk6IsKpIixDT1BZOiLCqSIsY29weXNyOiLihJciLENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw6IuKIsyIsY3JhcnI6IuKGtSIsY3Jvc3M6IuKclyIsQ3Jvc3M6IuKoryIsY3Njcjoi8J2SuCIsQ3Njcjoi8J2SniIsY3N1Yjoi4quPIixjc3ViZToi4quRIixjc3VwOiLiq5AiLGNzdXBlOiLiq5IiLGN0ZG90OiLii68iLGN1ZGFycmw6IuKkuCIsY3VkYXJycjoi4qS1IixjdWVwcjoi4oueIixjdWVzYzoi4oufIixjdWxhcnI6IuKGtiIsY3VsYXJycDoi4qS9IixjdXA6IuKIqiIsQ3VwOiLii5MiLGN1cGJyY2FwOiLiqYgiLGN1cGNhcDoi4qmGIixDdXBDYXA6IuKJjSIsY3VwY3VwOiLiqYoiLGN1cGRvdDoi4oqNIixjdXBvcjoi4qmFIixjdXBzOiLiiKrvuIAiLGN1cmFycjoi4oa3IixjdXJhcnJtOiLipLwiLGN1cmx5ZXFwcmVjOiLii54iLGN1cmx5ZXFzdWNjOiLii58iLGN1cmx5dmVlOiLii44iLGN1cmx5d2VkZ2U6IuKLjyIsY3VycmVuOiLCpCIsY3VydmVhcnJvd2xlZnQ6IuKGtiIsY3VydmVhcnJvd3JpZ2h0OiLihrciLGN1dmVlOiLii44iLGN1d2VkOiLii48iLGN3Y29uaW50OiLiiLIiLGN3aW50OiLiiLEiLGN5bGN0eToi4oytIixkYWdnZXI6IuKAoCIsRGFnZ2VyOiLigKEiLGRhbGV0aDoi4oS4IixkYXJyOiLihpMiLGRBcnI6IuKHkyIsRGFycjoi4oahIixkYXNoOiLigJAiLGRhc2h2OiLiiqMiLERhc2h2OiLiq6QiLGRia2Fyb3c6IuKkjyIsZGJsYWM6IsudIixkY2Fyb246IsSPIixEY2Fyb246IsSOIixkY3k6ItC0IixEY3k6ItCUIixkZDoi4oWGIixERDoi4oWFIixkZGFnZ2VyOiLigKEiLGRkYXJyOiLih4oiLEREb3RyYWhkOiLipJEiLGRkb3RzZXE6IuKptyIsZGVnOiLCsCIsRGVsOiLiiIciLGRlbHRhOiLOtCIsRGVsdGE6Is6UIixkZW1wdHl2OiLiprEiLGRmaXNodDoi4qW/IixkZnI6IvCdlKEiLERmcjoi8J2UhyIsZEhhcjoi4qWlIixkaGFybDoi4oeDIixkaGFycjoi4oeCIixEaWFjcml0aWNhbEFjdXRlOiLCtCIsRGlhY3JpdGljYWxEb3Q6IsuZIixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiLLnSIsRGlhY3JpdGljYWxHcmF2ZToiYCIsRGlhY3JpdGljYWxUaWxkZToiy5wiLGRpYW06IuKLhCIsZGlhbW9uZDoi4ouEIixEaWFtb25kOiLii4QiLGRpYW1vbmRzdWl0OiLimaYiLGRpYW1zOiLimaYiLGRpZToiwqgiLERpZmZlcmVudGlhbEQ6IuKFhiIsZGlnYW1tYToiz50iLGRpc2luOiLii7IiLGRpdjoiw7ciLGRpdmlkZToiw7ciLGRpdmlkZW9udGltZXM6IuKLhyIsZGl2b254OiLii4ciLGRqY3k6ItGSIixESmN5OiLQgiIsZGxjb3JuOiLijJ4iLGRsY3JvcDoi4oyNIixkb2xsYXI6IiQiLGRvcGY6IvCdlZUiLERvcGY6IvCdlLsiLGRvdDoiy5kiLERvdDoiwqgiLERvdERvdDoi4oOcIixkb3RlcToi4omQIixkb3RlcWRvdDoi4omRIixEb3RFcXVhbDoi4omQIixkb3RtaW51czoi4oi4Iixkb3RwbHVzOiLiiJQiLGRvdHNxdWFyZToi4oqhIixkb3VibGViYXJ3ZWRnZToi4oyGIixEb3VibGVDb250b3VySW50ZWdyYWw6IuKIryIsRG91YmxlRG90OiLCqCIsRG91YmxlRG93bkFycm93OiLih5MiLERvdWJsZUxlZnRBcnJvdzoi4oeQIixEb3VibGVMZWZ0UmlnaHRBcnJvdzoi4oeUIixEb3VibGVMZWZ0VGVlOiLiq6QiLERvdWJsZUxvbmdMZWZ0QXJyb3c6IuKfuCIsRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OiLin7oiLERvdWJsZUxvbmdSaWdodEFycm93OiLin7kiLERvdWJsZVJpZ2h0QXJyb3c6IuKHkiIsRG91YmxlUmlnaHRUZWU6IuKKqCIsRG91YmxlVXBBcnJvdzoi4oeRIixEb3VibGVVcERvd25BcnJvdzoi4oeVIixEb3VibGVWZXJ0aWNhbEJhcjoi4oilIixkb3duYXJyb3c6IuKGkyIsRG93bmFycm93OiLih5MiLERvd25BcnJvdzoi4oaTIixEb3duQXJyb3dCYXI6IuKkkyIsRG93bkFycm93VXBBcnJvdzoi4oe1IixEb3duQnJldmU6IsyRIixkb3duZG93bmFycm93czoi4oeKIixkb3duaGFycG9vbmxlZnQ6IuKHgyIsZG93bmhhcnBvb25yaWdodDoi4oeCIixEb3duTGVmdFJpZ2h0VmVjdG9yOiLipZAiLERvd25MZWZ0VGVlVmVjdG9yOiLipZ4iLERvd25MZWZ0VmVjdG9yOiLihr0iLERvd25MZWZ0VmVjdG9yQmFyOiLipZYiLERvd25SaWdodFRlZVZlY3Rvcjoi4qWfIixEb3duUmlnaHRWZWN0b3I6IuKHgSIsRG93blJpZ2h0VmVjdG9yQmFyOiLipZciLERvd25UZWU6IuKKpCIsRG93blRlZUFycm93OiLihqciLGRyYmthcm93OiLipJAiLGRyY29ybjoi4oyfIixkcmNyb3A6IuKMjCIsZHNjcjoi8J2SuSIsRHNjcjoi8J2SnyIsZHNjeToi0ZUiLERTY3k6ItCFIixkc29sOiLip7YiLGRzdHJvazoixJEiLERzdHJvazoixJAiLGR0ZG90OiLii7EiLGR0cmk6IuKWvyIsZHRyaWY6IuKWviIsZHVhcnI6IuKHtSIsZHVoYXI6IuKlryIsZHdhbmdsZToi4qamIixkemN5OiLRnyIsRFpjeToi0I8iLGR6aWdyYXJyOiLin78iLGVhY3V0ZToiw6kiLEVhY3V0ZToiw4kiLGVhc3Rlcjoi4qmuIixlY2Fyb246IsSbIixFY2Fyb246IsSaIixlY2lyOiLiiZYiLGVjaXJjOiLDqiIsRWNpcmM6IsOKIixlY29sb246IuKJlSIsZWN5OiLRjSIsRWN5OiLQrSIsZUREb3Q6IuKptyIsZWRvdDoixJciLGVEb3Q6IuKJkSIsRWRvdDoixJYiLGVlOiLihYciLGVmRG90OiLiiZIiLGVmcjoi8J2UoiIsRWZyOiLwnZSIIixlZzoi4qqaIixlZ3JhdmU6IsOoIixFZ3JhdmU6IsOIIixlZ3M6IuKqliIsZWdzZG90OiLiqpgiLGVsOiLiqpkiLEVsZW1lbnQ6IuKIiCIsZWxpbnRlcnM6IuKPpyIsZWxsOiLihJMiLGVsczoi4qqVIixlbHNkb3Q6IuKqlyIsZW1hY3I6IsSTIixFbWFjcjoixJIiLGVtcHR5OiLiiIUiLGVtcHR5c2V0OiLiiIUiLEVtcHR5U21hbGxTcXVhcmU6IuKXuyIsZW1wdHl2OiLiiIUiLEVtcHR5VmVyeVNtYWxsU3F1YXJlOiLilqsiLGVtc3A6IuKAgyIsZW1zcDEzOiLigIQiLGVtc3AxNDoi4oCFIixlbmc6IsWLIixFTkc6IsWKIixlbnNwOiLigIIiLGVvZ29uOiLEmSIsRW9nb246IsSYIixlb3BmOiLwnZWWIixFb3BmOiLwnZS8IixlcGFyOiLii5UiLGVwYXJzbDoi4qejIixlcGx1czoi4qmxIixlcHNpOiLOtSIsZXBzaWxvbjoizrUiLEVwc2lsb246Is6VIixlcHNpdjoiz7UiLGVxY2lyYzoi4omWIixlcWNvbG9uOiLiiZUiLGVxc2ltOiLiiYIiLGVxc2xhbnRndHI6IuKqliIsZXFzbGFudGxlc3M6IuKqlSIsRXF1YWw6IuKptSIsZXF1YWxzOiI9IixFcXVhbFRpbGRlOiLiiYIiLGVxdWVzdDoi4omfIixFcXVpbGlicml1bToi4oeMIixlcXVpdjoi4omhIixlcXVpdkREOiLiqbgiLGVxdnBhcnNsOiLip6UiLGVyYXJyOiLipbEiLGVyRG90OiLiiZMiLGVzY3I6IuKEryIsRXNjcjoi4oSwIixlc2RvdDoi4omQIixlc2ltOiLiiYIiLEVzaW06IuKpsyIsZXRhOiLOtyIsRXRhOiLOlyIsZXRoOiLDsCIsRVRIOiLDkCIsZXVtbDoiw6siLEV1bWw6IsOLIixldXJvOiLigqwiLGV4Y2w6IiEiLGV4aXN0OiLiiIMiLEV4aXN0czoi4oiDIixleHBlY3RhdGlvbjoi4oSwIixleHBvbmVudGlhbGU6IuKFhyIsRXhwb25lbnRpYWxFOiLihYciLGZhbGxpbmdkb3RzZXE6IuKJkiIsZmN5OiLRhCIsRmN5OiLQpCIsZmVtYWxlOiLimYAiLGZmaWxpZzoi76yDIixmZmxpZzoi76yAIixmZmxsaWc6Iu+shCIsZmZyOiLwnZSjIixGZnI6IvCdlIkiLGZpbGlnOiLvrIEiLEZpbGxlZFNtYWxsU3F1YXJlOiLil7wiLEZpbGxlZFZlcnlTbWFsbFNxdWFyZToi4paqIixmamxpZzoiZmoiLGZsYXQ6IuKZrSIsZmxsaWc6Iu+sgiIsZmx0bnM6IuKWsSIsZm5vZjoixpIiLGZvcGY6IvCdlZciLEZvcGY6IvCdlL0iLGZvcmFsbDoi4oiAIixGb3JBbGw6IuKIgCIsZm9yazoi4ouUIixmb3Jrdjoi4quZIixGb3VyaWVydHJmOiLihLEiLGZwYXJ0aW50OiLiqI0iLGZyYWMxMjoiwr0iLGZyYWMxMzoi4oWTIixmcmFjMTQ6IsK8IixmcmFjMTU6IuKFlSIsZnJhYzE2OiLihZkiLGZyYWMxODoi4oWbIixmcmFjMjM6IuKFlCIsZnJhYzI1OiLihZYiLGZyYWMzNDoiwr4iLGZyYWMzNToi4oWXIixmcmFjMzg6IuKFnCIsZnJhYzQ1OiLihZgiLGZyYWM1Njoi4oWaIixmcmFjNTg6IuKFnSIsZnJhYzc4OiLihZ4iLGZyYXNsOiLigYQiLGZyb3duOiLijKIiLGZzY3I6IvCdkrsiLEZzY3I6IuKEsSIsZ2FjdXRlOiLHtSIsZ2FtbWE6Is6zIixHYW1tYToizpMiLGdhbW1hZDoiz50iLEdhbW1hZDoiz5wiLGdhcDoi4qqGIixnYnJldmU6IsSfIixHYnJldmU6IsSeIixHY2VkaWw6IsSiIixnY2lyYzoixJ0iLEdjaXJjOiLEnCIsZ2N5OiLQsyIsR2N5OiLQkyIsZ2RvdDoixKEiLEdkb3Q6IsSgIixnZToi4omlIixnRToi4omnIixnZWw6IuKLmyIsZ0VsOiLiqowiLGdlcToi4omlIixnZXFxOiLiiaciLGdlcXNsYW50OiLiqb4iLGdlczoi4qm+IixnZXNjYzoi4qqpIixnZXNkb3Q6IuKqgCIsZ2VzZG90bzoi4qqCIixnZXNkb3RvbDoi4qqEIixnZXNsOiLii5vvuIAiLGdlc2xlczoi4qqUIixnZnI6IvCdlKQiLEdmcjoi8J2UiiIsZ2c6IuKJqyIsR2c6IuKLmSIsZ2dnOiLii5kiLGdpbWVsOiLihLciLGdqY3k6ItGTIixHSmN5OiLQgyIsZ2w6IuKJtyIsZ2xhOiLiqqUiLGdsRToi4qqSIixnbGo6IuKqpCIsZ25hcDoi4qqKIixnbmFwcHJveDoi4qqKIixnbmU6IuKqiCIsZ25FOiLiiakiLGduZXE6IuKqiCIsZ25lcXE6IuKJqSIsZ25zaW06IuKLpyIsZ29wZjoi8J2VmCIsR29wZjoi8J2UviIsZ3JhdmU6ImAiLEdyZWF0ZXJFcXVhbDoi4omlIixHcmVhdGVyRXF1YWxMZXNzOiLii5siLEdyZWF0ZXJGdWxsRXF1YWw6IuKJpyIsR3JlYXRlckdyZWF0ZXI6IuKqoiIsR3JlYXRlckxlc3M6IuKJtyIsR3JlYXRlclNsYW50RXF1YWw6IuKpviIsR3JlYXRlclRpbGRlOiLiibMiLGdzY3I6IuKEiiIsR3Njcjoi8J2SoiIsZ3NpbToi4omzIixnc2ltZToi4qqOIixnc2ltbDoi4qqQIixndDoiPiIsR3Q6IuKJqyIsR1Q6Ij4iLGd0Y2M6IuKqpyIsZ3RjaXI6IuKpuiIsZ3Rkb3Q6IuKLlyIsZ3RsUGFyOiLippUiLGd0cXVlc3Q6IuKpvCIsZ3RyYXBwcm94OiLiqoYiLGd0cmFycjoi4qW4IixndHJkb3Q6IuKLlyIsZ3RyZXFsZXNzOiLii5siLGd0cmVxcWxlc3M6IuKqjCIsZ3RybGVzczoi4om3IixndHJzaW06IuKJsyIsZ3ZlcnRuZXFxOiLiianvuIAiLGd2bkU6IuKJqe+4gCIsSGFjZWs6IsuHIixoYWlyc3A6IuKAiiIsaGFsZjoiwr0iLGhhbWlsdDoi4oSLIixoYXJkY3k6ItGKIixIQVJEY3k6ItCqIixoYXJyOiLihpQiLGhBcnI6IuKHlCIsaGFycmNpcjoi4qWIIixoYXJydzoi4oatIixIYXQ6Il4iLGhiYXI6IuKEjyIsaGNpcmM6IsSlIixIY2lyYzoixKQiLGhlYXJ0czoi4pmlIixoZWFydHN1aXQ6IuKZpSIsaGVsbGlwOiLigKYiLGhlcmNvbjoi4oq5IixoZnI6IvCdlKUiLEhmcjoi4oSMIixIaWxiZXJ0U3BhY2U6IuKEiyIsaGtzZWFyb3c6IuKkpSIsaGtzd2Fyb3c6IuKkpiIsaG9hcnI6IuKHvyIsaG9tdGh0OiLiiLsiLGhvb2tsZWZ0YXJyb3c6IuKGqSIsaG9va3JpZ2h0YXJyb3c6IuKGqiIsaG9wZjoi8J2VmSIsSG9wZjoi4oSNIixob3JiYXI6IuKAlSIsSG9yaXpvbnRhbExpbmU6IuKUgCIsaHNjcjoi8J2SvSIsSHNjcjoi4oSLIixoc2xhc2g6IuKEjyIsaHN0cm9rOiLEpyIsSHN0cm9rOiLEpiIsSHVtcERvd25IdW1wOiLiiY4iLEh1bXBFcXVhbDoi4omPIixoeWJ1bGw6IuKBgyIsaHlwaGVuOiLigJAiLGlhY3V0ZToiw60iLElhY3V0ZToiw40iLGljOiLigaMiLGljaXJjOiLDriIsSWNpcmM6IsOOIixpY3k6ItC4IixJY3k6ItCYIixJZG90OiLEsCIsaWVjeToi0LUiLElFY3k6ItCVIixpZXhjbDoiwqEiLGlmZjoi4oeUIixpZnI6IvCdlKYiLElmcjoi4oSRIixpZ3JhdmU6IsOsIixJZ3JhdmU6IsOMIixpaToi4oWIIixpaWlpbnQ6IuKojCIsaWlpbnQ6IuKIrSIsaWluZmluOiLip5wiLGlpb3RhOiLihKkiLGlqbGlnOiLEsyIsSUpsaWc6IsSyIixJbToi4oSRIixpbWFjcjoixKsiLEltYWNyOiLEqiIsaW1hZ2U6IuKEkSIsSW1hZ2luYXJ5SToi4oWIIixpbWFnbGluZToi4oSQIixpbWFncGFydDoi4oSRIixpbWF0aDoixLEiLGltb2Y6IuKKtyIsaW1wZWQ6Isa1IixJbXBsaWVzOiLih5IiLGluOiLiiIgiLGluY2FyZToi4oSFIixpbmZpbjoi4oieIixpbmZpbnRpZToi4qedIixpbm9kb3Q6IsSxIixpbnQ6IuKIqyIsSW50OiLiiKwiLGludGNhbDoi4oq6IixpbnRlZ2Vyczoi4oSkIixJbnRlZ3JhbDoi4oirIixpbnRlcmNhbDoi4oq6IixJbnRlcnNlY3Rpb246IuKLgiIsaW50bGFyaGs6IuKolyIsaW50cHJvZDoi4qi8IixJbnZpc2libGVDb21tYToi4oGjIixJbnZpc2libGVUaW1lczoi4oGiIixpb2N5OiLRkSIsSU9jeToi0IEiLGlvZ29uOiLEryIsSW9nb246IsSuIixpb3BmOiLwnZWaIixJb3BmOiLwnZWAIixpb3RhOiLOuSIsSW90YToizpkiLGlwcm9kOiLiqLwiLGlxdWVzdDoiwr8iLGlzY3I6IvCdkr4iLElzY3I6IuKEkCIsaXNpbjoi4oiIIixpc2luZG90OiLii7UiLGlzaW5FOiLii7kiLGlzaW5zOiLii7QiLGlzaW5zdjoi4ouzIixpc2ludjoi4oiIIixpdDoi4oGiIixpdGlsZGU6IsSpIixJdGlsZGU6IsSoIixpdWtjeToi0ZYiLEl1a2N5OiLQhiIsaXVtbDoiw68iLEl1bWw6IsOPIixqY2lyYzoixLUiLEpjaXJjOiLEtCIsamN5OiLQuSIsSmN5OiLQmSIsamZyOiLwnZSnIixKZnI6IvCdlI0iLGptYXRoOiLItyIsam9wZjoi8J2VmyIsSm9wZjoi8J2VgSIsanNjcjoi8J2SvyIsSnNjcjoi8J2SpSIsanNlcmN5OiLRmCIsSnNlcmN5OiLQiCIsanVrY3k6ItGUIixKdWtjeToi0IQiLGthcHBhOiLOuiIsS2FwcGE6Is6aIixrYXBwYXY6Is+wIixrY2VkaWw6IsS3IixLY2VkaWw6IsS2IixrY3k6ItC6IixLY3k6ItCaIixrZnI6IvCdlKgiLEtmcjoi8J2UjiIsa2dyZWVuOiLEuCIsa2hjeToi0YUiLEtIY3k6ItClIixramN5OiLRnCIsS0pjeToi0IwiLGtvcGY6IvCdlZwiLEtvcGY6IvCdlYIiLGtzY3I6IvCdk4AiLEtzY3I6IvCdkqYiLGxBYXJyOiLih5oiLGxhY3V0ZToixLoiLExhY3V0ZToixLkiLGxhZW1wdHl2OiLiprQiLGxhZ3Jhbjoi4oSSIixsYW1iZGE6Is67IixMYW1iZGE6Is6bIixsYW5nOiLin6giLExhbmc6IuKfqiIsbGFuZ2Q6IuKmkSIsbGFuZ2xlOiLin6giLGxhcDoi4qqFIixMYXBsYWNldHJmOiLihJIiLGxhcXVvOiLCqyIsbGFycjoi4oaQIixsQXJyOiLih5AiLExhcnI6IuKGniIsbGFycmI6IuKHpCIsbGFycmJmczoi4qSfIixsYXJyZnM6IuKknSIsbGFycmhrOiLihqkiLGxhcnJscDoi4oarIixsYXJycGw6IuKkuSIsbGFycnNpbToi4qWzIixsYXJydGw6IuKGoiIsbGF0OiLiqqsiLGxhdGFpbDoi4qSZIixsQXRhaWw6IuKkmyIsbGF0ZToi4qqtIixsYXRlczoi4qqt77iAIixsYmFycjoi4qSMIixsQmFycjoi4qSOIixsYmJyazoi4p2yIixsYnJhY2U6InsiLGxicmFjazoiWyIsbGJya2U6IuKmiyIsbGJya3NsZDoi4qaPIixsYnJrc2x1OiLipo0iLGxjYXJvbjoixL4iLExjYXJvbjoixL0iLGxjZWRpbDoixLwiLExjZWRpbDoixLsiLGxjZWlsOiLijIgiLGxjdWI6InsiLGxjeToi0LsiLExjeToi0JsiLGxkY2E6IuKktiIsbGRxdW86IuKAnCIsbGRxdW9yOiLigJ4iLGxkcmRoYXI6IuKlpyIsbGRydXNoYXI6IuKliyIsbGRzaDoi4oayIixsZToi4omkIixsRToi4ommIixMZWZ0QW5nbGVCcmFja2V0OiLin6giLGxlZnRhcnJvdzoi4oaQIixMZWZ0YXJyb3c6IuKHkCIsTGVmdEFycm93OiLihpAiLExlZnRBcnJvd0Jhcjoi4oekIixMZWZ0QXJyb3dSaWdodEFycm93OiLih4YiLGxlZnRhcnJvd3RhaWw6IuKGoiIsTGVmdENlaWxpbmc6IuKMiCIsTGVmdERvdWJsZUJyYWNrZXQ6IuKfpiIsTGVmdERvd25UZWVWZWN0b3I6IuKloSIsTGVmdERvd25WZWN0b3I6IuKHgyIsTGVmdERvd25WZWN0b3JCYXI6IuKlmSIsTGVmdEZsb29yOiLijIoiLGxlZnRoYXJwb29uZG93bjoi4oa9IixsZWZ0aGFycG9vbnVwOiLihrwiLGxlZnRsZWZ0YXJyb3dzOiLih4ciLGxlZnRyaWdodGFycm93OiLihpQiLExlZnRyaWdodGFycm93OiLih5QiLExlZnRSaWdodEFycm93OiLihpQiLGxlZnRyaWdodGFycm93czoi4oeGIixsZWZ0cmlnaHRoYXJwb29uczoi4oeLIixsZWZ0cmlnaHRzcXVpZ2Fycm93OiLihq0iLExlZnRSaWdodFZlY3Rvcjoi4qWOIixMZWZ0VGVlOiLiiqMiLExlZnRUZWVBcnJvdzoi4oakIixMZWZ0VGVlVmVjdG9yOiLipZoiLGxlZnR0aHJlZXRpbWVzOiLii4siLExlZnRUcmlhbmdsZToi4oqyIixMZWZ0VHJpYW5nbGVCYXI6IuKnjyIsTGVmdFRyaWFuZ2xlRXF1YWw6IuKKtCIsTGVmdFVwRG93blZlY3Rvcjoi4qWRIixMZWZ0VXBUZWVWZWN0b3I6IuKloCIsTGVmdFVwVmVjdG9yOiLihr8iLExlZnRVcFZlY3RvckJhcjoi4qWYIixMZWZ0VmVjdG9yOiLihrwiLExlZnRWZWN0b3JCYXI6IuKlkiIsbGVnOiLii5oiLGxFZzoi4qqLIixsZXE6IuKJpCIsbGVxcToi4ommIixsZXFzbGFudDoi4qm9IixsZXM6IuKpvSIsbGVzY2M6IuKqqCIsbGVzZG90OiLiqb8iLGxlc2RvdG86IuKqgSIsbGVzZG90b3I6IuKqgyIsbGVzZzoi4oua77iAIixsZXNnZXM6IuKqkyIsbGVzc2FwcHJveDoi4qqFIixsZXNzZG90OiLii5YiLGxlc3NlcWd0cjoi4ouaIixsZXNzZXFxZ3RyOiLiqosiLExlc3NFcXVhbEdyZWF0ZXI6IuKLmiIsTGVzc0Z1bGxFcXVhbDoi4ommIixMZXNzR3JlYXRlcjoi4om2IixsZXNzZ3RyOiLiibYiLExlc3NMZXNzOiLiqqEiLGxlc3NzaW06IuKJsiIsTGVzc1NsYW50RXF1YWw6IuKpvSIsTGVzc1RpbGRlOiLiibIiLGxmaXNodDoi4qW8IixsZmxvb3I6IuKMiiIsbGZyOiLwnZSpIixMZnI6IvCdlI8iLGxnOiLiibYiLGxnRToi4qqRIixsSGFyOiLipaIiLGxoYXJkOiLihr0iLGxoYXJ1OiLihrwiLGxoYXJ1bDoi4qWqIixsaGJsazoi4paEIixsamN5OiLRmSIsTEpjeToi0IkiLGxsOiLiiaoiLExsOiLii5giLGxsYXJyOiLih4ciLGxsY29ybmVyOiLijJ4iLExsZWZ0YXJyb3c6IuKHmiIsbGxoYXJkOiLipasiLGxsdHJpOiLil7oiLGxtaWRvdDoixYAiLExtaWRvdDoixL8iLGxtb3VzdDoi4o6wIixsbW91c3RhY2hlOiLijrAiLGxuYXA6IuKqiSIsbG5hcHByb3g6IuKqiSIsbG5lOiLiqociLGxuRToi4omoIixsbmVxOiLiqociLGxuZXFxOiLiiagiLGxuc2ltOiLii6YiLGxvYW5nOiLin6wiLGxvYXJyOiLih70iLGxvYnJrOiLin6YiLGxvbmdsZWZ0YXJyb3c6IuKftSIsTG9uZ2xlZnRhcnJvdzoi4p+4IixMb25nTGVmdEFycm93OiLin7UiLGxvbmdsZWZ0cmlnaHRhcnJvdzoi4p+3IixMb25nbGVmdHJpZ2h0YXJyb3c6IuKfuiIsTG9uZ0xlZnRSaWdodEFycm93OiLin7ciLGxvbmdtYXBzdG86IuKfvCIsbG9uZ3JpZ2h0YXJyb3c6IuKftiIsTG9uZ3JpZ2h0YXJyb3c6IuKfuSIsTG9uZ1JpZ2h0QXJyb3c6IuKftiIsbG9vcGFycm93bGVmdDoi4oarIixsb29wYXJyb3dyaWdodDoi4oasIixsb3Bhcjoi4qaFIixsb3BmOiLwnZWdIixMb3BmOiLwnZWDIixsb3BsdXM6IuKorSIsbG90aW1lczoi4qi0Iixsb3dhc3Q6IuKIlyIsbG93YmFyOiJfIixMb3dlckxlZnRBcnJvdzoi4oaZIixMb3dlclJpZ2h0QXJyb3c6IuKGmCIsbG96OiLil4oiLGxvemVuZ2U6IuKXiiIsbG96Zjoi4qerIixscGFyOiIoIixscGFybHQ6IuKmkyIsbHJhcnI6IuKHhiIsbHJjb3JuZXI6IuKMnyIsbHJoYXI6IuKHiyIsbHJoYXJkOiLipa0iLGxybToi4oCOIixscnRyaToi4oq/Iixsc2FxdW86IuKAuSIsbHNjcjoi8J2TgSIsTHNjcjoi4oSSIixsc2g6IuKGsCIsTHNoOiLihrAiLGxzaW06IuKJsiIsbHNpbWU6IuKqjSIsbHNpbWc6IuKqjyIsbHNxYjoiWyIsbHNxdW86IuKAmCIsbHNxdW9yOiLigJoiLGxzdHJvazoixYIiLExzdHJvazoixYEiLGx0OiI8IixMdDoi4omqIixMVDoiPCIsbHRjYzoi4qqmIixsdGNpcjoi4qm5IixsdGRvdDoi4ouWIixsdGhyZWU6IuKLiyIsbHRpbWVzOiLii4kiLGx0bGFycjoi4qW2IixsdHF1ZXN0OiLiqbsiLGx0cmk6IuKXgyIsbHRyaWU6IuKKtCIsbHRyaWY6IuKXgiIsbHRyUGFyOiLippYiLGx1cmRzaGFyOiLipYoiLGx1cnVoYXI6IuKlpiIsbHZlcnRuZXFxOiLiiajvuIAiLGx2bkU6IuKJqO+4gCIsbWFjcjoiwq8iLG1hbGU6IuKZgiIsbWFsdDoi4pygIixtYWx0ZXNlOiLinKAiLG1hcDoi4oamIixNYXA6IuKkhSIsbWFwc3RvOiLihqYiLG1hcHN0b2Rvd246IuKGpyIsbWFwc3RvbGVmdDoi4oakIixtYXBzdG91cDoi4oalIixtYXJrZXI6IuKWriIsbWNvbW1hOiLiqKkiLG1jeToi0LwiLE1jeToi0JwiLG1kYXNoOiLigJQiLG1ERG90OiLiiLoiLG1lYXN1cmVkYW5nbGU6IuKIoSIsTWVkaXVtU3BhY2U6IuKBnyIsTWVsbGludHJmOiLihLMiLG1mcjoi8J2UqiIsTWZyOiLwnZSQIixtaG86IuKEpyIsbWljcm86IsK1IixtaWQ6IuKIoyIsbWlkYXN0OiIqIixtaWRjaXI6IuKrsCIsbWlkZG90OiLCtyIsbWludXM6IuKIkiIsbWludXNiOiLiip8iLG1pbnVzZDoi4oi4IixtaW51c2R1OiLiqKoiLE1pbnVzUGx1czoi4oiTIixtbGNwOiLiq5siLG1sZHI6IuKApiIsbW5wbHVzOiLiiJMiLG1vZGVsczoi4oqnIixtb3BmOiLwnZWeIixNb3BmOiLwnZWEIixtcDoi4oiTIixtc2NyOiLwnZOCIixNc2NyOiLihLMiLG1zdHBvczoi4oi+IixtdToizrwiLE11OiLOnCIsbXVsdGltYXA6IuKKuCIsbXVtYXA6IuKKuCIsbmFibGE6IuKIhyIsbmFjdXRlOiLFhCIsTmFjdXRlOiLFgyIsbmFuZzoi4oig4oOSIixuYXA6IuKJiSIsbmFwRToi4qmwzLgiLG5hcGlkOiLiiYvMuCIsbmFwb3M6IsWJIixuYXBwcm94OiLiiYkiLG5hdHVyOiLima4iLG5hdHVyYWw6IuKZriIsbmF0dXJhbHM6IuKElSIsbmJzcDoiwqAiLG5idW1wOiLiiY7MuCIsbmJ1bXBlOiLiiY/MuCIsbmNhcDoi4qmDIixuY2Fyb246IsWIIixOY2Fyb246IsWHIixuY2VkaWw6IsWGIixOY2VkaWw6IsWFIixuY29uZzoi4omHIixuY29uZ2RvdDoi4qmtzLgiLG5jdXA6IuKpgiIsbmN5OiLQvSIsTmN5OiLQnSIsbmRhc2g6IuKAkyIsbmU6IuKJoCIsbmVhcmhrOiLipKQiLG5lYXJyOiLihpciLG5lQXJyOiLih5ciLG5lYXJyb3c6IuKGlyIsbmVkb3Q6IuKJkMy4IixOZWdhdGl2ZU1lZGl1bVNwYWNlOiLigIsiLE5lZ2F0aXZlVGhpY2tTcGFjZToi4oCLIixOZWdhdGl2ZVRoaW5TcGFjZToi4oCLIixOZWdhdGl2ZVZlcnlUaGluU3BhY2U6IuKAiyIsbmVxdWl2OiLiiaIiLG5lc2Vhcjoi4qSoIixuZXNpbToi4omCzLgiLE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiLiiasiLE5lc3RlZExlc3NMZXNzOiLiiaoiLE5ld0xpbmU6IlxuIixuZXhpc3Q6IuKIhCIsbmV4aXN0czoi4oiEIixuZnI6IvCdlKsiLE5mcjoi8J2UkSIsbmdlOiLiibEiLG5nRToi4omnzLgiLG5nZXE6IuKJsSIsbmdlcXE6IuKJp8y4IixuZ2Vxc2xhbnQ6IuKpvsy4IixuZ2VzOiLiqb7MuCIsbkdnOiLii5nMuCIsbmdzaW06IuKJtSIsbmd0OiLiia8iLG5HdDoi4omr4oOSIixuZ3RyOiLiia8iLG5HdHY6IuKJq8y4IixuaGFycjoi4oauIixuaEFycjoi4oeOIixuaHBhcjoi4quyIixuaToi4oiLIixuaXM6IuKLvCIsbmlzZDoi4ou6IixuaXY6IuKIiyIsbmpjeToi0ZoiLE5KY3k6ItCKIixubGFycjoi4oaaIixubEFycjoi4oeNIixubGRyOiLigKUiLG5sZToi4omwIixubEU6IuKJpsy4IixubGVmdGFycm93OiLihpoiLG5MZWZ0YXJyb3c6IuKHjSIsbmxlZnRyaWdodGFycm93OiLihq4iLG5MZWZ0cmlnaHRhcnJvdzoi4oeOIixubGVxOiLiibAiLG5sZXFxOiLiiabMuCIsbmxlcXNsYW50OiLiqb3MuCIsbmxlczoi4qm9zLgiLG5sZXNzOiLiia4iLG5MbDoi4ouYzLgiLG5sc2ltOiLiibQiLG5sdDoi4omuIixuTHQ6IuKJquKDkiIsbmx0cmk6IuKLqiIsbmx0cmllOiLii6wiLG5MdHY6IuKJqsy4IixubWlkOiLiiKQiLE5vQnJlYWs6IuKBoCIsTm9uQnJlYWtpbmdTcGFjZToiwqAiLG5vcGY6IvCdlZ8iLE5vcGY6IuKElSIsbm90OiLCrCIsTm90OiLiq6wiLE5vdENvbmdydWVudDoi4omiIixOb3RDdXBDYXA6IuKJrSIsTm90RG91YmxlVmVydGljYWxCYXI6IuKIpiIsTm90RWxlbWVudDoi4oiJIixOb3RFcXVhbDoi4omgIixOb3RFcXVhbFRpbGRlOiLiiYLMuCIsTm90RXhpc3RzOiLiiIQiLE5vdEdyZWF0ZXI6IuKJryIsTm90R3JlYXRlckVxdWFsOiLiibEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6IuKJp8y4IixOb3RHcmVhdGVyR3JlYXRlcjoi4omrzLgiLE5vdEdyZWF0ZXJMZXNzOiLiibkiLE5vdEdyZWF0ZXJTbGFudEVxdWFsOiLiqb7MuCIsTm90R3JlYXRlclRpbGRlOiLiibUiLE5vdEh1bXBEb3duSHVtcDoi4omOzLgiLE5vdEh1bXBFcXVhbDoi4omPzLgiLG5vdGluOiLiiIkiLG5vdGluZG90OiLii7XMuCIsbm90aW5FOiLii7nMuCIsbm90aW52YToi4oiJIixub3RpbnZiOiLii7ciLG5vdGludmM6IuKLtiIsTm90TGVmdFRyaWFuZ2xlOiLii6oiLE5vdExlZnRUcmlhbmdsZUJhcjoi4qePzLgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiLii6wiLE5vdExlc3M6IuKJriIsTm90TGVzc0VxdWFsOiLiibAiLE5vdExlc3NHcmVhdGVyOiLiibgiLE5vdExlc3NMZXNzOiLiiarMuCIsTm90TGVzc1NsYW50RXF1YWw6IuKpvcy4IixOb3RMZXNzVGlsZGU6IuKJtCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6IuKqosy4IixOb3ROZXN0ZWRMZXNzTGVzczoi4qqhzLgiLG5vdG5pOiLiiIwiLG5vdG5pdmE6IuKIjCIsbm90bml2Yjoi4ou+Iixub3RuaXZjOiLii70iLE5vdFByZWNlZGVzOiLiioAiLE5vdFByZWNlZGVzRXF1YWw6IuKqr8y4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6IuKLoCIsTm90UmV2ZXJzZUVsZW1lbnQ6IuKIjCIsTm90UmlnaHRUcmlhbmdsZToi4ourIixOb3RSaWdodFRyaWFuZ2xlQmFyOiLip5DMuCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiLii60iLE5vdFNxdWFyZVN1YnNldDoi4oqPzLgiLE5vdFNxdWFyZVN1YnNldEVxdWFsOiLii6IiLE5vdFNxdWFyZVN1cGVyc2V0OiLiipDMuCIsTm90U3F1YXJlU3VwZXJzZXRFcXVhbDoi4oujIixOb3RTdWJzZXQ6IuKKguKDkiIsTm90U3Vic2V0RXF1YWw6IuKKiCIsTm90U3VjY2VlZHM6IuKKgSIsTm90U3VjY2VlZHNFcXVhbDoi4qqwzLgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoi4ouhIixOb3RTdWNjZWVkc1RpbGRlOiLiib/MuCIsTm90U3VwZXJzZXQ6IuKKg+KDkiIsTm90U3VwZXJzZXRFcXVhbDoi4oqJIixOb3RUaWxkZToi4omBIixOb3RUaWxkZUVxdWFsOiLiiYQiLE5vdFRpbGRlRnVsbEVxdWFsOiLiiYciLE5vdFRpbGRlVGlsZGU6IuKJiSIsTm90VmVydGljYWxCYXI6IuKIpCIsbnBhcjoi4oimIixucGFyYWxsZWw6IuKIpiIsbnBhcnNsOiLiq73ig6UiLG5wYXJ0OiLiiILMuCIsbnBvbGludDoi4qiUIixucHI6IuKKgCIsbnByY3VlOiLii6AiLG5wcmU6IuKqr8y4IixucHJlYzoi4oqAIixucHJlY2VxOiLiqq/MuCIsbnJhcnI6IuKGmyIsbnJBcnI6IuKHjyIsbnJhcnJjOiLipLPMuCIsbnJhcnJ3OiLihp3MuCIsbnJpZ2h0YXJyb3c6IuKGmyIsblJpZ2h0YXJyb3c6IuKHjyIsbnJ0cmk6IuKLqyIsbnJ0cmllOiLii60iLG5zYzoi4oqBIixuc2NjdWU6IuKLoSIsbnNjZToi4qqwzLgiLG5zY3I6IvCdk4MiLE5zY3I6IvCdkqkiLG5zaG9ydG1pZDoi4oikIixuc2hvcnRwYXJhbGxlbDoi4oimIixuc2ltOiLiiYEiLG5zaW1lOiLiiYQiLG5zaW1lcToi4omEIixuc21pZDoi4oikIixuc3Bhcjoi4oimIixuc3FzdWJlOiLii6IiLG5zcXN1cGU6IuKLoyIsbnN1Yjoi4oqEIixuc3ViZToi4oqIIixuc3ViRToi4quFzLgiLG5zdWJzZXQ6IuKKguKDkiIsbnN1YnNldGVxOiLiiogiLG5zdWJzZXRlcXE6IuKrhcy4Iixuc3VjYzoi4oqBIixuc3VjY2VxOiLiqrDMuCIsbnN1cDoi4oqFIixuc3VwZToi4oqJIixuc3VwRToi4quGzLgiLG5zdXBzZXQ6IuKKg+KDkiIsbnN1cHNldGVxOiLiiokiLG5zdXBzZXRlcXE6IuKrhsy4IixudGdsOiLiibkiLG50aWxkZToiw7EiLE50aWxkZToiw5EiLG50bGc6IuKJuCIsbnRyaWFuZ2xlbGVmdDoi4ouqIixudHJpYW5nbGVsZWZ0ZXE6IuKLrCIsbnRyaWFuZ2xlcmlnaHQ6IuKLqyIsbnRyaWFuZ2xlcmlnaHRlcToi4outIixudToizr0iLE51OiLOnSIsbnVtOiIjIixudW1lcm86IuKEliIsbnVtc3A6IuKAhyIsbnZhcDoi4omN4oOSIixudmRhc2g6IuKKrCIsbnZEYXNoOiLiiq0iLG5WZGFzaDoi4oquIixuVkRhc2g6IuKKryIsbnZnZToi4oml4oOSIixudmd0OiI+4oOSIixudkhhcnI6IuKkhCIsbnZpbmZpbjoi4qeeIixudmxBcnI6IuKkgiIsbnZsZToi4omk4oOSIixudmx0OiI84oOSIixudmx0cmllOiLiirTig5IiLG52ckFycjoi4qSDIixudnJ0cmllOiLiirXig5IiLG52c2ltOiLiiLzig5IiLG53YXJoazoi4qSjIixud2Fycjoi4oaWIixud0Fycjoi4oeWIixud2Fycm93OiLihpYiLG53bmVhcjoi4qSnIixvYWN1dGU6IsOzIixPYWN1dGU6IsOTIixvYXN0OiLiipsiLG9jaXI6IuKKmiIsb2NpcmM6IsO0IixPY2lyYzoiw5QiLG9jeToi0L4iLE9jeToi0J4iLG9kYXNoOiLiip0iLG9kYmxhYzoixZEiLE9kYmxhYzoixZAiLG9kaXY6IuKouCIsb2RvdDoi4oqZIixvZHNvbGQ6IuKmvCIsb2VsaWc6IsWTIixPRWxpZzoixZIiLG9mY2lyOiLipr8iLG9mcjoi8J2UrCIsT2ZyOiLwnZSSIixvZ29uOiLLmyIsb2dyYXZlOiLDsiIsT2dyYXZlOiLDkiIsb2d0OiLip4EiLG9oYmFyOiLiprUiLG9obToizqkiLG9pbnQ6IuKIriIsb2xhcnI6IuKGuiIsb2xjaXI6IuKmviIsb2xjcm9zczoi4qa7IixvbGluZToi4oC+IixvbHQ6IuKngCIsb21hY3I6IsWNIixPbWFjcjoixYwiLG9tZWdhOiLPiSIsT21lZ2E6Is6pIixvbWljcm9uOiLOvyIsT21pY3Jvbjoizp8iLG9taWQ6IuKmtiIsb21pbnVzOiLiipYiLG9vcGY6IvCdlaAiLE9vcGY6IvCdlYYiLG9wYXI6IuKmtyIsT3BlbkN1cmx5RG91YmxlUXVvdGU6IuKAnCIsT3BlbkN1cmx5UXVvdGU6IuKAmCIsb3BlcnA6IuKmuSIsb3BsdXM6IuKKlSIsb3I6IuKIqCIsT3I6IuKplCIsb3JhcnI6IuKGuyIsb3JkOiLiqZ0iLG9yZGVyOiLihLQiLG9yZGVyb2Y6IuKEtCIsb3JkZjoiwqoiLG9yZG06IsK6Iixvcmlnb2Y6IuKKtiIsb3Jvcjoi4qmWIixvcnNsb3BlOiLiqZciLG9ydjoi4qmbIixvUzoi4pOIIixvc2NyOiLihLQiLE9zY3I6IvCdkqoiLG9zbGFzaDoiw7giLE9zbGFzaDoiw5giLG9zb2w6IuKKmCIsb3RpbGRlOiLDtSIsT3RpbGRlOiLDlSIsb3RpbWVzOiLiipciLE90aW1lczoi4qi3IixvdGltZXNhczoi4qi2IixvdW1sOiLDtiIsT3VtbDoiw5YiLG92YmFyOiLijL0iLE92ZXJCYXI6IuKAviIsT3ZlckJyYWNlOiLij54iLE92ZXJCcmFja2V0OiLijrQiLE92ZXJQYXJlbnRoZXNpczoi4o+cIixwYXI6IuKIpSIscGFyYToiwrYiLHBhcmFsbGVsOiLiiKUiLHBhcnNpbToi4quzIixwYXJzbDoi4qu9IixwYXJ0OiLiiIIiLFBhcnRpYWxEOiLiiIIiLHBjeToi0L8iLFBjeToi0J8iLHBlcmNudDoiJSIscGVyaW9kOiIuIixwZXJtaWw6IuKAsCIscGVycDoi4oqlIixwZXJ0ZW5rOiLigLEiLHBmcjoi8J2UrSIsUGZyOiLwnZSTIixwaGk6Is+GIixQaGk6Is6mIixwaGl2OiLPlSIscGhtbWF0OiLihLMiLHBob25lOiLimI4iLHBpOiLPgCIsUGk6Is6gIixwaXRjaGZvcms6IuKLlCIscGl2OiLPliIscGxhbmNrOiLihI8iLHBsYW5ja2g6IuKEjiIscGxhbmt2OiLihI8iLHBsdXM6IisiLHBsdXNhY2lyOiLiqKMiLHBsdXNiOiLiip4iLHBsdXNjaXI6IuKooiIscGx1c2RvOiLiiJQiLHBsdXNkdToi4qilIixwbHVzZToi4qmyIixQbHVzTWludXM6IsKxIixwbHVzbW46IsKxIixwbHVzc2ltOiLiqKYiLHBsdXN0d286IuKopyIscG06IsKxIixQb2luY2FyZXBsYW5lOiLihIwiLHBvaW50aW50OiLiqJUiLHBvcGY6IvCdlaEiLFBvcGY6IuKEmSIscG91bmQ6IsKjIixwcjoi4om6IixQcjoi4qq7IixwcmFwOiLiqrciLHByY3VlOiLiibwiLHByZToi4qqvIixwckU6IuKqsyIscHJlYzoi4om6IixwcmVjYXBwcm94OiLiqrciLHByZWNjdXJseWVxOiLiibwiLFByZWNlZGVzOiLiiboiLFByZWNlZGVzRXF1YWw6IuKqryIsUHJlY2VkZXNTbGFudEVxdWFsOiLiibwiLFByZWNlZGVzVGlsZGU6IuKJviIscHJlY2VxOiLiqq8iLHByZWNuYXBwcm94OiLiqrkiLHByZWNuZXFxOiLiqrUiLHByZWNuc2ltOiLii6giLHByZWNzaW06IuKJviIscHJpbWU6IuKAsiIsUHJpbWU6IuKAsyIscHJpbWVzOiLihJkiLHBybmFwOiLiqrkiLHBybkU6IuKqtSIscHJuc2ltOiLii6giLHByb2Q6IuKIjyIsUHJvZHVjdDoi4oiPIixwcm9mYWxhcjoi4oyuIixwcm9mbGluZToi4oySIixwcm9mc3VyZjoi4oyTIixwcm9wOiLiiJ0iLFByb3BvcnRpb246IuKItyIsUHJvcG9ydGlvbmFsOiLiiJ0iLHByb3B0bzoi4oidIixwcnNpbToi4om+IixwcnVyZWw6IuKKsCIscHNjcjoi8J2ThSIsUHNjcjoi8J2SqyIscHNpOiLPiCIsUHNpOiLOqCIscHVuY3NwOiLigIgiLHFmcjoi8J2UriIsUWZyOiLwnZSUIixxaW50OiLiqIwiLHFvcGY6IvCdlaIiLFFvcGY6IuKEmiIscXByaW1lOiLigZciLHFzY3I6IvCdk4YiLFFzY3I6IvCdkqwiLHF1YXRlcm5pb25zOiLihI0iLHF1YXRpbnQ6IuKoliIscXVlc3Q6Ij8iLHF1ZXN0ZXE6IuKJnyIscXVvdDonIicsUVVPVDonIicsckFhcnI6IuKHmyIscmFjZToi4oi9zLEiLHJhY3V0ZToixZUiLFJhY3V0ZToixZQiLHJhZGljOiLiiJoiLHJhZW1wdHl2OiLiprMiLHJhbmc6IuKfqSIsUmFuZzoi4p+rIixyYW5nZDoi4qaSIixyYW5nZToi4qalIixyYW5nbGU6IuKfqSIscmFxdW86IsK7IixyYXJyOiLihpIiLHJBcnI6IuKHkiIsUmFycjoi4oagIixyYXJyYXA6IuKltSIscmFycmI6IuKHpSIscmFycmJmczoi4qSgIixyYXJyYzoi4qSzIixyYXJyZnM6IuKkniIscmFycmhrOiLihqoiLHJhcnJscDoi4oasIixyYXJycGw6IuKlhSIscmFycnNpbToi4qW0IixyYXJydGw6IuKGoyIsUmFycnRsOiLipJYiLHJhcnJ3OiLihp0iLHJhdGFpbDoi4qSaIixyQXRhaWw6IuKknCIscmF0aW86IuKItiIscmF0aW9uYWxzOiLihJoiLHJiYXJyOiLipI0iLHJCYXJyOiLipI8iLFJCYXJyOiLipJAiLHJiYnJrOiLinbMiLHJicmFjZToifSIscmJyYWNrOiJdIixyYnJrZToi4qaMIixyYnJrc2xkOiLipo4iLHJicmtzbHU6IuKmkCIscmNhcm9uOiLFmSIsUmNhcm9uOiLFmCIscmNlZGlsOiLFlyIsUmNlZGlsOiLFliIscmNlaWw6IuKMiSIscmN1YjoifSIscmN5OiLRgCIsUmN5OiLQoCIscmRjYToi4qS3IixyZGxkaGFyOiLipakiLHJkcXVvOiLigJ0iLHJkcXVvcjoi4oCdIixyZHNoOiLihrMiLFJlOiLihJwiLHJlYWw6IuKEnCIscmVhbGluZToi4oSbIixyZWFscGFydDoi4oScIixyZWFsczoi4oSdIixyZWN0OiLilq0iLHJlZzoiwq4iLFJFRzoiwq4iLFJldmVyc2VFbGVtZW50OiLiiIsiLFJldmVyc2VFcXVpbGlicml1bToi4oeLIixSZXZlcnNlVXBFcXVpbGlicml1bToi4qWvIixyZmlzaHQ6IuKlvSIscmZsb29yOiLijIsiLHJmcjoi8J2UryIsUmZyOiLihJwiLHJIYXI6IuKlpCIscmhhcmQ6IuKHgSIscmhhcnU6IuKHgCIscmhhcnVsOiLipawiLHJobzoiz4EiLFJobzoizqEiLHJob3Y6Is+xIixSaWdodEFuZ2xlQnJhY2tldDoi4p+pIixyaWdodGFycm93OiLihpIiLFJpZ2h0YXJyb3c6IuKHkiIsUmlnaHRBcnJvdzoi4oaSIixSaWdodEFycm93QmFyOiLih6UiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6IuKHhCIscmlnaHRhcnJvd3RhaWw6IuKGoyIsUmlnaHRDZWlsaW5nOiLijIkiLFJpZ2h0RG91YmxlQnJhY2tldDoi4p+nIixSaWdodERvd25UZWVWZWN0b3I6IuKlnSIsUmlnaHREb3duVmVjdG9yOiLih4IiLFJpZ2h0RG93blZlY3RvckJhcjoi4qWVIixSaWdodEZsb29yOiLijIsiLHJpZ2h0aGFycG9vbmRvd246IuKHgSIscmlnaHRoYXJwb29udXA6IuKHgCIscmlnaHRsZWZ0YXJyb3dzOiLih4QiLHJpZ2h0bGVmdGhhcnBvb25zOiLih4wiLHJpZ2h0cmlnaHRhcnJvd3M6IuKHiSIscmlnaHRzcXVpZ2Fycm93OiLihp0iLFJpZ2h0VGVlOiLiiqIiLFJpZ2h0VGVlQXJyb3c6IuKGpiIsUmlnaHRUZWVWZWN0b3I6IuKlmyIscmlnaHR0aHJlZXRpbWVzOiLii4wiLFJpZ2h0VHJpYW5nbGU6IuKKsyIsUmlnaHRUcmlhbmdsZUJhcjoi4qeQIixSaWdodFRyaWFuZ2xlRXF1YWw6IuKKtSIsUmlnaHRVcERvd25WZWN0b3I6IuKljyIsUmlnaHRVcFRlZVZlY3Rvcjoi4qWcIixSaWdodFVwVmVjdG9yOiLihr4iLFJpZ2h0VXBWZWN0b3JCYXI6IuKllCIsUmlnaHRWZWN0b3I6IuKHgCIsUmlnaHRWZWN0b3JCYXI6IuKlkyIscmluZzoiy5oiLHJpc2luZ2RvdHNlcToi4omTIixybGFycjoi4oeEIixybGhhcjoi4oeMIixybG06IuKAjyIscm1vdXN0OiLijrEiLHJtb3VzdGFjaGU6IuKOsSIscm5taWQ6IuKrriIscm9hbmc6IuKfrSIscm9hcnI6IuKHviIscm9icms6IuKfpyIscm9wYXI6IuKmhiIscm9wZjoi8J2VoyIsUm9wZjoi4oSdIixyb3BsdXM6IuKoriIscm90aW1lczoi4qi1IixSb3VuZEltcGxpZXM6IuKlsCIscnBhcjoiKSIscnBhcmd0OiLippQiLHJwcG9saW50OiLiqJIiLHJyYXJyOiLih4kiLFJyaWdodGFycm93OiLih5siLHJzYXF1bzoi4oC6Iixyc2NyOiLwnZOHIixSc2NyOiLihJsiLHJzaDoi4oaxIixSc2g6IuKGsSIscnNxYjoiXSIscnNxdW86IuKAmSIscnNxdW9yOiLigJkiLHJ0aHJlZToi4ouMIixydGltZXM6IuKLiiIscnRyaToi4pa5IixydHJpZToi4oq1IixydHJpZjoi4pa4IixydHJpbHRyaToi4qeOIixSdWxlRGVsYXllZDoi4qe0IixydWx1aGFyOiLipagiLHJ4OiLihJ4iLHNhY3V0ZToixZsiLFNhY3V0ZToixZoiLHNicXVvOiLigJoiLHNjOiLiibsiLFNjOiLiqrwiLHNjYXA6IuKquCIsc2Nhcm9uOiLFoSIsU2Nhcm9uOiLFoCIsc2NjdWU6IuKJvSIsc2NlOiLiqrAiLHNjRToi4qq0IixzY2VkaWw6IsWfIixTY2VkaWw6IsWeIixzY2lyYzoixZ0iLFNjaXJjOiLFnCIsc2NuYXA6IuKquiIsc2NuRToi4qq2IixzY25zaW06IuKLqSIsc2Nwb2xpbnQ6IuKokyIsc2NzaW06IuKJvyIsc2N5OiLRgSIsU2N5OiLQoSIsc2RvdDoi4ouFIixzZG90Yjoi4oqhIixzZG90ZToi4qmmIixzZWFyaGs6IuKkpSIsc2VhcnI6IuKGmCIsc2VBcnI6IuKHmCIsc2VhcnJvdzoi4oaYIixzZWN0OiLCpyIsc2VtaToiOyIsc2Vzd2FyOiLipKkiLHNldG1pbnVzOiLiiJYiLHNldG1uOiLiiJYiLHNleHQ6IuKctiIsc2ZyOiLwnZSwIixTZnI6IvCdlJYiLHNmcm93bjoi4oyiIixzaGFycDoi4pmvIixzaGNoY3k6ItGJIixTSENIY3k6ItCpIixzaGN5OiLRiCIsU0hjeToi0KgiLFNob3J0RG93bkFycm93OiLihpMiLFNob3J0TGVmdEFycm93OiLihpAiLHNob3J0bWlkOiLiiKMiLHNob3J0cGFyYWxsZWw6IuKIpSIsU2hvcnRSaWdodEFycm93OiLihpIiLFNob3J0VXBBcnJvdzoi4oaRIixzaHk6IsKtIixzaWdtYToiz4MiLFNpZ21hOiLOoyIsc2lnbWFmOiLPgiIsc2lnbWF2OiLPgiIsc2ltOiLiiLwiLHNpbWRvdDoi4qmqIixzaW1lOiLiiYMiLHNpbWVxOiLiiYMiLHNpbWc6IuKqniIsc2ltZ0U6IuKqoCIsc2ltbDoi4qqdIixzaW1sRToi4qqfIixzaW1uZToi4omGIixzaW1wbHVzOiLiqKQiLHNpbXJhcnI6IuKlsiIsc2xhcnI6IuKGkCIsU21hbGxDaXJjbGU6IuKImCIsc21hbGxzZXRtaW51czoi4oiWIixzbWFzaHA6IuKosyIsc21lcGFyc2w6IuKnpCIsc21pZDoi4oijIixzbWlsZToi4oyjIixzbXQ6IuKqqiIsc210ZToi4qqsIixzbXRlczoi4qqs77iAIixzb2Z0Y3k6ItGMIixTT0ZUY3k6ItCsIixzb2w6Ii8iLHNvbGI6IuKnhCIsc29sYmFyOiLijL8iLHNvcGY6IvCdlaQiLFNvcGY6IvCdlYoiLHNwYWRlczoi4pmgIixzcGFkZXN1aXQ6IuKZoCIsc3Bhcjoi4oilIixzcWNhcDoi4oqTIixzcWNhcHM6IuKKk++4gCIsc3FjdXA6IuKKlCIsc3FjdXBzOiLiipTvuIAiLFNxcnQ6IuKImiIsc3FzdWI6IuKKjyIsc3FzdWJlOiLiipEiLHNxc3Vic2V0OiLiio8iLHNxc3Vic2V0ZXE6IuKKkSIsc3FzdXA6IuKKkCIsc3FzdXBlOiLiipIiLHNxc3Vwc2V0OiLiipAiLHNxc3Vwc2V0ZXE6IuKKkiIsc3F1OiLilqEiLHNxdWFyZToi4pahIixTcXVhcmU6IuKWoSIsU3F1YXJlSW50ZXJzZWN0aW9uOiLiipMiLFNxdWFyZVN1YnNldDoi4oqPIixTcXVhcmVTdWJzZXRFcXVhbDoi4oqRIixTcXVhcmVTdXBlcnNldDoi4oqQIixTcXVhcmVTdXBlcnNldEVxdWFsOiLiipIiLFNxdWFyZVVuaW9uOiLiipQiLHNxdWFyZjoi4paqIixzcXVmOiLilqoiLHNyYXJyOiLihpIiLHNzY3I6IvCdk4giLFNzY3I6IvCdkq4iLHNzZXRtbjoi4oiWIixzc21pbGU6IuKMoyIsc3N0YXJmOiLii4YiLHN0YXI6IuKYhiIsU3Rhcjoi4ouGIixzdGFyZjoi4piFIixzdHJhaWdodGVwc2lsb246Is+1IixzdHJhaWdodHBoaToiz5UiLHN0cm5zOiLCryIsc3ViOiLiioIiLFN1Yjoi4ouQIixzdWJkb3Q6IuKqvSIsc3ViZToi4oqGIixzdWJFOiLiq4UiLHN1YmVkb3Q6IuKrgyIsc3VibXVsdDoi4quBIixzdWJuZToi4oqKIixzdWJuRToi4quLIixzdWJwbHVzOiLiqr8iLHN1YnJhcnI6IuKluSIsc3Vic2V0OiLiioIiLFN1YnNldDoi4ouQIixzdWJzZXRlcToi4oqGIixzdWJzZXRlcXE6IuKrhSIsU3Vic2V0RXF1YWw6IuKKhiIsc3Vic2V0bmVxOiLiiooiLHN1YnNldG5lcXE6IuKriyIsc3Vic2ltOiLiq4ciLHN1YnN1Yjoi4quVIixzdWJzdXA6IuKrkyIsc3VjYzoi4om7IixzdWNjYXBwcm94OiLiqrgiLHN1Y2NjdXJseWVxOiLiib0iLFN1Y2NlZWRzOiLiibsiLFN1Y2NlZWRzRXF1YWw6IuKqsCIsU3VjY2VlZHNTbGFudEVxdWFsOiLiib0iLFN1Y2NlZWRzVGlsZGU6IuKJvyIsc3VjY2VxOiLiqrAiLHN1Y2NuYXBwcm94OiLiqroiLHN1Y2NuZXFxOiLiqrYiLHN1Y2Nuc2ltOiLii6kiLHN1Y2NzaW06IuKJvyIsU3VjaFRoYXQ6IuKIiyIsc3VtOiLiiJEiLFN1bToi4oiRIixzdW5nOiLimaoiLHN1cDoi4oqDIixTdXA6IuKLkSIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3VwZG90OiLiqr4iLHN1cGRzdWI6IuKrmCIsc3VwZToi4oqHIixzdXBFOiLiq4YiLHN1cGVkb3Q6IuKrhCIsU3VwZXJzZXQ6IuKKgyIsU3VwZXJzZXRFcXVhbDoi4oqHIixzdXBoc29sOiLin4kiLHN1cGhzdWI6IuKrlyIsc3VwbGFycjoi4qW7IixzdXBtdWx0OiLiq4IiLHN1cG5lOiLiiosiLHN1cG5FOiLiq4wiLHN1cHBsdXM6IuKrgCIsc3Vwc2V0OiLiioMiLFN1cHNldDoi4ouRIixzdXBzZXRlcToi4oqHIixzdXBzZXRlcXE6IuKrhiIsc3Vwc2V0bmVxOiLiiosiLHN1cHNldG5lcXE6IuKrjCIsc3Vwc2ltOiLiq4giLHN1cHN1Yjoi4quUIixzdXBzdXA6IuKrliIsc3dhcmhrOiLipKYiLHN3YXJyOiLihpkiLHN3QXJyOiLih5kiLHN3YXJyb3c6IuKGmSIsc3dud2FyOiLipKoiLHN6bGlnOiLDnyIsVGFiOiJcdCIsdGFyZ2V0OiLijJYiLHRhdToiz4QiLFRhdToizqQiLHRicms6IuKOtCIsdGNhcm9uOiLFpSIsVGNhcm9uOiLFpCIsdGNlZGlsOiLFoyIsVGNlZGlsOiLFoiIsdGN5OiLRgiIsVGN5OiLQoiIsdGRvdDoi4oObIix0ZWxyZWM6IuKMlSIsdGZyOiLwnZSxIixUZnI6IvCdlJciLHRoZXJlNDoi4oi0Iix0aGVyZWZvcmU6IuKItCIsVGhlcmVmb3JlOiLiiLQiLHRoZXRhOiLOuCIsVGhldGE6Is6YIix0aGV0YXN5bToiz5EiLHRoZXRhdjoiz5EiLHRoaWNrYXBwcm94OiLiiYgiLHRoaWNrc2ltOiLiiLwiLFRoaWNrU3BhY2U6IuKBn+KAiiIsdGhpbnNwOiLigIkiLFRoaW5TcGFjZToi4oCJIix0aGthcDoi4omIIix0aGtzaW06IuKIvCIsdGhvcm46IsO+IixUSE9STjoiw54iLHRpbGRlOiLLnCIsVGlsZGU6IuKIvCIsVGlsZGVFcXVhbDoi4omDIixUaWxkZUZ1bGxFcXVhbDoi4omFIixUaWxkZVRpbGRlOiLiiYgiLHRpbWVzOiLDlyIsdGltZXNiOiLiiqAiLHRpbWVzYmFyOiLiqLEiLHRpbWVzZDoi4qiwIix0aW50OiLiiK0iLHRvZWE6IuKkqCIsdG9wOiLiiqQiLHRvcGJvdDoi4oy2Iix0b3BjaXI6IuKrsSIsdG9wZjoi8J2VpSIsVG9wZjoi8J2ViyIsdG9wZm9yazoi4quaIix0b3NhOiLipKkiLHRwcmltZToi4oC0Iix0cmFkZToi4oSiIixUUkFERToi4oSiIix0cmlhbmdsZToi4pa1Iix0cmlhbmdsZWRvd246IuKWvyIsdHJpYW5nbGVsZWZ0OiLil4MiLHRyaWFuZ2xlbGVmdGVxOiLiirQiLHRyaWFuZ2xlcToi4omcIix0cmlhbmdsZXJpZ2h0OiLilrkiLHRyaWFuZ2xlcmlnaHRlcToi4oq1Iix0cmlkb3Q6IuKXrCIsdHJpZToi4omcIix0cmltaW51czoi4qi6IixUcmlwbGVEb3Q6IuKDmyIsdHJpcGx1czoi4qi5Iix0cmlzYjoi4qeNIix0cml0aW1lOiLiqLsiLHRycGV6aXVtOiLij6IiLHRzY3I6IvCdk4kiLFRzY3I6IvCdkq8iLHRzY3k6ItGGIixUU2N5OiLQpiIsdHNoY3k6ItGbIixUU0hjeToi0IsiLHRzdHJvazoixaciLFRzdHJvazoixaYiLHR3aXh0OiLiiawiLHR3b2hlYWRsZWZ0YXJyb3c6IuKGniIsdHdvaGVhZHJpZ2h0YXJyb3c6IuKGoCIsdWFjdXRlOiLDuiIsVWFjdXRlOiLDmiIsdWFycjoi4oaRIix1QXJyOiLih5EiLFVhcnI6IuKGnyIsVWFycm9jaXI6IuKliSIsdWJyY3k6ItGeIixVYnJjeToi0I4iLHVicmV2ZToixa0iLFVicmV2ZToixawiLHVjaXJjOiLDuyIsVWNpcmM6IsObIix1Y3k6ItGDIixVY3k6ItCjIix1ZGFycjoi4oeFIix1ZGJsYWM6IsWxIixVZGJsYWM6IsWwIix1ZGhhcjoi4qWuIix1ZmlzaHQ6IuKlviIsdWZyOiLwnZSyIixVZnI6IvCdlJgiLHVncmF2ZToiw7kiLFVncmF2ZToiw5kiLHVIYXI6IuKloyIsdWhhcmw6IuKGvyIsdWhhcnI6IuKGviIsdWhibGs6IuKWgCIsdWxjb3JuOiLijJwiLHVsY29ybmVyOiLijJwiLHVsY3JvcDoi4oyPIix1bHRyaToi4pe4Iix1bWFjcjoixasiLFVtYWNyOiLFqiIsdW1sOiLCqCIsVW5kZXJCYXI6Il8iLFVuZGVyQnJhY2U6IuKPnyIsVW5kZXJCcmFja2V0OiLijrUiLFVuZGVyUGFyZW50aGVzaXM6IuKPnSIsVW5pb246IuKLgyIsVW5pb25QbHVzOiLiio4iLHVvZ29uOiLFsyIsVW9nb246IsWyIix1b3BmOiLwnZWmIixVb3BmOiLwnZWMIix1cGFycm93OiLihpEiLFVwYXJyb3c6IuKHkSIsVXBBcnJvdzoi4oaRIixVcEFycm93QmFyOiLipJIiLFVwQXJyb3dEb3duQXJyb3c6IuKHhSIsdXBkb3duYXJyb3c6IuKGlSIsVXBkb3duYXJyb3c6IuKHlSIsVXBEb3duQXJyb3c6IuKGlSIsVXBFcXVpbGlicml1bToi4qWuIix1cGhhcnBvb25sZWZ0OiLihr8iLHVwaGFycG9vbnJpZ2h0OiLihr4iLHVwbHVzOiLiio4iLFVwcGVyTGVmdEFycm93OiLihpYiLFVwcGVyUmlnaHRBcnJvdzoi4oaXIix1cHNpOiLPhSIsVXBzaToiz5IiLHVwc2loOiLPkiIsdXBzaWxvbjoiz4UiLFVwc2lsb246Is6lIixVcFRlZToi4oqlIixVcFRlZUFycm93OiLihqUiLHVwdXBhcnJvd3M6IuKHiCIsdXJjb3JuOiLijJ0iLHVyY29ybmVyOiLijJ0iLHVyY3JvcDoi4oyOIix1cmluZzoixa8iLFVyaW5nOiLFriIsdXJ0cmk6IuKXuSIsdXNjcjoi8J2TiiIsVXNjcjoi8J2SsCIsdXRkb3Q6IuKLsCIsdXRpbGRlOiLFqSIsVXRpbGRlOiLFqCIsdXRyaToi4pa1Iix1dHJpZjoi4pa0Iix1dWFycjoi4oeIIix1dW1sOiLDvCIsVXVtbDoiw5wiLHV3YW5nbGU6IuKmpyIsdmFuZ3J0OiLippwiLHZhcmVwc2lsb246Is+1Iix2YXJrYXBwYToiz7AiLHZhcm5vdGhpbmc6IuKIhSIsdmFycGhpOiLPlSIsdmFycGk6Is+WIix2YXJwcm9wdG86IuKInSIsdmFycjoi4oaVIix2QXJyOiLih5UiLHZhcnJobzoiz7EiLHZhcnNpZ21hOiLPgiIsdmFyc3Vic2V0bmVxOiLiiorvuIAiLHZhcnN1YnNldG5lcXE6IuKri++4gCIsdmFyc3Vwc2V0bmVxOiLiiovvuIAiLHZhcnN1cHNldG5lcXE6IuKrjO+4gCIsdmFydGhldGE6Is+RIix2YXJ0cmlhbmdsZWxlZnQ6IuKKsiIsdmFydHJpYW5nbGVyaWdodDoi4oqzIix2QmFyOiLiq6giLFZiYXI6IuKrqyIsdkJhcnY6IuKrqSIsdmN5OiLQsiIsVmN5OiLQkiIsdmRhc2g6IuKKoiIsdkRhc2g6IuKKqCIsVmRhc2g6IuKKqSIsVkRhc2g6IuKKqyIsVmRhc2hsOiLiq6YiLHZlZToi4oioIixWZWU6IuKLgSIsdmVlYmFyOiLiirsiLHZlZWVxOiLiiZoiLHZlbGxpcDoi4ouuIix2ZXJiYXI6InwiLFZlcmJhcjoi4oCWIix2ZXJ0OiJ8IixWZXJ0OiLigJYiLFZlcnRpY2FsQmFyOiLiiKMiLFZlcnRpY2FsTGluZToifCIsVmVydGljYWxTZXBhcmF0b3I6IuKdmCIsVmVydGljYWxUaWxkZToi4omAIixWZXJ5VGhpblNwYWNlOiLigIoiLHZmcjoi8J2UsyIsVmZyOiLwnZSZIix2bHRyaToi4oqyIix2bnN1Yjoi4oqC4oOSIix2bnN1cDoi4oqD4oOSIix2b3BmOiLwnZWnIixWb3BmOiLwnZWNIix2cHJvcDoi4oidIix2cnRyaToi4oqzIix2c2NyOiLwnZOLIixWc2NyOiLwnZKxIix2c3VibmU6IuKKiu+4gCIsdnN1Ym5FOiLiq4vvuIAiLHZzdXBuZToi4oqL77iAIix2c3VwbkU6IuKrjO+4gCIsVnZkYXNoOiLiiqoiLHZ6aWd6YWc6IuKmmiIsd2NpcmM6IsW1IixXY2lyYzoixbQiLHdlZGJhcjoi4qmfIix3ZWRnZToi4oinIixXZWRnZToi4ouAIix3ZWRnZXE6IuKJmSIsd2VpZXJwOiLihJgiLHdmcjoi8J2UtCIsV2ZyOiLwnZSaIix3b3BmOiLwnZWoIixXb3BmOiLwnZWOIix3cDoi4oSYIix3cjoi4omAIix3cmVhdGg6IuKJgCIsd3Njcjoi8J2TjCIsV3Njcjoi8J2SsiIseGNhcDoi4ouCIix4Y2lyYzoi4pevIix4Y3VwOiLii4MiLHhkdHJpOiLilr0iLHhmcjoi8J2UtSIsWGZyOiLwnZSbIix4aGFycjoi4p+3Iix4aEFycjoi4p+6Iix4aToizr4iLFhpOiLOniIseGxhcnI6IuKftSIseGxBcnI6IuKfuCIseG1hcDoi4p+8Iix4bmlzOiLii7siLHhvZG90OiLiqIAiLHhvcGY6IvCdlakiLFhvcGY6IvCdlY8iLHhvcGx1czoi4qiBIix4b3RpbWU6IuKogiIseHJhcnI6IuKftiIseHJBcnI6IuKfuSIseHNjcjoi8J2TjSIsWHNjcjoi8J2SsyIseHNxY3VwOiLiqIYiLHh1cGx1czoi4qiEIix4dXRyaToi4pazIix4dmVlOiLii4EiLHh3ZWRnZToi4ouAIix5YWN1dGU6IsO9IixZYWN1dGU6IsOdIix5YWN5OiLRjyIsWUFjeToi0K8iLHljaXJjOiLFtyIsWWNpcmM6IsW2Iix5Y3k6ItGLIixZY3k6ItCrIix5ZW46IsKlIix5ZnI6IvCdlLYiLFlmcjoi8J2UnCIseWljeToi0ZciLFlJY3k6ItCHIix5b3BmOiLwnZWqIixZb3BmOiLwnZWQIix5c2NyOiLwnZOOIixZc2NyOiLwnZK0Iix5dWN5OiLRjiIsWVVjeToi0K4iLHl1bWw6IsO/IixZdW1sOiLFuCIsemFjdXRlOiLFuiIsWmFjdXRlOiLFuSIsemNhcm9uOiLFviIsWmNhcm9uOiLFvSIsemN5OiLQtyIsWmN5OiLQlyIsemRvdDoixbwiLFpkb3Q6IsW7Iix6ZWV0cmY6IuKEqCIsWmVyb1dpZHRoU3BhY2U6IuKAiyIsemV0YToizrYiLFpldGE6Is6WIix6ZnI6IvCdlLciLFpmcjoi4oSoIix6aGN5OiLQtiIsWkhjeToi0JYiLHppZ3JhcnI6IuKHnSIsem9wZjoi8J2VqyIsWm9wZjoi4oSkIix6c2NyOiLwnZOPIixac2NyOiLwnZK1Iix6d2o6IuKAjSIsenduajoi4oCMIn0sYj17YWFjdXRlOiLDoSIsQWFjdXRlOiLDgSIsYWNpcmM6IsOiIixBY2lyYzoiw4IiLGFjdXRlOiLCtCIsYWVsaWc6IsOmIixBRWxpZzoiw4YiLGFncmF2ZToiw6AiLEFncmF2ZToiw4AiLGFtcDoiJiIsQU1QOiImIixhcmluZzoiw6UiLEFyaW5nOiLDhSIsYXRpbGRlOiLDoyIsQXRpbGRlOiLDgyIsYXVtbDoiw6QiLEF1bWw6IsOEIixicnZiYXI6IsKmIixjY2VkaWw6IsOnIixDY2VkaWw6IsOHIixjZWRpbDoiwrgiLGNlbnQ6IsKiIixjb3B5OiLCqSIsQ09QWToiwqkiLGN1cnJlbjoiwqQiLGRlZzoiwrAiLGRpdmlkZToiw7ciLGVhY3V0ZToiw6kiLEVhY3V0ZToiw4kiLGVjaXJjOiLDqiIsRWNpcmM6IsOKIixlZ3JhdmU6IsOoIixFZ3JhdmU6IsOIIixldGg6IsOwIixFVEg6IsOQIixldW1sOiLDqyIsRXVtbDoiw4siLGZyYWMxMjoiwr0iLGZyYWMxNDoiwrwiLGZyYWMzNDoiwr4iLGd0OiI+IixHVDoiPiIsaWFjdXRlOiLDrSIsSWFjdXRlOiLDjSIsaWNpcmM6IsOuIixJY2lyYzoiw44iLGlleGNsOiLCoSIsaWdyYXZlOiLDrCIsSWdyYXZlOiLDjCIsaXF1ZXN0OiLCvyIsaXVtbDoiw68iLEl1bWw6IsOPIixsYXF1bzoiwqsiLGx0OiI8IixMVDoiPCIsbWFjcjoiwq8iLG1pY3JvOiLCtSIsbWlkZG90OiLCtyIsbmJzcDoiwqAiLG5vdDoiwqwiLG50aWxkZToiw7EiLE50aWxkZToiw5EiLG9hY3V0ZToiw7MiLE9hY3V0ZToiw5MiLG9jaXJjOiLDtCIsT2NpcmM6IsOUIixvZ3JhdmU6IsOyIixPZ3JhdmU6IsOSIixvcmRmOiLCqiIsb3JkbToiwroiLG9zbGFzaDoiw7giLE9zbGFzaDoiw5giLG90aWxkZToiw7UiLE90aWxkZToiw5UiLG91bWw6IsO2IixPdW1sOiLDliIscGFyYToiwrYiLHBsdXNtbjoiwrEiLHBvdW5kOiLCoyIscXVvdDonIicsUVVPVDonIicscmFxdW86IsK7IixyZWc6IsKuIixSRUc6IsKuIixzZWN0OiLCpyIsc2h5OiLCrSIsc3VwMToiwrkiLHN1cDI6IsKyIixzdXAzOiLCsyIsc3psaWc6IsOfIix0aG9ybjoiw74iLFRIT1JOOiLDniIsdGltZXM6IsOXIix1YWN1dGU6IsO6IixVYWN1dGU6IsOaIix1Y2lyYzoiw7siLFVjaXJjOiLDmyIsdWdyYXZlOiLDuSIsVWdyYXZlOiLDmSIsdW1sOiLCqCIsdXVtbDoiw7wiLFV1bWw6IsOcIix5YWN1dGU6IsO9IixZYWN1dGU6IsOdIix5ZW46IsKlIix5dW1sOiLDvyJ9LGQ9ezA6Iu+/vSIsMTI4OiLigqwiLDEzMDoi4oCaIiwxMzE6IsaSIiwxMzI6IuKAniIsMTMzOiLigKYiLDEzNDoi4oCgIiwxMzU6IuKAoSIsMTM2OiLLhiIsMTM3OiLigLAiLDEzODoixaAiLDEzOToi4oC5IiwxNDA6IsWSIiwxNDI6IsW9IiwxNDU6IuKAmCIsMTQ2OiLigJkiLDE0Nzoi4oCcIiwxNDg6IuKAnSIsMTQ5OiLigKIiLDE1MDoi4oCTIiwxNTE6IuKAlCIsMTUyOiLLnCIsMTUzOiLihKIiLDE1NDoixaEiLDE1NToi4oC6IiwxNTY6IsWTIiwxNTg6IsW+IiwxNTk6IsW4In0sbT1bMSwyLDMsNCw1LDYsNyw4LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDY0OTc2LDY0OTc3LDY0OTc4LDY0OTc5LDY0OTgwLDY0OTgxLDY0OTgyLDY0OTgzLDY0OTg0LDY0OTg1LDY0OTg2LDY0OTg3LDY0OTg4LDY0OTg5LDY0OTkwLDY0OTkxLDY0OTkyLDY0OTkzLDY0OTk0LDY0OTk1LDY0OTk2LDY0OTk3LDY0OTk4LDY0OTk5LDY1ZTMsNjUwMDEsNjUwMDIsNjUwMDMsNjUwMDQsNjUwMDUsNjUwMDYsNjUwMDcsNjU1MzQsNjU1MzUsMTMxMDcwLDEzMTA3MSwxOTY2MDYsMTk2NjA3LDI2MjE0MiwyNjIxNDMsMzI3Njc4LDMyNzY3OSwzOTMyMTQsMzkzMjE1LDQ1ODc1MCw0NTg3NTEsNTI0Mjg2LDUyNDI4Nyw1ODk4MjIsNTg5ODIzLDY1NTM1OCw2NTUzNTksNzIwODk0LDcyMDg5NSw3ODY0MzAsNzg2NDMxLDg1MTk2Niw4NTE5NjcsOTE3NTAyLDkxNzUwMyw5ODMwMzgsOTgzMDM5LDEwNDg1NzQsMTA0ODU3NSwxMTE0MTEwLDExMTQxMTFdLGc9U3RyaW5nLmZyb21DaGFyQ29kZSx5PXt9Lmhhc093blByb3BlcnR5LF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4geS5jYWxsKGUsdCl9LHc9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDt2YXIgbixyPXt9O2ZvcihuIGluIHQpcltuXT1fKGUsbik/ZVtuXTp0W25dO3JldHVybiByfSxFPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NzM0M3x8MTExNDExMTxlPyh0JiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIG91dHNpZGUgdGhlIHBlcm1pc3NpYmxlIFVuaWNvZGUgcmFuZ2UiKSwi77+9Iik6XyhkLGUpPyh0JiZrKCJkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UiKSxkW2VdKToodCYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49LTEscj1lLmxlbmd0aDsrK248cjspaWYoZVtuXT09dClyZXR1cm4hMDtyZXR1cm4hMX0obSxlKSYmaygiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIiksNjU1MzU8ZSYmKG4rPWcoKGUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLGU9NTYzMjB8MTAyMyZlKSxuKz1nKGUpKX0sQT1mdW5jdGlvbihlKXtyZXR1cm4iJiN4IitlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0seD1mdW5jdGlvbihlKXtyZXR1cm4iJiMiK2UrIjsifSxrPWZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKCJQYXJzZSBlcnJvcjogIitlKX0sQz1mdW5jdGlvbihlLHQpeyh0PXcodCxDLm9wdGlvbnMpKS5zdHJpY3QmJmgudGVzdChlKSYmaygiZm9yYmlkZGVuIGNvZGUgcG9pbnQiKTt2YXIgbj10LmVuY29kZUV2ZXJ5dGhpbmcscj10LnVzZU5hbWVkUmVmZXJlbmNlcyxpPXQuYWxsb3dVbnNhZmVTeW1ib2xzLG89dC5kZWNpbWFsP3g6QSxhPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUuY2hhckNvZGVBdCgwKSl9O3JldHVybiBuPyhlPWUucmVwbGFjZSh1LGZ1bmN0aW9uKGUpe3JldHVybiByJiZfKGYsZSk/IiYiK2ZbZV0rIjsiOmEoZSl9KSxyJiYoZT1lLnJlcGxhY2UoLyZndDtcdTIwRDIvZywiJm52Z3Q7IikucmVwbGFjZSgvJmx0O1x1MjBEMi9nLCImbnZsdDsiKS5yZXBsYWNlKC8mI3g2NjsmI3g2QTsvZywiJmZqbGlnOyIpKSxyJiYoZT1lLnJlcGxhY2UoYyxmdW5jdGlvbihlKXtyZXR1cm4iJiIrZltlXSsiOyJ9KSkpOnI/KGl8fChlPWUucmVwbGFjZShwLGZ1bmN0aW9uKGUpe3JldHVybiImIitmW2VdKyI7In0pKSxlPShlPWUucmVwbGFjZSgvJmd0O1x1MjBEMi9nLCImbnZndDsiKS5yZXBsYWNlKC8mbHQ7XHUyMEQyL2csIiZudmx0OyIpKS5yZXBsYWNlKGMsZnVuY3Rpb24oZSl7cmV0dXJuIiYiK2ZbZV0rIjsifSkpOml8fChlPWUucmVwbGFjZShwLGEpKSxlLnJlcGxhY2UocyxmdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCksbj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIG8oMTAyNCoodC01NTI5Nikrbi01NjMyMCs2NTUzNil9KS5yZXBsYWNlKGwsYSl9O0Mub3B0aW9ucz17YWxsb3dVbnNhZmVTeW1ib2xzOiExLGVuY29kZUV2ZXJ5dGhpbmc6ITEsc3RyaWN0OiExLHVzZU5hbWVkUmVmZXJlbmNlczohMSxkZWNpbWFsOiExfTt2YXIgTz1mdW5jdGlvbihlLG0pe3ZhciBnPShtPXcobSxPLm9wdGlvbnMpKS5zdHJpY3Q7cmV0dXJuIGcmJm8udGVzdChlKSYmaygibWFsZm9ybWVkIGNoYXJhY3RlciByZWZlcmVuY2UiKSxlLnJlcGxhY2UoYSxmdW5jdGlvbihlLHQsbixyLGksbyxhLHMsdSl7dmFyIGwsYyxmLHAsaCxkO3JldHVybiB0P3ZbaD10XTpuPyhoPW4sKGQ9cikmJm0uaXNBdHRyaWJ1dGVWYWx1ZT8oZyYmIj0iPT1kJiZrKCJgJmAgZGlkIG5vdCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UiKSxlKTooZyYmaygibmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24iKSxiW2hdKyhkfHwiIikpKTppPyhmPWksYz1vLGcmJiFjJiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbiIpLGw9cGFyc2VJbnQoZiwxMCksRShsLGcpKTphPyhwPWEsYz1zLGcmJiFjJiZrKCJjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbiIpLGw9cGFyc2VJbnQocCwxNiksRShsLGcpKTooZyYmaygibmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24iKSxlKX0pfTtPLm9wdGlvbnM9e2lzQXR0cmlidXRlVmFsdWU6ITEsc3RyaWN0OiExfTt2YXIgUz17dmVyc2lvbjoiMS4yLjAiLGVuY29kZTpDLGRlY29kZTpPLGVzY2FwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHAsZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV19KX0sdW5lc2NhcGU6T307aWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmIm9iamVjdCI9PXR5cGVvZiBkZWZpbmUuYW1kJiZkZWZpbmUuYW1kKWRlZmluZShmdW5jdGlvbigpe3JldHVybiBTfSk7ZWxzZSBpZih0JiYhdC5ub2RlVHlwZSlpZihuKW4uZXhwb3J0cz1TO2Vsc2UgZm9yKHZhciBEIGluIFMpXyhTLEQpJiYodFtEXT1TW0RdKTtlbHNlIGUuaGU9U30odGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwxMDQ6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCJodHRwIiksaT1lKCJ1cmwiKSxvPXQuZXhwb3J0cztmb3IodmFyIGEgaW4gcilyLmhhc093blByb3BlcnR5KGEpJiYob1thXT1yW2FdKTtmdW5jdGlvbiBzKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aS5wYXJzZShlKSksZS5wcm90b2NvbHx8KGUucHJvdG9jb2w9Imh0dHBzOiIpLCJodHRwczoiIT09ZS5wcm90b2NvbCl0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvY29sICInK2UucHJvdG9jb2wrJyIgbm90IHN1cHBvcnRlZC4gRXhwZWN0ZWQgImh0dHBzOiInKTtyZXR1cm4gZX1vLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1zKGUpLHIucmVxdWVzdC5jYWxsKHRoaXMsZSx0KX0sby5nZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1zKGUpLHIuZ2V0LmNhbGwodGhpcyxlLHQpfX0se2h0dHA6MTU2LHVybDoxNjJ9XSwxMDU6W2Z1bmN0aW9uKGUsdCxuKXtuLnJlYWQ9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHM9OCppLXItMSx1PSgxPDxzKS0xLGw9dT4+MSxjPS03LGY9bj9pLTE6MCxwPW4/LTE6MSxoPWVbdCtmXTtmb3IoZis9cCxvPWgmKDE8PC1jKS0xLGg+Pj0tYyxjKz1zOzA8YztvPTI1NipvK2VbdCtmXSxmKz1wLGMtPTgpO2ZvcihhPW8mKDE8PC1jKS0xLG8+Pj0tYyxjKz1yOzA8YzthPTI1NiphK2VbdCtmXSxmKz1wLGMtPTgpO2lmKDA9PT1vKW89MS1sO2Vsc2V7aWYobz09PXUpcmV0dXJuIGE/TmFOOjEvMCooaD8tMToxKTthKz1NYXRoLnBvdygyLHIpLG8tPWx9cmV0dXJuKGg/LTE6MSkqYSpNYXRoLnBvdygyLG8tcil9LG4ud3JpdGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhLHMsdSxsPTgqby1pLTEsYz0oMTw8bCktMSxmPWM+PjEscD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGg9cj8wOm8tMSxkPXI/MTotMSxtPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsYT1jKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLHUqPTIpLDI8PSh0Kz0xPD1hK2Y/cC91OnAqTWF0aC5wb3coMiwxLWYpKSp1JiYoYSsrLHUvPTIpLGM8PWErZj8ocz0wLGE9Yyk6MTw9YStmPyhzPSh0KnUtMSkqTWF0aC5wb3coMixpKSxhKz1mKToocz10Kk1hdGgucG93KDIsZi0xKSpNYXRoLnBvdygyLGkpLGE9MCkpOzg8PWk7ZVtuK2hdPTI1NSZzLGgrPWQscy89MjU2LGktPTgpO2ZvcihhPWE8PGl8cyxsKz1pOzA8bDtlW24raF09MjU1JmEsaCs9ZCxhLz0yNTYsbC09OCk7ZVtuK2gtZF18PTEyOCptfX0se31dLDEwNjpbZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Uuc3VwZXJfPXQ7dmFyIG49ZnVuY3Rpb24oKXt9O24ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fSx7fV0sMTA3OltmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXQuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKHIoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmcihlLnNsaWNlKDAsMCkpfShlKXx8ISFlLl9pc0J1ZmZlcil9fSx7fV0sMTA4OltmdW5jdGlvbihlLHQsbil7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PXIuY2FsbChlKX19LHt9XSwxMDk6W2Z1bmN0aW9uKGUsdCxuKXtuLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxuLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhdGlvbj9sb2NhdGlvbi5ob3N0bmFtZToiIn0sbi5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LG4udXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LG4uZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxuLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LG4uY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxuLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LG4ucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxuLm5ldHdvcmtJbnRlcmZhY2VzPW4uZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sbi5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxuLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxuLnRtcGRpcj1uLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sbi5FT0w9IlxuIixuLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSx7fV0sMTEwOltmdW5jdGlvbihlLHQsbCl7KGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTE7MDw9cjtyLS0pe3ZhciBpPWVbcl07Ii4iPT09aT9lLnNwbGljZShyLDEpOiIuLiI9PT1pPyhlLnNwbGljZShyLDEpLG4rKyk6biYmKGUuc3BsaWNlKHIsMSksbi0tKX1pZih0KWZvcig7bi0tO24pZS51bnNoaWZ0KCIuLiIpO3JldHVybiBlfWZ1bmN0aW9uIGEoZSx0KXtpZihlLmZpbHRlcilyZXR1cm4gZS5maWx0ZXIodCk7Zm9yKHZhciBuPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0KGVbcl0scixlKSYmbi5wdXNoKGVbcl0pO3JldHVybiBufWwucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIix0PSExLG49YXJndW1lbnRzLmxlbmd0aC0xOy0xPD1uJiYhdDtuLS0pe3ZhciByPTA8PW4/YXJndW1lbnRzW25dOmkuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7ciYmKGU9cisiLyIrZSx0PSIvIj09PXIuY2hhckF0KDApKX1yZXR1cm4odD8iLyI6IiIpKyhlPW8oYShlLnNwbGl0KCIvIiksZnVuY3Rpb24oZSl7cmV0dXJuISFlfSksIXQpLmpvaW4oIi8iKSl8fCIuIn0sbC5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9bC5pc0Fic29sdXRlKGUpLG49Ii8iPT09cihlLC0xKTtyZXR1cm4oZT1vKGEoZS5zcGxpdCgiLyIpLGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pLCF0KS5qb2luKCIvIikpfHx0fHwoZT0iLiIpLGUmJm4mJihlKz0iLyIpLCh0PyIvIjoiIikrZX0sbC5pc0Fic29sdXRlPWZ1bmN0aW9uKGUpe3JldHVybiIvIj09PWUuY2hhckF0KDApfSxsLmpvaW49ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGwubm9ybWFsaXplKGEoZSxmdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO3JldHVybiBlfSkuam9pbigiLyIpKX0sbC5yZWxhdGl2ZT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aCYmIiI9PT1lW3RdO3QrKyk7Zm9yKHZhciBuPWUubGVuZ3RoLTE7MDw9biYmIiI9PT1lW25dO24tLSk7cmV0dXJuIG48dD9bXTplLnNsaWNlKHQsbi10KzEpfWU9bC5yZXNvbHZlKGUpLnN1YnN0cigxKSx0PWwucmVzb2x2ZSh0KS5zdWJzdHIoMSk7Zm9yKHZhciByPW4oZS5zcGxpdCgiLyIpKSxpPW4odC5zcGxpdCgiLyIpKSxvPU1hdGgubWluKHIubGVuZ3RoLGkubGVuZ3RoKSxhPW8scz0wO3M8bztzKyspaWYocltzXSE9PWlbc10pe2E9czticmVha312YXIgdT1bXTtmb3Iocz1hO3M8ci5sZW5ndGg7cysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChpLnNsaWNlKGEpKSkuam9pbigiLyIpfSxsLnNlcD0iLyIsbC5kZWxpbWl0ZXI9IjoiLGwuZGlybmFtZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihlKz0iIiksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG49NDc9PT10LHI9LTEsaT0hMCxvPWUubGVuZ3RoLTE7MTw9bzstLW8paWYoNDc9PT0odD1lLmNoYXJDb2RlQXQobykpKXtpZighaSl7cj1vO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6ZS5zbGljZSgwLHIpfSxsLmJhc2VuYW1lPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7InN0cmluZyIhPXR5cGVvZiBlJiYoZSs9IiIpO3ZhciB0LG49MCxyPS0xLGk9ITA7Zm9yKHQ9ZS5sZW5ndGgtMTswPD10Oy0tdClpZig0Nz09PWUuY2hhckNvZGVBdCh0KSl7aWYoIWkpe249dCsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPXQrMSk7cmV0dXJuLTE9PT1yPyIiOmUuc2xpY2UobixyKX0oZSk7cmV0dXJuIHQmJm4uc3Vic3RyKC0xKnQubGVuZ3RoKT09PXQmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtdC5sZW5ndGgpKSxufSxsLmV4dG5hbWU9ZnVuY3Rpb24oZSl7InN0cmluZyIhPXR5cGVvZiBlJiYoZSs9IiIpO2Zvcih2YXIgdD0tMSxuPTAscj0tMSxpPSEwLG89MCxhPWUubGVuZ3RoLTE7MDw9YTstLWEpe3ZhciBzPWUuY2hhckNvZGVBdChhKTtpZig0Nz09PXMpe2lmKGkpY29udGludWU7bj1hKzE7YnJlYWt9LTE9PT1yJiYoaT0hMSxyPWErMSksNDY9PT1zPy0xPT09dD90PWE6MSE9PW8mJihvPTEpOi0xIT09dCYmKG89LTEpfXJldHVybi0xPT09dHx8LTE9PT1yfHwwPT09b3x8MT09PW8mJnQ9PT1yLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHIpfTt2YXIgcj0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnN1YnN0cih0LG4pfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ8MCYmKHQ9ZS5sZW5ndGgrdCksZS5zdWJzdHIodCxuKX19KS5jYWxsKHRoaXMsZSgiX3Byb2Nlc3MiKSl9LHtfcHJvY2VzczoxMTJ9XSwxMTE6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24ocyl7InVzZSBzdHJpY3QiOyFzLnZlcnNpb258fDA9PT1zLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1zLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1zLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT90LmV4cG9ydHM9e25leHRUaWNrOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIGksbyxhPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHMubmV4dFRpY2soZSk7Y2FzZSAyOnJldHVybiBzLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwsdCl9KTtjYXNlIDM6cmV0dXJuIHMubmV4dFRpY2soZnVuY3Rpb24oKXtlLmNhbGwobnVsbCx0LG4pfSk7Y2FzZSA0OnJldHVybiBzLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwsdCxuLHIpfSk7ZGVmYXVsdDpmb3IoaT1uZXcgQXJyYXkoYS0xKSxvPTA7bzxpLmxlbmd0aDspaVtvKytdPWFyZ3VtZW50c1tvXTtyZXR1cm4gcy5uZXh0VGljayhmdW5jdGlvbigpe2UuYXBwbHkobnVsbCxpKX0pfX19OnQuZXhwb3J0cz1zfSkuY2FsbCh0aGlzLGUoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6MTEyfV0sMTEyOltmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gdSh0KXtpZihyPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChyPT09YXx8IXIpJiZzZXRUaW1lb3V0KXJldHVybiByPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gcih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtyPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaChlKXtyPWF9dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaChlKXtpPXN9fSgpO3ZhciBsLGM9W10sZj0hMSxwPS0xO2Z1bmN0aW9uIGgoKXtmJiZsJiYoZj0hMSxsLmxlbmd0aD9jPWwuY29uY2F0KGMpOnA9LTEsYy5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgZT11KGgpO2Y9ITA7Zm9yKHZhciB0PWMubGVuZ3RoO3Q7KXtmb3IobD1jLGM9W107KytwPHQ7KWwmJmxbcF0ucnVuKCk7cD0tMSx0PWMubGVuZ3RofWw9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0oZSl9fWZ1bmN0aW9uIG0oZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBnKCl7fW8ubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtjLnB1c2gobmV3IG0oZSx0KSksMSE9PWMubGVuZ3RofHxmfHx1KGQpfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxvLnRpdGxlPSJicm93c2VyIixvLmJyb3dzZXI9ITAsby5lbnY9e30sby5hcmd2PVtdLG8udmVyc2lvbj0iIixvLnZlcnNpb25zPXt9LG8ub249ZyxvLmFkZExpc3RlbmVyPWcsby5vbmNlPWcsby5vZmY9ZyxvLnJlbW92ZUxpc3RlbmVyPWcsby5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxvLmVtaXQ9ZyxvLnByZXBlbmRMaXN0ZW5lcj1nLG8ucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLG8ubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxvLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxvLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sby5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxvLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sMTEzOltmdW5jdGlvbihlLFIsTCl7KGZ1bmN0aW9uKEIpeyFmdW5jdGlvbihlKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiFMLm5vZGVUeXBlJiZMLG49Im9iamVjdCI9PXR5cGVvZiBSJiZSJiYhUi5ub2RlVHlwZSYmUixyPSJvYmplY3QiPT10eXBlb2YgQiYmQjtyLmdsb2JhbCE9PXImJnIud2luZG93IT09ciYmci5zZWxmIT09cnx8KGU9cik7dmFyIGksbyx2PTIxNDc0ODM2NDcsYj0zNix5PTEsXz0yNixhPTM4LHM9NzAwLHc9NzIsRT0xMjgsQT0iLSIsdT0vXnhuLS0vLGw9L1teXHgyMC1ceDdFXS8sYz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csZj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0scD1iLXkseD1NYXRoLmZsb29yLGs9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBDKGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKGZbZV0pfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgscj1bXTtuLS07KXJbbl09dChlW25dKTtyZXR1cm4gcn1mdW5jdGlvbiBkKGUsdCl7dmFyIG49ZS5zcGxpdCgiQCIpLHI9IiI7cmV0dXJuIDE8bi5sZW5ndGgmJihyPW5bMF0rIkAiLGU9blsxXSkscitoKChlPWUucmVwbGFjZShjLCIuIikpLnNwbGl0KCIuIiksdCkuam9pbigiLiIpfWZ1bmN0aW9uIE8oZSl7Zm9yKHZhciB0LG4scj1bXSxpPTAsbz1lLmxlbmd0aDtpPG87KTU1Mjk2PD0odD1lLmNoYXJDb2RlQXQoaSsrKSkmJnQ8PTU2MzE5JiZpPG8/NTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsrKSkpP3IucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZuKSs2NTUzNik6KHIucHVzaCh0KSxpLS0pOnIucHVzaCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBTKGUpe3JldHVybiBoKGUsZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIDY1NTM1PGUmJih0Kz1rKChlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxlPTU2MzIwfDEwMjMmZSksdCs9ayhlKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gZSsyMis3NSooZTwyNiktKCgwIT10KTw8NSl9ZnVuY3Rpb24gVChlLHQsbil7dmFyIHI9MDtmb3IoZT1uP3goZS9zKTplPj4xLGUrPXgoZS90KTtwKl8+PjE8ZTtyKz1iKWU9eChlL3ApO3JldHVybiB4KHIrKHArMSkqZS8oZSthKSl9ZnVuY3Rpb24gbShlKXt2YXIgdCxuLHIsaSxvLGEscyx1LGwsYyxmLHA9W10saD1lLmxlbmd0aCxkPTAsbT1FLGc9dztmb3IoKG49ZS5sYXN0SW5kZXhPZihBKSk8MCYmKG49MCkscj0wO3I8bjsrK3IpMTI4PD1lLmNoYXJDb2RlQXQocikmJkMoIm5vdC1iYXNpYyIpLHAucHVzaChlLmNoYXJDb2RlQXQocikpO2ZvcihpPTA8bj9uKzE6MDtpPGg7KXtmb3Iobz1kLGE9MSxzPWI7aDw9aSYmQygiaW52YWxpZC1pbnB1dCIpLGY9ZS5jaGFyQ29kZUF0KGkrKyksKGI8PSh1PWYtNDg8MTA/Zi0yMjpmLTY1PDI2P2YtNjU6Zi05NzwyNj9mLTk3OmIpfHx1PngoKHYtZCkvYSkpJiZDKCJvdmVyZmxvdyIpLGQrPXUqYSwhKHU8KGw9czw9Zz95OmcrXzw9cz9fOnMtZykpO3MrPWIpYT54KHYvKGM9Yi1sKSkmJkMoIm92ZXJmbG93IiksYSo9YztnPVQoZC1vLHQ9cC5sZW5ndGgrMSwwPT1vKSx4KGQvdCk+di1tJiZDKCJvdmVyZmxvdyIpLG0rPXgoZC90KSxkJT10LHAuc3BsaWNlKGQrKywwLG0pfXJldHVybiBTKHApfWZ1bmN0aW9uIGcoZSl7dmFyIHQsbixyLGksbyxhLHMsdSxsLGMsZixwLGgsZCxtLGc9W107Zm9yKHA9KGU9TyhlKSkubGVuZ3RoLHQ9RSxvPXcsYT1uPTA7YTxwOysrYSkoZj1lW2FdKTwxMjgmJmcucHVzaChrKGYpKTtmb3Iocj1pPWcubGVuZ3RoLGkmJmcucHVzaChBKTtyPHA7KXtmb3Iocz12LGE9MDthPHA7KythKXQ8PShmPWVbYV0pJiZmPHMmJihzPWYpO2ZvcihzLXQ+eCgodi1uKS8oaD1yKzEpKSYmQygib3ZlcmZsb3ciKSxuKz0ocy10KSpoLHQ9cyxhPTA7YTxwOysrYSlpZigoZj1lW2FdKTx0JiYrK24+diYmQygib3ZlcmZsb3ciKSxmPT10KXtmb3IodT1uLGw9YjshKHU8KGM9bDw9bz95Om8rXzw9bD9fOmwtbykpO2wrPWIpbT11LWMsZD1iLWMsZy5wdXNoKGsoRChjK20lZCwwKSkpLHU9eChtL2QpO2cucHVzaChrKEQodSwwKSkpLG89VChuLGgscj09aSksbj0wLCsrcn0rK24sKyt0fXJldHVybiBnLmpvaW4oIiIpfWlmKGk9e3ZlcnNpb246IjEuNC4xIix1Y3MyOntkZWNvZGU6TyxlbmNvZGU6U30sZGVjb2RlOm0sZW5jb2RlOmcsdG9BU0NJSTpmdW5jdGlvbihlKXtyZXR1cm4gZChlLGZ1bmN0aW9uKGUpe3JldHVybiBsLnRlc3QoZSk/InhuLS0iK2coZSk6ZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSxmdW5jdGlvbihlKXtyZXR1cm4gdS50ZXN0KGUpP20oZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTplfSl9fSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiYib2JqZWN0Ij09dHlwZW9mIGRlZmluZS5hbWQmJmRlZmluZS5hbWQpZGVmaW5lKCJwdW55Y29kZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO2Vsc2UgaWYodCYmbilpZihSLmV4cG9ydHM9PXQpbi5leHBvcnRzPWk7ZWxzZSBmb3IobyBpbiBpKWkuaGFzT3duUHJvcGVydHkobykmJih0W29dPWlbb10pO2Vsc2UgZS5wdW55Y29kZT1pfSh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDExNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7dD10fHwiJiIsbj1ufHwiPSI7dmFyIGk9e307aWYoInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpcmV0dXJuIGk7dmFyIG89L1wrL2c7ZT1lLnNwbGl0KHQpO3ZhciBhPTFlMztyJiYibnVtYmVyIj09dHlwZW9mIHIubWF4S2V5cyYmKGE9ci5tYXhLZXlzKTt2YXIgcyx1LGw9ZS5sZW5ndGg7MDxhJiZhPGwmJihsPWEpO2Zvcih2YXIgYz0wO2M8bDsrK2Mpe3ZhciBmLHAsaCxkLG09ZVtjXS5yZXBsYWNlKG8sIiUyMCIpLGc9bS5pbmRleE9mKG4pO3A9MDw9Zz8oZj1tLnN1YnN0cigwLGcpLG0uc3Vic3RyKGcrMSkpOihmPW0sIiIpLGg9ZGVjb2RlVVJJQ29tcG9uZW50KGYpLGQ9ZGVjb2RlVVJJQ29tcG9uZW50KHApLHM9aSx1PWgsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsdSk/dihpW2hdKT9pW2hdLnB1c2goZCk6aVtoXT1baVtoXSxkXTppW2hdPWR9cmV0dXJuIGl9O3ZhciB2PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9fSx7fV0sMTE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBvPWZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBlO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShlKT9lOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fTt0LmV4cG9ydHM9ZnVuY3Rpb24obixyLGksZSl7cmV0dXJuIHI9cnx8IiYiLGk9aXx8Ij0iLG51bGw9PT1uJiYobj12b2lkIDApLCJvYmplY3QiPT10eXBlb2Ygbj9zKHUobiksZnVuY3Rpb24oZSl7dmFyIHQ9ZW5jb2RlVVJJQ29tcG9uZW50KG8oZSkpK2k7cmV0dXJuIGEobltlXSk/cyhuW2VdLGZ1bmN0aW9uKGUpe3JldHVybiB0K2VuY29kZVVSSUNvbXBvbmVudChvKGUpKX0pLmpvaW4ocik6dCtlbmNvZGVVUklDb21wb25lbnQobyhuW2VdKSl9KS5qb2luKHIpOmU/ZW5jb2RlVVJJQ29tcG9uZW50KG8oZSkpK2krZW5jb2RlVVJJQ29tcG9uZW50KG8obikpOiIifTt2YXIgYT1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfTtmdW5jdGlvbiBzKGUsdCl7aWYoZS5tYXApcmV0dXJuIGUubWFwKHQpO2Zvcih2YXIgbj1bXSxyPTA7cjxlLmxlbmd0aDtyKyspbi5wdXNoKHQoZVtyXSxyKSk7cmV0dXJuIG59dmFyIHU9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9fSx7fV0sMTE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZGVjb2RlPW4ucGFyc2U9ZSgiLi9kZWNvZGUiKSxuLmVuY29kZT1uLnN0cmluZ2lmeT1lKCIuL2VuY29kZSIpfSx7Ii4vZGVjb2RlIjoxMTQsIi4vZW5jb2RlIjoxMTV9XSwxMTc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiKSxpPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSl0LnB1c2gobik7cmV0dXJuIHR9O3QuZXhwb3J0cz1mO3ZhciBvPWUoImNvcmUtdXRpbC1pcyIpO28uaW5oZXJpdHM9ZSgiaW5oZXJpdHMiKTt2YXIgYT1lKCIuL19zdHJlYW1fcmVhZGFibGUiKSxzPWUoIi4vX3N0cmVhbV93cml0YWJsZSIpO28uaW5oZXJpdHMoZixhKTtmb3IodmFyIHU9aShzLnByb3RvdHlwZSksbD0wO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2YucHJvdG90eXBlW2NdfHwoZi5wcm90b3R5cGVbY109cy5wcm90b3R5cGVbY10pfWZ1bmN0aW9uIGYoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBmKGUpO2EuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGUmJiExPT09ZS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLGUmJiExPT09ZS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYhMT09PWUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLHApfWZ1bmN0aW9uIHAoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHIubmV4dFRpY2soaCx0aGlzKX1mdW5jdGlvbiBoKGUpe2UuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCl9LHNldDpmdW5jdGlvbihlKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxmLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLHIubmV4dFRpY2sodCxlKX19LHsiLi9fc3RyZWFtX3JlYWRhYmxlIjoxMTksIi4vX3N0cmVhbV93cml0YWJsZSI6MTIxLCJjb3JlLXV0aWwtaXMiOjEwMSxpbmhlcml0czoxMDYsInByb2Nlc3MtbmV4dGljay1hcmdzIjoxMTF9XSwxMTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPW87dmFyIHI9ZSgiLi9fc3RyZWFtX3RyYW5zZm9ybSIpLGk9ZSgiY29yZS11dGlsLWlzIik7ZnVuY3Rpb24gbyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSk7ci5jYWxsKHRoaXMsZSl9aS5pbmhlcml0cz1lKCJpbmhlcml0cyIpLGkuaW5oZXJpdHMobyxyKSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXtuKG51bGwsZSl9fSx7Ii4vX3N0cmVhbV90cmFuc2Zvcm0iOjEyMCwiY29yZS11dGlsLWlzIjoxMDEsaW5oZXJpdHM6MTA2fV0sMTE5OltmdW5jdGlvbihMLEYsZSl7KGZ1bmN0aW9uKG0sZSl7InVzZSBzdHJpY3QiO3ZhciBnPUwoInByb2Nlc3MtbmV4dGljay1hcmdzIik7Ri5leHBvcnRzPXA7dmFyIGEsdj1MKCJpc2FycmF5Iik7cC5SZWFkYWJsZVN0YXRlPW87TCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO3ZhciBiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGlzdGVuZXJzKHQpLmxlbmd0aH0saT1MKCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIikscz1MKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcix1PWUuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciB0PUwoImNvcmUtdXRpbC1pcyIpO3QuaW5oZXJpdHM9TCgiaW5oZXJpdHMiKTt2YXIgbj1MKCJ1dGlsIikseT12b2lkIDA7eT1uJiZuLmRlYnVnbG9nP24uZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgbCxjPUwoIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Iikscj1MKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO3QuaW5oZXJpdHMocCxpKTt2YXIgZj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBvKGUsdCl7ZT1lfHx7fTt2YXIgbj10IGluc3RhbmNlb2YoYT1hfHxMKCIuL19zdHJlYW1fZHVwbGV4IikpO3RoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxuJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIHI9ZS5oaWdoV2F0ZXJNYXJrLGk9ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcmssbz10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPXJ8fDA9PT1yP3I6biYmKGl8fDA9PT1pKT9pOm8sdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgYyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxlLmVuY29kaW5nJiYobHx8KGw9TCgic3RyaW5nX2RlY29kZXIvIikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBsKGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9ZS5lbmNvZGluZyl9ZnVuY3Rpb24gcChlKXtpZihhPWF8fEwoIi4vX3N0cmVhbV9kdXBsZXgiKSwhKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgbyhlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSksaS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGgoZSx0LG4scixpKXt2YXIgbyxhPWUuX3JlYWRhYmxlU3RhdGU7bnVsbD09PXQ/KGEucmVhZGluZz0hMSxmdW5jdGlvbihlLHQpe2lmKHQuZW5kZWQpcmV0dXJuO2lmKHQuZGVjb2Rlcil7dmFyIG49dC5kZWNvZGVyLmVuZCgpO24mJm4ubGVuZ3RoJiYodC5idWZmZXIucHVzaChuKSx0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGgpfXQuZW5kZWQ9ITAsRShlKX0oZSxhKSk6KGl8fChvPWZ1bmN0aW9uKGUsdCl7dmFyIG47KGZ1bmN0aW9uKGUpe3JldHVybiBzLmlzQnVmZmVyKGUpfHxlIGluc3RhbmNlb2YgdX0pKHQpfHwic3RyaW5nIj09dHlwZW9mIHR8fHZvaWQgMD09PXR8fGUub2JqZWN0TW9kZXx8KG49bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKTtyZXR1cm4gbn0oYSx0KSksbz9lLmVtaXQoImVycm9yIixvKTphLm9iamVjdE1vZGV8fHQmJjA8dC5sZW5ndGg/KCJzdHJpbmciPT10eXBlb2YgdHx8YS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1zLnByb3RvdHlwZXx8KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZnJvbShlKX0odCkpLHI/YS5lbmRFbWl0dGVkP2UuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6ZChlLGEsdCwhMCk6YS5lbmRlZD9lLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihhLnJlYWRpbmc9ITEsYS5kZWNvZGVyJiYhbj8odD1hLmRlY29kZXIud3JpdGUodCksYS5vYmplY3RNb2RlfHwwIT09dC5sZW5ndGg/ZChlLGEsdCwhMSk6eChlLGEpKTpkKGUsYSx0LCExKSkpOnJ8fChhLnJlYWRpbmc9ITEpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIWUuZW5kZWQmJihlLm5lZWRSZWFkYWJsZXx8ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHwwPT09ZS5sZW5ndGgpfShhKX1mdW5jdGlvbiBkKGUsdCxuLHIpe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jPyhlLmVtaXQoImRhdGEiLG4pLGUucmVhZCgwKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aCxyP3QuYnVmZmVyLnVuc2hpZnQobik6dC5idWZmZXIucHVzaChuKSx0Lm5lZWRSZWFkYWJsZSYmRShlKSkseChlLHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLHAucHJvdG90eXBlLmRlc3Ryb3k9ci5kZXN0cm95LHAucHJvdG90eXBlLl91bmRlc3Ryb3k9ci51bmRlc3Ryb3kscC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2gobnVsbCksdChlKX0scC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gci5vYmplY3RNb2RlP249ITA6InN0cmluZyI9PXR5cGVvZiBlJiYoKHQ9dHx8ci5kZWZhdWx0RW5jb2RpbmcpIT09ci5lbmNvZGluZyYmKGU9cy5mcm9tKGUsdCksdD0iIiksbj0hMCksaCh0aGlzLGUsdCwhMSxuKX0scC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXtyZXR1cm4gaCh0aGlzLGUsbnVsbCwhMCwhMSl9LHAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHAucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsfHwobD1MKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IGwoZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz1lLHRoaXN9O3ZhciBfPTgzODg2MDg7ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/MDp0Lm9iamVjdE1vZGU/MTplIT1lP3QuZmxvd2luZyYmdC5sZW5ndGg/dC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp0Lmxlbmd0aDooZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIF88PWU/ZT1fOihlLS0sZXw9ZT4+PjEsZXw9ZT4+PjIsZXw9ZT4+PjQsZXw9ZT4+PjgsZXw9ZT4+PjE2LGUrKyksZX0oZSkpLGU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTt0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KHkoImVtaXRSZWFkYWJsZSIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCx0LnN5bmM/Zy5uZXh0VGljayhBLGUpOkEoZSkpfWZ1bmN0aW9uIEEoZSl7eSgiZW1pdCByZWFkYWJsZSIpLGUuZW1pdCgicmVhZGFibGUiKSxTKGUpfWZ1bmN0aW9uIHgoZSx0KXt0LnJlYWRpbmdNb3JlfHwodC5yZWFkaW5nTW9yZT0hMCxnLm5leHRUaWNrKGssZSx0KSl9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aDshdC5yZWFkaW5nJiYhdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrJiYoeSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxlLnJlYWQoMCksbiE9PXQubGVuZ3RoKTspbj10Lmxlbmd0aDt0LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEMoZSl7eSgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksZS5yZWFkKDApfWZ1bmN0aW9uIE8oZSx0KXt0LnJlYWRpbmd8fCh5KCJyZXN1bWUgcmVhZCAwIiksZS5yZWFkKDApKSx0LnJlc3VtZVNjaGVkdWxlZD0hMSx0LmF3YWl0RHJhaW49MCxlLmVtaXQoInJlc3VtZSIpLFMoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2Zvcih5KCJmbG93Iix0LmZsb3dpbmcpO3QuZmxvd2luZyYmbnVsbCE9PWUucmVhZCgpOyk7fWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gMD09PXQubGVuZ3RoP251bGw6KHQub2JqZWN0TW9kZT9uPXQuYnVmZmVyLnNoaWZ0KCk6IWV8fGU+PXQubGVuZ3RoPyhuPXQuZGVjb2Rlcj90LmJ1ZmZlci5qb2luKCIiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YTp0LmJ1ZmZlci5jb25jYXQodC5sZW5ndGgpLHQuYnVmZmVyLmNsZWFyKCkpOm49ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2U8dC5oZWFkLmRhdGEubGVuZ3RoPyhyPXQuaGVhZC5kYXRhLnNsaWNlKDAsZSksdC5oZWFkLmRhdGE9dC5oZWFkLmRhdGEuc2xpY2UoZSkpOnI9ZT09PXQuaGVhZC5kYXRhLmxlbmd0aD90LnNoaWZ0KCk6bj9mdW5jdGlvbihlLHQpe3ZhciBuPXQuaGVhZCxyPTEsaT1uLmRhdGE7ZS09aS5sZW5ndGg7Zm9yKDtuPW4ubmV4dDspe3ZhciBvPW4uZGF0YSxhPWU+by5sZW5ndGg/by5sZW5ndGg6ZTtpZihhPT09by5sZW5ndGg/aSs9bzppKz1vLnNsaWNlKDAsZSksMD09PShlLT1hKSl7YT09PW8ubGVuZ3RoPygrK3Isbi5uZXh0P3QuaGVhZD1uLm5leHQ6dC5oZWFkPXQudGFpbD1udWxsKToodC5oZWFkPW4pLmRhdGE9by5zbGljZShhKTticmVha30rK3J9cmV0dXJuIHQubGVuZ3RoLT1yLGl9KGUsdCk6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmFsbG9jVW5zYWZlKGUpLHI9dC5oZWFkLGk9MTtyLmRhdGEuY29weShuKSxlLT1yLmRhdGEubGVuZ3RoO2Zvcig7cj1yLm5leHQ7KXt2YXIgbz1yLmRhdGEsYT1lPm8ubGVuZ3RoP28ubGVuZ3RoOmU7aWYoby5jb3B5KG4sbi5sZW5ndGgtZSwwLGEpLDA9PT0oZS09YSkpe2E9PT1vLmxlbmd0aD8oKytpLHIubmV4dD90LmhlYWQ9ci5uZXh0OnQuaGVhZD10LnRhaWw9bnVsbCk6KHQuaGVhZD1yKS5kYXRhPW8uc2xpY2UoYSk7YnJlYWt9KytpfXJldHVybiB0Lmxlbmd0aC09aSxufShlLHQpO3JldHVybiByfShlLHQuYnVmZmVyLHQuZGVjb2Rlciksbik7dmFyIG59ZnVuY3Rpb24gVChlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2lmKDA8dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLGcubmV4dFRpY2soQix0LGUpKX1mdW5jdGlvbiBCKGUsdCl7ZS5lbmRFbWl0dGVkfHwwIT09ZS5sZW5ndGh8fChlLmVuZEVtaXR0ZWQ9ITAsdC5yZWFkYWJsZT0hMSx0LmVtaXQoImVuZCIpKX1mdW5jdGlvbiBSKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXAucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7eSgicmVhZCIsZSksZT1wYXJzZUludChlLDEwKTt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLG49ZTtpZigwIT09ZSYmKHQuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ZSYmdC5uZWVkUmVhZGFibGUmJih0Lmxlbmd0aD49dC5oaWdoV2F0ZXJNYXJrfHx0LmVuZGVkKSlyZXR1cm4geSgicmVhZDogZW1pdFJlYWRhYmxlIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/VCh0aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShlPXcoZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmVCh0aGlzKSxudWxsO3ZhciByLGk9dC5uZWVkUmVhZGFibGU7cmV0dXJuIHkoIm5lZWQgcmVhZGFibGUiLGkpLCgwPT09dC5sZW5ndGh8fHQubGVuZ3RoLWU8dC5oaWdoV2F0ZXJNYXJrKSYmeSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGk9ITApLHQuZW5kZWR8fHQucmVhZGluZz95KCJyZWFkaW5nIG9yIGVuZGVkIixpPSExKTppJiYoeSgiZG8gcmVhZCIpLHQucmVhZGluZz0hMCx0LnN5bmM9ITAsMD09PXQubGVuZ3RoJiYodC5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKSx0LnN5bmM9ITEsdC5yZWFkaW5nfHwoZT13KG4sdCkpKSxudWxsPT09KHI9MDxlP0QoZSx0KTpudWxsKT8odC5uZWVkUmVhZGFibGU9ITAsZT0wKTp0Lmxlbmd0aC09ZSwwPT09dC5sZW5ndGgmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLG4hPT1lJiZ0LmVuZGVkJiZUKHRoaXMpKSxudWxsIT09ciYmdGhpcy5lbWl0KCJkYXRhIixyKSxyfSxwLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKG4sZSl7dmFyIHI9dGhpcyxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGkucGlwZXNDb3VudCl7Y2FzZSAwOmkucGlwZXM9bjticmVhaztjYXNlIDE6aS5waXBlcz1baS5waXBlcyxuXTticmVhaztkZWZhdWx0OmkucGlwZXMucHVzaChuKX1pLnBpcGVzQ291bnQrPTEseSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixpLnBpcGVzQ291bnQsZSk7dmFyIHQ9KCFlfHwhMSE9PWUuZW5kKSYmbiE9PW0uc3Rkb3V0JiZuIT09bS5zdGRlcnI/YTpkO2Z1bmN0aW9uIG8oZSx0KXt5KCJvbnVucGlwZSIpLGU9PT1yJiZ0JiYhMT09PXQuaGFzVW5waXBlZCYmKHQuaGFzVW5waXBlZD0hMCx5KCJjbGVhbnVwIiksbi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHApLG4ucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaCksbi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLHMpLG4ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixmKSxuLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLG8pLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixkKSxyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixjKSx1PSEwLCFpLmF3YWl0RHJhaW58fG4uX3dyaXRhYmxlU3RhdGUmJiFuLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8cygpKX1mdW5jdGlvbiBhKCl7eSgib25lbmQiKSxuLmVuZCgpfWkuZW5kRW1pdHRlZD9nLm5leHRUaWNrKHQpOnIub25jZSgiZW5kIix0KSxuLm9uKCJ1bnBpcGUiLG8pO3ZhciBzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7eSgicGlwZU9uRHJhaW4iLGUuYXdhaXREcmFpbiksZS5hd2FpdERyYWluJiZlLmF3YWl0RHJhaW4tLSwwPT09ZS5hd2FpdERyYWluJiZiKHQsImRhdGEiKSYmKGUuZmxvd2luZz0hMCxTKHQpKX19KHIpO24ub24oImRyYWluIixzKTt2YXIgdT0hMTt2YXIgbD0hMTtmdW5jdGlvbiBjKGUpe3koIm9uZGF0YSIpLChsPSExKSE9PW4ud3JpdGUoZSl8fGx8fCgoMT09PWkucGlwZXNDb3VudCYmaS5waXBlcz09PW58fDE8aS5waXBlc0NvdW50JiYtMSE9PVIoaS5waXBlcyxuKSkmJiF1JiYoeSgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixyLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pLHIuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrLGw9ITApLHIucGF1c2UoKSl9ZnVuY3Rpb24gZihlKXt5KCJvbmVycm9yIixlKSxkKCksbi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGYpLDA9PT1iKG4sImVycm9yIikmJm4uZW1pdCgiZXJyb3IiLGUpfWZ1bmN0aW9uIHAoKXtuLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGgpLGQoKX1mdW5jdGlvbiBoKCl7eSgib25maW5pc2giKSxuLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscCksZCgpfWZ1bmN0aW9uIGQoKXt5KCJ1bnBpcGUiKSxyLnVucGlwZShuKX1yZXR1cm4gci5vbigiZGF0YSIsYyksZnVuY3Rpb24oZSx0LG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxuKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT92KGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQobik6ZS5fZXZlbnRzW3RdPVtuLGUuX2V2ZW50c1t0XV06ZS5vbih0LG4pfShuLCJlcnJvciIsZiksbi5vbmNlKCJjbG9zZSIscCksbi5vbmNlKCJmaW5pc2giLGgpLG4uZW1pdCgicGlwZSIsciksaS5mbG93aW5nfHwoeSgicGlwZSByZXN1bWUiKSxyLnJlc3VtZSgpKSxufSxwLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxuPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dC5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT10LnBpcGVzQ291bnQpcmV0dXJuIGUmJmUhPT10LnBpcGVzfHwoZXx8KGU9dC5waXBlcyksdC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMSxlJiZlLmVtaXQoInVucGlwZSIsdGhpcyxuKSksdGhpcztpZighZSl7dmFyIHI9dC5waXBlcyxpPXQucGlwZXNDb3VudDt0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspcltvXS5lbWl0KCJ1bnBpcGUiLHRoaXMsbik7cmV0dXJuIHRoaXN9dmFyIGE9Uih0LnBpcGVzLGUpO3JldHVybi0xPT09YXx8KHQucGlwZXMuc3BsaWNlKGEsMSksdC5waXBlc0NvdW50LT0xLDE9PT10LnBpcGVzQ291bnQmJih0LnBpcGVzPXQucGlwZXNbMF0pLGUuZW1pdCgidW5waXBlIix0aGlzLG4pKSx0aGlzfSxwLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1wLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpO2lmKCJkYXRhIj09PWUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09ZSl7dmFyIHI9dGhpcy5fcmVhZGFibGVTdGF0ZTtyLmVuZEVtaXR0ZWR8fHIucmVhZGFibGVMaXN0ZW5pbmd8fChyLnJlYWRhYmxlTGlzdGVuaW5nPXIubmVlZFJlYWRhYmxlPSEwLHIuZW1pdHRlZFJlYWRhYmxlPSExLHIucmVhZGluZz9yLmxlbmd0aCYmRSh0aGlzKTpnLm5leHRUaWNrKEMsdGhpcykpfXJldHVybiBufSxwLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fCh5KCJyZXN1bWUiKSxlLmZsb3dpbmc9ITAsZnVuY3Rpb24oZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLGcubmV4dFRpY2soTyxlLHQpKX0odGhpcyxlKSksdGhpc30scC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4geSgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoeSgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxwLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLGk9ITE7Zm9yKHZhciBlIGluIHQub24oImVuZCIsZnVuY3Rpb24oKXtpZih5KCJ3cmFwcGVkIGVuZCIpLHIuZGVjb2RlciYmIXIuZW5kZWQpe3ZhciBlPXIuZGVjb2Rlci5lbmQoKTtlJiZlLmxlbmd0aCYmbi5wdXNoKGUpfW4ucHVzaChudWxsKX0pLHQub24oImRhdGEiLGZ1bmN0aW9uKGUpeyh5KCJ3cmFwcGVkIGRhdGEiKSxyLmRlY29kZXImJihlPXIuZGVjb2Rlci53cml0ZShlKSksci5vYmplY3RNb2RlJiZudWxsPT1lKXx8KHIub2JqZWN0TW9kZXx8ZSYmZS5sZW5ndGgpJiYobi5wdXNoKGUpfHwoaT0hMCx0LnBhdXNlKCkpKX0pLHQpdm9pZCAwPT09dGhpc1tlXSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0aGlzW2VdPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYXJndW1lbnRzKX19KGUpKTtmb3IodmFyIG89MDtvPGYubGVuZ3RoO28rKyl0Lm9uKGZbb10sdGhpcy5lbWl0LmJpbmQodGhpcyxmW29dKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oZSl7eSgid3JhcHBlZCBfcmVhZCIsZSksaSYmKGk9ITEsdC5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHAuX2Zyb21MaXN0PUR9KS5jYWxsKHRoaXMsTCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL19zdHJlYW1fZHVwbGV4IjoxMTcsIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0IjoxMjIsIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IjoxMjMsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iOjEyNCxfcHJvY2VzczoxMTIsImNvcmUtdXRpbC1pcyI6MTAxLGV2ZW50czoxMDIsaW5oZXJpdHM6MTA2LGlzYXJyYXk6MTA4LCJwcm9jZXNzLW5leHRpY2stYXJncyI6MTExLCJzYWZlLWJ1ZmZlciI6MTQ0LCJzdHJpbmdfZGVjb2Rlci8iOjEyNSx1dGlsOjJ9XSwxMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPW87dmFyIHI9ZSgiLi9fc3RyZWFtX2R1cGxleCIpLGk9ZSgiY29yZS11dGlsLWlzIik7ZnVuY3Rpb24gbyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSk7ci5jYWxsKHRoaXMsZSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7bi50cmFuc2Zvcm1pbmc9ITE7dmFyIHI9bi53cml0ZWNiO2lmKCFyKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTtuLndyaXRlY2h1bms9bnVsbCwobi53cml0ZWNiPW51bGwpIT10JiZ0aGlzLnB1c2godCkscihlKTt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucmVhZGluZz0hMSwoaS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX0uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmZsdXNoJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsYSl9ZnVuY3Rpb24gYSgpe3ZhciBuPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKGUsdCl7cyhuLGUsdCl9KTpzKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBzKGUsdCxuKXtpZih0KXJldHVybiBlLmVtaXQoImVycm9yIix0KTtpZihudWxsIT1uJiZlLnB1c2gobiksZS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihlLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIGUucHVzaChudWxsKX1pLmluaGVyaXRzPWUoImluaGVyaXRzIiksaS5pbmhlcml0cyhvLHIpLG8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxyLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxuKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sby5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihyLndyaXRlY2I9bixyLndyaXRlY2h1bms9ZSxyLndyaXRlZW5jb2Rpbmc9dCwhci50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KHIubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LG8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT10LndyaXRlY2h1bmsmJnQud3JpdGVjYiYmIXQudHJhbnNmb3JtaW5nPyh0LnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0odC53cml0ZWNodW5rLHQud3JpdGVlbmNvZGluZyx0LmFmdGVyVHJhbnNmb3JtKSk6dC5uZWVkVHJhbnNmb3JtPSEwfSxvLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ci5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGUsZnVuY3Rpb24oZSl7dChlKSxuLmVtaXQoImNsb3NlIil9KX19LHsiLi9fc3RyZWFtX2R1cGxleCI6MTE3LCJjb3JlLXV0aWwtaXMiOjEwMSxpbmhlcml0czoxMDZ9XSwxMjE6W2Z1bmN0aW9uKEEseCxlKXsoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcz1BKCJwcm9jZXNzLW5leHRpY2stYXJncyIpO2Z1bmN0aW9uIGYoZSl7dmFyIHQ9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZW50cnk7ZS5lbnRyeT1udWxsO2Zvcig7cjspe3ZhciBpPXIuY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKG4pLHI9ci5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlP3QuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1lfSh0LGUpfX14LmV4cG9ydHM9Zzt2YXIgdSxsPSFlLmJyb3dzZXImJi0xPFsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoZS52ZXJzaW9uLnNsaWNlKDAsNSkpP246cy5uZXh0VGljaztnLldyaXRhYmxlU3RhdGU9bTt2YXIgcj1BKCJjb3JlLXV0aWwtaXMiKTtyLmluaGVyaXRzPUEoImluaGVyaXRzIik7dmFyIGk9e2RlcHJlY2F0ZTpBKCJ1dGlsLWRlcHJlY2F0ZSIpfSxvPUEoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxjPUEoInNhZmUtYnVmZmVyIikuQnVmZmVyLGE9dC5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIHAsaD1BKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO2Z1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gbShlLHQpe3U9dXx8QSgiLi9fc3RyZWFtX2R1cGxleCIpLGU9ZXx8e307dmFyIG49dCBpbnN0YW5jZW9mIHU7dGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLG4mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgcj1lLmhpZ2hXYXRlck1hcmssaT1lLndyaXRhYmxlSGlnaFdhdGVyTWFyayxvPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9cnx8MD09PXI/cjpuJiYoaXx8MD09PWkpP2k6byx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExO3ZhciBhPSh0aGlzLmRlc3Ryb3llZD0hMSk9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFhLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl93cml0YWJsZVN0YXRlLHI9bi5zeW5jLGk9bi53cml0ZWNiO2lmKGZ1bmN0aW9uKGUpe2Uud3JpdGluZz0hMSxlLndyaXRlY2I9bnVsbCxlLmxlbmd0aC09ZS53cml0ZWxlbixlLndyaXRlbGVuPTB9KG4pLHQpIWZ1bmN0aW9uKGUsdCxuLHIsaSl7LS10LnBlbmRpbmdjYixuPyhzLm5leHRUaWNrKGkscikscy5uZXh0VGljayhFLGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5lbWl0KCJlcnJvciIscikpOihpKHIpLGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGUuZW1pdCgiZXJyb3IiLHIpLEUoZSx0KSl9KGUsbixyLHQsaSk7ZWxzZXt2YXIgbz1fKG4pO298fG4uY29ya2VkfHxuLmJ1ZmZlclByb2Nlc3Npbmd8fCFuLmJ1ZmZlcmVkUmVxdWVzdHx8eShlLG4pLHI/bChiLGUsbixvLGkpOmIoZSxuLG8saSl9fSh0LGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBmKHRoaXMpfWZ1bmN0aW9uIGcoZSl7aWYodT11fHxBKCIuL19zdHJlYW1fZHVwbGV4IiksIShwLmNhbGwoZyx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgZyhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBtKGUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSksby5jYWxsKHRoaXMpfWZ1bmN0aW9uIHYoZSx0LG4scixpLG8sYSl7dC53cml0ZWxlbj1yLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsbj9lLl93cml0ZXYoaSx0Lm9ud3JpdGUpOmUuX3dyaXRlKGksbyx0Lm9ud3JpdGUpLHQuc3luYz0hMX1mdW5jdGlvbiBiKGUsdCxuLHIpe258fGZ1bmN0aW9uKGUsdCl7MD09PXQubGVuZ3RoJiZ0Lm5lZWREcmFpbiYmKHQubmVlZERyYWluPSExLGUuZW1pdCgiZHJhaW4iKSl9KGUsdCksdC5wZW5kaW5nY2ItLSxyKCksRShlLHQpfWZ1bmN0aW9uIHkoZSx0KXt0LmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIG49dC5idWZmZXJlZFJlcXVlc3Q7aWYoZS5fd3JpdGV2JiZuJiZuLm5leHQpe3ZhciByPXQuYnVmZmVyZWRSZXF1ZXN0Q291bnQsaT1uZXcgQXJyYXkociksbz10LmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PW47Zm9yKHZhciBhPTAscz0hMDtuOykoaVthXT1uKS5pc0J1Znx8KHM9ITEpLG49bi5uZXh0LGErPTE7aS5hbGxCdWZmZXJzPXMsdihlLHQsITAsdC5sZW5ndGgsaSwiIixvLmZpbmlzaCksdC5wZW5kaW5nY2IrKyx0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxvLm5leHQ/KHQuY29ya2VkUmVxdWVzdHNGcmVlPW8ubmV4dCxvLm5leHQ9bnVsbCk6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGYodCksdC5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtuOyl7dmFyIHU9bi5jaHVuayxsPW4uZW5jb2RpbmcsYz1uLmNhbGxiYWNrO2lmKHYoZSx0LCExLHQub2JqZWN0TW9kZT8xOnUubGVuZ3RoLHUsbCxjKSxuPW4ubmV4dCx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdC53cml0aW5nKWJyZWFrfW51bGw9PT1uJiYodC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXQuYnVmZmVyZWRSZXF1ZXN0PW4sdC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGUuZW5kaW5nJiYwPT09ZS5sZW5ndGgmJm51bGw9PT1lLmJ1ZmZlcmVkUmVxdWVzdCYmIWUuZmluaXNoZWQmJiFlLndyaXRpbmd9ZnVuY3Rpb24gdyh0LG4pe3QuX2ZpbmFsKGZ1bmN0aW9uKGUpe24ucGVuZGluZ2NiLS0sZSYmdC5lbWl0KCJlcnJvciIsZSksbi5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpLEUodCxuKX0pfWZ1bmN0aW9uIEUoZSx0KXt2YXIgbj1fKHQpO3JldHVybiBuJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbmFsPyh0LnBlbmRpbmdjYisrLHQuZmluYWxDYWxsZWQ9ITAscy5uZXh0VGljayh3LGUsdCkpOih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdCgicHJlZmluaXNoIikpKX0oZSx0KSwwPT09dC5wZW5kaW5nY2ImJih0LmZpbmlzaGVkPSEwLGUuZW1pdCgiZmluaXNoIikpKSxufXIuaW5oZXJpdHMoZyxvKSxtLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdD1bXTtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShtLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmkuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoKGUpe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHA9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hIXAuY2FsbCh0aGlzLGUpfHx0aGlzPT09ZyYmKGUmJmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBtKX19KSk6cD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXN9LGcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl93cml0YWJsZVN0YXRlLGk9ITEsbz0hci5vYmplY3RNb2RlJiZmdW5jdGlvbihlKXtyZXR1cm4gYy5pc0J1ZmZlcihlKXx8ZSBpbnN0YW5jZW9mIGF9KGUpO3JldHVybiBvJiYhYy5pc0J1ZmZlcihlKSYmKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuZnJvbShlKX0oZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbz90PSJidWZmZXIiOnR8fCh0PXIuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZCksci5lbmRlZD9mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7ZS5lbWl0KCJlcnJvciIsbikscy5uZXh0VGljayh0LG4pfSh0aGlzLG4pOihvfHxmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0hMCxvPSExO3JldHVybiBudWxsPT09bj9vPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyI9PXR5cGVvZiBufHx2b2lkIDA9PT1ufHx0Lm9iamVjdE1vZGV8fChvPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksbyYmKGUuZW1pdCgiZXJyb3IiLG8pLHMubmV4dFRpY2socixvKSxpPSExKSxpfSh0aGlzLHIsZSxuKSkmJihyLnBlbmRpbmdjYisrLGk9ZnVuY3Rpb24oZSx0LG4scixpLG8pe2lmKCFuKXt2YXIgYT1mdW5jdGlvbihlLHQsbil7ZS5vYmplY3RNb2RlfHwhMT09PWUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiB0fHwodD1jLmZyb20odCxuKSk7cmV0dXJuIHR9KHQscixpKTtyIT09YSYmKG49ITAsaT0iYnVmZmVyIixyPWEpfXZhciBzPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoO3QubGVuZ3RoKz1zO3ZhciB1PXQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyazt1fHwodC5uZWVkRHJhaW49ITApO2lmKHQud3JpdGluZ3x8dC5jb3JrZWQpe3ZhciBsPXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDt0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnIsZW5jb2Rpbmc6aSxpc0J1ZjpuLGNhbGxiYWNrOm8sbmV4dDpudWxsfSxsP2wubmV4dD10Lmxhc3RCdWZmZXJlZFJlcXVlc3Q6dC5idWZmZXJlZFJlcXVlc3Q9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSB2KGUsdCwhMSxzLHIsaSxvKTtyZXR1cm4gdX0odGhpcyxyLG8sZSx0LG4pKSxpfSxnLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sZy5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxlLmNvcmtlZHx8ZS5maW5pc2hlZHx8ZS5idWZmZXJQcm9jZXNzaW5nfHwhZS5idWZmZXJlZFJlcXVlc3R8fHkodGhpcyxlKSl9LGcucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWUudG9Mb3dlckNhc2UoKSksISgtMTxbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoZSsiIikudG9Mb3dlckNhc2UoKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksZy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxuKXtuKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxnLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBlPyhuPWUsdD1lPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbnVsbCE9ZSYmdGhpcy53cml0ZShlLHQpLHIuY29ya2VkJiYoci5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxyLmVuZGluZ3x8ci5maW5pc2hlZHx8ZnVuY3Rpb24oZSx0LG4pe3QuZW5kaW5nPSEwLEUoZSx0KSxuJiYodC5maW5pc2hlZD9zLm5leHRUaWNrKG4pOmUub25jZSgiZmluaXNoIixuKSk7dC5lbmRlZD0hMCxlLndyaXRhYmxlPSExfSh0aGlzLHIsbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLGcucHJvdG90eXBlLmRlc3Ryb3k9aC5kZXN0cm95LGcucHJvdG90eXBlLl91bmRlc3Ryb3k9aC51bmRlc3Ryb3ksZy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLmVuZCgpLHQoZSl9fSkuY2FsbCh0aGlzLEEoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxBKCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7Ii4vX3N0cmVhbV9kdXBsZXgiOjExNywiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiOjEyMywiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6MTI0LF9wcm9jZXNzOjExMiwiY29yZS11dGlsLWlzIjoxMDEsaW5oZXJpdHM6MTA2LCJwcm9jZXNzLW5leHRpY2stYXJncyI6MTExLCJzYWZlLWJ1ZmZlciI6MTQ0LHRpbWVyczoxNjAsInV0aWwtZGVwcmVjYXRlIjoxNjR9XSwxMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHM9ZSgic2FmZS1idWZmZXIiKS5CdWZmZXIscj1lKCJ1dGlsIik7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9e2RhdGE6ZSxuZXh0Om51bGx9OzA8dGhpcy5sZW5ndGg/dGhpcy50YWlsLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10KSx0aGlzLmhlYWQ9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgdD10aGlzLmhlYWQsbj0iIit0LmRhdGE7dD10Lm5leHQ7KW4rPWUrdC5kYXRhO3JldHVybiBufSxlLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO2lmKDE9PT10aGlzLmxlbmd0aClyZXR1cm4gdGhpcy5oZWFkLmRhdGE7Zm9yKHZhciB0LG4scixpPXMuYWxsb2NVbnNhZmUoZT4+PjApLG89dGhpcy5oZWFkLGE9MDtvOyl0PW8uZGF0YSxuPWkscj1hLHQuY29weShuLHIpLGErPW8uZGF0YS5sZW5ndGgsbz1vLm5leHQ7cmV0dXJuIGl9LGV9KCksciYmci5pbnNwZWN0JiZyLmluc3BlY3QuY3VzdG9tJiYodC5leHBvcnRzLnByb3RvdHlwZVtyLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciBlPXIuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrZX0pfSx7InNhZmUtYnVmZmVyIjoxNDQsdXRpbDoyfV0sMTIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBvPWUoInByb2Nlc3MtbmV4dGljay1hcmdzIik7ZnVuY3Rpb24gYShlLHQpe2UuZW1pdCgiZXJyb3IiLHQpfXQuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCxpPXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO3JldHVybiByfHxpP3Q/dChlKTohZXx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fG8ubmV4dFRpY2soYSx0aGlzLGUpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShlfHxudWxsLGZ1bmN0aW9uKGUpeyF0JiZlPyhvLm5leHRUaWNrKGEsbixlKSxuLl93cml0YWJsZVN0YXRlJiYobi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITApKTp0JiZ0KGUpfSkpLHRoaXN9LHVuZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LHsicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjExMX1dLDEyNDpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1lKCJldmVudHMiKS5FdmVudEVtaXR0ZXJ9LHtldmVudHM6MTAyfV0sMTI1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9ci5pc0VuY29kaW5nfHxmdW5jdGlvbihlKXtzd2l0Y2goKGU9IiIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBvKGUpe3ZhciB0O3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiJ1dGY4Ijtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIGU7ZGVmYXVsdDppZih0KXJldHVybjtlPSgiIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZigic3RyaW5nIiE9dHlwZW9mIHQmJihyLmlzRW5jb2Rpbmc9PT1pfHwhaShlKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO3JldHVybiB0fHxlfShlKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD11LHRoaXMuZW5kPWwsdD00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1zLHQ9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PWMsdGhpcy5lbmQ9Zix0PTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1wLHZvaWQodGhpcy5lbmQ9aCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1yLmFsbG9jVW5zYWZlKHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU8PTEyNz8wOmU+PjU9PTY/MjplPj40PT0xND8zOmU+PjM9PTMwPzQ6ZT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKGUpe3ZhciB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsbj1mdW5jdGlvbihlLHQsbil7aWYoMTI4IT0oMTkyJnRbMF0pKXJldHVybiBlLmxhc3ROZWVkPTAsIu+/vSI7aWYoMTxlLmxhc3ROZWVkJiYxPHQubGVuZ3RoKXtpZigxMjghPSgxOTImdFsxXSkpcmV0dXJuIGUubGFzdE5lZWQ9MSwi77+9IjtpZigyPGUubGFzdE5lZWQmJjI8dC5sZW5ndGgmJjEyOCE9KDE5MiZ0WzJdKSlyZXR1cm4gZS5sYXN0TmVlZD0yLCLvv70ifX0odGhpcyxlKTtyZXR1cm4gdm9pZCAwIT09bj9uOnRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoPyhlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPWUubGVuZ3RoKSl9ZnVuY3Rpb24gdShlLHQpe2lmKChlLmxlbmd0aC10KSUyIT0wKXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMV0sZS50b1N0cmluZygidXRmMTZsZSIsdCxlLmxlbmd0aC0xKTt2YXIgbj1lLnRvU3RyaW5nKCJ1dGYxNmxlIix0KTtpZihuKXt2YXIgcj1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSk7aWYoNTUyOTY8PXImJnI8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLG4uc2xpY2UoMCwtMSl9cmV0dXJuIG59ZnVuY3Rpb24gbChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciBuPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIHQrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxuKX1yZXR1cm4gdH1mdW5jdGlvbiBjKGUsdCl7dmFyIG49KGUubGVuZ3RoLXQpJTM7cmV0dXJuIDA9PW4/ZS50b1N0cmluZygiYmFzZTY0Iix0KToodGhpcy5sYXN0TmVlZD0zLW4sdGhpcy5sYXN0VG90YWw9MywxPT1uP3RoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSksZS50b1N0cmluZygiYmFzZTY0Iix0LGUubGVuZ3RoLW4pKX1mdW5jdGlvbiBmKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTp0fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKToiIn0obi5TdHJpbmdEZWNvZGVyPW8pLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIiI7dmFyIHQsbjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm4iIjtuPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugbj0wO3JldHVybiBuPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxuKTp0aGlzLnRleHQoZSxuKTp0fHwiIn0sby5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCsi77+9Ijp0fSxvLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQubGVuZ3RoLTE7aWYocjxuKXJldHVybiAwO3ZhciBpPWEodFtyXSk7aWYoMDw9aSlyZXR1cm4gMDxpJiYoZS5sYXN0TmVlZD1pLTEpLGk7aWYoLS1yPG58fC0yPT09aSlyZXR1cm4gMDtpZigwPD0oaT1hKHRbcl0pKSlyZXR1cm4gMDxpJiYoZS5sYXN0TmVlZD1pLTIpLGk7aWYoLS1yPG58fC0yPT09aSlyZXR1cm4gMDtpZigwPD0oaT1hKHRbcl0pKSlyZXR1cm4gMDxpJiYoMj09PWk/aT0wOmUubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoInV0ZjgiLHQpO3RoaXMubGFzdFRvdGFsPW47dmFyIHI9ZS5sZW5ndGgtKG4tdGhpcy5sYXN0TmVlZCk7cmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLDAsciksZS50b1N0cmluZygidXRmOCIsdCxyKX0sby5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGgpcmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7ZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjE0NH1dLDEyNjpbZnVuY3Rpb24oZSx0LG4peygoKG49dC5leHBvcnRzPWUoIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSkuU3RyZWFtPW4pLlJlYWRhYmxlPW4pLldyaXRhYmxlPWUoIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKSxuLkR1cGxleD1lKCIuL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIpLG4uVHJhbnNmb3JtPWUoIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksbi5QYXNzVGhyb3VnaD1lKCIuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIil9LHsiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiOjExNywiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyI6MTE4LCIuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjoxMTksIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIjoxMjAsIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiOjEyMX1dLDEyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e0FCU09MVVRFOiJhYnNvbHV0ZSIsUEFUSF9SRUxBVElWRToicGF0aFJlbGF0aXZlIixST09UX1JFTEFUSVZFOiJyb290UmVsYXRpdmUiLFNIT1JURVNUOiJzaG9ydGVzdCJ9fSx7fV0sMTI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBzPWUoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gdShlLHQpe3ZhciBuPXQucmVtb3ZlRW1wdHlRdWVyaWVzJiZlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Qb3J0O3JldHVybiBlLnF1ZXJ5LnN0cmluZ1tuPyJzdHJpcHBlZCI6ImZ1bGwiXX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIWUuZXh0cmEucmVsYXRpb24ubWluaW11bVF1ZXJ5fHx0Lm91dHB1dD09PXMuQUJTT0xVVEV8fHQub3V0cHV0PT09cy5ST09UX1JFTEFUSVZFfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj10LnJlbW92ZURpcmVjdG9yeUluZGV4ZXMmJmUuZXh0cmEucmVzb3VyY2VJc0luZGV4LHI9ZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUmVzb3VyY2UmJnQub3V0cHV0IT09cy5BQlNPTFVURSYmdC5vdXRwdXQhPT1zLlJPT1RfUkVMQVRJVkU7cmV0dXJuISFlLnJlc291cmNlJiYhciYmIW59dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuIG4rPWZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7cmV0dXJuKGUuZXh0cmEucmVsYXRpb24ubWF4aW11bUhvc3R8fHQub3V0cHV0PT09cy5BQlNPTFVURSkmJihlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJnQuc2NoZW1lUmVsYXRpdmUmJnQub3V0cHV0IT09cy5BQlNPTFVURT9uKz0iLy8iOm4rPWUuc2NoZW1lKyI6Ly8iKSxufShlLHQpLG4rPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuYXV0aHx8dC5yZW1vdmVBdXRofHwhZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdCYmdC5vdXRwdXQhPT1zLkFCU09MVVRFPyIiOmUuYXV0aCsiQCJ9KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ob3N0LmZ1bGwmJihlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1BdXRofHx0Lm91dHB1dD09PXMuQUJTT0xVVEUpP2UuaG9zdC5mdWxsOiIifShlLHQpLG4rPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucG9ydCYmIWUuZXh0cmEucG9ydElzRGVmYXVsdCYmZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdD8iOiIrZS5wb3J0OiIifShlKSxuKz1mdW5jdGlvbihlLHQpe3ZhciBuPSIiLHI9ZS5wYXRoLmFic29sdXRlLnN0cmluZyxpPWUucGF0aC5yZWxhdGl2ZS5zdHJpbmcsbz1jKGUsdCk7aWYoZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdHx8dC5vdXRwdXQ9PT1zLkFCU09MVVRFfHx0Lm91dHB1dD09PXMuUk9PVF9SRUxBVElWRSluPXI7ZWxzZSBpZihpLmxlbmd0aDw9ci5sZW5ndGgmJnQub3V0cHV0PT09cy5TSE9SVEVTVHx8dC5vdXRwdXQ9PT1zLlBBVEhfUkVMQVRJVkUpe2lmKCIiPT09KG49aSkpe3ZhciBhPWwoZSx0KSYmISF1KGUsdCk7ZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUGF0aCYmIW8/bj0iLi8iOiFlLmV4dHJhLnJlbGF0aW9uLm92ZXJyaWRlc1F1ZXJ5fHxvfHxhfHwobj0iLi8iKX19ZWxzZSBuPXI7cmV0dXJuIi8iIT09bnx8b3x8IXQucmVtb3ZlUm9vdFRyYWlsaW5nU2xhc2h8fGUuZXh0cmEucmVsYXRpb24ubWluaW11bVBvcnQmJnQub3V0cHV0IT09cy5BQlNPTFVURXx8KG49IiIpLG59KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQpP2UucmVzb3VyY2U6IiJ9KGUsdCksbis9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQpP3UoZSx0KToiIn0oZSx0KSxuKz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmhhc2g/ZS5oYXNoOiIifShlKX19LHsiLi9jb25zdGFudHMiOjEyN31dLDEyOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2NvbnN0YW50cyIpLGk9ZSgiLi9mb3JtYXQiKSxvPWUoIi4vb3B0aW9ucyIpLGE9ZSgiLi91dGlsL29iamVjdCIpLHM9ZSgiLi9wYXJzZSIpLHU9ZSgiLi9yZWxhdGUiKTtmdW5jdGlvbiBsKGUsdCl7dGhpcy5vcHRpb25zPW8odCx7ZGVmYXVsdFBvcnRzOntmdHA6MjEsaHR0cDo4MCxodHRwczo0NDN9LGRpcmVjdG9yeUluZGV4ZXM6WyJpbmRleC5odG1sIl0saWdub3JlX3d3dzohMSxvdXRwdXQ6bC5TSE9SVEVTVCxyZWplY3RlZFNjaGVtZXM6WyJkYXRhIiwiamF2YXNjcmlwdCIsIm1haWx0byJdLHJlbW92ZUF1dGg6ITEscmVtb3ZlRGlyZWN0b3J5SW5kZXhlczohMCxyZW1vdmVFbXB0eVF1ZXJpZXM6ITEscmVtb3ZlUm9vdFRyYWlsaW5nU2xhc2g6ITAsc2NoZW1lUmVsYXRpdmU6ITAsc2l0ZTp2b2lkIDAsc2xhc2hlc0Rlbm90ZUhvc3Q6ITB9KSx0aGlzLmZyb209cy5mcm9tKGUsdGhpcy5vcHRpb25zLG51bGwpfWwucHJvdG90eXBlLnJlbGF0ZT1mdW5jdGlvbihlLHQsbil7aWYoYS5pc1BsYWluT2JqZWN0KHQpPyhuPXQsdD1lLGU9bnVsbCk6dHx8KHQ9ZSxlPW51bGwpLG49byhuLHRoaXMub3B0aW9ucyksZT1lfHxuLnNpdGUsIShlPXMuZnJvbShlLG4sdGhpcy5mcm9tKSl8fCFlLmhyZWYpdGhyb3cgbmV3IEVycm9yKCJmcm9tIHZhbHVlIG5vdCBkZWZpbmVkLiIpO2lmKGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVBhdGhPbmx5KXRocm93IG5ldyBFcnJvcigiZnJvbSB2YWx1ZSBzdXBwbGllZCBpcyBub3QgYWJzb2x1dGU6ICIrZS5ocmVmKTtyZXR1cm4hMT09PSh0PXMudG8odCxuKSkudmFsaWQ/dC5ocmVmOih0PXUoZSx0LG4pLHQ9aSh0LG4pKX0sbC5yZWxhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybihuZXcgbCkucmVsYXRlKGUsdCxuKX0sYS5zaGFsbG93TWVyZ2UobCxyKSx0LmV4cG9ydHM9bH0seyIuL2NvbnN0YW50cyI6MTI3LCIuL2Zvcm1hdCI6MTI4LCIuL29wdGlvbnMiOjEzMCwiLi9wYXJzZSI6MTMzLCIuL3JlbGF0ZSI6MTQwLCIuL3V0aWwvb2JqZWN0IjoxNDJ9XSwxMzA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGE9ZSgiLi91dGlsL29iamVjdCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGEuaXNQbGFpbk9iamVjdChlKSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKHZvaWQgMCE9PWVbcl0/bltyXT0oaT1lW3JdLChvPXRbcl0paW5zdGFuY2VvZiBPYmplY3QmJmkgaW5zdGFuY2VvZiBPYmplY3Q/byBpbnN0YW5jZW9mIEFycmF5JiZpIGluc3RhbmNlb2YgQXJyYXk/by5jb25jYXQoaSk6YS5zaGFsbG93TWVyZ2UoaSxvKTppKTpuW3JdPXRbcl0pO3JldHVybiBufXZhciBpLG87cmV0dXJuIHR9fSx7Ii4vdXRpbC9vYmplY3QiOjE0Mn1dLDEzMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZih0Lmlnbm9yZV93d3cpe3ZhciBuPWUuaG9zdC5mdWxsO2lmKG4pe3ZhciByPW47MD09PW4uaW5kZXhPZigid3d3LiIpJiYocj1uLnN1YnN0cig0KSksZS5ob3N0LnN0cmlwcGVkPXJ9fX19LHt9XSwxMzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PSEoZS5zY2hlbWV8fGUuYXV0aHx8ZS5ob3N0LmZ1bGx8fGUucG9ydCksbj10JiYhZS5wYXRoLmFic29sdXRlLnN0cmluZyxyPW4mJiFlLnJlc291cmNlLGk9ciYmIWUucXVlcnkuc3RyaW5nLmZ1bGwubGVuZ3RoLG89aSYmIWUuaGFzaDtlLmV4dHJhLmhyZWZJbmZvLm1pbmltdW1QYXRoT25seT10LGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVJlc291cmNlT25seT1uLGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVF1ZXJ5T25seT1yLGUuZXh0cmEuaHJlZkluZm8ubWluaW11bUhhc2hPbmx5PWksZS5leHRyYS5ocmVmSW5mby5lbXB0eT1vfX0se31dLDEzMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2hyZWZJbmZvIiksaT1lKCIuL2hvc3QiKSxvPWUoIi4vcGF0aCIpLGE9ZSgiLi9wb3J0Iikscz1lKCIuL3F1ZXJ5IiksdT1lKCIuL3VybHN0cmluZyIpLGw9ZSgiLi4vdXRpbC9wYXRoIik7ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPXUoZSx0KTtyZXR1cm4hMT09PW4udmFsaWR8fChpKG4sdCksYShuLHQpLG8obix0KSxzKG4sdCkscihuKSksbn10LmV4cG9ydHM9e2Zyb206ZnVuY3Rpb24oZSx0LG4pe2lmKGUpe3ZhciByPWMoZSx0KSxpPWwucmVzb2x2ZURvdFNlZ21lbnRzKHIucGF0aC5hYnNvbHV0ZS5hcnJheSk7cmV0dXJuIHIucGF0aC5hYnNvbHV0ZS5hcnJheT1pLHIucGF0aC5hYnNvbHV0ZS5zdHJpbmc9Ii8iK2wuam9pbihpKSxyfXJldHVybiBufSx0bzpjfX0seyIuLi91dGlsL3BhdGgiOjE0MywiLi9ob3N0IjoxMzEsIi4vaHJlZkluZm8iOjEzMiwiLi9wYXRoIjoxMzQsIi4vcG9ydCI6MTM1LCIuL3F1ZXJ5IjoxMzYsIi4vdXJsc3RyaW5nIjoxMzd9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlKXtpZigiLyI9PT1lKXJldHVybltdO3ZhciB0PVtdO3JldHVybiBlLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihlKXsiIiE9PWUmJnQucHVzaChlKX0pLHR9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5wYXRoLmFic29sdXRlLnN0cmluZztpZihuKXt2YXIgcj1uLmxhc3RJbmRleE9mKCIvIik7aWYoLTE8cil7aWYoKytyPG4ubGVuZ3RoKXt2YXIgaT1uLnN1YnN0cihyKTsiLiIhPT1pJiYiLi4iIT09aT8oZS5yZXNvdXJjZT1pLG49bi5zdWJzdHIoMCxyKSk6bis9Ii8ifWUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9bixlLnBhdGguYWJzb2x1dGUuYXJyYXk9byhuKX1lbHNlIi4iPT09bnx8Ii4uIj09PW4/KG4rPSIvIixlLnBhdGguYWJzb2x1dGUuc3RyaW5nPW4sZS5wYXRoLmFic29sdXRlLmFycmF5PW8obikpOihlLnJlc291cmNlPW4sZS5wYXRoLmFic29sdXRlLnN0cmluZz1udWxsKTtlLmV4dHJhLnJlc291cmNlSXNJbmRleD1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiBlLmRpcmVjdG9yeUluZGV4ZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fHwhKG49ITApfSksbn0oZS5yZXNvdXJjZSx0KX19fSx7fV0sMTM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPS0xO2Zvcih2YXIgciBpbiB0LmRlZmF1bHRQb3J0cylpZihyPT09ZS5zY2hlbWUmJnQuZGVmYXVsdFBvcnRzLmhhc093blByb3BlcnR5KHIpKXtuPXQuZGVmYXVsdFBvcnRzW3JdO2JyZWFrfS0xPG4mJihuPW4udG9TdHJpbmcoKSxudWxsPT09ZS5wb3J0JiYoZS5wb3J0PW4pLGUuZXh0cmEucG9ydElzRGVmYXVsdD1lLnBvcnQ9PT1uKX19LHt9XSwxMzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiByKGUsdCl7dmFyIG49MCxyPSIiO2Zvcih2YXIgaSBpbiBlKWlmKCIiIT09aSYmITA9PT1hLmNhbGwoZSxpKSl7dmFyIG89ZVtpXTsiIj09PW8mJnR8fChyKz0xPT0rK24/Ij8iOiImIixpPWVuY29kZVVSSUNvbXBvbmVudChpKSxyKz0iIiE9PW8/aSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG8pLnJlcGxhY2UoLyUyMC9nLCIrIik6aSl9cmV0dXJuIHJ9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5xdWVyeS5zdHJpbmcuZnVsbD1yKGUucXVlcnkub2JqZWN0LCExKSx0LnJlbW92ZUVtcHR5UXVlcmllcyYmKGUucXVlcnkuc3RyaW5nLnN0cmlwcGVkPXIoZS5xdWVyeS5vYmplY3QsITApKX19LHt9XSwxMzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgidXJsIikucGFyc2U7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49ITA7cmV0dXJuIGUucmVqZWN0ZWRTY2hlbWVzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBuPSEoMD09PXQuaW5kZXhPZihlKyI6IikpfSksbn0oZSx0KT9mdW5jdGlvbihlKXt2YXIgdD1lLnByb3RvY29sO3JldHVybiB0JiZ0LmluZGV4T2YoIjoiKT09PXQubGVuZ3RoLTEmJih0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSkpLGUuaG9zdD17ZnVsbDplLmhvc3RuYW1lLHN0cmlwcGVkOm51bGx9LGUucGF0aD17YWJzb2x1dGU6e2FycmF5Om51bGwsc3RyaW5nOmUucGF0aG5hbWV9LHJlbGF0aXZlOnthcnJheTpudWxsLHN0cmluZzpudWxsfX0sZS5xdWVyeT17b2JqZWN0OmUucXVlcnksc3RyaW5nOntmdWxsOm51bGwsc3RyaXBwZWQ6bnVsbH19LGUuZXh0cmE9e2hyZWZJbmZvOnttaW5pbXVtUGF0aE9ubHk6bnVsbCxtaW5pbXVtUmVzb3VyY2VPbmx5Om51bGwsbWluaW11bVF1ZXJ5T25seTpudWxsLG1pbmltdW1IYXNoT25seTpudWxsLGVtcHR5Om51bGwsc2VwYXJhdG9yT25seVF1ZXJ5OiI/Ij09PWUuc2VhcmNofSxwb3J0SXNEZWZhdWx0Om51bGwscmVsYXRpb246e21heGltdW1TY2hlbWU6bnVsbCxtYXhpbXVtQXV0aDpudWxsLG1heGltdW1Ib3N0Om51bGwsbWF4aW11bVBvcnQ6bnVsbCxtYXhpbXVtUGF0aDpudWxsLG1heGltdW1SZXNvdXJjZTpudWxsLG1heGltdW1RdWVyeTpudWxsLG1heGltdW1IYXNoOm51bGwsbWluaW11bVNjaGVtZTpudWxsLG1pbmltdW1BdXRoOm51bGwsbWluaW11bUhvc3Q6bnVsbCxtaW5pbXVtUG9ydDpudWxsLG1pbmltdW1QYXRoOm51bGwsbWluaW11bVJlc291cmNlOm51bGwsbWluaW11bVF1ZXJ5Om51bGwsbWluaW11bUhhc2g6bnVsbCxvdmVycmlkZXNRdWVyeTpudWxsfSxyZXNvdXJjZUlzSW5kZXg6bnVsbCxzbGFzaGVzOmUuc2xhc2hlc30sZS5yZXNvdXJjZT1udWxsLGUuc2NoZW1lPXQsZGVsZXRlIGUuaG9zdG5hbWUsZGVsZXRlIGUucGF0aG5hbWUsZGVsZXRlIGUucHJvdG9jb2wsZGVsZXRlIGUuc2VhcmNoLGRlbGV0ZSBlLnNsYXNoZXMsZX0ocihlLCEwLHQuc2xhc2hlc0Rlbm90ZUhvc3QpKTp7aHJlZjplLHZhbGlkOiExfX19LHt1cmw6MTYyfV0sMTM4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vZmluZFJlbGF0aW9uIiksaT1lKCIuLi91dGlsL29iamVjdCIpLG89ZSgiLi4vdXRpbC9wYXRoIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyLnVwVG9QYXRoKGUsdCxuKSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJihlLnNjaGVtZT10LnNjaGVtZSksZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtQXV0aCYmKGUuYXV0aD10LmF1dGgpLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUhvc3QmJihlLmhvc3Q9aS5jbG9uZSh0Lmhvc3QpKSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Qb3J0JiZmdW5jdGlvbihlLHQpe2UucG9ydD10LnBvcnQsZS5leHRyYS5wb3J0SXNEZWZhdWx0PXQuZXh0cmEucG9ydElzRGVmYXVsdH0oZSx0KSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1TY2hlbWUmJmZ1bmN0aW9uKGUsdCl7aWYoZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdHx8IWUuZXh0cmEuaHJlZkluZm8ubWluaW11bVJlc291cmNlT25seSl7dmFyIG49ZS5wYXRoLmFic29sdXRlLmFycmF5LHI9Ii8iO24/KGUuZXh0cmEuaHJlZkluZm8ubWluaW11bVBhdGhPbmx5JiYwIT09ZS5wYXRoLmFic29sdXRlLnN0cmluZy5pbmRleE9mKCIvIikmJihuPXQucGF0aC5hYnNvbHV0ZS5hcnJheS5jb25jYXQobikpLG49by5yZXNvbHZlRG90U2VnbWVudHMobikscis9by5qb2luKG4pKTpuPVtdLGUucGF0aC5hYnNvbHV0ZS5hcnJheT1uLGUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9cn1lbHNlIGUucGF0aD1pLmNsb25lKHQucGF0aCl9KGUsdCksci5wYXRoT24oZSx0LG4pLGUuZXh0cmEucmVsYXRpb24ubWluaW11bVJlc291cmNlJiZmdW5jdGlvbihlLHQpe2UucmVzb3VyY2U9dC5yZXNvdXJjZSxlLmV4dHJhLnJlc291cmNlSXNJbmRleD10LmV4dHJhLnJlc291cmNlSXNJbmRleH0oZSx0KSxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1RdWVyeSYmKGUucXVlcnk9aS5jbG9uZSh0LnF1ZXJ5KSksZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtSGFzaCYmKGUuaGFzaD10Lmhhc2gpfX0seyIuLi91dGlsL29iamVjdCI6MTQyLCIuLi91dGlsL3BhdGgiOjE0MywiLi9maW5kUmVsYXRpb24iOjEzOX1dLDEzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e3BhdGhPbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5leHRyYS5ocmVmSW5mby5taW5pbXVtUXVlcnlPbmx5LGk9ZS5leHRyYS5ocmVmSW5mby5taW5pbXVtSGFzaE9ubHksbz1lLmV4dHJhLmhyZWZJbmZvLmVtcHR5LGE9ZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUG9ydCxzPWUuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZSx1PWEmJmUucGF0aC5hYnNvbHV0ZS5zdHJpbmc9PT10LnBhdGguYWJzb2x1dGUuc3RyaW5nLGw9ZS5yZXNvdXJjZT09PXQucmVzb3VyY2V8fCFlLnJlc291cmNlJiZ0LmV4dHJhLnJlc291cmNlSXNJbmRleHx8bi5yZW1vdmVEaXJlY3RvcnlJbmRleGVzJiZlLmV4dHJhLnJlc291cmNlSXNJbmRleCYmIXQucmVzb3VyY2UsYz11JiYobHx8cnx8aXx8byksZj1uLnJlbW92ZUVtcHR5UXVlcmllcz8ic3RyaXBwZWQiOiJmdWxsIixwPWUucXVlcnkuc3RyaW5nW2ZdLGg9dC5xdWVyeS5zdHJpbmdbZl0sZD1jJiYhIXAmJnA9PT1ofHwoaXx8bykmJiFlLmV4dHJhLmhyZWZJbmZvLnNlcGFyYXRvck9ubHlRdWVyeSxtPWQmJmUuaGFzaD09PXQuaGFzaDtlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1QYXRoPXUsZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUmVzb3VyY2U9YyxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1RdWVyeT1kLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUhhc2g9bSxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1Qb3J0PSFzfHxzJiYhdSxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1QYXRoPSFzfHxzJiYhYyxlLmV4dHJhLnJlbGF0aW9uLm1heGltdW1SZXNvdXJjZT0hc3x8cyYmIWQsZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUXVlcnk9IXN8fHMmJiFtLGUuZXh0cmEucmVsYXRpb24ubWF4aW11bUhhc2g9IXN8fHMmJiFtLGUuZXh0cmEucmVsYXRpb24ub3ZlcnJpZGVzUXVlcnk9dSYmZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtUmVzb3VyY2UmJiFkJiYhIWh9LHVwVG9QYXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmV4dHJhLmhyZWZJbmZvLm1pbmltdW1QYXRoT25seSxpPWUuc2NoZW1lPT09dC5zY2hlbWV8fCFlLnNjaGVtZSxvPWkmJihlLmF1dGg9PT10LmF1dGh8fG4ucmVtb3ZlQXV0aHx8ciksYT1uLmlnbm9yZV93d3c/InN0cmlwcGVkIjoiZnVsbCIscz1vJiYoZS5ob3N0W2FdPT09dC5ob3N0W2FdfHxyKSx1PXMmJihlLnBvcnQ9PT10LnBvcnR8fHIpO2UuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZT1pLGUuZXh0cmEucmVsYXRpb24ubWluaW11bUF1dGg9byxlLmV4dHJhLnJlbGF0aW9uLm1pbmltdW1Ib3N0PXMsZS5leHRyYS5yZWxhdGlvbi5taW5pbXVtUG9ydD11LGUuZXh0cmEucmVsYXRpb24ubWF4aW11bVNjaGVtZT0haXx8aSYmIW8sZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtQXV0aD0haXx8aSYmIXMsZS5leHRyYS5yZWxhdGlvbi5tYXhpbXVtSG9zdD0haXx8aSYmIXV9fX0se31dLDE0MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2Fic29sdXRpemUiKSxpPWUoIi4vcmVsYXRpdml6ZSIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIodCxlLG4pLGkodCxlLG4pLHR9fSx7Ii4vYWJzb2x1dGl6ZSI6MTM4LCIuL3JlbGF0aXZpemUiOjE0MX1dLDE0MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1lKCIuLi91dGlsL3BhdGgiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGUuZXh0cmEucmVsYXRpb24ubWluaW11bVNjaGVtZSl7dmFyIHI9ZnVuY3Rpb24obixlKXt2YXIgcj1bXSxpPSEwLG89LTE7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe2kmJihuW3RdIT09ZT9pPSExOm89dCksaXx8ci5wdXNoKCIuLiIpfSksbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7bzx0JiZyLnB1c2goZSl9KSxyfShlLnBhdGguYWJzb2x1dGUuYXJyYXksdC5wYXRoLmFic29sdXRlLmFycmF5KTtlLnBhdGgucmVsYXRpdmUuYXJyYXk9cixlLnBhdGgucmVsYXRpdmUuc3RyaW5nPWkuam9pbihyKX19fSx7Ii4uL3V0aWwvcGF0aCI6MTQzfV0sMTQyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz17Y2xvbmU6ZnVuY3Rpb24gZSh0KXtpZih0IGluc3RhbmNlb2YgT2JqZWN0KXt2YXIgbj10IGluc3RhbmNlb2YgQXJyYXk/W106e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09ZSh0W3JdKSk7cmV0dXJuIG59cmV0dXJuIHR9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9LHNoYWxsb3dNZXJnZTpmdW5jdGlvbihlLHQpe2lmKGUgaW5zdGFuY2VvZiBPYmplY3QmJnQgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGV9fX0se31dLDE0MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2pvaW46ZnVuY3Rpb24oZSl7cmV0dXJuIDA8ZS5sZW5ndGg/ZS5qb2luKCIvIikrIi8iOiIifSxyZXNvbHZlRG90U2VnbWVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXsiLi4iIT09ZT8iLiIhPT1lJiZ0LnB1c2goZSk6MDx0Lmxlbmd0aCYmdC5zcGxpY2UodC5sZW5ndGgtMSwxKX0pLHR9fX0se31dLDE0NDpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoImJ1ZmZlciIpLGk9ci5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gaShlLHQsbil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz90LmV4cG9ydHM9cjoobyhyLG4pLG4uQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKGUsdCxuKX0sYS5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgcj1pKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9yLmZpbGwodCxuKTpyLmZpbGwodCk6ci5maWxsKDApLHJ9LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gci5TbG93QnVmZmVyKGUpfX0se2J1ZmZlcjo0fV0sMTQ1OltmdW5jdGlvbihlLHQsbil7dmFyIG89ZSgiLi91dGlsIiksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHM9InVuZGVmaW5lZCIhPXR5cGVvZiBNYXA7ZnVuY3Rpb24gdSgpe3RoaXMuX2FycmF5PVtdLHRoaXMuX3NldD1zP25ldyBNYXA6T2JqZWN0LmNyZWF0ZShudWxsKX11LmZyb21BcnJheT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgdSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW4uYWRkKGVbcl0sdCk7cmV0dXJuIG59LHUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gcz90aGlzLl9zZXQuc2l6ZTpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aH0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dmFyIG49cz9lOm8udG9TZXRTdHJpbmcoZSkscj1zP3RoaXMuaGFzKGUpOmEuY2FsbCh0aGlzLl9zZXQsbiksaT10aGlzLl9hcnJheS5sZW5ndGg7ciYmIXR8fHRoaXMuX2FycmF5LnB1c2goZSkscnx8KHM/dGhpcy5fc2V0LnNldChlLGkpOnRoaXMuX3NldFtuXT1pKX0sdS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe2lmKHMpcmV0dXJuIHRoaXMuX3NldC5oYXMoZSk7dmFyIHQ9by50b1NldFN0cmluZyhlKTtyZXR1cm4gYS5jYWxsKHRoaXMuX3NldCx0KX0sdS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlKXtpZihzKXt2YXIgdD10aGlzLl9zZXQuZ2V0KGUpO2lmKDA8PXQpcmV0dXJuIHR9ZWxzZXt2YXIgbj1vLnRvU2V0U3RyaW5nKGUpO2lmKGEuY2FsbCh0aGlzLl9zZXQsbikpcmV0dXJuIHRoaXMuX3NldFtuXX10aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBzZXQuJyl9LHUucHJvdG90eXBlLmF0PWZ1bmN0aW9uKGUpe2lmKDA8PWUmJmU8dGhpcy5fYXJyYXkubGVuZ3RoKXJldHVybiB0aGlzLl9hcnJheVtlXTt0aHJvdyBuZXcgRXJyb3IoIk5vIGVsZW1lbnQgaW5kZXhlZCBieSAiK2UpfSx1LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCl9LG4uQXJyYXlTZXQ9dX0seyIuL3V0aWwiOjE1NH1dLDE0NjpbZnVuY3Rpb24oZSx0LG4pe3ZhciB1PWUoIi4vYmFzZTY0Iik7bi5lbmNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1mdW5jdGlvbihlKXtyZXR1cm4gZTwwPzErKC1lPDwxKTowKyhlPDwxKX0oZSk7dD0zMSZyLDA8KHI+Pj49NSkmJih0fD0zMiksbis9dS5lbmNvZGUodCksMDxyOyk7cmV0dXJuIG59LG4uZGVjb2RlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5sZW5ndGgsYT0wLHM9MDtkb3tpZihvPD10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuIik7aWYoLTE9PT0oaT11LmRlY29kZShlLmNoYXJDb2RlQXQodCsrKSkpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgZGlnaXQ6ICIrZS5jaGFyQXQodC0xKSk7cj0hISgzMiZpKSxhKz0oaSY9MzEpPDxzLHMrPTV9d2hpbGUocik7bi52YWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1lPj4xO3JldHVybiAxPT0oMSZlKT8tdDp0fShhKSxuLnJlc3Q9dH19LHsiLi9iYXNlNjQiOjE0N31dLDE0NzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5zcGxpdCgiIik7bi5lbmNvZGU9ZnVuY3Rpb24oZSl7aWYoMDw9ZSYmZTxyLmxlbmd0aClyZXR1cm4gcltlXTt0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6ICIrZSl9LG4uZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiA2NTw9ZSYmZTw9OTA/ZS02NTo5Nzw9ZSYmZTw9MTIyP2UtOTcrMjY6NDg8PWUmJmU8PTU3P2UtNDgrNTI6NDM9PWU/NjI6NDc9PWU/NjM6LTF9fSx7fV0sMTQ4OltmdW5jdGlvbihlLHQsbCl7bC5HUkVBVEVTVF9MT1dFUl9CT1VORD0xLGwuTEVBU1RfVVBQRVJfQk9VTkQ9MixsLnNlYXJjaD1mdW5jdGlvbihlLHQsbixyKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7dmFyIGk9ZnVuY3Rpb24gZSh0LG4scixpLG8sYSl7dmFyIHM9TWF0aC5mbG9vcigobi10KS8yKSt0LHU9byhyLGlbc10sITApO3JldHVybiAwPT09dT9zOjA8dT8xPG4tcz9lKHMsbixyLGksbyxhKTphPT1sLkxFQVNUX1VQUEVSX0JPVU5EP248aS5sZW5ndGg/bjotMTpzOjE8cy10P2UodCxzLHIsaSxvLGEpOmE9PWwuTEVBU1RfVVBQRVJfQk9VTkQ/czp0PDA/LTE6dH0oLTEsdC5sZW5ndGgsZSx0LG4scnx8bC5HUkVBVEVTVF9MT1dFUl9CT1VORCk7aWYoaTwwKXJldHVybi0xO2Zvcig7MDw9aS0xJiYwPT09bih0W2ldLHRbaS0xXSwhMCk7KS0taTtyZXR1cm4gaX19LHt9XSwxNDk6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgYT1lKCIuL3V0aWwiKTtmdW5jdGlvbiByKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fc29ydGVkPSEwLHRoaXMuX2xhc3Q9e2dlbmVyYXRlZExpbmU6LTEsZ2VuZXJhdGVkQ29sdW1uOjB9fXIucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaD1mdW5jdGlvbihlLHQpe3RoaXMuX2FycmF5LmZvckVhY2goZSx0KX0sci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2VuZXJhdGVkTGluZSxyPXQuZ2VuZXJhdGVkTGluZSxpPWUuZ2VuZXJhdGVkQ29sdW1uLG89dC5nZW5lcmF0ZWRDb2x1bW47cmV0dXJuIG48cnx8cj09biYmaTw9b3x8YS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChlLHQpPD0wfSh0aGlzLl9sYXN0LGUpP3RoaXMuX3NvcnRlZD0hMTp0aGlzLl9sYXN0PWUsdGhpcy5fYXJyYXkucHVzaChlKX0sci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0ZWR8fCh0aGlzLl9hcnJheS5zb3J0KGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQpLHRoaXMuX3NvcnRlZD0hMCksdGhpcy5fYXJyYXl9LG4uTWFwcGluZ0xpc3Q9cn0seyIuL3V0aWwiOjE1NH1dLDE1MDpbZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHUoZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiBsKGUsdCxuLHIpe2lmKG48cil7dmFyIGk9bi0xO3UoZSxmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLnJvdW5kKGUrTWF0aC5yYW5kb20oKSoodC1lKSl9KG4scikscik7Zm9yKHZhciBvPWVbcl0sYT1uO2E8cjthKyspdChlW2FdLG8pPD0wJiZ1KGUsaSs9MSxhKTt1KGUsaSsxLGEpO3ZhciBzPWkrMTtsKGUsdCxuLHMtMSksbChlLHQscysxLHIpfX1uLnF1aWNrU29ydD1mdW5jdGlvbihlLHQpe2woZSx0LDAsZS5sZW5ndGgtMSl9fSx7fV0sMTUxOltmdW5jdGlvbihlLHQsbil7dmFyIHk9ZSgiLi91dGlsIiksdT1lKCIuL2JpbmFyeS1zZWFyY2giKSxwPWUoIi4vYXJyYXktc2V0IikuQXJyYXlTZXQsXz1lKCIuL2Jhc2U2NC12bHEiKSx3PWUoIi4vcXVpY2stc29ydCIpLnF1aWNrU29ydDtmdW5jdGlvbiBhKGUsdCl7dmFyIG49ZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihuPXkucGFyc2VTb3VyY2VNYXBJbnB1dChlKSksbnVsbCE9bi5zZWN0aW9ucz9uZXcgcihuLHQpOm5ldyBoKG4sdCl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPWU7InN0cmluZyI9PXR5cGVvZiBlJiYobj15LnBhcnNlU291cmNlTWFwSW5wdXQoZSkpO3ZhciByPXkuZ2V0QXJnKG4sInZlcnNpb24iKSxpPXkuZ2V0QXJnKG4sInNvdXJjZXMiKSxvPXkuZ2V0QXJnKG4sIm5hbWVzIixbXSksYT15LmdldEFyZyhuLCJzb3VyY2VSb290IixudWxsKSxzPXkuZ2V0QXJnKG4sInNvdXJjZXNDb250ZW50IixudWxsKSx1PXkuZ2V0QXJnKG4sIm1hcHBpbmdzIiksbD15LmdldEFyZyhuLCJmaWxlIixudWxsKTtpZihyIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIityKTthJiYoYT15Lm5vcm1hbGl6ZShhKSksaT1pLm1hcChTdHJpbmcpLm1hcCh5Lm5vcm1hbGl6ZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZ5LmlzQWJzb2x1dGUoYSkmJnkuaXNBYnNvbHV0ZShlKT95LnJlbGF0aXZlKGEsZSk6ZX0pLHRoaXMuX25hbWVzPXAuZnJvbUFycmF5KG8ubWFwKFN0cmluZyksITApLHRoaXMuX3NvdXJjZXM9cC5mcm9tQXJyYXkoaSwhMCksdGhpcy5fYWJzb2x1dGVTb3VyY2VzPXRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geS5jb21wdXRlU291cmNlVVJMKGEsZSx0KX0pLHRoaXMuc291cmNlUm9vdD1hLHRoaXMuc291cmNlc0NvbnRlbnQ9cyx0aGlzLl9tYXBwaW5ncz11LHRoaXMuX3NvdXJjZU1hcFVSTD10LHRoaXMuZmlsZT1sfWZ1bmN0aW9uIEUoKXt0aGlzLmdlbmVyYXRlZExpbmU9MCx0aGlzLmdlbmVyYXRlZENvbHVtbj0wLHRoaXMuc291cmNlPW51bGwsdGhpcy5vcmlnaW5hbExpbmU9bnVsbCx0aGlzLm9yaWdpbmFsQ29sdW1uPW51bGwsdGhpcy5uYW1lPW51bGx9ZnVuY3Rpb24gcihlLGkpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiBlJiYodD15LnBhcnNlU291cmNlTWFwSW5wdXQoZSkpO3ZhciBuPXkuZ2V0QXJnKHQsInZlcnNpb24iKSxyPXkuZ2V0QXJnKHQsInNlY3Rpb25zIik7aWYobiE9dGhpcy5fdmVyc2lvbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICIrbik7dGhpcy5fc291cmNlcz1uZXcgcCx0aGlzLl9uYW1lcz1uZXcgcDt2YXIgbz17bGluZTotMSxjb2x1bW46MH07dGhpcy5fc2VjdGlvbnM9ci5tYXAoZnVuY3Rpb24oZSl7aWYoZS51cmwpdGhyb3cgbmV3IEVycm9yKCJTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLiIpO3ZhciB0PXkuZ2V0QXJnKGUsIm9mZnNldCIpLG49eS5nZXRBcmcodCwibGluZSIpLHI9eS5nZXRBcmcodCwiY29sdW1uIik7aWYobjxvLmxpbmV8fG49PT1vLmxpbmUmJnI8by5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuIik7cmV0dXJuIG89dCx7Z2VuZXJhdGVkT2Zmc2V0OntnZW5lcmF0ZWRMaW5lOm4rMSxnZW5lcmF0ZWRDb2x1bW46cisxfSxjb25zdW1lcjpuZXcgYSh5LmdldEFyZyhlLCJtYXAiKSxpKX19KX1hLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaC5mcm9tU291cmNlTWFwKGUsdCl9LGEucHJvdG90eXBlLl92ZXJzaW9uPTMsYS5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwiX2dlbmVyYXRlZE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc3x8dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpLHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc319KSxhLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3M9bnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsIl9vcmlnaW5hbE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfHx0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCksdGhpcy5fX29yaWdpbmFsTWFwcGluZ3N9fSksYS5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNoYXJBdCh0KTtyZXR1cm4iOyI9PT1ufHwiLCI9PT1ufSxhLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5ncyIpfSxhLkdFTkVSQVRFRF9PUkRFUj0xLGEuT1JJR0lOQUxfT1JERVI9MixhLkdSRUFURVNUX0xPV0VSX0JPVU5EPTEsYS5MRUFTVF9VUFBFUl9CT1VORD0yLGEucHJvdG90eXBlLmVhY2hNYXBwaW5nPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXR8fG51bGw7c3dpdGNoKG58fGEuR0VORVJBVEVEX09SREVSKXtjYXNlIGEuR0VORVJBVEVEX09SREVSOnI9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7YnJlYWs7Y2FzZSBhLk9SSUdJTkFMX09SREVSOnI9dGhpcy5fb3JpZ2luYWxNYXBwaW5nczticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uIil9dmFyIG89dGhpcy5zb3VyY2VSb290O3IubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PW51bGw9PT1lLnNvdXJjZT9udWxsOnRoaXMuX3NvdXJjZXMuYXQoZS5zb3VyY2UpO3JldHVybntzb3VyY2U6dD15LmNvbXB1dGVTb3VyY2VVUkwobyx0LHRoaXMuX3NvdXJjZU1hcFVSTCksZ2VuZXJhdGVkTGluZTplLmdlbmVyYXRlZExpbmUsZ2VuZXJhdGVkQ29sdW1uOmUuZ2VuZXJhdGVkQ29sdW1uLG9yaWdpbmFsTGluZTplLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjplLm9yaWdpbmFsQ29sdW1uLG5hbWU6bnVsbD09PWUubmFtZT9udWxsOnRoaXMuX25hbWVzLmF0KGUubmFtZSl9fSx0aGlzKS5mb3JFYWNoKGUsaSl9LGEucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0Zvcj1mdW5jdGlvbihlKXt2YXIgdD15LmdldEFyZyhlLCJsaW5lIiksbj17c291cmNlOnkuZ2V0QXJnKGUsInNvdXJjZSIpLG9yaWdpbmFsTGluZTp0LG9yaWdpbmFsQ29sdW1uOnkuZ2V0QXJnKGUsImNvbHVtbiIsMCl9O2lmKG4uc291cmNlPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChuLnNvdXJjZSksbi5zb3VyY2U8MClyZXR1cm5bXTt2YXIgcj1bXSxpPXRoaXMuX2ZpbmRNYXBwaW5nKG4sdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsdS5MRUFTVF9VUFBFUl9CT1VORCk7aWYoMDw9aSl7dmFyIG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpXTtpZih2b2lkIDA9PT1lLmNvbHVtbilmb3IodmFyIGE9by5vcmlnaW5hbExpbmU7byYmby5vcmlnaW5hbExpbmU9PT1hOylyLnB1c2goe2xpbmU6eS5nZXRBcmcobywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKG8sImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhvLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2ldO2Vsc2UgZm9yKHZhciBzPW8ub3JpZ2luYWxDb2x1bW47byYmby5vcmlnaW5hbExpbmU9PT10JiZvLm9yaWdpbmFsQ29sdW1uPT1zOylyLnB1c2goe2xpbmU6eS5nZXRBcmcobywiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKG8sImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhvLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX0pLG89dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2ldfXJldHVybiByfSxuLlNvdXJjZU1hcENvbnN1bWVyPWEsKGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpKS5jb25zdW1lcj1hLGgucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXg9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO2lmKG51bGwhPXRoaXMuc291cmNlUm9vdCYmKG49eS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsbikpLHRoaXMuX3NvdXJjZXMuaGFzKG4pKXJldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2Yobik7Zm9yKHQ9MDt0PHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7Kyt0KWlmKHRoaXMuX2Fic29sdXRlU291cmNlc1t0XT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0saC5mcm9tU291cmNlTWFwPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSkscj1uLl9uYW1lcz1wLmZyb21BcnJheShlLl9uYW1lcy50b0FycmF5KCksITApLGk9bi5fc291cmNlcz1wLmZyb21BcnJheShlLl9zb3VyY2VzLnRvQXJyYXkoKSwhMCk7bi5zb3VyY2VSb290PWUuX3NvdXJjZVJvb3Qsbi5zb3VyY2VzQ29udGVudD1lLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG4uX3NvdXJjZXMudG9BcnJheSgpLG4uc291cmNlUm9vdCksbi5maWxlPWUuX2ZpbGUsbi5fc291cmNlTWFwVVJMPXQsbi5fYWJzb2x1dGVTb3VyY2VzPW4uX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geS5jb21wdXRlU291cmNlVVJMKG4uc291cmNlUm9vdCxlLHQpfSk7Zm9yKHZhciBvPWUuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpLGE9bi5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdLHM9bi5fX29yaWdpbmFsTWFwcGluZ3M9W10sdT0wLGw9by5sZW5ndGg7dTxsO3UrKyl7dmFyIGM9b1t1XSxmPW5ldyBFO2YuZ2VuZXJhdGVkTGluZT1jLmdlbmVyYXRlZExpbmUsZi5nZW5lcmF0ZWRDb2x1bW49Yy5nZW5lcmF0ZWRDb2x1bW4sYy5zb3VyY2UmJihmLnNvdXJjZT1pLmluZGV4T2YoYy5zb3VyY2UpLGYub3JpZ2luYWxMaW5lPWMub3JpZ2luYWxMaW5lLGYub3JpZ2luYWxDb2x1bW49Yy5vcmlnaW5hbENvbHVtbixjLm5hbWUmJihmLm5hbWU9ci5pbmRleE9mKGMubmFtZSkpLHMucHVzaChmKSksYS5wdXNoKGYpfXJldHVybiB3KG4uX19vcmlnaW5hbE1hcHBpbmdzLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLG59LGgucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGgucHJvdG90eXBlLCJzb3VyY2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpfX0pLGgucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaSxvLGEscz0xLHU9MCxsPTAsYz0wLGY9MCxwPTAsaD1lLmxlbmd0aCxkPTAsbT17fSxnPXt9LHY9W10sYj1bXTtkPGg7KWlmKCI7Ij09PWUuY2hhckF0KGQpKXMrKyxkKyssdT0wO2Vsc2UgaWYoIiwiPT09ZS5jaGFyQXQoZCkpZCsrO2Vsc2V7Zm9yKChuPW5ldyBFKS5nZW5lcmF0ZWRMaW5lPXMsbz1kO288aCYmIXRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoZSxvKTtvKyspO2lmKGk9bVtyPWUuc2xpY2UoZCxvKV0pZCs9ci5sZW5ndGg7ZWxzZXtmb3IoaT1bXTtkPG87KV8uZGVjb2RlKGUsZCxnKSxhPWcudmFsdWUsZD1nLnJlc3QsaS5wdXNoKGEpO2lmKDI9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uIik7aWYoMz09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4iKTttW3JdPWl9bi5nZW5lcmF0ZWRDb2x1bW49dStpWzBdLHU9bi5nZW5lcmF0ZWRDb2x1bW4sMTxpLmxlbmd0aCYmKG4uc291cmNlPWYraVsxXSxmKz1pWzFdLG4ub3JpZ2luYWxMaW5lPWwraVsyXSxsPW4ub3JpZ2luYWxMaW5lLG4ub3JpZ2luYWxMaW5lKz0xLG4ub3JpZ2luYWxDb2x1bW49YytpWzNdLGM9bi5vcmlnaW5hbENvbHVtbiw0PGkubGVuZ3RoJiYobi5uYW1lPXAraVs0XSxwKz1pWzRdKSksYi5wdXNoKG4pLCJudW1iZXIiPT10eXBlb2Ygbi5vcmlnaW5hbExpbmUmJnYucHVzaChuKX13KGIseS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCksdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzPWIsdyh2LHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzPXZ9LGgucHJvdG90eXBlLl9maW5kTWFwcGluZz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYoZVtuXTw9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAiK2Vbbl0pO2lmKGVbcl08MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICIrZVtyXSk7cmV0dXJuIHUuc2VhcmNoKGUsdCxpLG8pfSxoLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsrK2Upe3ZhciB0PXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2VdO2lmKGUrMTx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpe3ZhciBuPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2UrMV07aWYodC5nZW5lcmF0ZWRMaW5lPT09bi5nZW5lcmF0ZWRMaW5lKXt0Lmxhc3RHZW5lcmF0ZWRDb2x1bW49bi5nZW5lcmF0ZWRDb2x1bW4tMTtjb250aW51ZX19dC5sYXN0R2VuZXJhdGVkQ29sdW1uPTEvMH19LGgucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9e2dlbmVyYXRlZExpbmU6eS5nZXRBcmcoZSwibGluZSIpLGdlbmVyYXRlZENvbHVtbjp5LmdldEFyZyhlLCJjb2x1bW4iKX0sbj10aGlzLl9maW5kTWFwcGluZyh0LHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLCJnZW5lcmF0ZWRMaW5lIiwiZ2VuZXJhdGVkQ29sdW1uIix5LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLHkuZ2V0QXJnKGUsImJpYXMiLGEuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZigwPD1uKXt2YXIgcj10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tuXTtpZihyLmdlbmVyYXRlZExpbmU9PT10LmdlbmVyYXRlZExpbmUpe3ZhciBpPXkuZ2V0QXJnKHIsInNvdXJjZSIsbnVsbCk7bnVsbCE9PWkmJihpPXRoaXMuX3NvdXJjZXMuYXQoaSksaT15LmNvbXB1dGVTb3VyY2VVUkwodGhpcy5zb3VyY2VSb290LGksdGhpcy5fc291cmNlTWFwVVJMKSk7dmFyIG89eS5nZXRBcmcociwibmFtZSIsbnVsbCk7cmV0dXJuIG51bGwhPT1vJiYobz10aGlzLl9uYW1lcy5hdChvKSkse3NvdXJjZTppLGxpbmU6eS5nZXRBcmcociwib3JpZ2luYWxMaW5lIixudWxsKSxjb2x1bW46eS5nZXRBcmcociwib3JpZ2luYWxDb2x1bW4iLG51bGwpLG5hbWU6b319fXJldHVybntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX0saC5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc291cmNlc0NvbnRlbnQmJih0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aD49dGhpcy5fc291cmNlcy5zaXplKCkmJiF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9KSl9LGgucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5zb3VyY2VzQ29udGVudClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLl9maW5kU291cmNlSW5kZXgoZSk7aWYoMDw9bilyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtuXTt2YXIgcixpPWU7aWYobnVsbCE9dGhpcy5zb3VyY2VSb290JiYoaT15LnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCxpKSksbnVsbCE9dGhpcy5zb3VyY2VSb290JiYocj15LnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKXt2YXIgbz1pLnJlcGxhY2UoL15maWxlOlwvXC8vLCIiKTtpZigiZmlsZSI9PXIuc2NoZW1lJiZ0aGlzLl9zb3VyY2VzLmhhcyhvKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YobyldO2lmKCghci5wYXRofHwiLyI9PXIucGF0aCkmJnRoaXMuX3NvdXJjZXMuaGFzKCIvIitpKSlyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoIi8iK2kpXX1pZih0KXJldHVybiBudWxsO3Rocm93IG5ldyBFcnJvcignIicraSsnIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0saC5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9eS5nZXRBcmcoZSwic291cmNlIik7aWYoKHQ9dGhpcy5fZmluZFNvdXJjZUluZGV4KHQpKTwwKXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGwsbGFzdENvbHVtbjpudWxsfTt2YXIgbj17c291cmNlOnQsb3JpZ2luYWxMaW5lOnkuZ2V0QXJnKGUsImxpbmUiKSxvcmlnaW5hbENvbHVtbjp5LmdldEFyZyhlLCJjb2x1bW4iKX0scj10aGlzLl9maW5kTWFwcGluZyhuLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsIm9yaWdpbmFsTGluZSIsIm9yaWdpbmFsQ29sdW1uIix5LmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLHkuZ2V0QXJnKGUsImJpYXMiLGEuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZigwPD1yKXt2YXIgaT10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW3JdO2lmKGkuc291cmNlPT09bi5zb3VyY2UpcmV0dXJue2xpbmU6eS5nZXRBcmcoaSwiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOnkuZ2V0QXJnKGksImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjp5LmdldEFyZyhpLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fSxuLkJhc2ljU291cmNlTWFwQ29uc3VtZXI9aCwoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWEsci5wcm90b3R5cGUuX3ZlcnNpb249MyxPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsInNvdXJjZXMiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKylmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoO24rKyllLnB1c2godGhpcy5fc2VjdGlvbnNbdF0uY29uc3VtZXIuc291cmNlc1tuXSk7cmV0dXJuIGV9fSksci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbihlKXt2YXIgdD17Z2VuZXJhdGVkTGluZTp5LmdldEFyZyhlLCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOnkuZ2V0QXJnKGUsImNvbHVtbiIpfSxuPXUuc2VhcmNoKHQsdGhpcy5fc2VjdGlvbnMsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gbnx8ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1ufSkscj10aGlzLl9zZWN0aW9uc1tuXTtyZXR1cm4gcj9yLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6dC5nZW5lcmF0ZWRMaW5lLShyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjp0LmdlbmVyYXRlZENvbHVtbi0oci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXQuZ2VuZXJhdGVkTGluZT9yLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxiaWFzOmUuYmlhc30pOntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX0sci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKX0pfSxyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgcj10aGlzLl9zZWN0aW9uc1tuXS5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGUsITApO2lmKHIpcmV0dXJuIHJ9aWYodClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyl9LHIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKyl7dmFyIG49dGhpcy5fc2VjdGlvbnNbdF07aWYoLTEhPT1uLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgoeS5nZXRBcmcoZSwic291cmNlIikpKXt2YXIgcj1uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGUpO2lmKHIpcmV0dXJue2xpbmU6ci5saW5lKyhuLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjpyLmNvbHVtbisobi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXIubGluZT9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKX19fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGx9fSxyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihlLHQpe3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtuKyspZm9yKHZhciByPXRoaXMuX3NlY3Rpb25zW25dLGk9ci5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3Msbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dLHM9ci5jb25zdW1lci5fc291cmNlcy5hdChhLnNvdXJjZSk7cz15LmNvbXB1dGVTb3VyY2VVUkwoci5jb25zdW1lci5zb3VyY2VSb290LHMsdGhpcy5fc291cmNlTWFwVVJMKSx0aGlzLl9zb3VyY2VzLmFkZChzKSxzPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihzKTt2YXIgdT1udWxsO2EubmFtZSYmKHU9ci5jb25zdW1lci5fbmFtZXMuYXQoYS5uYW1lKSx0aGlzLl9uYW1lcy5hZGQodSksdT10aGlzLl9uYW1lcy5pbmRleE9mKHUpKTt2YXIgbD17c291cmNlOnMsZ2VuZXJhdGVkTGluZTphLmdlbmVyYXRlZExpbmUrKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksZ2VuZXJhdGVkQ29sdW1uOmEuZ2VuZXJhdGVkQ29sdW1uKyhyLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09YS5nZW5lcmF0ZWRMaW5lP3IuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLG9yaWdpbmFsTGluZTphLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjphLm9yaWdpbmFsQ29sdW1uLG5hbWU6dX07dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2gobCksIm51bWJlciI9PXR5cGVvZiBsLm9yaWdpbmFsTGluZSYmdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChsKX13KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyx5LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKSx3KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLHkuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpfSxuLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcj1yfSx7Ii4vYXJyYXktc2V0IjoxNDUsIi4vYmFzZTY0LXZscSI6MTQ2LCIuL2JpbmFyeS1zZWFyY2giOjE0OCwiLi9xdWljay1zb3J0IjoxNTAsIi4vdXRpbCI6MTU0fV0sMTUyOltmdW5jdGlvbihlLHQsbil7dmFyIGQ9ZSgiLi9iYXNlNjQtdmxxIiksbT1lKCIuL3V0aWwiKSxyPWUoIi4vYXJyYXktc2V0IikuQXJyYXlTZXQsaT1lKCIuL21hcHBpbmctbGlzdCIpLk1hcHBpbmdMaXN0O2Z1bmN0aW9uIGEoZSl7ZXx8KGU9e30pLHRoaXMuX2ZpbGU9bS5nZXRBcmcoZSwiZmlsZSIsbnVsbCksdGhpcy5fc291cmNlUm9vdD1tLmdldEFyZyhlLCJzb3VyY2VSb290IixudWxsKSx0aGlzLl9za2lwVmFsaWRhdGlvbj1tLmdldEFyZyhlLCJza2lwVmFsaWRhdGlvbiIsITEpLHRoaXMuX3NvdXJjZXM9bmV3IHIsdGhpcy5fbmFtZXM9bmV3IHIsdGhpcy5fbWFwcGluZ3M9bmV3IGksdGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGx9YS5wcm90b3R5cGUuX3ZlcnNpb249MyxhLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24ocil7dmFyIGk9ci5zb3VyY2VSb290LG89bmV3IGEoe2ZpbGU6ci5maWxlLHNvdXJjZVJvb3Q6aX0pO3JldHVybiByLmVhY2hNYXBwaW5nKGZ1bmN0aW9uKGUpe3ZhciB0PXtnZW5lcmF0ZWQ6e2xpbmU6ZS5nZW5lcmF0ZWRMaW5lLGNvbHVtbjplLmdlbmVyYXRlZENvbHVtbn19O251bGwhPWUuc291cmNlJiYodC5zb3VyY2U9ZS5zb3VyY2UsbnVsbCE9aSYmKHQuc291cmNlPW0ucmVsYXRpdmUoaSx0LnNvdXJjZSkpLHQub3JpZ2luYWw9e2xpbmU6ZS5vcmlnaW5hbExpbmUsY29sdW1uOmUub3JpZ2luYWxDb2x1bW59LG51bGwhPWUubmFtZSYmKHQubmFtZT1lLm5hbWUpKSxvLmFkZE1hcHBpbmcodCl9KSxyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lO251bGwhPT1pJiYodD1tLnJlbGF0aXZlKGksZSkpLG8uX3NvdXJjZXMuaGFzKHQpfHxvLl9zb3VyY2VzLmFkZCh0KTt2YXIgbj1yLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9biYmby5zZXRTb3VyY2VDb250ZW50KGUsbil9KSxvfSxhLnByb3RvdHlwZS5hZGRNYXBwaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PW0uZ2V0QXJnKGUsImdlbmVyYXRlZCIpLG49bS5nZXRBcmcoZSwib3JpZ2luYWwiLG51bGwpLHI9bS5nZXRBcmcoZSwic291cmNlIixudWxsKSxpPW0uZ2V0QXJnKGUsIm5hbWUiLG51bGwpO3RoaXMuX3NraXBWYWxpZGF0aW9ufHx0aGlzLl92YWxpZGF0ZU1hcHBpbmcodCxuLHIsaSksbnVsbCE9ciYmKHI9U3RyaW5nKHIpLHRoaXMuX3NvdXJjZXMuaGFzKHIpfHx0aGlzLl9zb3VyY2VzLmFkZChyKSksbnVsbCE9aSYmKGk9U3RyaW5nKGkpLHRoaXMuX25hbWVzLmhhcyhpKXx8dGhpcy5fbmFtZXMuYWRkKGkpKSx0aGlzLl9tYXBwaW5ncy5hZGQoe2dlbmVyYXRlZExpbmU6dC5saW5lLGdlbmVyYXRlZENvbHVtbjp0LmNvbHVtbixvcmlnaW5hbExpbmU6bnVsbCE9biYmbi5saW5lLG9yaWdpbmFsQ29sdW1uOm51bGwhPW4mJm4uY29sdW1uLHNvdXJjZTpyLG5hbWU6aX0pfSxhLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtudWxsIT10aGlzLl9zb3VyY2VSb290JiYobj1tLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsbikpLG51bGwhPXQ/KHRoaXMuX3NvdXJjZXNDb250ZW50c3x8KHRoaXMuX3NvdXJjZXNDb250ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLl9zb3VyY2VzQ29udGVudHNbbS50b1NldFN0cmluZyhuKV09dCk6dGhpcy5fc291cmNlc0NvbnRlbnRzJiYoZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1ttLnRvU2V0U3RyaW5nKG4pXSwwPT09T2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGgmJih0aGlzLl9zb3VyY2VzQ29udGVudHM9bnVsbCkpfSxhLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcD1mdW5jdGlvbihpLGUsbyl7dmFyIGE9ZTtpZihudWxsPT1lKXtpZihudWxsPT1pLmZpbGUpdGhyb3cgbmV3IEVycm9yKCdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgb3IgdGhlIHNvdXJjZSBtYXBcJ3MgImZpbGUiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nKTthPWkuZmlsZX12YXIgcz10aGlzLl9zb3VyY2VSb290O251bGwhPXMmJihhPW0ucmVsYXRpdmUocyxhKSk7dmFyIHU9bmV3IHIsbD1uZXcgcjt0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5zb3VyY2U9PT1hJiZudWxsIT1lLm9yaWdpbmFsTGluZSl7dmFyIHQ9aS5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufSk7bnVsbCE9dC5zb3VyY2UmJihlLnNvdXJjZT10LnNvdXJjZSxudWxsIT1vJiYoZS5zb3VyY2U9bS5qb2luKG8sZS5zb3VyY2UpKSxudWxsIT1zJiYoZS5zb3VyY2U9bS5yZWxhdGl2ZShzLGUuc291cmNlKSksZS5vcmlnaW5hbExpbmU9dC5saW5lLGUub3JpZ2luYWxDb2x1bW49dC5jb2x1bW4sbnVsbCE9dC5uYW1lJiYoZS5uYW1lPXQubmFtZSkpfXZhciBuPWUuc291cmNlO251bGw9PW58fHUuaGFzKG4pfHx1LmFkZChuKTt2YXIgcj1lLm5hbWU7bnVsbD09cnx8bC5oYXMocil8fGwuYWRkKHIpfSx0aGlzKSx0aGlzLl9zb3VyY2VzPXUsdGhpcy5fbmFtZXM9bCxpLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1pLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9dCYmKG51bGwhPW8mJihlPW0uam9pbihvLGUpKSxudWxsIT1zJiYoZT1tLnJlbGF0aXZlKHMsZSkpLHRoaXMuc2V0U291cmNlQ29udGVudChlLHQpKX0sdGhpcyl9LGEucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmc9ZnVuY3Rpb24oZSx0LG4scil7aWYodCYmIm51bWJlciIhPXR5cGVvZiB0LmxpbmUmJiJudW1iZXIiIT10eXBlb2YgdC5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKCJvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0IHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyBudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLiIpO2lmKCghKGUmJiJsaW5lImluIGUmJiJjb2x1bW4iaW4gZSYmMDxlLmxpbmUmJjA8PWUuY29sdW1uKXx8dHx8bnx8cikmJiEoZSYmImxpbmUiaW4gZSYmImNvbHVtbiJpbiBlJiZ0JiYibGluZSJpbiB0JiYiY29sdW1uImluIHQmJjA8ZS5saW5lJiYwPD1lLmNvbHVtbiYmMDx0LmxpbmUmJjA8PXQuY29sdW1uJiZuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFwcGluZzogIitKU09OLnN0cmluZ2lmeSh7Z2VuZXJhdGVkOmUsc291cmNlOm4sb3JpZ2luYWw6dCxuYW1lOnJ9KSl9LGEucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0LG4scixpPTAsbz0xLGE9MCxzPTAsdT0wLGw9MCxjPSIiLGY9dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpLHA9MCxoPWYubGVuZ3RoO3A8aDtwKyspe2lmKGU9IiIsKHQ9ZltwXSkuZ2VuZXJhdGVkTGluZSE9PW8pZm9yKGk9MDt0LmdlbmVyYXRlZExpbmUhPT1vOyllKz0iOyIsbysrO2Vsc2UgaWYoMDxwKXtpZighbS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCh0LGZbcC0xXSkpY29udGludWU7ZSs9IiwifWUrPWQuZW5jb2RlKHQuZ2VuZXJhdGVkQ29sdW1uLWkpLGk9dC5nZW5lcmF0ZWRDb2x1bW4sbnVsbCE9dC5zb3VyY2UmJihyPXRoaXMuX3NvdXJjZXMuaW5kZXhPZih0LnNvdXJjZSksZSs9ZC5lbmNvZGUoci1sKSxsPXIsZSs9ZC5lbmNvZGUodC5vcmlnaW5hbExpbmUtMS1zKSxzPXQub3JpZ2luYWxMaW5lLTEsZSs9ZC5lbmNvZGUodC5vcmlnaW5hbENvbHVtbi1hKSxhPXQub3JpZ2luYWxDb2x1bW4sbnVsbCE9dC5uYW1lJiYobj10aGlzLl9uYW1lcy5pbmRleE9mKHQubmFtZSksZSs9ZC5lbmNvZGUobi11KSx1PW4pKSxjKz1lfXJldHVybiBjfSxhLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudD1mdW5jdGlvbihlLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtpZighdGhpcy5fc291cmNlc0NvbnRlbnRzKXJldHVybiBudWxsO251bGwhPW4mJihlPW0ucmVsYXRpdmUobixlKSk7dmFyIHQ9bS50b1NldFN0cmluZyhlKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cyx0KT90aGlzLl9zb3VyY2VzQ29udGVudHNbdF06bnVsbH0sdGhpcyl9LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXt2ZXJzaW9uOnRoaXMuX3ZlcnNpb24sc291cmNlczp0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxuYW1lczp0aGlzLl9uYW1lcy50b0FycmF5KCksbWFwcGluZ3M6dGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKX07cmV0dXJuIG51bGwhPXRoaXMuX2ZpbGUmJihlLmZpbGU9dGhpcy5fZmlsZSksbnVsbCE9dGhpcy5fc291cmNlUm9vdCYmKGUuc291cmNlUm9vdD10aGlzLl9zb3VyY2VSb290KSx0aGlzLl9zb3VyY2VzQ29udGVudHMmJihlLnNvdXJjZXNDb250ZW50PXRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoZS5zb3VyY2VzLGUuc291cmNlUm9vdCkpLGV9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpfSxuLlNvdXJjZU1hcEdlbmVyYXRvcj1hfSx7Ii4vYXJyYXktc2V0IjoxNDUsIi4vYmFzZTY0LXZscSI6MTQ2LCIuL21hcHBpbmctbGlzdCI6MTQ5LCIuL3V0aWwiOjE1NH1dLDE1MzpbZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4vc291cmNlLW1hcC1nZW5lcmF0b3IiKS5Tb3VyY2VNYXBHZW5lcmF0b3IscD1lKCIuL3V0aWwiKSxoPS8oXHI/XG4pLyxvPSIkJCRpc1NvdXJjZU5vZGUkJCQiO2Z1bmN0aW9uIGQoZSx0LG4scixpKXt0aGlzLmNoaWxkcmVuPVtdLHRoaXMuc291cmNlQ29udGVudHM9e30sdGhpcy5saW5lPW51bGw9PWU/bnVsbDplLHRoaXMuY29sdW1uPW51bGw9PXQ/bnVsbDp0LHRoaXMuc291cmNlPW51bGw9PW4/bnVsbDpuLHRoaXMubmFtZT1udWxsPT1pP251bGw6aSx0aGlzW29dPSEwLG51bGwhPXImJnRoaXMuYWRkKHIpfWQuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXA9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPW5ldyBkLG89ZS5zcGxpdChoKSxhPTAscz1mdW5jdGlvbigpe3JldHVybiBlKCkrKGUoKXx8IiIpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gYTxvLmxlbmd0aD9vW2ErK106dm9pZCAwfX0sdT0xLGw9MCxjPW51bGw7cmV0dXJuIG4uZWFjaE1hcHBpbmcoZnVuY3Rpb24oZSl7aWYobnVsbCE9PWMpe2lmKCEodTxlLmdlbmVyYXRlZExpbmUpKXt2YXIgdD0obj1vW2FdfHwiIikuc3Vic3RyKDAsZS5nZW5lcmF0ZWRDb2x1bW4tbCk7cmV0dXJuIG9bYV09bi5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4tbCksbD1lLmdlbmVyYXRlZENvbHVtbixmKGMsdCksdm9pZChjPWUpfWYoYyxzKCkpLHUrKyxsPTB9Zm9yKDt1PGUuZ2VuZXJhdGVkTGluZTspaS5hZGQocygpKSx1Kys7aWYobDxlLmdlbmVyYXRlZENvbHVtbil7dmFyIG49b1thXXx8IiI7aS5hZGQobi5zdWJzdHIoMCxlLmdlbmVyYXRlZENvbHVtbikpLG9bYV09bi5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4pLGw9ZS5nZW5lcmF0ZWRDb2x1bW59Yz1lfSx0aGlzKSxhPG8ubGVuZ3RoJiYoYyYmZihjLHMoKSksaS5hZGQoby5zcGxpY2UoYSkuam9pbigiIikpKSxuLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1uLnNvdXJjZUNvbnRlbnRGb3IoZSk7bnVsbCE9dCYmKG51bGwhPXImJihlPXAuam9pbihyLGUpKSxpLnNldFNvdXJjZUNvbnRlbnQoZSx0KSl9KSxpO2Z1bmN0aW9uIGYoZSx0KXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZS5zb3VyY2UpaS5hZGQodCk7ZWxzZXt2YXIgbj1yP3Auam9pbihyLGUuc291cmNlKTplLnNvdXJjZTtpLmFkZChuZXcgZChlLm9yaWdpbmFsTGluZSxlLm9yaWdpbmFsQ29sdW1uLG4sdCxlLm5hbWUpKX19fSxkLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5hZGQoZSl9LHRoaXMpO2Vsc2V7aWYoIWVbb10mJiJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCAiK2UpO2UmJnRoaXMuY2hpbGRyZW4ucHVzaChlKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUucHJlcGVuZD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD1lLmxlbmd0aC0xOzA8PXQ7dC0tKXRoaXMucHJlcGVuZChlW3RdKTtlbHNle2lmKCFlW29dJiYic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgIitlKTt0aGlzLmNoaWxkcmVuLnVuc2hpZnQoZSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO248cjtuKyspKHQ9dGhpcy5jaGlsZHJlbltuXSlbb10/dC53YWxrKGUpOiIiIT09dCYmZSh0LHtzb3VyY2U6dGhpcy5zb3VyY2UsbGluZTp0aGlzLmxpbmUsY29sdW1uOnRoaXMuY29sdW1uLG5hbWU6dGhpcy5uYW1lfSl9LGQucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2lmKDA8cil7Zm9yKHQ9W10sbj0wO248ci0xO24rKyl0LnB1c2godGhpcy5jaGlsZHJlbltuXSksdC5wdXNoKGUpO3QucHVzaCh0aGlzLmNoaWxkcmVuW25dKSx0aGlzLmNoaWxkcmVuPXR9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnJlcGxhY2VSaWdodD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV07cmV0dXJuIG5bb10/bi5yZXBsYWNlUmlnaHQoZSx0KToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXT1uLnJlcGxhY2UoZSx0KTp0aGlzLmNoaWxkcmVuLnB1c2goIiIucmVwbGFjZShlLHQpKSx0aGlzfSxkLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50PWZ1bmN0aW9uKGUsdCl7dGhpcy5zb3VyY2VDb250ZW50c1twLnRvU2V0U3RyaW5nKGUpXT10fSxkLnByb3RvdHlwZS53YWxrU291cmNlQ29udGVudHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj10aGlzLmNoaWxkcmVuLmxlbmd0aDt0PG47dCsrKXRoaXMuY2hpbGRyZW5bdF1bb10mJnRoaXMuY2hpbGRyZW5bdF0ud2Fsa1NvdXJjZUNvbnRlbnRzKGUpO3ZhciByPU9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47dCsrKWUocC5mcm9tU2V0U3RyaW5nKHJbdF0pLHRoaXMuc291cmNlQ29udGVudHNbclt0XV0pfSxkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PSIiO3JldHVybiB0aGlzLndhbGsoZnVuY3Rpb24oZSl7dCs9ZX0pLHR9LGQucHJvdG90eXBlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcD1mdW5jdGlvbihlKXt2YXIgaT17Y29kZToiIixsaW5lOjEsY29sdW1uOjB9LG89bmV3IHIoZSksYT0hMSxzPW51bGwsdT1udWxsLGw9bnVsbCxjPW51bGw7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihlLHQpe2kuY29kZSs9ZSxudWxsIT09dC5zb3VyY2UmJm51bGwhPT10LmxpbmUmJm51bGwhPT10LmNvbHVtbj8ocz09PXQuc291cmNlJiZ1PT09dC5saW5lJiZsPT09dC5jb2x1bW4mJmM9PT10Lm5hbWV8fG8uYWRkTWFwcGluZyh7c291cmNlOnQuc291cmNlLG9yaWdpbmFsOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59LGdlbmVyYXRlZDp7bGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufSxuYW1lOnQubmFtZX0pLHM9dC5zb3VyY2UsdT10LmxpbmUsbD10LmNvbHVtbixjPXQubmFtZSxhPSEwKTphJiYoby5hZGRNYXBwaW5nKHtnZW5lcmF0ZWQ6e2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn19KSxzPW51bGwsYT0hMSk7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKTEwPT09ZS5jaGFyQ29kZUF0KG4pPyhpLmxpbmUrKyxpLmNvbHVtbj0wLG4rMT09PXI/KHM9bnVsbCxhPSExKTphJiZvLmFkZE1hcHBpbmcoe3NvdXJjZTp0LnNvdXJjZSxvcmlnaW5hbDp7bGluZTp0LmxpbmUsY29sdW1uOnQuY29sdW1ufSxnZW5lcmF0ZWQ6e2xpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn0sbmFtZTp0Lm5hbWV9KSk6aS5jb2x1bW4rK30pLHRoaXMud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uKGUsdCl7by5zZXRTb3VyY2VDb250ZW50KGUsdCl9KSx7Y29kZTppLmNvZGUsbWFwOm99fSxuLlNvdXJjZU5vZGU9ZH0seyIuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yIjoxNTIsIi4vdXRpbCI6MTU0fV0sMTU0OltmdW5jdGlvbihlLHQsdSl7dS5nZXRBcmc9ZnVuY3Rpb24oZSx0LG4pe2lmKHQgaW4gZSlyZXR1cm4gZVt0XTtpZigzPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKX07dmFyIG49L14oPzooW1x3K1wtLl0rKTopP1wvXC8oPzooXHcrOlx3KylAKT8oW1x3Li1dKikoPzo6KFxkKykpPyguKikkLyxvPS9eZGF0YTouK1wsLiskLztmdW5jdGlvbiBsKGUpe3ZhciB0PWUubWF0Y2gobik7cmV0dXJuIHQ/e3NjaGVtZTp0WzFdLGF1dGg6dFsyXSxob3N0OnRbM10scG9ydDp0WzRdLHBhdGg6dFs1XX06bnVsbH1mdW5jdGlvbiBjKGUpe3ZhciB0PSIiO3JldHVybiBlLnNjaGVtZSYmKHQrPWUuc2NoZW1lKyI6IiksdCs9Ii8vIixlLmF1dGgmJih0Kz1lLmF1dGgrIkAiKSxlLmhvc3QmJih0Kz1lLmhvc3QpLGUucG9ydCYmKHQrPSI6IitlLnBvcnQpLGUucGF0aCYmKHQrPWUucGF0aCksdH1mdW5jdGlvbiBhKGUpe3ZhciB0PWUsbj1sKGUpO2lmKG4pe2lmKCFuLnBhdGgpcmV0dXJuIGU7dD1uLnBhdGh9Zm9yKHZhciByLGk9dS5pc0Fic29sdXRlKHQpLG89dC5zcGxpdCgvXC8rLyksYT0wLHM9by5sZW5ndGgtMTswPD1zO3MtLSkiLiI9PT0ocj1vW3NdKT9vLnNwbGljZShzLDEpOiIuLiI9PT1yP2ErKzowPGEmJigiIj09PXI/KG8uc3BsaWNlKHMrMSxhKSxhPTApOihvLnNwbGljZShzLDIpLGEtLSkpO3JldHVybiIiPT09KHQ9by5qb2luKCIvIikpJiYodD1pPyIvIjoiLiIpLG4/KG4ucGF0aD10LGMobikpOnR9ZnVuY3Rpb24gcyhlLHQpeyIiPT09ZSYmKGU9Ii4iKSwiIj09PXQmJih0PSIuIik7dmFyIG49bCh0KSxyPWwoZSk7aWYociYmKGU9ci5wYXRofHwiLyIpLG4mJiFuLnNjaGVtZSlyZXR1cm4gciYmKG4uc2NoZW1lPXIuc2NoZW1lKSxjKG4pO2lmKG58fHQubWF0Y2gobykpcmV0dXJuIHQ7aWYociYmIXIuaG9zdCYmIXIucGF0aClyZXR1cm4gci5ob3N0PXQsYyhyKTt2YXIgaT0iLyI9PT10LmNoYXJBdCgwKT90OmEoZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QpO3JldHVybiByPyhyLnBhdGg9aSxjKHIpKTppfXUudXJsUGFyc2U9bCx1LnVybEdlbmVyYXRlPWMsdS5ub3JtYWxpemU9YSx1LmpvaW49cyx1LmlzQWJzb2x1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCl8fG4udGVzdChlKX0sdS5yZWxhdGl2ZT1mdW5jdGlvbihlLHQpeyIiPT09ZSYmKGU9Ii4iKSxlPWUucmVwbGFjZSgvXC8kLywiIik7Zm9yKHZhciBuPTA7MCE9PXQuaW5kZXhPZihlKyIvIik7KXt2YXIgcj1lLmxhc3RJbmRleE9mKCIvIik7aWYocjwwKXJldHVybiB0O2lmKChlPWUuc2xpY2UoMCxyKSkubWF0Y2goL14oW15cL10rOlwvKT9cLyokLykpcmV0dXJuIHQ7KytufXJldHVybiBBcnJheShuKzEpLmpvaW4oIi4uLyIpK3Quc3Vic3RyKGUubGVuZ3RoKzEpfTt2YXIgcj0hKCJfX3Byb3RvX18iaW4gT2JqZWN0LmNyZWF0ZShudWxsKSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBmKGUpe2lmKCFlKXJldHVybiExO3ZhciB0PWUubGVuZ3RoO2lmKHQ8OSlyZXR1cm4hMTtpZig5NSE9PWUuY2hhckNvZGVBdCh0LTEpfHw5NSE9PWUuY2hhckNvZGVBdCh0LTIpfHwxMTEhPT1lLmNoYXJDb2RlQXQodC0zKXx8MTE2IT09ZS5jaGFyQ29kZUF0KHQtNCl8fDExMSE9PWUuY2hhckNvZGVBdCh0LTUpfHwxMTQhPT1lLmNoYXJDb2RlQXQodC02KXx8MTEyIT09ZS5jaGFyQ29kZUF0KHQtNyl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOCl8fDk1IT09ZS5jaGFyQ29kZUF0KHQtOSkpcmV0dXJuITE7Zm9yKHZhciBuPXQtMTA7MDw9bjtuLS0paWYoMzYhPT1lLmNoYXJDb2RlQXQobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlPT09dD8wOm51bGw9PT1lPzE6bnVsbD09PXQ/LTE6dDxlPzE6LTF9dS50b1NldFN0cmluZz1yP2k6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSk/IiQiK2U6ZX0sdS5mcm9tU2V0U3RyaW5nPXI/aTpmdW5jdGlvbihlKXtyZXR1cm4gZihlKT9lLnNsaWNlKDEpOmV9LHUuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXAoZS5zb3VyY2UsdC5zb3VyY2UpO3JldHVybiAwIT09cj9yOjAhPShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOjAhPShyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbil8fG4/cjowIT0ocj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/cjowIT0ocj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lKT9yOnAoZS5uYW1lLHQubmFtZSl9LHUuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmU7cmV0dXJuIDAhPT1yP3I6MCE9KHI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW4pfHxuP3I6MCE9PShyPXAoZS5zb3VyY2UsdC5zb3VyY2UpKT9yOjAhPShyPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lKT9yOjAhPShyPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbik/cjpwKGUubmFtZSx0Lm5hbWUpfSx1LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtyZXR1cm4gMCE9PW4/bjowIT0obj1lLmdlbmVyYXRlZENvbHVtbi10LmdlbmVyYXRlZENvbHVtbik/bjowIT09KG49cChlLnNvdXJjZSx0LnNvdXJjZSkpP246MCE9KG49ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmUpP246MCE9KG49ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uKT9uOnAoZS5uYW1lLHQubmFtZSl9LHUucGFyc2VTb3VyY2VNYXBJbnB1dD1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZShlLnJlcGxhY2UoL15cKV19J1teXG5dKlxuLywiIikpfSx1LmNvbXB1dGVTb3VyY2VVUkw9ZnVuY3Rpb24oZSx0LG4pe2lmKHQ9dHx8IiIsZSYmKCIvIiE9PWVbZS5sZW5ndGgtMV0mJiIvIiE9PXRbMF0mJihlKz0iLyIpLHQ9ZSt0KSxuKXt2YXIgcj1sKG4pO2lmKCFyKXRocm93IG5ldyBFcnJvcigic291cmNlTWFwVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWQiKTtpZihyLnBhdGgpe3ZhciBpPXIucGF0aC5sYXN0SW5kZXhPZigiLyIpOzA8PWkmJihyLnBhdGg9ci5wYXRoLnN1YnN0cmluZygwLGkrMSkpfXQ9cyhjKHIpLHQpfXJldHVybiBhKHQpfX0se31dLDE1NTpbZnVuY3Rpb24oZSx0LG4pe24uU291cmNlTWFwR2VuZXJhdG9yPWUoIi4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yIikuU291cmNlTWFwR2VuZXJhdG9yLG4uU291cmNlTWFwQ29uc3VtZXI9ZSgiLi9saWIvc291cmNlLW1hcC1jb25zdW1lciIpLlNvdXJjZU1hcENvbnN1bWVyLG4uU291cmNlTm9kZT1lKCIuL2xpYi9zb3VyY2Utbm9kZSIpLlNvdXJjZU5vZGV9LHsiLi9saWIvc291cmNlLW1hcC1jb25zdW1lciI6MTUxLCIuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvciI6MTUyLCIuL2xpYi9zb3VyY2Utbm9kZSI6MTUzfV0sMTU2OltmdW5jdGlvbihuLGUsaSl7KGZ1bmN0aW9uKHUpe3ZhciBsPW4oIi4vbGliL3JlcXVlc3QiKSxlPW4oIi4vbGliL3Jlc3BvbnNlIiksYz1uKCJ4dGVuZCIpLHQ9bigiYnVpbHRpbi1zdGF0dXMtY29kZXMiKSxmPW4oInVybCIpLHI9aTtyLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXtlPSJzdHJpbmciPT10eXBlb2YgZT9mLnBhcnNlKGUpOmMoZSk7dmFyIG49LTE9PT11LmxvY2F0aW9uLnByb3RvY29sLnNlYXJjaCgvXmh0dHBzPzokLyk/Imh0dHA6IjoiIixyPWUucHJvdG9jb2x8fG4saT1lLmhvc3RuYW1lfHxlLmhvc3Qsbz1lLnBvcnQsYT1lLnBhdGh8fCIvIjtpJiYtMSE9PWkuaW5kZXhPZigiOiIpJiYoaT0iWyIraSsiXSIpLGUudXJsPShpP3IrIi8vIitpOiIiKSsobz8iOiIrbzoiIikrYSxlLm1ldGhvZD0oZS5tZXRob2R8fCJHRVQiKS50b1VwcGVyQ2FzZSgpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9O3ZhciBzPW5ldyBsKGUpO3JldHVybiB0JiZzLm9uKCJyZXNwb25zZSIsdCksc30sci5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLnJlcXVlc3QoZSx0KTtyZXR1cm4gbi5lbmQoKSxufSxyLkNsaWVudFJlcXVlc3Q9bCxyLkluY29taW5nTWVzc2FnZT1lLkluY29taW5nTWVzc2FnZSxyLkFnZW50PWZ1bmN0aW9uKCl7fSxyLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzPTQsci5nbG9iYWxBZ2VudD1uZXcgci5BZ2VudCxyLlNUQVRVU19DT0RFUz10LHIuTUVUSE9EUz1bIkNIRUNLT1VUIiwiQ09OTkVDVCIsIkNPUFkiLCJERUxFVEUiLCJHRVQiLCJIRUFEIiwiTE9DSyIsIk0tU0VBUkNIIiwiTUVSR0UiLCJNS0FDVElWSVRZIiwiTUtDT0wiLCJNT1ZFIiwiTk9USUZZIiwiT1BUSU9OUyIsIlBBVENIIiwiUE9TVCIsIlBST1BGSU5EIiwiUFJPUFBBVENIIiwiUFVSR0UiLCJQVVQiLCJSRVBPUlQiLCJTRUFSQ0giLCJTVUJTQ1JJQkUiLCJUUkFDRSIsIlVOTE9DSyIsIlVOU1VCU0NSSUJFIl19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9saWIvcmVxdWVzdCI6MTU4LCIuL2xpYi9yZXNwb25zZSI6MTU5LCJidWlsdGluLXN0YXR1cy1jb2RlcyI6NSx1cmw6MTYyLHh0ZW5kOjE2NX1dLDE1NzpbZnVuY3Rpb24oZSx0LHMpeyhmdW5jdGlvbihlKXtzLmZldGNoPWEoZS5mZXRjaCkmJmEoZS5SZWFkYWJsZVN0cmVhbSkscy53cml0YWJsZVN0cmVhbT1hKGUuV3JpdGFibGVTdHJlYW0pLHMuYWJvcnRDb250cm9sbGVyPWEoZS5BYm9ydENvbnRyb2xsZXIpLHMuYmxvYkNvbnN0cnVjdG9yPSExO3RyeXtuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEpXSkscy5ibG9iQ29uc3RydWN0b3I9ITB9Y2F0Y2goZSl7fXZhciB0O2Z1bmN0aW9uIG4oKXtpZih2b2lkIDAhPT10KXJldHVybiB0O2lmKGUuWE1MSHR0cFJlcXVlc3Qpe3Q9bmV3IGUuWE1MSHR0cFJlcXVlc3Q7dHJ5e3Qub3BlbigiR0VUIixlLlhEb21haW5SZXF1ZXN0PyIvIjoiaHR0cHM6Ly9leGFtcGxlLmNvbSIpfWNhdGNoKGUpe3Q9bnVsbH19ZWxzZSB0PW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gcihlKXt2YXIgdD1uKCk7aWYoIXQpcmV0dXJuITE7dHJ5e3JldHVybiB0LnJlc3BvbnNlVHlwZT1lLHQucmVzcG9uc2VUeXBlPT09ZX1jYXRjaChlKXt9cmV0dXJuITF9dmFyIGk9dm9pZCAwIT09ZS5BcnJheUJ1ZmZlcixvPWkmJmEoZS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9cy5hcnJheWJ1ZmZlcj1zLmZldGNofHxpJiZyKCJhcnJheWJ1ZmZlciIpLHMubXNzdHJlYW09IXMuZmV0Y2gmJm8mJnIoIm1zLXN0cmVhbSIpLHMubW96Y2h1bmtlZGFycmF5YnVmZmVyPSFzLmZldGNoJiZpJiZyKCJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciIpLHMub3ZlcnJpZGVNaW1lVHlwZT1zLmZldGNofHwhIW4oKSYmYShuKCkub3ZlcnJpZGVNaW1lVHlwZSkscy52YkFycmF5PWEoZS5WQkFycmF5KSx0PW51bGx9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwxNTg6W2Z1bmN0aW9uKGEscyxlKXsoZnVuY3Rpb24odSxsLGMpe3ZhciBmPWEoIi4vY2FwYWJpbGl0eSIpLGU9YSgiaW5oZXJpdHMiKSx0PWEoIi4vcmVzcG9uc2UiKSxpPWEoInJlYWRhYmxlLXN0cmVhbSIpLHA9YSgidG8tYXJyYXlidWZmZXIiKSxuPXQuSW5jb21pbmdNZXNzYWdlLGg9dC5yZWFkeVN0YXRlczt2YXIgcj1zLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzO2kuV3JpdGFibGUuY2FsbChuKSxuLl9vcHRzPXQsbi5fYm9keT1bXSxuLl9oZWFkZXJzPXt9LHQuYXV0aCYmbi5zZXRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK25ldyBjKHQuYXV0aCkudG9TdHJpbmcoImJhc2U2NCIpKSxPYmplY3Qua2V5cyh0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7bi5zZXRIZWFkZXIoZSx0LmhlYWRlcnNbZV0pfSk7dmFyIHI9ITA7aWYoImRpc2FibGUtZmV0Y2giPT09dC5tb2RlfHwicmVxdWVzdFRpbWVvdXQiaW4gdCYmIWYuYWJvcnRDb250cm9sbGVyKWU9IShyPSExKTtlbHNlIGlmKCJwcmVmZXItc3RyZWFtaW5nIj09PXQubW9kZSllPSExO2Vsc2UgaWYoImFsbG93LXdyb25nLWNvbnRlbnQtdHlwZSI9PT10Lm1vZGUpZT0hZi5vdmVycmlkZU1pbWVUeXBlO2Vsc2V7aWYodC5tb2RlJiYiZGVmYXVsdCIhPT10Lm1vZGUmJiJwcmVmZXItZmFzdCIhPT10Lm1vZGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBvcHRzLm1vZGUiKTtlPSEwfW4uX21vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5mZXRjaCYmdD8iZmV0Y2giOmYubW96Y2h1bmtlZGFycmF5YnVmZmVyPyJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6Zi5tc3N0cmVhbT8ibXMtc3RyZWFtIjpmLmFycmF5YnVmZmVyJiZlPyJhcnJheWJ1ZmZlciI6Zi52YkFycmF5JiZlPyJ0ZXh0OnZiYXJyYXkiOiJ0ZXh0In0oZSxyKSxuLl9mZXRjaFRpbWVyPW51bGwsbi5vbigiZmluaXNoIixmdW5jdGlvbigpe24uX29uRmluaXNoKCl9KX07ZShyLGkuV3JpdGFibGUpLHIucHJvdG90eXBlLnNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTstMT09PW8uaW5kZXhPZihuKSYmKHRoaXMuX2hlYWRlcnNbbl09e25hbWU6ZSx2YWx1ZTp0fSl9LHIucHJvdG90eXBlLmdldEhlYWRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9oZWFkZXJzW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQ/dC52YWx1ZTpudWxsfSxyLnByb3RvdHlwZS5yZW1vdmVIZWFkZXI9ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuX2hlYWRlcnNbZS50b0xvd2VyQ2FzZSgpXX0sci5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdC5fZGVzdHJveWVkKXt2YXIgZT10Ll9vcHRzLHI9dC5faGVhZGVycyxuPW51bGw7IkdFVCIhPT1lLm1ldGhvZCYmIkhFQUQiIT09ZS5tZXRob2QmJihuPWYuYXJyYXlidWZmZXI/cChjLmNvbmNhdCh0Ll9ib2R5KSk6Zi5ibG9iQ29uc3RydWN0b3I/bmV3IGwuQmxvYih0Ll9ib2R5Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcChlKX0pLHt0eXBlOihyWyJjb250ZW50LXR5cGUiXXx8e30pLnZhbHVlfHwiIn0pOmMuY29uY2F0KHQuX2JvZHkpLnRvU3RyaW5nKCkpO3ZhciBpPVtdO2lmKE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXS5uYW1lLG49cltlXS52YWx1ZTtBcnJheS5pc0FycmF5KG4pP24uZm9yRWFjaChmdW5jdGlvbihlKXtpLnB1c2goW3QsZV0pfSk6aS5wdXNoKFt0LG5dKX0pLCJmZXRjaCI9PT10Ll9tb2RlKXt2YXIgbz1udWxsO2lmKGYuYWJvcnRDb250cm9sbGVyKXt2YXIgYT1uZXcgQWJvcnRDb250cm9sbGVyO289YS5zaWduYWwsdC5fZmV0Y2hBYm9ydENvbnRyb2xsZXI9YSwicmVxdWVzdFRpbWVvdXQiaW4gZSYmMCE9PWUucmVxdWVzdFRpbWVvdXQmJih0Ll9mZXRjaFRpbWVyPWwuc2V0VGltZW91dChmdW5jdGlvbigpe3QuZW1pdCgicmVxdWVzdFRpbWVvdXQiKSx0Ll9mZXRjaEFib3J0Q29udHJvbGxlciYmdC5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKX0sZS5yZXF1ZXN0VGltZW91dCkpfWwuZmV0Y2godC5fb3B0cy51cmwse21ldGhvZDp0Ll9vcHRzLm1ldGhvZCxoZWFkZXJzOmksYm9keTpufHx2b2lkIDAsbW9kZToiY29ycyIsY3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiIsc2lnbmFsOm99KS50aGVuKGZ1bmN0aW9uKGUpe3QuX2ZldGNoUmVzcG9uc2U9ZSx0Ll9jb25uZWN0KCl9LGZ1bmN0aW9uKGUpe2wuY2xlYXJUaW1lb3V0KHQuX2ZldGNoVGltZXIpLHQuX2Rlc3Ryb3llZHx8dC5lbWl0KCJlcnJvciIsZSl9KX1lbHNle3ZhciBzPXQuX3hocj1uZXcgbC5YTUxIdHRwUmVxdWVzdDt0cnl7cy5vcGVuKHQuX29wdHMubWV0aG9kLHQuX29wdHMudXJsLCEwKX1jYXRjaChlKXtyZXR1cm4gdm9pZCB1Lm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5lbWl0KCJlcnJvciIsZSl9KX0icmVzcG9uc2VUeXBlImluIHMmJihzLnJlc3BvbnNlVHlwZT10Ll9tb2RlLnNwbGl0KCI6IilbMF0pLCJ3aXRoQ3JlZGVudGlhbHMiaW4gcyYmKHMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLCJ0ZXh0Ij09PXQuX21vZGUmJiJvdmVycmlkZU1pbWVUeXBlImluIHMmJnMub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLCJyZXF1ZXN0VGltZW91dCJpbiBlJiYocy50aW1lb3V0PWUucmVxdWVzdFRpbWVvdXQscy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt0LmVtaXQoInJlcXVlc3RUaW1lb3V0Iil9KSxpLmZvckVhY2goZnVuY3Rpb24oZSl7cy5zZXRSZXF1ZXN0SGVhZGVyKGVbMF0sZVsxXSl9KSx0Ll9yZXNwb25zZT1udWxsLHMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7c3dpdGNoKHMucmVhZHlTdGF0ZSl7Y2FzZSBoLkxPQURJTkc6Y2FzZSBoLkRPTkU6dC5fb25YSFJQcm9ncmVzcygpfX0sIm1vei1jaHVua2VkLWFycmF5YnVmZmVyIj09PXQuX21vZGUmJihzLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oKXt0Ll9vblhIUlByb2dyZXNzKCl9KSxzLm9uZXJyb3I9ZnVuY3Rpb24oKXt0Ll9kZXN0cm95ZWR8fHQuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiWEhSIGVycm9yIikpfTt0cnl7cy5zZW5kKG4pfWNhdGNoKGUpe3JldHVybiB2b2lkIHUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmVtaXQoImVycm9yIixlKX0pfX19fSxyLnByb3RvdHlwZS5fb25YSFJQcm9ncmVzcz1mdW5jdGlvbigpeyhmdW5jdGlvbihlKXt0cnl7dmFyIHQ9ZS5zdGF0dXM7cmV0dXJuIG51bGwhPT10JiYwIT09dH1jYXRjaChlKXtyZXR1cm4hMX19KSh0aGlzLl94aHIpJiYhdGhpcy5fZGVzdHJveWVkJiYodGhpcy5fcmVzcG9uc2V8fHRoaXMuX2Nvbm5lY3QoKSx0aGlzLl9yZXNwb25zZS5fb25YSFJQcm9ncmVzcygpKX0sci5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuX2Rlc3Ryb3llZHx8KHQuX3Jlc3BvbnNlPW5ldyBuKHQuX3hocix0Ll9mZXRjaFJlc3BvbnNlLHQuX21vZGUsdC5fZmV0Y2hUaW1lciksdC5fcmVzcG9uc2Uub24oImVycm9yIixmdW5jdGlvbihlKXt0LmVtaXQoImVycm9yIixlKX0pLHQuZW1pdCgicmVzcG9uc2UiLHQuX3Jlc3BvbnNlKSl9LHIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQsbil7dGhpcy5fYm9keS5wdXNoKGUpLG4oKX0sci5wcm90b3R5cGUuYWJvcnQ9ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZD0hMCxsLmNsZWFyVGltZW91dCh0aGlzLl9mZXRjaFRpbWVyKSx0aGlzLl9yZXNwb25zZSYmKHRoaXMuX3Jlc3BvbnNlLl9kZXN0cm95ZWQ9ITApLHRoaXMuX3hocj90aGlzLl94aHIuYWJvcnQoKTp0aGlzLl9mZXRjaEFib3J0Q29udHJvbGxlciYmdGhpcy5fZmV0Y2hBYm9ydENvbnRyb2xsZXIuYWJvcnQoKX0sci5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZSxlPXZvaWQgMCksaS5Xcml0YWJsZS5wcm90b3R5cGUuZW5kLmNhbGwodGhpcyxlLHQsbil9LHIucHJvdG90eXBlLmZsdXNoSGVhZGVycz1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0Tm9EZWxheT1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuc2V0U29ja2V0S2VlcEFsaXZlPWZ1bmN0aW9uKCl7fTt2YXIgbz1bImFjY2VwdC1jaGFyc2V0IiwiYWNjZXB0LWVuY29kaW5nIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2QiLCJjb25uZWN0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb29raWUiLCJjb29raWUyIiwiZGF0ZSIsImRudCIsImV4cGVjdCIsImhvc3QiLCJrZWVwLWFsaXZlIiwib3JpZ2luIiwicmVmZXJlciIsInRlIiwidHJhaWxlciIsInRyYW5zZmVyLWVuY29kaW5nIiwidXBncmFkZSIsInZpYSJdfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxhKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vY2FwYWJpbGl0eSI6MTU3LCIuL3Jlc3BvbnNlIjoxNTksX3Byb2Nlc3M6MTEyLGJ1ZmZlcjo0LGluaGVyaXRzOjEwNiwicmVhZGFibGUtc3RyZWFtIjoxMjYsInRvLWFycmF5YnVmZmVyIjoxNjF9XSwxNTk6W2Z1bmN0aW9uKG4sZSxyKXsoZnVuY3Rpb24obCxjLGYpe3ZhciBwPW4oIi4vY2FwYWJpbGl0eSIpLGU9bigiaW5oZXJpdHMiKSxoPW4oInJlYWRhYmxlLXN0cmVhbSIpLHM9ci5yZWFkeVN0YXRlcz17VU5TRU5UOjAsT1BFTkVEOjEsSEVBREVSU19SRUNFSVZFRDoyLExPQURJTkc6MyxET05FOjR9LHQ9ci5JbmNvbWluZ01lc3NhZ2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZihoLlJlYWRhYmxlLmNhbGwoaSksaS5fbW9kZT1uLGkuaGVhZGVycz17fSxpLnJhd0hlYWRlcnM9W10saS50cmFpbGVycz17fSxpLnJhd1RyYWlsZXJzPVtdLGkub24oImVuZCIsZnVuY3Rpb24oKXtsLm5leHRUaWNrKGZ1bmN0aW9uKCl7aS5lbWl0KCJjbG9zZSIpfSl9KSwiZmV0Y2giPT09bil7aWYoaS5fZmV0Y2hSZXNwb25zZT10LGkudXJsPXQudXJsLGkuc3RhdHVzQ29kZT10LnN0YXR1cyxpLnN0YXR1c01lc3NhZ2U9dC5zdGF0dXNUZXh0LHQuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7aS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV09ZSxpLnJhd0hlYWRlcnMucHVzaCh0LGUpfSkscC53cml0YWJsZVN0cmVhbSl7dmFyIG89bmV3IFdyaXRhYmxlU3RyZWFtKHt3cml0ZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSx0KXtpLl9kZXN0cm95ZWQ/dCgpOmkucHVzaChuZXcgZihuKSk/ZSgpOmkuX3Jlc3VtZUZldGNoPWV9KX0sY2xvc2U6ZnVuY3Rpb24oKXtjLmNsZWFyVGltZW91dChyKSxpLl9kZXN0cm95ZWR8fGkucHVzaChudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oZSl7aS5fZGVzdHJveWVkfHxpLmVtaXQoImVycm9yIixlKX19KTt0cnl7cmV0dXJuIHZvaWQgdC5ib2R5LnBpcGVUbyhvKS5jYXRjaChmdW5jdGlvbihlKXtjLmNsZWFyVGltZW91dChyKSxpLl9kZXN0cm95ZWR8fGkuZW1pdCgiZXJyb3IiLGUpfSl9Y2F0Y2goZSl7fX12YXIgYT10LmJvZHkuZ2V0UmVhZGVyKCk7IWZ1bmN0aW9uIHQoKXthLnJlYWQoKS50aGVuKGZ1bmN0aW9uKGUpe2lmKCFpLl9kZXN0cm95ZWQpe2lmKGUuZG9uZSlyZXR1cm4gYy5jbGVhclRpbWVvdXQociksdm9pZCBpLnB1c2gobnVsbCk7aS5wdXNoKG5ldyBmKGUudmFsdWUpKSx0KCl9fSkuY2F0Y2goZnVuY3Rpb24oZSl7Yy5jbGVhclRpbWVvdXQociksaS5fZGVzdHJveWVkfHxpLmVtaXQoImVycm9yIixlKX0pfSgpfWVsc2V7aWYoaS5feGhyPWUsaS5fcG9zPTAsaS51cmw9ZS5yZXNwb25zZVVSTCxpLnN0YXR1c0NvZGU9ZS5zdGF0dXMsaS5zdGF0dXNNZXNzYWdlPWUuc3RhdHVzVGV4dCxlLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvXihbXjpdKyk6XHMqKC4qKS8pO2lmKHQpe3ZhciBuPXRbMV0udG9Mb3dlckNhc2UoKTsic2V0LWNvb2tpZSI9PT1uPyh2b2lkIDA9PT1pLmhlYWRlcnNbbl0mJihpLmhlYWRlcnNbbl09W10pLGkuaGVhZGVyc1tuXS5wdXNoKHRbMl0pKTp2b2lkIDAhPT1pLmhlYWRlcnNbbl0/aS5oZWFkZXJzW25dKz0iLCAiK3RbMl06aS5oZWFkZXJzW25dPXRbMl0saS5yYXdIZWFkZXJzLnB1c2godFsxXSx0WzJdKX19KSxpLl9jaGFyc2V0PSJ4LXVzZXItZGVmaW5lZCIsIXAub3ZlcnJpZGVNaW1lVHlwZSl7dmFyIHM9aS5yYXdIZWFkZXJzWyJtaW1lLXR5cGUiXTtpZihzKXt2YXIgdT1zLm1hdGNoKC87XHMqY2hhcnNldD0oW147XSkoO3wkKS8pO3UmJihpLl9jaGFyc2V0PXVbMV0udG9Mb3dlckNhc2UoKSl9aS5fY2hhcnNldHx8KGkuX2NoYXJzZXQ9InV0Zi04Iil9fX07ZSh0LGguUmVhZGFibGUpLHQucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVzdW1lRmV0Y2g7ZSYmKHRoaXMuX3Jlc3VtZUZldGNoPW51bGwsZSgpKX0sdC5wcm90b3R5cGUuX29uWEhSUHJvZ3Jlc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5feGhyLG49bnVsbDtzd2l0Y2godC5fbW9kZSl7Y2FzZSJ0ZXh0OnZiYXJyYXkiOmlmKGUucmVhZHlTdGF0ZSE9PXMuRE9ORSlicmVhazt0cnl7bj1uZXcgYy5WQkFycmF5KGUucmVzcG9uc2VCb2R5KS50b0FycmF5KCl9Y2F0Y2goZSl7fWlmKG51bGwhPT1uKXt0LnB1c2gobmV3IGYobikpO2JyZWFrfWNhc2UidGV4dCI6dHJ5e249ZS5yZXNwb25zZVRleHR9Y2F0Y2goZSl7dC5fbW9kZT0idGV4dDp2YmFycmF5IjticmVha31pZihuLmxlbmd0aD50Ll9wb3Mpe3ZhciByPW4uc3Vic3RyKHQuX3Bvcyk7aWYoIngtdXNlci1kZWZpbmVkIj09PXQuX2NoYXJzZXQpe2Zvcih2YXIgaT1uZXcgZihyLmxlbmd0aCksbz0wO288ci5sZW5ndGg7bysrKWlbb109MjU1JnIuY2hhckNvZGVBdChvKTt0LnB1c2goaSl9ZWxzZSB0LnB1c2gocix0Ll9jaGFyc2V0KTt0Ll9wb3M9bi5sZW5ndGh9YnJlYWs7Y2FzZSJhcnJheWJ1ZmZlciI6aWYoZS5yZWFkeVN0YXRlIT09cy5ET05FfHwhZS5yZXNwb25zZSlicmVhaztuPWUucmVzcG9uc2UsdC5wdXNoKG5ldyBmKG5ldyBVaW50OEFycmF5KG4pKSk7YnJlYWs7Y2FzZSJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciI6aWYobj1lLnJlc3BvbnNlLGUucmVhZHlTdGF0ZSE9PXMuTE9BRElOR3x8IW4pYnJlYWs7dC5wdXNoKG5ldyBmKG5ldyBVaW50OEFycmF5KG4pKSk7YnJlYWs7Y2FzZSJtcy1zdHJlYW0iOmlmKG49ZS5yZXNwb25zZSxlLnJlYWR5U3RhdGUhPT1zLkxPQURJTkcpYnJlYWs7dmFyIGE9bmV3IGMuTVNTdHJlYW1SZWFkZXI7YS5vbnByb2dyZXNzPWZ1bmN0aW9uKCl7YS5yZXN1bHQuYnl0ZUxlbmd0aD50Ll9wb3MmJih0LnB1c2gobmV3IGYobmV3IFVpbnQ4QXJyYXkoYS5yZXN1bHQuc2xpY2UodC5fcG9zKSkpKSx0Ll9wb3M9YS5yZXN1bHQuYnl0ZUxlbmd0aCl9LGEub25sb2FkPWZ1bmN0aW9uKCl7dC5wdXNoKG51bGwpfSxhLnJlYWRBc0FycmF5QnVmZmVyKG4pfXQuX3hoci5yZWFkeVN0YXRlPT09cy5ET05FJiYibXMtc3RyZWFtIiE9PXQuX21vZGUmJnQucHVzaChudWxsKX19KS5jYWxsKHRoaXMsbigiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LG4oImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi9jYXBhYmlsaXR5IjoxNTcsX3Byb2Nlc3M6MTEyLGJ1ZmZlcjo0LGluaGVyaXRzOjEwNiwicmVhZGFibGUtc3RyZWFtIjoxMjZ9XSwxNjA6W2Z1bmN0aW9uKHUsZSxsKXsoZnVuY3Rpb24oZSx0KXt2YXIgcj11KCJwcm9jZXNzL2Jyb3dzZXIuanMiKS5uZXh0VGljayxuPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSxpPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPXt9LGE9MDtmdW5jdGlvbiBzKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9bC5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKG4uY2FsbChzZXRUaW1lb3V0LHdpbmRvdyxhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LGwuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHMobi5jYWxsKHNldEludGVydmFsLHdpbmRvdyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSxsLmNsZWFyVGltZW91dD1sLmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfSxzLnByb3RvdHlwZS51bnJlZj1zLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LHMucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdyx0aGlzLl9pZCl9LGwuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LGwudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSxsLl91bnJlZkFjdGl2ZT1sLmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7MDw9dCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX29uVGltZW91dCYmZS5fb25UaW1lb3V0KCl9LHQpKX0sbC5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmdW5jdGlvbihlKXt2YXIgdD1hKyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJmkuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG9bdF09ITAscihmdW5jdGlvbigpe29bdF0mJihuP2UuYXBwbHkobnVsbCxuKTplLmNhbGwobnVsbCksbC5jbGVhckltbWVkaWF0ZSh0KSl9KSx0fSxsLmNsZWFySW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oZSl7ZGVsZXRlIG9bZV19fSkuY2FsbCh0aGlzLHUoInRpbWVycyIpLnNldEltbWVkaWF0ZSx1KCJ0aW1lcnMiKS5jbGVhckltbWVkaWF0ZSl9LHsicHJvY2Vzcy9icm93c2VyLmpzIjoxMTIsdGltZXJzOjE2MH1dLDE2MTpbZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUoImJ1ZmZlciIpLkJ1ZmZlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKDA9PT1lLmJ5dGVPZmZzZXQmJmUuYnl0ZUxlbmd0aD09PWUuYnVmZmVyLmJ5dGVMZW5ndGgpcmV0dXJuIGUuYnVmZmVyO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLmJ1ZmZlci5zbGljZSlyZXR1cm4gZS5idWZmZXIuc2xpY2UoZS5ieXRlT2Zmc2V0LGUuYnl0ZU9mZnNldCtlLmJ5dGVMZW5ndGgpfWlmKGkuaXNCdWZmZXIoZSkpe2Zvcih2YXIgdD1uZXcgVWludDhBcnJheShlLmxlbmd0aCksbj1lLmxlbmd0aCxyPTA7cjxuO3IrKyl0W3JdPWVbcl07cmV0dXJuIHQuYnVmZmVyfXRocm93IG5ldyBFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpfX0se2J1ZmZlcjo0fV0sMTYyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBMPWUoInB1bnljb2RlIiksRj1lKCIuL3V0aWwiKTtmdW5jdGlvbiBPKCl7dGhpcy5wcm90b2NvbD1udWxsLHRoaXMuc2xhc2hlcz1udWxsLHRoaXMuYXV0aD1udWxsLHRoaXMuaG9zdD1udWxsLHRoaXMucG9ydD1udWxsLHRoaXMuaG9zdG5hbWU9bnVsbCx0aGlzLmhhc2g9bnVsbCx0aGlzLnNlYXJjaD1udWxsLHRoaXMucXVlcnk9bnVsbCx0aGlzLnBhdGhuYW1lPW51bGwsdGhpcy5wYXRoPW51bGwsdGhpcy5ocmVmPW51bGx9bi5wYXJzZT1vLG4ucmVzb2x2ZT1mdW5jdGlvbihlLHQpe3JldHVybiBvKGUsITEsITApLnJlc29sdmUodCl9LG4ucmVzb2x2ZU9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBlP28oZSwhMSwhMCkucmVzb2x2ZU9iamVjdCh0KTp0fSxuLmZvcm1hdD1mdW5jdGlvbihlKXtGLmlzU3RyaW5nKGUpJiYoZT1vKGUpKTtyZXR1cm4gZSBpbnN0YW5jZW9mIE8/ZS5mb3JtYXQoKTpPLnByb3RvdHlwZS5mb3JtYXQuY2FsbChlKX0sbi5Vcmw9Tzt2YXIgcT0vXihbYS16MC05ListXSs6KS9pLHI9LzpbMC05XSokLyxVPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLyxpPVsieyIsIn0iLCJ8IiwiXFwiLCJeIiwiYCJdLmNvbmNhdChbIjwiLCI+IiwnIicsImAiLCIgIiwiXHIiLCJcbiIsIlx0Il0pLE09WyInIl0uY29uY2F0KGkpLE49WyIlIiwiLyIsIj8iLCI7IiwiIyJdLmNvbmNhdChNKSxQPVsiLyIsIj8iLCIjIl0sST0vXlsrYS16MC05QS1aXy1dezAsNjN9JC8sej0vXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8saj17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSxWPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LEg9e2h0dHA6ITAsaHR0cHM6ITAsZnRwOiEwLGdvcGhlcjohMCxmaWxlOiEwLCJodHRwOiI6ITAsImh0dHBzOiI6ITAsImZ0cDoiOiEwLCJnb3BoZXI6IjohMCwiZmlsZToiOiEwfSwkPWUoInF1ZXJ5c3RyaW5nIik7ZnVuY3Rpb24gbyhlLHQsbil7aWYoZSYmRi5pc09iamVjdChlKSYmZSBpbnN0YW5jZW9mIE8pcmV0dXJuIGU7dmFyIHI9bmV3IE87cmV0dXJuIHIucGFyc2UoZSx0LG4pLHJ9Ty5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LG4pe2lmKCFGLmlzU3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgZSk7dmFyIHI9ZS5pbmRleE9mKCI/IiksaT0tMSE9PXImJnI8ZS5pbmRleE9mKCIjIik/Ij8iOiIjIixvPWUuc3BsaXQoaSk7b1swXT1vWzBdLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgYT1lPW8uam9pbihpKTtpZihhPWEudHJpbSgpLCFuJiYxPT09ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIHM9VS5leGVjKGEpO2lmKHMpcmV0dXJuIHRoaXMucGF0aD1hLHRoaXMuaHJlZj1hLHRoaXMucGF0aG5hbWU9c1sxXSxzWzJdPyh0aGlzLnNlYXJjaD1zWzJdLHRoaXMucXVlcnk9dD8kLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0JiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgdT1xLmV4ZWMoYSk7aWYodSl7dmFyIGw9KHU9dVswXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPWwsYT1hLnN1YnN0cih1Lmxlbmd0aCl9aWYobnx8dXx8YS5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIGM9Ii8vIj09PWEuc3Vic3RyKDAsMik7IWN8fHUmJlZbdV18fChhPWEuc3Vic3RyKDIpLHRoaXMuc2xhc2hlcz0hMCl9aWYoIVZbdV0mJihjfHx1JiYhSFt1XSkpe2Zvcih2YXIgZixwLGg9LTEsZD0wO2Q8UC5sZW5ndGg7ZCsrKXstMSE9PShtPWEuaW5kZXhPZihQW2RdKSkmJigtMT09PWh8fG08aCkmJihoPW0pfS0xIT09KHA9LTE9PT1oP2EubGFzdEluZGV4T2YoIkAiKTphLmxhc3RJbmRleE9mKCJAIixoKSkmJihmPWEuc2xpY2UoMCxwKSxhPWEuc2xpY2UocCsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KGYpKSxoPS0xO2ZvcihkPTA7ZDxOLmxlbmd0aDtkKyspe3ZhciBtOy0xIT09KG09YS5pbmRleE9mKE5bZF0pKSYmKC0xPT09aHx8bTxoKSYmKGg9bSl9LTE9PT1oJiYoaD1hLmxlbmd0aCksdGhpcy5ob3N0PWEuc2xpY2UoMCxoKSxhPWEuc2xpY2UoaCksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBnPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIWcpZm9yKHZhciB2PXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksYj0oZD0wLHYubGVuZ3RoKTtkPGI7ZCsrKXt2YXIgeT12W2RdO2lmKHkmJiF5Lm1hdGNoKEkpKXtmb3IodmFyIF89IiIsdz0wLEU9eS5sZW5ndGg7dzxFO3crKykxMjc8eS5jaGFyQ29kZUF0KHcpP18rPSJ4IjpfKz15W3ddO2lmKCFfLm1hdGNoKEkpKXt2YXIgQT12LnNsaWNlKDAsZCkseD12LnNsaWNlKGQrMSksaz15Lm1hdGNoKHopO2smJihBLnB1c2goa1sxXSkseC51bnNoaWZ0KGtbMl0pKSx4Lmxlbmd0aCYmKGE9Ii8iK3guam9pbigiLiIpK2EpLHRoaXMuaG9zdG5hbWU9QS5qb2luKCIuIik7YnJlYWt9fX0yNTU8dGhpcy5ob3N0bmFtZS5sZW5ndGg/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxnfHwodGhpcy5ob3N0bmFtZT1MLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBDPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLE89dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PU8rQyx0aGlzLmhyZWYrPXRoaXMuaG9zdCxnJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWFbMF0mJihhPSIvIithKSl9aWYoIWpbbF0pZm9yKGQ9MCxiPU0ubGVuZ3RoO2Q8YjtkKyspe3ZhciBTPU1bZF07aWYoLTEhPT1hLmluZGV4T2YoUykpe3ZhciBEPWVuY29kZVVSSUNvbXBvbmVudChTKTtEPT09UyYmKEQ9ZXNjYXBlKFMpKSxhPWEuc3BsaXQoUykuam9pbihEKX19dmFyIFQ9YS5pbmRleE9mKCIjIik7LTEhPT1UJiYodGhpcy5oYXNoPWEuc3Vic3RyKFQpLGE9YS5zbGljZSgwLFQpKTt2YXIgQj1hLmluZGV4T2YoIj8iKTtpZigtMSE9PUI/KHRoaXMuc2VhcmNoPWEuc3Vic3RyKEIpLHRoaXMucXVlcnk9YS5zdWJzdHIoQisxKSx0JiYodGhpcy5xdWVyeT0kLnBhcnNlKHRoaXMucXVlcnkpKSxhPWEuc2xpY2UoMCxCKSk6dCYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLGEmJih0aGlzLnBhdGhuYW1lPWEpLEhbbF0mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtDPXRoaXMucGF0aG5hbWV8fCIiO3ZhciBSPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9QytSfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxPLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1dGh8fCIiO2UmJihlPShlPWVuY29kZVVSSUNvbXBvbmVudChlKSkucmVwbGFjZSgvJTNBL2ksIjoiKSxlKz0iQCIpO3ZhciB0PXRoaXMucHJvdG9jb2x8fCIiLG49dGhpcy5wYXRobmFtZXx8IiIscj10aGlzLmhhc2h8fCIiLGk9ITEsbz0iIjt0aGlzLmhvc3Q/aT1lK3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYoaT1lKygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihpKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmRi5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz0kLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIGE9dGhpcy5zZWFyY2h8fG8mJiI/IitvfHwiIjtyZXR1cm4gdCYmIjoiIT09dC5zdWJzdHIoLTEpJiYodCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghdHx8SFt0XSkmJiExIT09aT8oaT0iLy8iKyhpfHwiIiksbiYmIi8iIT09bi5jaGFyQXQoMCkmJihuPSIvIituKSk6aXx8KGk9IiIpLHImJiIjIiE9PXIuY2hhckF0KDApJiYocj0iIyIrciksYSYmIj8iIT09YS5jaGFyQXQoMCkmJihhPSI/IithKSx0K2krKG49bi5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKX0pKSsoYT1hLnJlcGxhY2UoIiMiLCIlMjMiKSkrcn0sTy5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KG8oZSwhMSwhMCkpLmZvcm1hdCgpfSxPLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKGUpe2lmKEYuaXNTdHJpbmcoZSkpe3ZhciB0PW5ldyBPO3QucGFyc2UoZSwhMSwhMCksZT10fWZvcih2YXIgbj1uZXcgTyxyPU9iamVjdC5rZXlzKHRoaXMpLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtuW29dPXRoaXNbb119aWYobi5oYXNoPWUuaGFzaCwiIj09PWUuaHJlZilyZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbjtpZihlLnNsYXNoZXMmJiFlLnByb3RvY29sKXtmb3IodmFyIGE9T2JqZWN0LmtleXMoZSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgdT1hW3NdOyJwcm90b2NvbCIhPT11JiYoblt1XT1lW3VdKX1yZXR1cm4gSFtuLnByb3RvY29sXSYmbi5ob3N0bmFtZSYmIW4ucGF0aG5hbWUmJihuLnBhdGg9bi5wYXRobmFtZT0iLyIpLG4uaHJlZj1uLmZvcm1hdCgpLG59aWYoZS5wcm90b2NvbCYmZS5wcm90b2NvbCE9PW4ucHJvdG9jb2wpe2lmKCFIW2UucHJvdG9jb2xdKXtmb3IodmFyIGw9T2JqZWN0LmtleXMoZSksYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdO25bZl09ZVtmXX1yZXR1cm4gbi5ocmVmPW4uZm9ybWF0KCksbn1pZihuLnByb3RvY29sPWUucHJvdG9jb2wsZS5ob3N0fHxWW2UucHJvdG9jb2xdKW4ucGF0aG5hbWU9ZS5wYXRobmFtZTtlbHNle2Zvcih2YXIgcD0oZS5wYXRobmFtZXx8IiIpLnNwbGl0KCIvIik7cC5sZW5ndGgmJiEoZS5ob3N0PXAuc2hpZnQoKSk7KTtlLmhvc3R8fChlLmhvc3Q9IiIpLGUuaG9zdG5hbWV8fChlLmhvc3RuYW1lPSIiKSwiIiE9PXBbMF0mJnAudW5zaGlmdCgiIikscC5sZW5ndGg8MiYmcC51bnNoaWZ0KCIiKSxuLnBhdGhuYW1lPXAuam9pbigiLyIpfWlmKG4uc2VhcmNoPWUuc2VhcmNoLG4ucXVlcnk9ZS5xdWVyeSxuLmhvc3Q9ZS5ob3N0fHwiIixuLmF1dGg9ZS5hdXRoLG4uaG9zdG5hbWU9ZS5ob3N0bmFtZXx8ZS5ob3N0LG4ucG9ydD1lLnBvcnQsbi5wYXRobmFtZXx8bi5zZWFyY2gpe3ZhciBoPW4ucGF0aG5hbWV8fCIiLGQ9bi5zZWFyY2h8fCIiO24ucGF0aD1oK2R9cmV0dXJuIG4uc2xhc2hlcz1uLnNsYXNoZXN8fGUuc2xhc2hlcyxuLmhyZWY9bi5mb3JtYXQoKSxufXZhciBtPW4ucGF0aG5hbWUmJiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApLGc9ZS5ob3N0fHxlLnBhdGhuYW1lJiYiLyI9PT1lLnBhdGhuYW1lLmNoYXJBdCgwKSx2PWd8fG18fG4uaG9zdCYmZS5wYXRobmFtZSxiPXYseT1uLnBhdGhuYW1lJiZuLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLF89KHA9ZS5wYXRobmFtZSYmZS5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxuLnByb3RvY29sJiYhSFtuLnByb3RvY29sXSk7aWYoXyYmKG4uaG9zdG5hbWU9IiIsbi5wb3J0PW51bGwsbi5ob3N0JiYoIiI9PT15WzBdP3lbMF09bi5ob3N0OnkudW5zaGlmdChuLmhvc3QpKSxuLmhvc3Q9IiIsZS5wcm90b2NvbCYmKGUuaG9zdG5hbWU9bnVsbCxlLnBvcnQ9bnVsbCxlLmhvc3QmJigiIj09PXBbMF0/cFswXT1lLmhvc3Q6cC51bnNoaWZ0KGUuaG9zdCkpLGUuaG9zdD1udWxsKSx2PXYmJigiIj09PXBbMF18fCIiPT09eVswXSkpLGcpbi5ob3N0PWUuaG9zdHx8IiI9PT1lLmhvc3Q/ZS5ob3N0Om4uaG9zdCxuLmhvc3RuYW1lPWUuaG9zdG5hbWV8fCIiPT09ZS5ob3N0bmFtZT9lLmhvc3RuYW1lOm4uaG9zdG5hbWUsbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5LHk9cDtlbHNlIGlmKHAubGVuZ3RoKXl8fCh5PVtdKSx5LnBvcCgpLHk9eS5jb25jYXQocCksbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5O2Vsc2UgaWYoIUYuaXNOdWxsT3JVbmRlZmluZWQoZS5zZWFyY2gpKXtpZihfKW4uaG9zdG5hbWU9bi5ob3N0PXkuc2hpZnQoKSwoaz0hIShuLmhvc3QmJjA8bi5ob3N0LmluZGV4T2YoIkAiKSkmJm4uaG9zdC5zcGxpdCgiQCIpKSYmKG4uYXV0aD1rLnNoaWZ0KCksbi5ob3N0PW4uaG9zdG5hbWU9ay5zaGlmdCgpKTtyZXR1cm4gbi5zZWFyY2g9ZS5zZWFyY2gsbi5xdWVyeT1lLnF1ZXJ5LEYuaXNOdWxsKG4ucGF0aG5hbWUpJiZGLmlzTnVsbChuLnNlYXJjaCl8fChuLnBhdGg9KG4ucGF0aG5hbWU/bi5wYXRobmFtZToiIikrKG4uc2VhcmNoP24uc2VhcmNoOiIiKSksbi5ocmVmPW4uZm9ybWF0KCksbn1pZigheS5sZW5ndGgpcmV0dXJuIG4ucGF0aG5hbWU9bnVsbCxuLnNlYXJjaD9uLnBhdGg9Ii8iK24uc2VhcmNoOm4ucGF0aD1udWxsLG4uaHJlZj1uLmZvcm1hdCgpLG47Zm9yKHZhciB3PXkuc2xpY2UoLTEpWzBdLEU9KG4uaG9zdHx8ZS5ob3N0fHwxPHkubGVuZ3RoKSYmKCIuIj09PXd8fCIuLiI9PT13KXx8IiI9PT13LEE9MCx4PXkubGVuZ3RoOzA8PXg7eC0tKSIuIj09PSh3PXlbeF0pP3kuc3BsaWNlKHgsMSk6Ii4uIj09PXc/KHkuc3BsaWNlKHgsMSksQSsrKTpBJiYoeS5zcGxpY2UoeCwxKSxBLS0pO2lmKCF2JiYhYilmb3IoO0EtLTtBKXkudW5zaGlmdCgiLi4iKTshdnx8IiI9PT15WzBdfHx5WzBdJiYiLyI9PT15WzBdLmNoYXJBdCgwKXx8eS51bnNoaWZ0KCIiKSxFJiYiLyIhPT15LmpvaW4oIi8iKS5zdWJzdHIoLTEpJiZ5LnB1c2goIiIpO3ZhciBrLEM9IiI9PT15WzBdfHx5WzBdJiYiLyI9PT15WzBdLmNoYXJBdCgwKTtfJiYobi5ob3N0bmFtZT1uLmhvc3Q9Qz8iIjp5Lmxlbmd0aD95LnNoaWZ0KCk6IiIsKGs9ISEobi5ob3N0JiYwPG4uaG9zdC5pbmRleE9mKCJAIikpJiZuLmhvc3Quc3BsaXQoIkAiKSkmJihuLmF1dGg9ay5zaGlmdCgpLG4uaG9zdD1uLmhvc3RuYW1lPWsuc2hpZnQoKSkpO3JldHVybih2PXZ8fG4uaG9zdCYmeS5sZW5ndGgpJiYhQyYmeS51bnNoaWZ0KCIiKSx5Lmxlbmd0aD9uLnBhdGhuYW1lPXkuam9pbigiLyIpOihuLnBhdGhuYW1lPW51bGwsbi5wYXRoPW51bGwpLEYuaXNOdWxsKG4ucGF0aG5hbWUpJiZGLmlzTnVsbChuLnNlYXJjaCl8fChuLnBhdGg9KG4ucGF0aG5hbWU/bi5wYXRobmFtZToiIikrKG4uc2VhcmNoP24uc2VhcmNoOiIiKSksbi5hdXRoPWUuYXV0aHx8bi5hdXRoLG4uc2xhc2hlcz1uLnNsYXNoZXN8fGUuc2xhc2hlcyxuLmhyZWY9bi5mb3JtYXQoKSxufSxPLnByb3RvdHlwZS5wYXJzZUhvc3Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmhvc3QsdD1yLmV4ZWMoZSk7dCYmKCI6IiE9PSh0PXRbMF0pJiYodGhpcy5wb3J0PXQuc3Vic3RyKDEpKSxlPWUuc3Vic3RyKDAsZS5sZW5ndGgtdC5sZW5ndGgpKSxlJiYodGhpcy5ob3N0bmFtZT1lKX19LHsiLi91dGlsIjoxNjMscHVueWNvZGU6MTEzLHF1ZXJ5c3RyaW5nOjExNn1dLDE2MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9e2lzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZX0saXNOdWxsOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0saXNOdWxsT3JVbmRlZmluZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fX0se31dLDE2NDpbZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUpe3RyeXtpZighbi5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHQ9bi5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXQmJiJ0cnVlIj09PVN0cmluZyh0KS50b0xvd2VyQ2FzZSgpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gZTt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7aWYocigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcih0KTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZSh0KTpjb25zb2xlLndhcm4odCksbj0hMH1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDE2NTpbZnVuY3Rpb24oZSx0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT17fSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKWkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dmFyIGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eX0se31dLDE2NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3V0aWxzIikuY3JlYXRlTWFwRnJvbVN0cmluZztmdW5jdGlvbiBpKGUpe3JldHVybiByKGUsITApfXZhciBvLGEscz0vKFteXHMiJzw+Lz1dKykvLHU9Wy89L10sbD1bLyIoW14iXSopIisvLnNvdXJjZSwvJyhbXiddKiknKy8uc291cmNlLC8oW14gXHRcblxmXHIiJ2A9PD5dKykvLnNvdXJjZV0sYz0iKCg/OiIrKGE9IlsiKyhvPSJBLVphLXpcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDEzMVxcdTAxMzQtXFx1MDEzRVxcdTAxNDEtXFx1MDE0OFxcdTAxNEEtXFx1MDE3RVxcdTAxODAtXFx1MDFDM1xcdTAxQ0QtXFx1MDFGMFxcdTAxRjRcXHUwMUY1XFx1MDFGQS1cXHUwMjE3XFx1MDI1MC1cXHUwMkE4XFx1MDJCQi1cXHUwMkMxXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzQ0VcXHUwM0QwLVxcdTAzRDZcXHUwM0RBXFx1MDNEQ1xcdTAzREVcXHUwM0UwXFx1MDNFMi1cXHUwM0YzXFx1MDQwMS1cXHUwNDBDXFx1MDQwRS1cXHUwNDRGXFx1MDQ1MS1cXHUwNDVDXFx1MDQ1RS1cXHUwNDgxXFx1MDQ5MC1cXHUwNEM0XFx1MDRDN1xcdTA0QzhcXHUwNENCXFx1MDRDQ1xcdTA0RDAtXFx1MDRFQlxcdTA0RUUtXFx1MDRGNVxcdTA0RjhcXHUwNEY5XFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4NlxcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjEtXFx1MDYzQVxcdTA2NDEtXFx1MDY0QVxcdTA2NzEtXFx1MDZCN1xcdTA2QkEtXFx1MDZCRVxcdTA2QzAtXFx1MDZDRVxcdTA2RDAtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA5MDUtXFx1MDkzOVxcdTA5M0RcXHUwOTU4LVxcdTA5NjFcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThCXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRTBcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNi1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCNVxcdTBCQjctXFx1MEJCOVxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDI4XFx1MEQyQS1cXHUwRDM5XFx1MEQ2MFxcdTBENjFcXHUwRTAxLVxcdTBFMkVcXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQURcXHUwRUFFXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2OVxcdTEwQTAtXFx1MTBDNVxcdTEwRDAtXFx1MTBGNlxcdTExMDBcXHUxMTAyXFx1MTEwM1xcdTExMDUtXFx1MTEwN1xcdTExMDlcXHUxMTBCXFx1MTEwQ1xcdTExMEUtXFx1MTExMlxcdTExM0NcXHUxMTNFXFx1MTE0MFxcdTExNENcXHUxMTRFXFx1MTE1MFxcdTExNTRcXHUxMTU1XFx1MTE1OVxcdTExNUYtXFx1MTE2MVxcdTExNjNcXHUxMTY1XFx1MTE2N1xcdTExNjlcXHUxMTZEXFx1MTE2RVxcdTExNzJcXHUxMTczXFx1MTE3NVxcdTExOUVcXHUxMUE4XFx1MTFBQlxcdTExQUVcXHUxMUFGXFx1MTFCN1xcdTExQjhcXHUxMUJBXFx1MTFCQy1cXHUxMUMyXFx1MTFFQlxcdTExRjBcXHUxMUY5XFx1MUUwMC1cXHUxRTlCXFx1MUVBMC1cXHUxRUY5XFx1MUYwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIxMjZcXHUyMTJBXFx1MjEyQlxcdTIxMkVcXHUyMTgwLVxcdTIxODJcXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzA0MS1cXHUzMDk0XFx1MzBBMS1cXHUzMEZBXFx1MzEwNS1cXHUzMTJDXFx1NEUwMC1cXHU5RkE1XFx1QUMwMC1cXHVEN0EzIikrIl9dWyIrbysiMC05XFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XFx1MDk2Ni1cXHUwOTZGXFx1MDlFNi1cXHUwOUVGXFx1MEE2Ni1cXHUwQTZGXFx1MEFFNi1cXHUwQUVGXFx1MEI2Ni1cXHUwQjZGXFx1MEJFNy1cXHUwQkVGXFx1MEM2Ni1cXHUwQzZGXFx1MENFNi1cXHUwQ0VGXFx1MEQ2Ni1cXHUwRDZGXFx1MEU1MC1cXHUwRTU5XFx1MEVEMC1cXHUwRUQ5XFx1MEYyMC1cXHUwRjI5XFwuXFwtX1xcdTAzMDAtXFx1MDM0NVxcdTAzNjBcXHUwMzYxXFx1MDQ4My1cXHUwNDg2XFx1MDU5MS1cXHUwNUExXFx1MDVBMy1cXHUwNUI5XFx1MDVCQi1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA2NEItXFx1MDY1MlxcdTA2NzBcXHUwNkQ2LVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA5MDEtXFx1MDkwM1xcdTA5M0NcXHUwOTNFLVxcdTA5NERcXHUwOTUxLVxcdTA5NTRcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDJcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTcwXFx1MEE3MVxcdTBBODEtXFx1MEE4M1xcdTBBQkNcXHUwQUJFLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQzXFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCODJcXHUwQjgzXFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEN1xcdTBDMDEtXFx1MEMwM1xcdTBDM0UtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM4MlxcdTBDODNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBEMDJcXHUwRDAzXFx1MEQzRS1cXHUwRDQzXFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBFMzFcXHUwRTM0LVxcdTBFM0FcXHUwRTQ3LVxcdTBFNEVcXHUwRUIxXFx1MEVCNC1cXHUwRUI5XFx1MEVCQlxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0VcXHUwRjNGXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjhCXFx1MEY5MC1cXHUwRjk1XFx1MEY5N1xcdTBGOTktXFx1MEZBRFxcdTBGQjEtXFx1MEZCN1xcdTBGQjlcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHhCN1xcdTAyRDBcXHUwMkQxXFx1MDM4N1xcdTA2NDBcXHUwRTQ2XFx1MEVDNlxcdTMwMDVcXHUzMDMxLVxcdTMwMzVcXHUzMDlEXFx1MzA5RVxcdTMwRkMtXFx1MzBGRV0qIikrIlxcOik/IithKyIpIixBPW5ldyBSZWdFeHAoIl48IitjKSx4PS9eXHMqKFwvPyk+LyxrPW5ldyBSZWdFeHAoIl48XFwvIitjKyJbXj5dKj4iKSxDPS9ePCFET0NUWVBFXHM/W14+XSs+L2ksTz0hMTsieCIucmVwbGFjZSgveCguKT8vZyxmdW5jdGlvbihlLHQpe089IiI9PT10fSk7dmFyIFM9aSgiYXJlYSxiYXNlLGJhc2Vmb250LGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnIiKSxEPWkoImEsYWJicixhY3JvbnltLGFwcGxldCxiLGJhc2Vmb250LGJkbyxiaWcsYnIsYnV0dG9uLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpZnJhbWUsaW1nLGlucHV0LGlucyxrYmQsbGFiZWwsbWFwLG5vc2NyaXB0LG9iamVjdCxxLHMsc2FtcCxzY3JpcHQsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHN2Zyx0ZXh0YXJlYSx0dCx1LHZhciIpLFQ9aSgiY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9uLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIsc291cmNlIiksQj1pKCJjaGVja2VkLGNvbXBhY3QsZGVjbGFyZSxkZWZlcixkaXNhYmxlZCxpc21hcCxtdWx0aXBsZSxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3dyYXAscmVhZG9ubHksc2VsZWN0ZWQiKSxSPWkoInNjcmlwdCxzdHlsZSIpLEw9aSgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLGRldGFpbHMsZGlhbG9nLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSxvbCxvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdGl0bGUsdHIsdHJhY2ssdWwiKSxGPXt9O2Z1bmN0aW9uIHEoZSl7dmFyIHQ9cy5zb3VyY2UrIig/OlxccyooIitmdW5jdGlvbihlKXtyZXR1cm4gdS5jb25jYXQoZS5jdXN0b21BdHRyQXNzaWdufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIoPzoiK2Uuc291cmNlKyIpIn0pLmpvaW4oInwiKX0oZSkrIilbIFxcdFxcblxcZlxccl0qKD86IitsLmpvaW4oInwiKSsiKSk/IjtpZihlLmN1c3RvbUF0dHJTdXJyb3VuZCl7Zm9yKHZhciBuPVtdLHI9ZS5jdXN0b21BdHRyU3Vycm91bmQubGVuZ3RoLTE7MDw9cjtyLS0pbltyXT0iKD86KCIrZS5jdXN0b21BdHRyU3Vycm91bmRbcl1bMF0uc291cmNlKyIpXFxzKiIrdCsiXFxzKigiK2UuY3VzdG9tQXR0clN1cnJvdW5kW3JdWzFdLnNvdXJjZSsiKSkiO24ucHVzaCgiKD86Iit0KyIpIiksdD0iKD86IituLmpvaW4oInwiKSsiKSJ9cmV0dXJuIG5ldyBSZWdFeHAoIl5cXHMqIit0KX1mdW5jdGlvbiBmKGUsZil7Zm9yKHZhciBvLHQsbixyLGE9W10scz1xKGYpO2U7KXtpZih0PWUsbyYmUihvKSl7dmFyIGk9by50b0xvd2VyQ2FzZSgpLHU9RltpXXx8KEZbaV09bmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pPC8iK2krIltePl0qPiIsImkiKSk7ZT1lLnJlcGxhY2UodSxmdW5jdGlvbihlLHQpe3JldHVybiJzY3JpcHQiIT09aSYmInN0eWxlIiE9PWkmJiJub3NjcmlwdCIhPT1pJiYodD10LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2csIiQxIikucmVwbGFjZSgvPCFcW0NEQVRBXFsoW1xzXFNdKj8pXV0+L2csIiQxIikpLGYuY2hhcnMmJmYuY2hhcnModCksIiJ9KSxFKCI8LyIraSsiPiIsaSl9ZWxzZXt2YXIgbCxjPWUuaW5kZXhPZigiPCIpO2lmKDA9PT1jKXtpZigvXjwhLS0vLnRlc3QoZSkpe3ZhciBwPWUuaW5kZXhPZigiLS1ceDNlIik7aWYoMDw9cCl7Zi5jb21tZW50JiZmLmNvbW1lbnQoZS5zdWJzdHJpbmcoNCxwKSksZT1lLnN1YnN0cmluZyhwKzMpLG49IiI7Y29udGludWV9fWlmKC9ePCFcWy8udGVzdChlKSl7dmFyIGg9ZS5pbmRleE9mKCJdPiIpO2lmKDA8PWgpe2YuY29tbWVudCYmZi5jb21tZW50KGUuc3Vic3RyaW5nKDIsaCsxKSwhMCksZT1lLnN1YnN0cmluZyhoKzIpLG49IiI7Y29udGludWV9fXZhciBkPWUubWF0Y2goQyk7aWYoZCl7Zi5kb2N0eXBlJiZmLmRvY3R5cGUoZFswXSksZT1lLnN1YnN0cmluZyhkWzBdLmxlbmd0aCksbj0iIjtjb250aW51ZX12YXIgbT1lLm1hdGNoKGspO2lmKG0pe2U9ZS5zdWJzdHJpbmcobVswXS5sZW5ndGgpLG1bMF0ucmVwbGFjZShrLEUpLG49Ii8iK21bMV0udG9Mb3dlckNhc2UoKTtjb250aW51ZX12YXIgZz1iKGUpO2lmKGcpe2U9Zy5yZXN0LF8oZyksbj1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtjb250aW51ZX1mLmNvbnRpbnVlT25QYXJzZUVycm9yJiYoYz1lLmluZGV4T2YoIjwiLDEpKX12YXIgdj1iKGU9MDw9Yz8obD1lLnN1YnN0cmluZygwLGMpLGUuc3Vic3RyaW5nKGMpKToobD1lLCIiKSk7cj12P3YudGFnTmFtZToodj1lLm1hdGNoKGspKT8iLyIrdlsxXToiIixmLmNoYXJzJiZmLmNoYXJzKGwsbixyKSxuPSIifWlmKGU9PT10KXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6ICIrZSl9ZnVuY3Rpb24gYihlKXt2YXIgdD1lLm1hdGNoKEEpO2lmKHQpe3ZhciBuLHIsaT17dGFnTmFtZTp0WzFdLGF0dHJzOltdfTtmb3IoZT1lLnNsaWNlKHRbMF0ubGVuZ3RoKTshKG49ZS5tYXRjaCh4KSkmJihyPWUubWF0Y2gocykpOyllPWUuc2xpY2UoclswXS5sZW5ndGgpLGkuYXR0cnMucHVzaChyKTtpZihuKXJldHVybiBpLnVuYXJ5U2xhc2g9blsxXSxpLnJlc3Q9ZS5zbGljZShuWzBdLmxlbmd0aCksaX19ZnVuY3Rpb24geShlKXtpZigwPD13KGUpKXJldHVybiBFKCIiLGUpLCEwfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZS50YWdOYW1lLG49ZS51bmFyeVNsYXNoO2lmKGYuaHRtbDUmJigicCI9PT1vJiZMKHQpP0UoIiIsbyk6InRib2R5Ij09PXQ/eSgidGhlYWQiKToidGZvb3QiPT09dCYmKHkoInRib2R5Iil8fHkoInRoZWFkIikpLCJjb2wiPT09dCYmdygiY29sZ3JvdXAiKTwwJiYobz0iY29sZ3JvdXAiLGEucHVzaCh7dGFnOm8sYXR0cnM6W119KSxmLnN0YXJ0JiZmLnN0YXJ0KG8sW10sITEsIiIpKSksIWYuaHRtbDUmJiFEKHQpKWZvcig7byYmRChvKTspRSgiIixvKTtUKHQpJiZvPT09dCYmRSgiIix0KTt2YXIgcj1TKHQpfHwiaHRtbCI9PT10JiYiaGVhZCI9PT1vfHwhIW4saT1lLmF0dHJzLm1hcChmdW5jdGlvbih0KXt2YXIgbixyLGUsaSxvLGE7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbz10W2VdLHZvaWQgMCE9PShyPXRbZSsxXSk/JyInOnZvaWQgMCE9PShyPXRbZSsyXSk/IiciOih2b2lkIDA9PT0ocj10W2UrM10pJiZCKG4pJiYocj1uKSwiIil9TyYmLTE9PT10WzBdLmluZGV4T2YoJyIiJykmJigiIj09PXRbM10mJmRlbGV0ZSB0WzNdLCIiPT09dFs0XSYmZGVsZXRlIHRbNF0sIiI9PT10WzVdJiZkZWxldGUgdFs1XSk7dmFyIHU9MTtpZihmLmN1c3RvbUF0dHJTdXJyb3VuZClmb3IodmFyIGw9MCxjPWYuY3VzdG9tQXR0clN1cnJvdW5kLmxlbmd0aDtsPGM7bCsrLHUrPTcpaWYobj10W3UrMV0pe2E9cyh1KzIpLGU9dFt1XSxpPXRbdSs2XTticmVha31yZXR1cm4hbiYmKG49dFt1XSkmJihhPXModSsxKSkse25hbWU6bix2YWx1ZTpyLGN1c3RvbUFzc2lnbjpvfHwiPSIsY3VzdG9tT3BlbjplfHwiIixjdXN0b21DbG9zZTppfHwiIixxdW90ZTphfHwiIn19KTtyfHwoYS5wdXNoKHt0YWc6dCxhdHRyczppfSksbz10LG49IiIpLGYuc3RhcnQmJmYuc3RhcnQodCxpLHIsbil9ZnVuY3Rpb24gdyhlKXt2YXIgdCxuPWUudG9Mb3dlckNhc2UoKTtmb3IodD1hLmxlbmd0aC0xOzA8PXQmJmFbdF0udGFnLnRvTG93ZXJDYXNlKCkhPT1uO3QtLSk7cmV0dXJuIHR9ZnVuY3Rpb24gRShlLHQpe3ZhciBuO2lmKDA8PShuPXQ/dyh0KTowKSl7Zm9yKHZhciByPWEubGVuZ3RoLTE7bjw9cjtyLS0pZi5lbmQmJmYuZW5kKGFbcl0udGFnLGFbcl0uYXR0cnMsbjxyfHwhZSk7YS5sZW5ndGg9bixvPW4mJmFbbi0xXS50YWd9ZWxzZSJiciI9PT10LnRvTG93ZXJDYXNlKCk/Zi5zdGFydCYmZi5zdGFydCh0LFtdLCEwLCIiKToicCI9PT10LnRvTG93ZXJDYXNlKCkmJihmLnN0YXJ0JiZmLnN0YXJ0KHQsW10sITEsIiIsITApLGYuZW5kJiZmLmVuZCh0LFtdKSl9Zi5wYXJ0aWFsTWFya3VwfHxFKCl9bi5IVE1MUGFyc2VyPWYsbi5IVE1MdG9YTUw9ZnVuY3Rpb24oZSl7dmFyIG89IiI7cmV0dXJuIG5ldyBmKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCxuKXtvKz0iPCIrZTtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbys9IiAiK3Rbcl0ubmFtZSsnPSInKyh0W3JdLnZhbHVlfHwiIikucmVwbGFjZSgvIi9nLCImIzM0OyIpKyciJztvKz0obj8iLyI6IiIpKyI+In0sZW5kOmZ1bmN0aW9uKGUpe28rPSI8LyIrZSsiPiJ9LGNoYXJzOmZ1bmN0aW9uKGUpe28rPWV9LGNvbW1lbnQ6ZnVuY3Rpb24oZSl7bys9Ilx4M2MhLS0iK2UrIi0tXHgzZSJ9LGlnbm9yZTpmdW5jdGlvbihlKXtvKz1lfX0pLG99LG4uSFRNTHRvRE9NPWZ1bmN0aW9uKGUsbyl7dmFyIGE9e2h0bWw6ITAsaGVhZDohMCxib2R5OiEwLHRpdGxlOiEwfSxzPXtsaW5rOiJoZWFkIixiYXNlOiJoZWFkIn07bz9vPW8ub3duZXJEb2N1bWVudHx8by5nZXRPd25lckRvY3VtZW50JiZvLmdldE93bmVyRG9jdW1lbnQoKXx8bzoidW5kZWZpbmVkIiE9dHlwZW9mIERPTURvY3VtZW50P289bmV3IERPTURvY3VtZW50OiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudD9vPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCIiLCIiLG51bGwpOiJ1bmRlZmluZWQiIT10eXBlb2YgQWN0aXZlWCYmKG89bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sLkRPTURvY3VtZW50IikpO3ZhciB0LG4sdT1bXTtpZighKG8uZG9jdW1lbnRFbGVtZW50fHxvLmdldERvY3VtZW50RWxlbWVudCYmby5nZXREb2N1bWVudEVsZW1lbnQoKSkmJm8uY3JlYXRlRWxlbWVudCYmKHQ9by5jcmVhdGVFbGVtZW50KCJodG1sIiksKG49by5jcmVhdGVFbGVtZW50KCJoZWFkIikpLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgidGl0bGUiKSksdC5hcHBlbmRDaGlsZChuKSx0LmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiYm9keSIpKSxvLmFwcGVuZENoaWxkKHQpKSxvLmdldEVsZW1lbnRzQnlUYWdOYW1lKWZvcih2YXIgciBpbiBhKWFbcl09by5nZXRFbGVtZW50c0J5VGFnTmFtZShyKVswXTt2YXIgbD1hLmJvZHk7cmV0dXJuIG5ldyBmKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCxuKXtpZihhW2VdKWw9YVtlXTtlbHNle3ZhciByPW8uY3JlYXRlRWxlbWVudChlKTtmb3IodmFyIGkgaW4gdClyLnNldEF0dHJpYnV0ZSh0W2ldLm5hbWUsdFtpXS52YWx1ZSk7c1tlXSYmImJvb2xlYW4iIT10eXBlb2YgYVtzW2VdXT9hW3NbZV1dLmFwcGVuZENoaWxkKHIpOmwmJmwuYXBwZW5kQ2hpbGQmJmwuYXBwZW5kQ2hpbGQociksbnx8KHUucHVzaChyKSxsPXIpfX0sZW5kOmZ1bmN0aW9uKCl7dS5sZW5ndGgtPTEsbD11W3UubGVuZ3RoLTFdfSxjaGFyczpmdW5jdGlvbihlKXtsLmFwcGVuZENoaWxkKG8uY3JlYXRlVGV4dE5vZGUoZSkpfSxjb21tZW50OmZ1bmN0aW9uKCl7fSxpZ25vcmU6ZnVuY3Rpb24oKXt9fSksb319LHsiLi91dGlscyI6MTY4fV0sMTY3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbygpe31yLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGUsdCl7dD10fHwwO2Zvcih2YXIgbj0wLHI9dGhpcy5rZXlzLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10aGlzLmtleXNbbl0sbz1pLnNsaWNlKDEpLGE9ZS5pbmRleE9mKG8sdCk7aWYoLTEhPT1hKXtmb3IoO2EhPT10JiYoZS5zcGxpY2UoYSwxKSxlLnNwbGljZSh0LDAsbykpLHQrKywtMSE9PShhPWUuaW5kZXhPZihvLHQpKTspO3JldHVybiB0aGlzW2ldLnNvcnQoZSx0KX19cmV0dXJuIGV9LG8ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24obil7dmFyIHI9dGhpcztuLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9IiQiK2U7clt0XXx8KHJbdF09W10sclt0XS5wcm9jZXNzZWQ9MCksclt0XS5wdXNoKG4pfSl9LGNyZWF0ZVNvcnRlcjpmdW5jdGlvbigpe3ZhciBpPXRoaXMsdD1uZXcgcjtyZXR1cm4gdC5rZXlzPU9iamVjdC5rZXlzKGkpLnNvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj1pW2VdLmxlbmd0aCxyPWlbdF0ubGVuZ3RoO3JldHVybiBuPHI/MTpyPG4/LTE6ZTx0Py0xOnQ8ZT8xOjB9KS5maWx0ZXIoZnVuY3Rpb24oZSl7aWYoaVtlXS5wcm9jZXNzZWQ8aVtlXS5sZW5ndGgpe3ZhciBuPWUuc2xpY2UoMSkscj1uZXcgbztyZXR1cm4gaVtlXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdDstMSE9PSh0PWUuaW5kZXhPZihuKSk7KWUuc3BsaWNlKHQsMSk7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lbIiQiK2VdLnByb2Nlc3NlZCsrfSksci5hZGQoZS5zbGljZSgwKSl9KSx0W2VdPXIuY3JlYXRlU29ydGVyKCksITB9cmV0dXJuITF9KSx0fX0sdC5leHBvcnRzPW99LHt9XSwxNjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7bltlXT0xfSksdD9mdW5jdGlvbihlKXtyZXR1cm4gMT09PW5bZS50b0xvd2VyQ2FzZSgpXX06ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1uW2VdfX1uLmNyZWF0ZU1hcD1yLG4uY3JlYXRlTWFwRnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe3JldHVybiByKGUuc3BsaXQoLywvKSx0KX19LHt9XSwiaHRtbC1taW5pZmllciI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGM9ZSgiY2xlYW4tY3NzIiksZj1lKCJoZSIpLmRlY29kZSxEPWUoIi4vaHRtbHBhcnNlciIpLkhUTUxQYXJzZXIsaT1lKCJyZWxhdGV1cmwiKSxUPWUoIi4vdG9rZW5jaGFpbiIpLHM9ZSgidWdsaWZ5LWpzIikscj1lKCIuL3V0aWxzIik7ZnVuY3Rpb24gQihlKXtyZXR1cm4gZSYmZS5yZXBsYWNlKC9eWyBcblxyXHRcZl0rLywiIikucmVwbGFjZSgvWyBcblxyXHRcZl0rJC8sIiIpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUucmVwbGFjZSgvWyBcblxyXHRcZlx4QTBdKy9nLGZ1bmN0aW9uKGUpe3JldHVybiJcdCI9PT1lPyJcdCI6ZS5yZXBsYWNlKC8oXnxceEEwKylbXlx4QTBdKy9nLCIkMSAiKX0pfWZ1bmN0aW9uIFIoZSxuLHQscixpKXt2YXIgbz0iIixhPSIiO3JldHVybiBuLnByZXNlcnZlTGluZUJyZWFrcyYmKGU9ZS5yZXBsYWNlKC9eWyBcblxyXHRcZl0qP1tcblxyXVsgXG5cclx0XGZdKi8sZnVuY3Rpb24oKXtyZXR1cm4gbz0iXG4iLCIifSkucmVwbGFjZSgvWyBcblxyXHRcZl0qP1tcblxyXVsgXG5cclx0XGZdKiQvLGZ1bmN0aW9uKCl7cmV0dXJuIGE9IlxuIiwiIn0pKSx0JiYoZT1lLnJlcGxhY2UoL15bIFxuXHJcdFxmXHhBMF0rLyxmdW5jdGlvbihlKXt2YXIgdD0hbyYmbi5jb25zZXJ2YXRpdmVDb2xsYXBzZTtyZXR1cm4gdCYmIlx0Ij09PWU/Ilx0IjplLnJlcGxhY2UoL15bXlx4QTBdKy8sIiIpLnJlcGxhY2UoLyhceEEwKylbXlx4QTBdKy9nLCIkMSAiKXx8KHQ/IiAiOiIiKX0pKSxyJiYoZT1lLnJlcGxhY2UoL1sgXG5cclx0XGZceEEwXSskLyxmdW5jdGlvbihlKXt2YXIgdD0hYSYmbi5jb25zZXJ2YXRpdmVDb2xsYXBzZTtyZXR1cm4gdCYmIlx0Ij09PWU/Ilx0IjplLnJlcGxhY2UoL1teXHhBMF0rKFx4QTArKS9nLCIgJDEiKS5yZXBsYWNlKC9bXlx4QTBdKyQvLCIiKXx8KHQ/IiAiOiIiKX0pKSxpJiYoZT1wKGUpKSxvK2UrYX12YXIgbz1yLmNyZWF0ZU1hcEZyb21TdHJpbmcsTD1vKCJhLGFiYnIsYWNyb255bSxiLGJkaSxiZG8sYmlnLGJ1dHRvbixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW5zLGtiZCxsYWJlbCxtYXJrLG1hdGgsbm9icixvYmplY3QscSxycCxydCxydGMscnVieSxzLHNhbXAsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHN2Zyx0ZXh0YXJlYSx0aW1lLHR0LHUsdmFyIiksRj1vKCJhLGFiYnIsYWNyb255bSxiLGJpZyxkZWwsZW0sZm9udCxpLGlucyxrYmQsbWFyayxub2JyLHJwLHMsc2FtcCxzbWFsbCxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHR0LHUsdmFyIiksYT1vKCJjb21tZW50LGltZyxpbnB1dCx3YnIiKTtmdW5jdGlvbiBxKGUsdCxuLHIpe3ZhciBpPXQmJiFhKHQpO2kmJiFyLmNvbGxhcHNlSW5saW5lVGFnV2hpdGVzcGFjZSYmKGk9Ii8iPT09dC5jaGFyQXQoMCk/IUwodC5zbGljZSgxKSk6IUYodCkpO3ZhciBvPW4mJiFhKG4pO3JldHVybiBvJiYhci5jb2xsYXBzZUlubGluZVRhZ1doaXRlc3BhY2UmJihvPSIvIj09PW4uY2hhckF0KDApPyFGKG4uc2xpY2UoMSkpOiFMKG4pKSxSKGUscixpLG8sdCYmbil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KWlmKGVbbl0ubmFtZS50b0xvd2VyQ2FzZSgpPT09dClyZXR1cm4hMDtyZXR1cm4hMX12YXIgbD1yLmNyZWF0ZU1hcChbInRleHQvamF2YXNjcmlwdCIsInRleHQvZWNtYXNjcmlwdCIsInRleHQvanNjcmlwdCIsImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0Il0pO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIiI9PT0oZT1CKGUuc3BsaXQoLzsvLDIpWzBdKS50b0xvd2VyQ2FzZSgpKXx8bChlKX1mdW5jdGlvbiBoKGUpe3JldHVybiIiPT09KGU9QihlKS50b0xvd2VyQ2FzZSgpKXx8InRleHQvY3NzIj09PWV9ZnVuY3Rpb24gTShlLHQpe2lmKCJzdHlsZSIhPT1lKXJldHVybiExO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7aWYoInR5cGUiPT09dFtuXS5uYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGgodFtuXS52YWx1ZSl9cmV0dXJuITB9dmFyIGQ9bygiYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSxkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsZW5hYmxlZCxmb3Jtbm92YWxpZGF0ZSxoaWRkZW4saW5kZXRlcm1pbmF0ZSxpbmVydCxpc21hcCxpdGVtc2NvcGUsbG9vcCxtdWx0aXBsZSxtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlIiksbT1vKCJ0cnVlLGZhbHNlIik7ZnVuY3Rpb24gZyhlLHQsbil7aWYoImxpbmsiIT09ZSlyZXR1cm4hMTtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspaWYoInJlbCI9PT10W3JdLm5hbWUmJnRbcl0udmFsdWU9PT1uKXJldHVybiEwfXZhciB2PW8oImltZyxzb3VyY2UiKTtmdW5jdGlvbiBiKGUsdCxuLGEscil7aWYoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmN1c3RvbUV2ZW50QXR0cmlidXRlcztpZihuKXtmb3IodmFyIHI9bi5sZW5ndGg7ci0tOylpZihuW3JdLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuL15vblthLXpdezMsfSQvLnRlc3QoZSl9KHQsYSkpcmV0dXJuIG49QihuKS5yZXBsYWNlKC9eamF2YXNjcmlwdDpccyovaSwiIiksYS5taW5pZnlKUyhuLCEwKTtpZigiY2xhc3MiPT09dClyZXR1cm4gbj1CKG4pLG49YS5zb3J0Q2xhc3NOYW1lP2Euc29ydENsYXNzTmFtZShuKTpwKG4pO2lmKGZ1bmN0aW9uKGUsdCl7cmV0dXJuL14oPzphfGFyZWF8bGlua3xiYXNlKSQvLnRlc3QodCkmJiJocmVmIj09PWV8fCJpbWciPT09dCYmL14oPzpzcmN8bG9uZ2Rlc2N8dXNlbWFwKSQvLnRlc3QoZSl8fCJvYmplY3QiPT09dCYmL14oPzpjbGFzc2lkfGNvZGViYXNlfGRhdGF8dXNlbWFwKSQvLnRlc3QoZSl8fCJxIj09PXQmJiJjaXRlIj09PWV8fCJibG9ja3F1b3RlIj09PXQmJiJjaXRlIj09PWV8fCgiaW5zIj09PXR8fCJkZWwiPT09dCkmJiJjaXRlIj09PWV8fCJmb3JtIj09PXQmJiJhY3Rpb24iPT09ZXx8ImlucHV0Ij09PXQmJigic3JjIj09PWV8fCJ1c2VtYXAiPT09ZSl8fCJoZWFkIj09PXQmJiJwcm9maWxlIj09PWV8fCJzY3JpcHQiPT09dCYmKCJzcmMiPT09ZXx8ImZvciI9PT1lKX0odCxlKSlyZXR1cm4gbj1CKG4pLGcoZSxyLCJjYW5vbmljYWwiKT9uOmEubWluaWZ5VVJMcyhuKTtpZihmdW5jdGlvbihlLHQpe3JldHVybi9eKD86YXxhcmVhfG9iamVjdHxidXR0b24pJC8udGVzdCh0KSYmInRhYmluZGV4Ij09PWV8fCJpbnB1dCI9PT10JiYoIm1heGxlbmd0aCI9PT1lfHwidGFiaW5kZXgiPT09ZSl8fCJzZWxlY3QiPT09dCYmKCJzaXplIj09PWV8fCJ0YWJpbmRleCI9PT1lKXx8InRleHRhcmVhIj09PXQmJi9eKD86cm93c3xjb2xzfHRhYmluZGV4KSQvLnRlc3QoZSl8fCJjb2xncm91cCI9PT10JiYic3BhbiI9PT1lfHwiY29sIj09PXQmJiJzcGFuIj09PWV8fCgidGgiPT09dHx8InRkIj09PXQpJiYoInJvd3NwYW4iPT09ZXx8ImNvbHNwYW4iPT09ZSl9KHQsZSkpcmV0dXJuIEIobik7aWYoInN0eWxlIj09PXQpcmV0dXJuKG49QihuKSkmJigvOyQvLnRlc3QobikmJiEvJiM/WzAtOWEtekEtWl0rOyQvLnRlc3QobikmJihuPW4ucmVwbGFjZSgvXHMqOyQvLCI7IikpLG49YS5taW5pZnlDU1MobiwiaW5saW5lIikpLG47aWYoZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3Jjc2V0Ij09PWUmJnYodCl9KHQsZSkpbj1CKG4pLnNwbGl0KC9ccyssXHMqfFxzKixccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPSIiLHI9ZS5tYXRjaCgvXHMrKFsxLTldWzAtOV0qd3xbMC05XSsoPzpcLlswLTldKyk/eCkkLyk7aWYocil7dD10LnNsaWNlKDAsLXJbMF0ubGVuZ3RoKTt2YXIgaT0rclsxXS5zbGljZSgwLC0xKSxvPXJbMV0uc2xpY2UoLTEpOzE9PWkmJiJ4Ij09PW98fChuPSIgIitpK28pfXJldHVybiBhLm1pbmlmeVVSTHModCkrbn0pLmpvaW4oIiwgIik7ZWxzZSBpZihmdW5jdGlvbihlLHQpe2lmKCJtZXRhIiE9PWUpcmV0dXJuITE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKCJuYW1lIj09PXRbbl0ubmFtZSYmInZpZXdwb3J0Ij09PXRbbl0udmFsdWUpcmV0dXJuITB9KGUscikmJiJjb250ZW50Ij09PXQpbj1uLnJlcGxhY2UoL1xzKy9nLCIiKS5yZXBsYWNlKC9bMC05XStcLlswLTldKy9nLGZ1bmN0aW9uKGUpe3JldHVybigrZSkudG9TdHJpbmcoKX0pO2Vsc2V7aWYoZnVuY3Rpb24oZSx0KXtpZigibWV0YSIhPT1lKXJldHVybiExO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZigiaHR0cC1lcXVpdiI9PT10W25dLm5hbWUudG9Mb3dlckNhc2UoKSYmImNvbnRlbnQtc2VjdXJpdHktcG9saWN5Ij09PXRbbl0udmFsdWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH0oZSxyKSYmImNvbnRlbnQiPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiBwKG4pO2lmKGEuY3VzdG9tQXR0ckNvbGxhcHNlJiZhLmN1c3RvbUF0dHJDb2xsYXBzZS50ZXN0KHQpKW49bi5yZXBsYWNlKC9cbit8XHIrfFxzezIsfS9nLCIiKTtlbHNlIGlmKCJzY3JpcHQiPT09ZSYmInR5cGUiPT09dCluPUIobi5yZXBsYWNlKC9ccyo7XHMqL2csIjsiKSk7ZWxzZSBpZihmdW5jdGlvbihlLHQsbil7cmV0dXJuIm1lZGlhIj09PW4mJihnKGUsdCwic3R5bGVzaGVldCIpfHxNKGUsdCkpfShlLHIsdCkpcmV0dXJuIG49QihuKSxhLm1pbmlmeUNTUyhuLCJtZWRpYSIpfXJldHVybiBufWZ1bmN0aW9uIE4oZSl7cmV0dXJuIi8qIGNsZWFuLWNzcyBpZ25vcmU6c3RhcnQgKi8iK2UrIi8qIGNsZWFuLWNzcyBpZ25vcmU6ZW5kICovIn1mdW5jdGlvbiBQKGUsdCl7c3dpdGNoKHQpe2Nhc2UiaW5saW5lIjpyZXR1cm4iKnsiK2UrIn0iO2Nhc2UibWVkaWEiOnJldHVybiJAbWVkaWEgIitlKyJ7YXt0b3A6MH19IjtkZWZhdWx0OnJldHVybiBlfX12YXIgST1vKCJodG1sLGhlYWQsYm9keSxjb2xncm91cCx0Ym9keSIpLHo9bygiaHRtbCxoZWFkLGJvZHksbGksZHQsZGQscCxyYixydCxydGMscnAsb3B0Z3JvdXAsb3B0aW9uLGNvbGdyb3VwLGNhcHRpb24sdGhlYWQsdGJvZHksdGZvb3QsdHIsdGQsdGgiKSxqPW8oIm1ldGEsbGluayxzY3JpcHQsc3R5bGUsdGVtcGxhdGUsbm9zY3JpcHQiKSxWPW8oImR0LGRkIiksSD1vKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxkZXRhaWxzLGRpdixkbCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLG1haW4sbWVudSxuYXYsb2wscCxwcmUsc2VjdGlvbix0YWJsZSx1bCIpLCQ9bygiYSxhdWRpbyxkZWwsaW5zLG1hcCxub3NjcmlwdCx2aWRlbyIpLEs9bygicmIscnQscnRjLHJwIiksRz1vKCJyYixydGMscnAiKSxZPW8oIm9wdGlvbixvcHRncm91cCIpLFc9bygidGJvZHksdGZvb3QiKSxRPW8oInRoZWFkLHRib2R5LHRmb290IiksWj1vKCJ0ZCx0aCIpLEo9bygiaHRtbCxoZWFkLGJvZHkiKSxYPW8oImh0bWwsYm9keSIpLGVlPW8oImhlYWQsY29sZ3JvdXAsY2FwdGlvbiIpLHRlPW8oImR0LHRoZWFkIiksbmU9bygiYSxhYmJyLGFjcm9ueW0sYWRkcmVzcyxhcHBsZXQsYXJlYSxhcnRpY2xlLGFzaWRlLGF1ZGlvLGIsYmFzZSxiYXNlZm9udCxiZGksYmRvLGJnc291bmQsYmlnLGJsaW5rLGJsb2NrcXVvdGUsYm9keSxicixidXR0b24sY2FudmFzLGNhcHRpb24sY2VudGVyLGNpdGUsY29kZSxjb2wsY29sZ3JvdXAsY29tbWFuZCxjb250ZW50LGRhdGEsZGF0YWxpc3QsZGQsZGVsLGRldGFpbHMsZGZuLGRpYWxvZyxkaXIsZGl2LGRsLGR0LGVsZW1lbnQsZW0sZW1iZWQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9udCxmb290ZXIsZm9ybSxmcmFtZSxmcmFtZXNldCxoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxpLGlmcmFtZSxpbWFnZSxpbWcsaW5wdXQsaW5zLGlzaW5kZXgsa2JkLGtleWdlbixsYWJlbCxsZWdlbmQsbGksbGluayxsaXN0aW5nLG1haW4sbWFwLG1hcmssbWFycXVlZSxtZW51LG1lbnVpdGVtLG1ldGEsbWV0ZXIsbXVsdGljb2wsbmF2LG5vYnIsbm9lbWJlZCxub2ZyYW1lcyxub3NjcmlwdCxvYmplY3Qsb2wsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwLHBhcmFtLHBpY3R1cmUscGxhaW50ZXh0LHByZSxwcm9ncmVzcyxxLHJiLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzY3JpcHQsc2VjdGlvbixzZWxlY3Qsc2hhZG93LHNtYWxsLHNvdXJjZSxzcGFjZXIsc3BhbixzdHJpa2Usc3Ryb25nLHN0eWxlLHN1YixzdW1tYXJ5LHN1cCx0YWJsZSx0Ym9keSx0ZCx0ZW1wbGF0ZSx0ZXh0YXJlYSx0Zm9vdCx0aCx0aGVhZCx0aW1lLHRpdGxlLHRyLHRyYWNrLHR0LHUsdWwsdmFyLHZpZGVvLHdicix4bXAiKTt2YXIgeT1uZXcgUmVnRXhwKCJeKD86Y2xhc3N8aWR8c3R5bGV8dGl0bGV8bGFuZ3xkaXJ8b24oPzpmb2N1c3xibHVyfGNoYW5nZXxjbGlja3xkYmxjbGlja3xtb3VzZSg/OmRvd258dXB8b3Zlcnxtb3ZlfG91dCl8a2V5KD86cHJlc3N8ZG93bnx1cCkpKSQiKTtmdW5jdGlvbiByZShlLHQpe2Zvcih2YXIgbj10Lmxlbmd0aC0xOzA8PW47bi0tKWlmKHRbbl0ubmFtZT09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIS9eKD86c2NyaXB0fHN0eWxlfHByZXx0ZXh0YXJlYSkkLy50ZXN0KGUpfWZ1bmN0aW9uIG9lKGUpe3JldHVybiEvXig/OnByZXx0ZXh0YXJlYSkkLy50ZXN0KGUpfWZ1bmN0aW9uIGFlKGUsdCxuLHIpe3ZhciBpPXIubmFtZShlLm5hbWUpLG89ZS52YWx1ZTtpZihyLmRlY29kZUVudGl0aWVzJiZvJiYobz1mKG8se2lzQXR0cmlidXRlVmFsdWU6ITB9KSksIShyLnJlbW92ZVJlZHVuZGFudEF0dHJpYnV0ZXMmJmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuPW4/QihuLnRvTG93ZXJDYXNlKCkpOiIiLCJzY3JpcHQiPT09ZSYmImxhbmd1YWdlIj09PXQmJiJqYXZhc2NyaXB0Ij09PW58fCJmb3JtIj09PWUmJiJtZXRob2QiPT09dCYmImdldCI9PT1ufHwiaW5wdXQiPT09ZSYmInR5cGUiPT09dCYmInRleHQiPT09bnx8InNjcmlwdCI9PT1lJiYiY2hhcnNldCI9PT10JiYhdShyLCJzcmMiKXx8ImEiPT09ZSYmIm5hbWUiPT09dCYmdShyLCJpZCIpfHwiYXJlYSI9PT1lJiYic2hhcGUiPT09dCYmInJlY3QiPT09bn0obixpLG8sdCl8fHIucmVtb3ZlU2NyaXB0VHlwZUF0dHJpYnV0ZXMmJiJzY3JpcHQiPT09biYmInR5cGUiPT09aSYmVShvKXx8ci5yZW1vdmVTdHlsZUxpbmtUeXBlQXR0cmlidXRlcyYmKCJzdHlsZSI9PT1ufHwibGluayI9PT1uKSYmInR5cGUiPT09aSYmaChvKXx8KG8mJihvPWIobixpLG8scix0KSksci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXMmJmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiEobiYmIS9eXHMqJC8udGVzdChuKSkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXM/ci5yZW1vdmVFbXB0eUF0dHJpYnV0ZXModCxlKToiaW5wdXQiPT09ZSYmInZhbHVlIj09PXR8fHkudGVzdCh0KSl9KG4saSxvLHIpKSkpcmV0dXJuIHIuZGVjb2RlRW50aXRpZXMmJm8mJihvPW8ucmVwbGFjZSgvJigjP1swLTlhLXpBLVpdKzspL2csIiZhbXA7JDEiKSkse2F0dHI6ZSxuYW1lOmksdmFsdWU6b319ZnVuY3Rpb24gc2UoZSx0LG4scixpKXt2YXIgbyxhLHM9ZS5uYW1lLHU9ZS52YWx1ZSxsPWUuYXR0cixjPWwucXVvdGU7aWYodm9pZCAwPT09dXx8bi5yZW1vdmVBdHRyaWJ1dGVRdW90ZXMmJiF+dS5pbmRleE9mKGkpJiZmdW5jdGlvbihlKXtyZXR1cm4vXlteIFx0XG5cZlxyIidgPTw+XSskLy50ZXN0KGUpfSh1KSlhPSFyfHx0fHwvXC8kLy50ZXN0KHUpP3UrIiAiOnU7ZWxzZXtpZighbi5wcmV2ZW50QXR0cmlidXRlc0VzY2FwaW5nKXtpZih2b2lkIDA9PT1uLnF1b3RlQ2hhcmFjdGVyKWM9KHUubWF0Y2goLycvZyl8fFtdKS5sZW5ndGg8KHUubWF0Y2goLyIvZyl8fFtdKS5sZW5ndGg/IiciOiciJztlbHNlIGM9IiciPT09bi5xdW90ZUNoYXJhY3Rlcj8iJyI6JyInO3U9JyInPT09Yz91LnJlcGxhY2UoLyIvZywiJiMzNDsiKTp1LnJlcGxhY2UoLycvZywiJiMzOTsiKX1hPWMrdStjLHJ8fG4ucmVtb3ZlVGFnV2hpdGVzcGFjZXx8KGErPSIgIil9cmV0dXJuIHZvaWQgMD09PXV8fG4uY29sbGFwc2VCb29sZWFuQXR0cmlidXRlcyYmZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlKXx8ImRyYWdnYWJsZSI9PT1lJiYhbSh0KX0ocy50b0xvd2VyQ2FzZSgpLHUudG9Mb3dlckNhc2UoKSk/KG89cyxyfHwobys9IiAiKSk6bz1zK2wuY3VzdG9tQXNzaWduK2EsbC5jdXN0b21PcGVuK28rbC5jdXN0b21DbG9zZX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBsZShlKXtmb3IodmFyIHQ7dD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9eMFwuWzAtOV0qLywiIiksfmUuaW5kZXhPZih0KTspO3JldHVybiB0fXZhciBjZT1vKCJzY3JpcHQsc3R5bGUiKTtmdW5jdGlvbiBmZShpLGgsZSl7aC5jb2xsYXBzZVdoaXRlc3BhY2UmJihpPVIoaSxoLCEwLCEwKSk7dmFyIGQsbSxhLGcscyx2PVtdLGI9IiIseT0iIixfPVtdLHc9W10sRT1bXSxBPSIiLHg9IiIsbz1bXSx1PVtdO2k9aS5yZXBsYWNlKC88IS0tIGh0bWxtaW46aWdub3JlIC0tPihbXHNcU10qPyk8IS0tIGh0bWxtaW46aWdub3JlIC0tPi9nLGZ1bmN0aW9uKGUsdCl7aWYoIWEpe2E9bGUoaSk7dmFyIG49bmV3IFJlZ0V4cCgiXiIrYSsiKFswLTldKykkIik7aC5pZ25vcmVDdXN0b21Db21tZW50cz9oLmlnbm9yZUN1c3RvbUNvbW1lbnRzPWguaWdub3JlQ3VzdG9tQ29tbWVudHMuc2xpY2UoKTpoLmlnbm9yZUN1c3RvbUNvbW1lbnRzPVtdLGguaWdub3JlQ3VzdG9tQ29tbWVudHMucHVzaChuKX12YXIgcj0iXHgzYyEtLSIrYStvLmxlbmd0aCsiLS1ceDNlIjtyZXR1cm4gby5wdXNoKHQpLHJ9KTt2YXIgdD1oLmlnbm9yZUN1c3RvbUZyYWdtZW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc291cmNlfSk7aWYodC5sZW5ndGgpe3ZhciBuPW5ldyBSZWdFeHAoIlxccyooPzoiK3Quam9pbigifCIpKyIpK1xccyoiLCJnIik7aT1pLnJlcGxhY2UobixmdW5jdGlvbihlKXt2YXIgbix0O2d8fChnPWxlKGkpLHM9bmV3IFJlZ0V4cCgiKFxccyopIitnKyIoWzAtOV0rKSIrZysiKFxccyopIiwiZyIpLGgubWluaWZ5Q1NTJiYoaC5taW5pZnlDU1M9KHQ9aC5taW5pZnlDU1MsZnVuY3Rpb24ocixlKXtyPXIucmVwbGFjZShzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj11WytuXTtyZXR1cm4gclsxXStnK24rZytyWzJdfSk7dmFyIGk9W107cmV0dXJuKG5ldyBjKS5taW5pZnkoUChyLGUpKS53YXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXMuZXhlYyhlKTtpZih0KXt2YXIgbj1nK3RbMl0rZztyPXIucmVwbGFjZShuLE4obikpLGkucHVzaChuKX19KSxyPXQocixlKSxpLmZvckVhY2goZnVuY3Rpb24oZSl7cj1yLnJlcGxhY2UoTihlKSxlKX0pLHJ9KSksaC5taW5pZnlKUyYmKGgubWluaWZ5SlM9KG49aC5taW5pZnlKUyxmdW5jdGlvbihlLHQpe3JldHVybiBuKGUucmVwbGFjZShzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj11WytuXTtyZXR1cm4gclsxXStnK24rZytyWzJdfSksdCl9KSkpO3ZhciByPWcrdS5sZW5ndGgrZztyZXR1cm4gdS5wdXNoKC9eKFxzKilbXHNcU10qPyhccyopJC8uZXhlYyhlKSksIlx0IityKyJcdCJ9KX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGguY2FuVHJpbVdoaXRlc3BhY2UoZSx0LG9lKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBlPXYubGVuZ3RoLTE7MDxlJiYhL148W14vIV0vLnRlc3QodltlXSk7KWUtLTt2Lmxlbmd0aD1NYXRoLm1heCgwLGUpfWZ1bmN0aW9uIE8oKXtmb3IodmFyIGU9di5sZW5ndGgtMTswPGUmJiEvXjxcLy8udGVzdCh2W2VdKTspZS0tO3YubGVuZ3RoPU1hdGgubWF4KDAsZSl9ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1udWxsOzA8PWUmJmsobik7ZS0tKXt2YXIgcj12W2VdLGk9ci5tYXRjaCgvXjxcLyhbXHc6LV0rKT4kLyk7aWYoaSluPWlbMV07ZWxzZSBpZigvPiQvLnRlc3Qocil8fCh2W2VdPXEocixudWxsLHQsaCkpKWJyZWFrfX1mdW5jdGlvbiBTKGUpe3ZhciB0PXYubGVuZ3RoLTE7aWYoMTx2Lmxlbmd0aCl7dmFyIG49dlt2Lmxlbmd0aC0xXTsvXig/OjwhfCQpLy50ZXN0KG4pJiYtMT09PW4uaW5kZXhPZihhKSYmdC0tfWwodCxlKX1yZXR1cm4oaC5zb3J0QXR0cmlidXRlcyYmImZ1bmN0aW9uIiE9dHlwZW9mIGguc29ydEF0dHJpYnV0ZXN8fGguc29ydENsYXNzTmFtZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGguc29ydENsYXNzTmFtZSkmJmZ1bmN0aW9uKGUscyx0LG4pe3ZhciB1PXMuc29ydEF0dHJpYnV0ZXMmJk9iamVjdC5jcmVhdGUobnVsbCksbD1zLnNvcnRDbGFzc05hbWUmJm5ldyBUO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBzLm5hbWUoZS5uYW1lKX0pfWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4hdHx8LTE9PT1lLmluZGV4T2YodCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gcihlLHQpJiZyKGUsbil9dmFyIGk9cy5sb2c7aWYocy5sb2c9dWUscy5zb3J0QXR0cmlidXRlcz0hMSxzLnNvcnRDbGFzc05hbWU9ITEsZnVuY3Rpb24gdChlKXt2YXIgbyxhO25ldyBEKGUse3N0YXJ0OmZ1bmN0aW9uKGUsdCl7dSYmKHVbZV18fCh1W2VdPW5ldyBUKSx1W2VdLmFkZChjKHQpLmZpbHRlcihmKSkpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyl7dmFyIGk9dFtuXTtsJiZpLnZhbHVlJiYiY2xhc3MiPT09cy5uYW1lKGkubmFtZSk/bC5hZGQoQihpLnZhbHVlKS5zcGxpdCgvWyBcdFxuXGZccl0rLykuZmlsdGVyKGYpKTpzLnByb2Nlc3NTY3JpcHRzJiYidHlwZSI9PT1pLm5hbWUudG9Mb3dlckNhc2UoKSYmKG89ZSxhPWkudmFsdWUpfX0sZW5kOmZ1bmN0aW9uKCl7bz0iIn0sY2hhcnM6ZnVuY3Rpb24oZSl7cy5wcm9jZXNzU2NyaXB0cyYmY2UobykmJi0xPHMucHJvY2Vzc1NjcmlwdHMuaW5kZXhPZihhKSYmdChlKX19KX0oZmUoZSxzKSkscy5sb2c9aSx1KXt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgYSBpbiB1KW9bYV09dVthXS5jcmVhdGVTb3J0ZXIoKTtzLnNvcnRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGUsbil7dmFyIHQ9b1tlXTtpZih0KXt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpLGk9YyhuKTtpLmZvckVhY2goZnVuY3Rpb24oZSx0KXsocltlXXx8KHJbZV09W10pKS5wdXNoKG5bdF0pfSksdC5zb3J0KGkpLmZvckVhY2goZnVuY3Rpb24oZSx0KXtuW3RdPXJbZV0uc2hpZnQoKX0pfX19aWYobCl7dmFyIHA9bC5jcmVhdGVTb3J0ZXIoKTtzLnNvcnRDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIHAuc29ydChlLnNwbGl0KC9bIFxuXGZccl0rLykpLmpvaW4oIiAiKX19fShpLGgsYSxnKSxuZXcgRChpLHtwYXJ0aWFsTWFya3VwOmUsY29udGludWVPblBhcnNlRXJyb3I6aC5jb250aW51ZU9uUGFyc2VFcnJvcixjdXN0b21BdHRyQXNzaWduOmguY3VzdG9tQXR0ckFzc2lnbixjdXN0b21BdHRyU3Vycm91bmQ6aC5jdXN0b21BdHRyU3Vycm91bmQsaHRtbDU6aC5odG1sNSxzdGFydDpmdW5jdGlvbihlLHQsbixyLGkpeyJzdmciPT09ZS50b0xvd2VyQ2FzZSgpJiYoKGg9T2JqZWN0LmNyZWF0ZShoKSkuY2FzZVNlbnNpdGl2ZT0hMCxoLmtlZXBDbG9zaW5nU2xhc2g9ITAsaC5uYW1lPXVlKSxlPWgubmFtZShlKSxGKGQ9eT1lKXx8KGI9IiIpLG09ITEsXz10O3ZhciBvPWgucmVtb3ZlT3B0aW9uYWxUYWdzO2lmKG8pe3ZhciBhPW5lKGUpO2EmJmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHRtbCI6Y2FzZSJoZWFkIjpyZXR1cm4hMDtjYXNlImJvZHkiOnJldHVybiFqKHQpO2Nhc2UiY29sZ3JvdXAiOnJldHVybiJjb2wiPT09dDtjYXNlInRib2R5IjpyZXR1cm4idHIiPT09dH1yZXR1cm4hMX0oQSxlKSYmQygpLEE9IiIsYSYmZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodG1sIjpjYXNlImhlYWQiOmNhc2UiYm9keSI6Y2FzZSJjb2xncm91cCI6Y2FzZSJjYXB0aW9uIjpyZXR1cm4hMDtjYXNlImxpIjpjYXNlIm9wdGdyb3VwIjpjYXNlInRyIjpyZXR1cm4gdD09PWU7Y2FzZSJkdCI6Y2FzZSJkZCI6cmV0dXJuIFYodCk7Y2FzZSJwIjpyZXR1cm4gSCh0KTtjYXNlInJiIjpjYXNlInJ0IjpjYXNlInJwIjpyZXR1cm4gSyh0KTtjYXNlInJ0YyI6cmV0dXJuIEcodCk7Y2FzZSJvcHRpb24iOnJldHVybiBZKHQpO2Nhc2UidGhlYWQiOmNhc2UidGJvZHkiOnJldHVybiBXKHQpO2Nhc2UidGZvb3QiOnJldHVybiJ0Ym9keSI9PT10O2Nhc2UidGQiOmNhc2UidGgiOnJldHVybiBaKHQpfXJldHVybiExfSh4LGUpJiYoTygpLG89IWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiY29sZ3JvdXAiOnJldHVybiJjb2xncm91cCI9PT1lO2Nhc2UidGJvZHkiOnJldHVybiBRKGUpfXJldHVybiExfSh4LGUpKSx4PSIifWguY29sbGFwc2VXaGl0ZXNwYWNlJiYody5sZW5ndGh8fFMoZSksbnx8KGsoZSx0KSYmIXcubGVuZ3RofHx3LnB1c2goZSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gaC5jYW5Db2xsYXBzZVdoaXRlc3BhY2UoZSx0LGllKX0oZSx0KSYmIUUubGVuZ3RofHxFLnB1c2goZSkpKTt2YXIgcz0iPCIrZSx1PXImJmgua2VlcENsb3NpbmdTbGFzaDt2LnB1c2gocyksaC5zb3J0QXR0cmlidXRlcyYmaC5zb3J0QXR0cmlidXRlcyhlLHQpO2Zvcih2YXIgbD1bXSxjPXQubGVuZ3RoLGY9ITA7MDw9LS1jOyl7dmFyIHA9YWUodFtjXSx0LGUsaCk7cCYmKGwudW5zaGlmdChzZShwLHUsaCxmLGcpKSxmPSExKX0wPGwubGVuZ3RoPyh2LnB1c2goIiAiKSx2LnB1c2guYXBwbHkodixsKSk6byYmSShlKSYmKEE9ZSksdi5wdXNoKHYucG9wKCkrKHU/Ii8iOiIiKSsiPiIpLGkmJiFoLmluY2x1ZGVBdXRvR2VuZXJhdGVkVGFncyYmKEMoKSxBPSIiKX0sZW5kOmZ1bmN0aW9uKGUsdCxuKXsic3ZnIj09PWUudG9Mb3dlckNhc2UoKSYmKGg9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpKSxlPWgubmFtZShlKSxoLmNvbGxhcHNlV2hpdGVzcGFjZSYmKHcubGVuZ3RoP2U9PT13W3cubGVuZ3RoLTFdJiZ3LnBvcCgpOlMoIi8iK2UpLEUubGVuZ3RoJiZlPT09RVtFLmxlbmd0aC0xXSYmRS5wb3AoKSk7dmFyIHI9ITE7ZT09PXkmJih5PSIiLHI9IW0pLGgucmVtb3ZlT3B0aW9uYWxUYWdzJiYociYmSihBKSYmQygpLEE9IiIsIW5lKGUpfHwheHx8dGUoeCl8fCJwIj09PXgmJiQoZSl8fE8oKSx4PXooZSk/ZToiIiksaC5yZW1vdmVFbXB0eUVsZW1lbnRzJiZyJiZmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlInRleHRhcmVhIjpyZXR1cm4hMTtjYXNlImF1ZGlvIjpjYXNlInNjcmlwdCI6Y2FzZSJ2aWRlbyI6aWYocmUoInNyYyIsdCkpcmV0dXJuITE7YnJlYWs7Y2FzZSJpZnJhbWUiOmlmKHJlKCJzcmMiLHQpfHxyZSgic3JjZG9jIix0KSlyZXR1cm4hMTticmVhaztjYXNlIm9iamVjdCI6aWYocmUoImRhdGEiLHQpKXJldHVybiExO2JyZWFrO2Nhc2UiYXBwbGV0IjppZihyZSgiY29kZSIsdCkpcmV0dXJuITF9cmV0dXJuITB9KGUsdCk/KEMoKSx4PUE9IiIpOihuJiYhaC5pbmNsdWRlQXV0b0dlbmVyYXRlZFRhZ3M/eD0iIjp2LnB1c2goIjwvIitlKyI+IiksZD0iLyIrZSxMKGUpP3ImJihiKz0ifCIpOmI9IiIpfSxjaGFyczpmdW5jdGlvbih0LGUsbil7aWYoZT0iIj09PWU/ImNvbW1lbnQiOmUsbj0iIj09PW4/ImNvbW1lbnQiOm4saC5kZWNvZGVFbnRpdGllcyYmdCYmIWNlKHkpJiYodD1mKHQpKSxoLmNvbGxhcHNlV2hpdGVzcGFjZSl7aWYoIXcubGVuZ3RoKXtpZigiY29tbWVudCI9PT1lKXt2YXIgcj12W3YubGVuZ3RoLTFdO2lmKC0xPT09ci5pbmRleE9mKGEpJiYocnx8KGU9ZCksMTx2Lmxlbmd0aCYmKCFyfHwhaC5jb25zZXJ2YXRpdmVDb2xsYXBzZSYmLyAkLy50ZXN0KGIpKSkpe3ZhciBpPXYubGVuZ3RoLTI7dltpXT12W2ldLnJlcGxhY2UoL1xzKyQvLGZ1bmN0aW9uKGUpe3JldHVybiB0PWUrdCwiIn0pfX1pZihlKWlmKCIvbm9iciI9PT1lfHwid2JyIj09PWUpe2lmKC9eXHMvLnRlc3QodCkpe2Zvcih2YXIgbz12Lmxlbmd0aC0xOzA8byYmMCE9PXZbb10ubGFzdEluZGV4T2YoIjwiK2UpOylvLS07bChvLTEsImJyIil9fWVsc2UgRigiLyI9PT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmUpJiYodD1SKHQsaCwvKD86XnxccykkLy50ZXN0KGIpKSk7ISh0PWV8fG4/cSh0LGUsbixoKTpSKHQsaCwhMCwhMCkpJiYvXHMkLy50ZXN0KGIpJiZlJiYiLyI9PT1lLmNoYXJBdCgwKSYmbCh2Lmxlbmd0aC0xLG4pfUUubGVuZ3RofHwiaHRtbCI9PT1ufHxlJiZufHwodD1SKHQsaCwhMSwhMSwhMCkpfWgucHJvY2Vzc1NjcmlwdHMmJmNlKHkpJiYodD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKWlmKCJ0eXBlIj09PW5bcl0ubmFtZS50b0xvd2VyQ2FzZSgpJiYtMTx0LnByb2Nlc3NTY3JpcHRzLmluZGV4T2YobltyXS52YWx1ZSkpcmV0dXJuIGZlKGUsdCk7cmV0dXJuIGV9KHQsaCxfKSksZnVuY3Rpb24oZSx0KXtpZigic2NyaXB0IiE9PWUpcmV0dXJuITE7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKCJ0eXBlIj09PXRbbl0ubmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBVKHRbbl0udmFsdWUpO3JldHVybiEwfSh5LF8pJiYodD1oLm1pbmlmeUpTKHQpKSxNKHksXykmJih0PWgubWluaWZ5Q1NTKHQpKSxoLnJlbW92ZU9wdGlvbmFsVGFncyYmdCYmKCgiaHRtbCI9PT1BfHwiYm9keSI9PT1BJiYhL15ccy8udGVzdCh0KSkmJkMoKSxBPSIiLChYKHgpfHxlZSh4KSYmIS9eXHMvLnRlc3QodCkpJiZPKCkseD0iIiksZD0vXlxzKiQvLnRlc3QodCk/ZToiY29tbWVudCIsaC5kZWNvZGVFbnRpdGllcyYmdCYmIWNlKHkpJiYodD10LnJlcGxhY2UoLyYoKD86SWFjdXRlfGFhY3V0ZXx1YWN1dGV8cGx1c21ufE90aWxkZXxvdGlsZGV8YWdyYXZlfEFncmF2ZXxZYWN1dGV8eWFjdXRlfE9zbGFzaHxvc2xhc2h8YXRpbGRlfEF0aWxkZXxicnZiYXJ8Y2NlZGlsfENjZWRpbHxPZ3JhdmV8Y3VycmVufGRpdmlkZXxlYWN1dGV8RWFjdXRlfG9ncmF2ZXxPYWN1dGV8ZWdyYXZlfEVncmF2ZXxVZ3JhdmV8ZnJhYzEyfGZyYWMxNHxmcmFjMzR8dWdyYXZlfG9hY3V0ZXxpYWN1dGV8TnRpbGRlfG50aWxkZXxVYWN1dGV8bWlkZG90fGlncmF2ZXxJZ3JhdmV8aXF1ZXN0fEFhY3V0ZXxjZWRpbHxsYXF1b3xtaWNyb3xpZXhjbHxJY2lyY3xpY2lyY3xhY2lyY3xVY2lyY3xFY2lyY3xvY2lyY3xPY2lyY3xlY2lyY3x1Y2lyY3xBcmluZ3xhcmluZ3xBRWxpZ3xhZWxpZ3xhY3V0ZXxwb3VuZHxyYXF1b3xBY2lyY3x0aW1lc3xUSE9STnxzemxpZ3x0aG9ybnxDT1BZfGF1bWx8b3JkZnxvcmRtfFV1bWx8bWFjcnx1dW1sfEF1bWx8b3VtbHxPdW1sfHBhcmF8bmJzcHxldW1sfHF1b3R8UVVPVHxFdW1sfHl1bWx8Y2VudHxzZWN0fGNvcHl8c3VwMXxzdXAyfHN1cDN8aXVtbHxJdW1sfEVUSHxzaHl8cmVnfG5vdHx5ZW58YW1wfEFNUHxSRUd8dW1sfGV0aHxkZWd8Z3R8R1R8TFR8bHQpKD8hOyl8KD86Iz9bMC05YS16QS1aXSs7KSkvZywiJmFtcCQxIikucmVwbGFjZSgvPC9nLCImbHQ7IikpLHMmJmguY29sbGFwc2VXaGl0ZXNwYWNlJiZ3Lmxlbmd0aCYmKHQ9dC5yZXBsYWNlKHMsZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1WytuXVswXX0pKSxiKz10LHQmJihtPSEwKSx2LnB1c2godCl9LGNvbW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyI8ISI6Ilx4M2MhLS0iLHI9dD8iPiI6Ii0tXHgzZSI7ZT1mdW5jdGlvbihlKXtyZXR1cm4vXlxbaWZcc1teXF1dK118XFtlbmRpZl0kLy50ZXN0KGUpfShlKT9uK2Z1bmN0aW9uKGUsaSl7cmV0dXJuIGkucHJvY2Vzc0NvbmRpdGlvbmFsQ29tbWVudHM/ZS5yZXBsYWNlKC9eKFxbaWZcc1teXF1dK10+KShbXHNcU10qPykoPCFcW2VuZGlmXSkkLyxmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdCtmZShuLGksITApK3J9KTplfShlLGgpK3I6aC5yZW1vdmVDb21tZW50cz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dC5pZ25vcmVDdXN0b21Db21tZW50cy5sZW5ndGg7bjxyO24rKylpZih0Lmlnbm9yZUN1c3RvbUNvbW1lbnRzW25dLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9KGUsaCk/Ilx4M2MhLS0iK2UrIi0tXHgzZSI6IiI6bitlK3IsaC5yZW1vdmVPcHRpb25hbFRhZ3MmJmUmJih4PUE9IiIpLHYucHVzaChlKX0sZG9jdHlwZTpmdW5jdGlvbihlKXt2LnB1c2goaC51c2VTaG9ydERvY3R5cGU/IjwhZG9jdHlwZSIrKGgucmVtb3ZlVGFnV2hpdGVzcGFjZT8iIjoiICIpKyJodG1sPiI6cChlKSl9fSksaC5yZW1vdmVPcHRpb25hbFRhZ3MmJihKKEEpJiZDKCkseCYmIXRlKHgpJiZPKCkpLGguY29sbGFwc2VXaGl0ZXNwYWNlJiZTKCJiciIpLGZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89dC5tYXhMaW5lTGVuZ3RoO2lmKG8pe2Zvcih2YXIgYT0iIixzPVtdO2UubGVuZ3RoOyl7dmFyIHU9YS5sZW5ndGgsbD1lWzBdLmluZGV4T2YoIlxuIik7bDwwP2ErPXIobihlLnNoaWZ0KCkpKTooYSs9cihuKGVbMF0uc2xpY2UoMCxsKSkpLGVbMF09ZVswXS5zbGljZShsKzEpKSwwPHUmJmEubGVuZ3RoPm8/KHMucHVzaChhLnNsaWNlKDAsdSkpLGE9YS5zbGljZSh1KSk6MDw9bCYmKHMucHVzaChhKSxhPSIiKX1hJiZzLnB1c2goYSksaT1zLmpvaW4oIlxuIil9ZWxzZSBpPXIobihlLmpvaW4oIiIpKSk7cmV0dXJuIHQuY29sbGFwc2VXaGl0ZXNwYWNlP1IoaSx0LCEwLCEwKTppfSh2LGgscz9mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHMsZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dVsrbl1bMF07cmV0dXJuIGguY29sbGFwc2VXaGl0ZXNwYWNlPygiXHQiIT09dCYmKGk9dCtpKSwiXHQiIT09ciYmKGkrPXIpLFIoaSx7cHJlc2VydmVMaW5lQnJlYWtzOmgucHJlc2VydmVMaW5lQnJlYWtzLGNvbnNlcnZhdGl2ZUNvbGxhcHNlOiFoLnRyaW1DdXN0b21GcmFnbWVudHN9LC9eWyBcblxyXHRcZl0vLnRlc3QoaSksL1sgXG5cclx0XGZdJC8udGVzdChpKSkpOml9KX06dWUsYT9mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlx4M2MhLS0iK2ErIihbMC05XSspLS1ceDNlIiwiZyIpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9bK3RdfSl9OnVlKX1uLm1pbmlmeT1mdW5jdGlvbihlLHQpe3ZhciBuPURhdGUubm93KCkscj1mZShlLHQ9ZnVuY3Rpb24odCl7dmFyIGE9e25hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0sY2FuQ29sbGFwc2VXaGl0ZXNwYWNlOmllLGNhblRyaW1XaGl0ZXNwYWNlOm9lLGh0bWw1OiEwLGlnbm9yZUN1c3RvbUNvbW1lbnRzOlsvXiEvXSxpZ25vcmVDdXN0b21GcmFnbWVudHM6Wy88JVtcc1xTXSo/JT4vLC88XD9bXHNcU10qP1w/Pi9dLGluY2x1ZGVBdXRvR2VuZXJhdGVkVGFnczohMCxsb2c6dWUsbWluaWZ5Q1NTOnVlLG1pbmlmeUpTOnVlLG1pbmlmeVVSTHM6dWV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvPXRbZV07aWYoImNhc2VTZW5zaXRpdmUiPT09ZSlvJiYoYS5uYW1lPXVlKTtlbHNlIGlmKCJsb2ciPT09ZSkiZnVuY3Rpb24iPT10eXBlb2YgbyYmKGEubG9nPW8pO2Vsc2UgaWYoIm1pbmlmeUNTUyI9PT1lJiYiZnVuY3Rpb24iIT10eXBlb2Ygbyl7aWYoIW8pcmV0dXJuOyJvYmplY3QiIT10eXBlb2YgbyYmKG89e30pLGEubWluaWZ5Q1NTPWZ1bmN0aW9uKGUsdCl7ZT1lLnJlcGxhY2UoLyh1cmxccypcKFxzKikoInwnfCkoLio/KVwyKFxzKlwpKS9naSxmdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiB0K24rYS5taW5pZnlVUkxzKHIpK24raX0pO3ZhciBuPW5ldyBjKG8pLm1pbmlmeShQKGUsdCkpO3JldHVybiAwPG4uZXJyb3JzLmxlbmd0aD8obi5lcnJvcnMuZm9yRWFjaChhLmxvZyksZSk6ZnVuY3Rpb24oZSx0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSJpbmxpbmUiOm49ZS5tYXRjaCgvXlwqXHsoW1xzXFNdKilcfSQvKTticmVhaztjYXNlIm1lZGlhIjpuPWUubWF0Y2goL15AbWVkaWEgKFtcc1xTXSo/KVxzKntbXHNcU10qfSQvKX1yZXR1cm4gbj9uWzFdOmV9KG4uc3R5bGVzLHQpfX1lbHNlIGlmKCJtaW5pZnlKUyI9PT1lJiYiZnVuY3Rpb24iIT10eXBlb2Ygbyl7aWYoIW8pcmV0dXJuOyJvYmplY3QiIT10eXBlb2YgbyYmKG89e30pLChvLnBhcnNlfHwoby5wYXJzZT17fSkpLmJhcmVfcmV0dXJucz0hMSxhLm1pbmlmeUpTPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5tYXRjaCgvXlxzKjwhLS0uKi8pLHI9bj9lLnNsaWNlKG5bMF0ubGVuZ3RoKS5yZXBsYWNlKC9cblxzKi0tPlxzKiQvLCIiKTplO28ucGFyc2UuYmFyZV9yZXR1cm5zPXQ7dmFyIGk9cy5taW5pZnkocixvKTtyZXR1cm4gaS5lcnJvcj8oYS5sb2coaS5lcnJvciksZSk6aS5jb2RlLnJlcGxhY2UoLzskLywiIil9fWVsc2UgaWYoIm1pbmlmeVVSTHMiPT09ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIG8pe2lmKCFvKXJldHVybjsic3RyaW5nIj09dHlwZW9mIG8/bz17c2l0ZTpvfToib2JqZWN0IiE9dHlwZW9mIG8mJihvPXt9KSxhLm1pbmlmeVVSTHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpLnJlbGF0ZSh0LG8pfWNhdGNoKGUpe3JldHVybiBhLmxvZyhlKSx0fX19ZWxzZSBhW2VdPW99KSxhfSh0fHx7fSkpO3JldHVybiB0LmxvZygibWluaWZpZWQgaW46ICIrKERhdGUubm93KCktbikrIm1zIikscn19LHsiLi9odG1scGFyc2VyIjoxNjYsIi4vdG9rZW5jaGFpbiI6MTY3LCIuL3V0aWxzIjoxNjgsImNsZWFuLWNzcyI6NixoZToxMDMscmVsYXRldXJsOjEyOSwidWdsaWZ5LWpzIjoidWdsaWZ5LWpzIn1dLCJ1Z2xpZnktanMiOltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHUpeyFmdW5jdGlvbihkKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZS5zcGxpdCgiIil9ZnVuY3Rpb24gdGUoZSx0KXtyZXR1cm4gMDw9dC5pbmRleE9mKGUpfWZ1bmN0aW9uIEcoZSx0KXtmb3IodmFyIG49dC5sZW5ndGg7MDw9LS1uOylpZihlKHRbbl0pKXJldHVybiB0W25dfWZ1bmN0aW9uIHQoZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzdGFjayIse2dldDpmdW5jdGlvbigpe3ZhciBlPW5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpO2UubmFtZT10aGlzLm5hbWU7dHJ5e3Rocm93IGV9Y2F0Y2goZSl7cmV0dXJuIGUuc3RhY2t9fX0pfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLmRlZnM9dH1mdW5jdGlvbiAkKGUsdCxuKXshMD09PWUmJihlPXt9KTt2YXIgcj1lfHx7fTtpZihuKWZvcih2YXIgaSBpbiByKWlmKHVlKHIsaSkmJiF1ZSh0LGkpKXRocm93IG5ldyBvKCJgIitpKyJgIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb24iLHQpO2Zvcih2YXIgaSBpbiB0KXVlKHQsaSkmJihyW2ldPWUmJnVlKGUsaSk/ZVtpXTp0W2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBuKGUsdCl7dmFyIG49MDtmb3IodmFyIHIgaW4gdCl1ZSh0LHIpJiYoZVtyXT10W3JdLG4rKyk7cmV0dXJuIG59ZnVuY3Rpb24gbmUoKXt9ZnVuY3Rpb24gcmUoKXtyZXR1cm4hMX1mdW5jdGlvbiBpZSgpe3JldHVybiEwfWZ1bmN0aW9uIEQoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiBUKCl7cmV0dXJuIG51bGx9KChvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8pLnByb3RvdHlwZS5uYW1lPSJEZWZhdWx0c0Vycm9yIix0KG8pO3ZhciBvZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUobixyLGkpe3ZhciBvLGE9W10scz1bXTtmdW5jdGlvbiBlKCl7dmFyIGU9cihuW29dLG8pLHQ9ZSBpbnN0YW5jZW9mIGY7cmV0dXJuIHQmJihlPWUudiksZSBpbnN0YW5jZW9mIGw/KGU9ZS52KWluc3RhbmNlb2YgYz9zLnB1c2guYXBwbHkocyxpP2Uudi5zbGljZSgpLnJldmVyc2UoKTplLnYpOnMucHVzaChlKTplIT09dSYmKGUgaW5zdGFuY2VvZiBjP2EucHVzaC5hcHBseShhLGk/ZS52LnNsaWNlKCkucmV2ZXJzZSgpOmUudik6YS5wdXNoKGUpKSx0fWlmKEFycmF5LmlzQXJyYXkobikpaWYoaSl7Zm9yKG89bi5sZW5ndGg7MDw9LS1vJiYhZSgpOyk7YS5yZXZlcnNlKCkscy5yZXZlcnNlKCl9ZWxzZSBmb3Iobz0wO288bi5sZW5ndGgmJiFlKCk7KytvKTtlbHNlIGZvcihvIGluIG4paWYodWUobixvKSYmZSgpKWJyZWFrO3JldHVybiBzLmNvbmNhdChhKX1lLmF0X3RvcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGwoZSl9LGUuc3BsaWNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYyhlKX0sZS5sYXN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZihlKX07dmFyIHU9ZS5za2lwPXt9O2Z1bmN0aW9uIGwoZSl7dGhpcy52PWV9ZnVuY3Rpb24gYyhlKXt0aGlzLnY9ZX1mdW5jdGlvbiBmKGUpe3RoaXMudj1lfXJldHVybiBlfSgpO2Z1bmN0aW9uIGcoZSx0KXtpZihlLmluZGV4T2YodCk8MClyZXR1cm4gZS5wdXNoKHQpfWZ1bmN0aW9uIEIoZSxuKXtyZXR1cm4gZS5yZXBsYWNlKC9ceyguKz8pXH0vZyxmdW5jdGlvbihlLHQpe3JldHVybiBuJiZuW3RdfSl9ZnVuY3Rpb24gUihlLHQpe3ZhciBuPWUuaW5kZXhPZih0KTswPD1uJiZlLnNwbGljZShuLDEpfWZ1bmN0aW9uIGFlKGUpe0FycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIiAiKSk7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ITB9KSx0fWZ1bmN0aW9uIHNlKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoOzA8PS0tbjspaWYoIXQoZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3NpemU9MH1mdW5jdGlvbiB1ZShlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1mdW5jdGlvbiBGKGUpe2Zvcih2YXIgdCxuPWUucGFyZW50KC0xKSxyPTA7dD1lLnBhcmVudChyKyspO249dCl7aWYoIkNhbGwiPT10LlRZUEUpe2lmKHQuZXhwcmVzc2lvbj09PW4pY29udGludWV9ZWxzZSBpZih0IGluc3RhbmNlb2YgdHQpe2lmKHQubGVmdD09PW4pY29udGludWV9ZWxzZSBpZih0IGluc3RhbmNlb2YgbnQpe2lmKHQuY29uZGl0aW9uPT09biljb250aW51ZX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBXZSl7aWYodC5leHByZXNzaW9uPT09biljb250aW51ZX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBZZSl7aWYodC5leHByZXNzaW9uc1swXT09PW4pY29udGludWV9ZWxzZXtpZih0IGluc3RhbmNlb2YgY2UpcmV0dXJuIHQuYm9keT09PW47aWYodCBpbnN0YW5jZW9mIGV0JiZ0LmV4cHJlc3Npb249PT1uKWNvbnRpbnVlfXJldHVybiExfX1mdW5jdGlvbiByKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPWxlKTt2YXIgaT10PXQ/dC5zcGxpdCgvXHMrLyk6W107ciYmci5QUk9QUyYmKHQ9dC5jb25jYXQoci5QUk9QUykpO3ZhciBvPVsicmV0dXJuIGZ1bmN0aW9uIEFTVF8iLGUsIihwcm9wcyl7IiwiaWYocHJvcHMpeyJdO3QuZm9yRWFjaChmdW5jdGlvbihlKXtvLnB1c2goInRoaXMuIixlLCI9cHJvcHMuIixlLCI7Iil9KTt2YXIgYT1yJiZuZXcgcjsoYSYmYS5pbml0aWFsaXplfHxuJiZuLmluaXRpYWxpemUpJiZvLnB1c2goInRoaXMuaW5pdGlhbGl6ZSgpOyIpLG8ucHVzaCgifX0iKTt2YXIgcz1uZXcgRnVuY3Rpb24oby5qb2luKCIiKSkoKTtpZihhJiYocy5wcm90b3R5cGU9YSxzLkJBU0U9ciksciYmci5TVUJDTEFTU0VTLnB1c2gocyksKHMucHJvdG90eXBlLkNUT1I9cykuUFJPUFM9dHx8bnVsbCxzLlNFTEZfUFJPUFM9aSxzLlNVQkNMQVNTRVM9W10sZSYmKHMucHJvdG90eXBlLlRZUEU9cy5UWVBFPWUpLG4pZm9yKHZhciB1IGluIG4pdWUobix1KSYmKC9eXCQvLnRlc3QodSk/c1t1LnN1YnN0cigxKV09blt1XTpzLnByb3RvdHlwZVt1XT1uW3VdKTtyZXR1cm4gcy5ERUZNRVRIT0Q9ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3RvdHlwZVtlXT10fSx2b2lkIDAhPT1kJiYoZFsiQVNUXyIrZV09cyksc31MLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaGFzKGUpfHwrK3RoaXMuX3NpemUsdGhpcy5fdmFsdWVzWyIkIitlXT10LHRoaXN9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmhhcyhlKT90aGlzLmdldChlKS5wdXNoKHQpOnRoaXMuc2V0KGUsW3RdKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ZhbHVlc1siJCIrZV19LGRlbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJigtLXRoaXMuX3NpemUsZGVsZXRlIHRoaXMuX3ZhbHVlc1siJCIrZV0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4iJCIrZSBpbiB0aGlzLl92YWx1ZXN9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuX3ZhbHVlcyllKHRoaXMuX3ZhbHVlc1t0XSx0LnN1YnN0cigxKSl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sbWFwOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzLl92YWx1ZXMpdC5wdXNoKGUodGhpcy5fdmFsdWVzW25dLG4uc3Vic3RyKDEpKSk7cmV0dXJuIHR9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IEw7Zm9yKHZhciB0IGluIHRoaXMuX3ZhbHVlcyllLl92YWx1ZXNbdF09dGhpcy5fdmFsdWVzW3RdO3JldHVybiBlLl9zaXplPXRoaXMuX3NpemUsZX0sdG9PYmplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVzfX0sTC5mcm9tT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBMO3JldHVybiB0Ll9zaXplPW4odC5fdmFsdWVzLGUpLHR9O3ZhciBPPXIoIlRva2VuIiwidHlwZSB2YWx1ZSBsaW5lIGNvbCBwb3MgZW5kbGluZSBlbmRjb2wgZW5kcG9zIG5sYiBjb21tZW50c19iZWZvcmUgY29tbWVudHNfYWZ0ZXIgZmlsZSByYXciLHt9LG51bGwpLGxlPXIoIk5vZGUiLCJzdGFydCBlbmQiLHtfY2xvbmU6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0LnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSl7aWYoZSE9PXQpcmV0dXJuIGUuY2xvbmUoITApfSkpfXJldHVybiBuZXcgdGhpcy5DVE9SKHRoaXMpfSxjbG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY2xvbmUoZSl9LCRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIG9mIGFsbCBBU1Qgbm9kZXMiLCRwcm9wZG9jOntzdGFydDoiW0FTVF9Ub2tlbl0gVGhlIGZpcnN0IHRva2VuIG9mIHRoaXMgbm9kZSIsZW5kOiJbQVNUX1Rva2VuXSBUaGUgbGFzdCB0b2tlbiBvZiB0aGlzIG5vZGUifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyl9LHdhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3dhbGsoZSl9fSxudWxsKTtsZS53YXJuPWZ1bmN0aW9uKGUsdCl7bGUud2Fybl9mdW5jdGlvbiYmbGUud2Fybl9mdW5jdGlvbihCKGUsdCkpfTt2YXIgY2U9cigiU3RhdGVtZW50IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBvZiBhbGwgc3RhdGVtZW50cyJ9KSxmZT1yKCJEZWJ1Z2dlciIsbnVsbCx7JGRvY3VtZW50YXRpb246IlJlcHJlc2VudHMgYSBkZWJ1Z2dlciBzdGF0ZW1lbnQifSxjZSkscGU9cigiRGlyZWN0aXZlIiwidmFsdWUgcXVvdGUiLHskZG9jdW1lbnRhdGlvbjonUmVwcmVzZW50cyBhIGRpcmVjdGl2ZSwgbGlrZSAidXNlIHN0cmljdCI7JywkcHJvcGRvYzp7dmFsdWU6IltzdHJpbmddIFRoZSB2YWx1ZSBvZiB0aGlzIGRpcmVjdGl2ZSBhcyBhIHBsYWluIHN0cmluZyAoaXQncyBub3QgYW4gQVNUX1N0cmluZyEpIixxdW90ZToiW3N0cmluZ10gdGhlIG9yaWdpbmFsIHF1b3RlIGNoYXJhY3RlciJ9fSxjZSksaGU9cigiU2ltcGxlU3RhdGVtZW50IiwiYm9keSIseyRkb2N1bWVudGF0aW9uOiJBIHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIGFuIGV4cHJlc3Npb24sIGkuZS4gYSA9IDEgKyAyIiwkcHJvcGRvYzp7Ym9keToiW0FTVF9Ob2RlXSBhbiBleHByZXNzaW9uIG5vZGUgKHNob3VsZCBub3QgYmUgaW5zdGFuY2VvZiBBU1RfU3RhdGVtZW50KSJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5ib2R5Ll93YWxrKGUpfSl9fSxjZSk7ZnVuY3Rpb24gcShlLHQpe3ZhciBuPWUuYm9keTtuIGluc3RhbmNlb2YgY2U/bi5fd2Fsayh0KTpuLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fd2Fsayh0KX0pfXZhciBkZT1yKCJCbG9jayIsImJvZHkiLHskZG9jdW1lbnRhdGlvbjoiQSBib2R5IG9mIHN0YXRlbWVudHMgKHVzdWFsbHkgYnJhY2VkKSIsJHByb3Bkb2M6e2JvZHk6IltBU1RfU3RhdGVtZW50Kl0gYW4gYXJyYXkgb2Ygc3RhdGVtZW50cyJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7cSh0aGlzLGUpfSl9fSxjZSksbWU9cigiQmxvY2tTdGF0ZW1lbnQiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGJsb2NrIHN0YXRlbWVudCJ9LGRlKSxnZT1yKCJFbXB0eVN0YXRlbWVudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBlbXB0eSBzdGF0ZW1lbnQgKGVtcHR5IGJsb2NrIG9yIHNpbXBseSBhIHNlbWljb2xvbikifSxjZSksdj1yKCJTdGF0ZW1lbnRXaXRoQm9keSIsImJvZHkiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgYWxsIHN0YXRlbWVudHMgdGhhdCBjb250YWluIG9uZSBuZXN0ZWQgYm9keTogYEZvcmAsIGBGb3JJbmAsIGBEb2AsIGBXaGlsZWAsIGBXaXRoYCIsJHByb3Bkb2M6e2JvZHk6IltBU1RfU3RhdGVtZW50XSB0aGUgYm9keTsgdGhpcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQsIGV2ZW4gaWYgaXQncyBhbiBBU1RfRW1wdHlTdGF0ZW1lbnQifX0sY2UpLHZlPXIoIkxhYmVsZWRTdGF0ZW1lbnQiLCJsYWJlbCIseyRkb2N1bWVudGF0aW9uOiJTdGF0ZW1lbnQgd2l0aCBhIGxhYmVsIiwkcHJvcGRvYzp7bGFiZWw6IltBU1RfTGFiZWxdIGEgbGFiZWwgZGVmaW5pdGlvbiJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5sYWJlbC5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX0sY2xvbmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY2xvbmUoZSk7aWYoZSl7dmFyIG49dC5sYWJlbCxyPXRoaXMubGFiZWw7dC53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgTGUmJmUubGFiZWwmJmUubGFiZWwudGhlZGVmPT09ciYmKGUubGFiZWwudGhlZGVmPW4pLnJlZmVyZW5jZXMucHVzaChlKX0pKX1yZXR1cm4gdH19LHYpLGJlPXIoIkl0ZXJhdGlvblN0YXRlbWVudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkludGVybmFsIGNsYXNzLiAgQWxsIGxvb3BzIGluaGVyaXQgZnJvbSBpdC4ifSx2KSx5ZT1yKCJEV0xvb3AiLCJjb25kaXRpb24iLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgZG8vd2hpbGUgc3RhdGVtZW50cyIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSB0aGUgbG9vcCBjb25kaXRpb24uICBTaG91bGQgbm90IGJlIGluc3RhbmNlb2YgQVNUX1N0YXRlbWVudCJ9fSxiZSksX2U9cigiRG8iLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGBkb2Agc3RhdGVtZW50Iixfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuYm9keS5fd2FsayhlKSx0aGlzLmNvbmRpdGlvbi5fd2FsayhlKX0pfX0seWUpLHdlPXIoIldoaWxlIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgd2hpbGVgIHN0YXRlbWVudCIsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmNvbmRpdGlvbi5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LHllKSxFZT1yKCJGb3IiLCJpbml0IGNvbmRpdGlvbiBzdGVwIix7JGRvY3VtZW50YXRpb246IkEgYGZvcmAgc3RhdGVtZW50IiwkcHJvcGRvYzp7aW5pdDoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIGluaXRpYWxpemF0aW9uIGNvZGUsIG9yIG51bGwgaWYgZW1wdHkiLGNvbmRpdGlvbjoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIHRlcm1pbmF0aW9uIGNsYXVzZSwgb3IgbnVsbCBpZiBlbXB0eSIsc3RlcDoiW0FTVF9Ob2RlP10gdGhlIGBmb3JgIHVwZGF0ZSBjbGF1c2UsIG9yIG51bGwgaWYgZW1wdHkifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuaW5pdCYmdGhpcy5pbml0Ll93YWxrKGUpLHRoaXMuY29uZGl0aW9uJiZ0aGlzLmNvbmRpdGlvbi5fd2FsayhlKSx0aGlzLnN0ZXAmJnRoaXMuc3RlcC5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LGJlKSxBZT1yKCJGb3JJbiIsImluaXQgb2JqZWN0Iix7JGRvY3VtZW50YXRpb246IkEgYGZvciAuLi4gaW5gIHN0YXRlbWVudCIsJHByb3Bkb2M6e2luaXQ6IltBU1RfTm9kZV0gdGhlIGBmb3IvaW5gIGluaXRpYWxpemF0aW9uIGNvZGUiLG9iamVjdDoiW0FTVF9Ob2RlXSB0aGUgb2JqZWN0IHRoYXQgd2UncmUgbG9vcGluZyB0aHJvdWdoIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmluaXQuX3dhbGsoZSksdGhpcy5vYmplY3QuX3dhbGsoZSksdGhpcy5ib2R5Ll93YWxrKGUpfSl9fSxiZSkseGU9cigiV2l0aCIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgd2l0aGAgc3RhdGVtZW50IiwkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSB0aGUgYHdpdGhgIGV4cHJlc3Npb24ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbi5fd2FsayhlKSx0aGlzLmJvZHkuX3dhbGsoZSl9KX19LHYpLGtlPXIoIlNjb3BlIiwidmFyaWFibGVzIGZ1bmN0aW9ucyB1c2VzX3dpdGggdXNlc19ldmFsIHBhcmVudF9zY29wZSBlbmNsb3NlZCBjbmFtZSIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBhbGwgc3RhdGVtZW50cyBpbnRyb2R1Y2luZyBhIGxleGljYWwgc2NvcGUiLCRwcm9wZG9jOnt2YXJpYWJsZXM6IltPYmplY3QvU10gYSBtYXAgb2YgbmFtZSAtPiBTeW1ib2xEZWYgZm9yIGFsbCB2YXJpYWJsZXMvZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcyBzY29wZSIsZnVuY3Rpb25zOiJbT2JqZWN0L1NdIGxpa2UgYHZhcmlhYmxlc2AsIGJ1dCBvbmx5IGxpc3RzIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIsdXNlc193aXRoOiJbYm9vbGVhbi9TXSB0ZWxscyB3aGV0aGVyIHRoaXMgc2NvcGUgdXNlcyB0aGUgYHdpdGhgIHN0YXRlbWVudCIsdXNlc19ldmFsOiJbYm9vbGVhbi9TXSB0ZWxscyB3aGV0aGVyIHRoaXMgc2NvcGUgY29udGFpbnMgYSBkaXJlY3QgY2FsbCB0byB0aGUgZ2xvYmFsIGBldmFsYCIscGFyZW50X3Njb3BlOiJbQVNUX1Njb3BlPy9TXSBsaW5rIHRvIHRoZSBwYXJlbnQgc2NvcGUiLGVuY2xvc2VkOiJbU3ltYm9sRGVmKi9TXSBhIGxpc3Qgb2YgYWxsIHN5bWJvbCBkZWZpbml0aW9ucyB0aGF0IGFyZSBhY2Nlc3NlZCBmcm9tIHRoaXMgc2NvcGUgb3IgYW55IHN1YnNjb3BlcyIsY25hbWU6IltpbnRlZ2VyL1NdIGN1cnJlbnQgaW5kZXggZm9yIG1hbmdsaW5nIHZhcmlhYmxlcyAodXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBtYW5nbGVyKSJ9LGNsb25lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Nsb25lKGUpO3JldHVybiB0aGlzLnZhcmlhYmxlcyYmKHQudmFyaWFibGVzPXRoaXMudmFyaWFibGVzLmNsb25lKCkpLHRoaXMuZnVuY3Rpb25zJiYodC5mdW5jdGlvbnM9dGhpcy5mdW5jdGlvbnMuY2xvbmUoKSksdGhpcy5lbmNsb3NlZCYmKHQuZW5jbG9zZWQ9dGhpcy5lbmNsb3NlZC5zbGljZSgpKSx0fSxwaW5uZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51c2VzX2V2YWx8fHRoaXMudXNlc193aXRofX0sZGUpLENlPXIoIlRvcGxldmVsIiwiZ2xvYmFscyIseyRkb2N1bWVudGF0aW9uOiJUaGUgdG9wbGV2ZWwgc2NvcGUiLCRwcm9wZG9jOntnbG9iYWxzOiJbT2JqZWN0L1NdIGEgbWFwIG9mIG5hbWUgLT4gU3ltYm9sRGVmIGZvciBhbGwgdW5kZWNsYXJlZCBuYW1lcyJ9LHdyYXBfY29tbW9uanM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ib2R5LG49IihmdW5jdGlvbihleHBvcnRzKXsnJE9SSUcnO30pKHR5cGVvZiAiK2UrIj09J3VuZGVmaW5lZCc/KCIrZSsiPXt9KToiK2UrIik7IjtyZXR1cm4gbj0obj1ZdChuKSkudHJhbnNmb3JtKG5ldyBXdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgcGUmJiIkT1JJRyI9PWUudmFsdWUpcmV0dXJuIG9lLnNwbGljZSh0KX0pKX0sd3JhcF9lbmNsb3NlOmZ1bmN0aW9uKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIpO3ZhciB0PWUuaW5kZXhPZigiOiIpO3Q8MCYmKHQ9ZS5sZW5ndGgpO3ZhciBuPXRoaXMuYm9keTtyZXR1cm4gWXQoWyIoZnVuY3Rpb24oIixlLnNsaWNlKDAsdCksJyl7IiRPUklHIn0pKCcsZS5zbGljZSh0KzEpLCIpIl0uam9pbigiIikpLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHBlJiYiJE9SSUciPT1lLnZhbHVlKXJldHVybiBvZS5zcGxpY2Uobil9KSl9fSxrZSksT2U9cigiTGFtYmRhIiwibmFtZSBhcmduYW1lcyB1c2VzX2FyZ3VtZW50cyIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBmdW5jdGlvbnMiLCRwcm9wZG9jOntuYW1lOiJbQVNUX1N5bWJvbERlY2xhcmF0aW9uP10gdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiIsYXJnbmFtZXM6IltBU1RfU3ltYm9sRnVuYXJnKl0gYXJyYXkgb2YgZnVuY3Rpb24gYXJndW1lbnRzIix1c2VzX2FyZ3VtZW50czoiW2Jvb2xlYW4vU10gdGVsbHMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2VzIHRoZSBhcmd1bWVudHMgYXJyYXkifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMubmFtZSYmdGhpcy5uYW1lLl93YWxrKHQpLHRoaXMuYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSkscSh0aGlzLHQpfSl9fSxrZSksU2U9cigiQWNjZXNzb3IiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIHNldHRlci9nZXR0ZXIgZnVuY3Rpb24uICBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIGFsd2F5cyBudWxsLiJ9LE9lKSxEZT1yKCJGdW5jdGlvbiIsImlubGluZWQiLHskZG9jdW1lbnRhdGlvbjoiQSBmdW5jdGlvbiBleHByZXNzaW9uIn0sT2UpLFRlPXIoIkRlZnVuIiwiaW5saW5lZCIseyRkb2N1bWVudGF0aW9uOiJBIGZ1bmN0aW9uIGRlZmluaXRpb24ifSxPZSksVT1yKCJKdW1wIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3Ig4oCcanVtcHPigJ0gKGZvciBub3cgdGhhdCdzIGByZXR1cm5gLCBgdGhyb3dgLCBgYnJlYWtgIGFuZCBgY29udGludWVgKSJ9LGNlKSxCZT1yKCJFeGl0IiwidmFsdWUiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3Ig4oCcZXhpdHPigJ0gKGByZXR1cm5gIGFuZCBgdGhyb3dgKSIsJHByb3Bkb2M6e3ZhbHVlOiJbQVNUX05vZGU/XSB0aGUgdmFsdWUgcmV0dXJuZWQgb3IgdGhyb3duIGJ5IHRoaXMgc3RhdGVtZW50OyBjb3VsZCBiZSBudWxsIGZvciBBU1RfUmV0dXJuIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsdGhpcy52YWx1ZSYmZnVuY3Rpb24oKXt0aGlzLnZhbHVlLl93YWxrKGUpfSl9fSxVKSxSZT1yKCJSZXR1cm4iLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGByZXR1cm5gIHN0YXRlbWVudCJ9LEJlKSxLPXIoIlRocm93IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgdGhyb3dgIHN0YXRlbWVudCJ9LEJlKSxMZT1yKCJMb29wQ29udHJvbCIsImxhYmVsIix7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGxvb3AgY29udHJvbCBzdGF0ZW1lbnRzIChgYnJlYWtgIGFuZCBgY29udGludWVgKSIsJHByb3Bkb2M6e2xhYmVsOiJbQVNUX0xhYmVsUmVmP10gdGhlIGxhYmVsLCBvciBudWxsIGlmIG5vbmUifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyx0aGlzLmxhYmVsJiZmdW5jdGlvbigpe3RoaXMubGFiZWwuX3dhbGsoZSl9KX19LFUpLEZlPXIoIkJyZWFrIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgYnJlYWtgIHN0YXRlbWVudCJ9LExlKSxxZT1yKCJDb250aW51ZSIsbnVsbCx7JGRvY3VtZW50YXRpb246IkEgYGNvbnRpbnVlYCBzdGF0ZW1lbnQifSxMZSksVWU9cigiSWYiLCJjb25kaXRpb24gYWx0ZXJuYXRpdmUiLHskZG9jdW1lbnRhdGlvbjoiQSBgaWZgIHN0YXRlbWVudCIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSB0aGUgYGlmYCBjb25kaXRpb24iLGFsdGVybmF0aXZlOiJbQVNUX1N0YXRlbWVudD9dIHRoZSBgZWxzZWAgcGFydCwgb3IgbnVsbCBpZiBub3QgcHJlc2VudCJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5jb25kaXRpb24uX3dhbGsoZSksdGhpcy5ib2R5Ll93YWxrKGUpLHRoaXMuYWx0ZXJuYXRpdmUmJnRoaXMuYWx0ZXJuYXRpdmUuX3dhbGsoZSl9KX19LHYpLE1lPXIoIlN3aXRjaCIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgc3dpdGNoYCBzdGF0ZW1lbnQiLCRwcm9wZG9jOntleHByZXNzaW9uOiJbQVNUX05vZGVdIHRoZSBgc3dpdGNoYCDigJxkaXNjcmltaW5hbnTigJ0ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbi5fd2FsayhlKSxxKHRoaXMsZSl9KX19LGRlKSxNPXIoIlN3aXRjaEJyYW5jaCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGBzd2l0Y2hgIGJyYW5jaGVzIn0sZGUpLE5lPXIoIkRlZmF1bHQiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGBkZWZhdWx0YCBzd2l0Y2ggYnJhbmNoIn0sTSksUGU9cigiQ2FzZSIsImV4cHJlc3Npb24iLHskZG9jdW1lbnRhdGlvbjoiQSBgY2FzZWAgc3dpdGNoIGJyYW5jaCIsJHByb3Bkb2M6e2V4cHJlc3Npb246IltBU1RfTm9kZV0gdGhlIGBjYXNlYCBleHByZXNzaW9uIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSkscSh0aGlzLGUpfSl9fSxNKSxJZT1yKCJUcnkiLCJiY2F0Y2ggYmZpbmFsbHkiLHskZG9jdW1lbnRhdGlvbjoiQSBgdHJ5YCBzdGF0ZW1lbnQiLCRwcm9wZG9jOntiY2F0Y2g6IltBU1RfQ2F0Y2g/XSB0aGUgY2F0Y2ggYmxvY2ssIG9yIG51bGwgaWYgbm90IHByZXNlbnQiLGJmaW5hbGx5OiJbQVNUX0ZpbmFsbHk/XSB0aGUgZmluYWxseSBibG9jaywgb3IgbnVsbCBpZiBub3QgcHJlc2VudCJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7cSh0aGlzLGUpLHRoaXMuYmNhdGNoJiZ0aGlzLmJjYXRjaC5fd2FsayhlKSx0aGlzLmJmaW5hbGx5JiZ0aGlzLmJmaW5hbGx5Ll93YWxrKGUpfSl9fSxkZSksemU9cigiQ2F0Y2giLCJhcmduYW1lIix7JGRvY3VtZW50YXRpb246IkEgYGNhdGNoYCBub2RlOyBvbmx5IG1ha2VzIHNlbnNlIGFzIHBhcnQgb2YgYSBgdHJ5YCBzdGF0ZW1lbnQiLCRwcm9wZG9jOnthcmduYW1lOiJbQVNUX1N5bWJvbENhdGNoXSBzeW1ib2wgZm9yIHRoZSBleGNlcHRpb24ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuYXJnbmFtZS5fd2FsayhlKSxxKHRoaXMsZSl9KX19LGRlKSxqZT1yKCJGaW5hbGx5IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBgZmluYWxseWAgbm9kZTsgb25seSBtYWtlcyBzZW5zZSBhcyBwYXJ0IG9mIGEgYHRyeWAgc3RhdGVtZW50In0sZGUpLFZlPXIoIkRlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLHskZG9jdW1lbnRhdGlvbjoiQmFzZSBjbGFzcyBmb3IgYHZhcmAgbm9kZXMgKHZhcmlhYmxlIGRlY2xhcmF0aW9ucy9pbml0aWFsaXphdGlvbnMpIiwkcHJvcGRvYzp7ZGVmaW5pdGlvbnM6IltBU1RfVmFyRGVmKl0gYXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19LGNlKSxIZT1yKCJWYXIiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGB2YXJgIHN0YXRlbWVudCJ9LFZlKSwkZT1yKCJWYXJEZWYiLCJuYW1lIHZhbHVlIix7JGRvY3VtZW50YXRpb246IkEgdmFyaWFibGUgZGVjbGFyYXRpb247IG9ubHkgYXBwZWFycyBpbiBhIEFTVF9EZWZpbml0aW9ucyBub2RlIiwkcHJvcGRvYzp7bmFtZToiW0FTVF9TeW1ib2xWYXJdIG5hbWUgb2YgdGhlIHZhcmlhYmxlIix2YWx1ZToiW0FTVF9Ob2RlP10gaW5pdGlhbGl6ZXIsIG9yIG51bGwgb2YgdGhlcmUncyBubyBpbml0aWFsaXplciJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5uYW1lLl93YWxrKGUpLHRoaXMudmFsdWUmJnRoaXMudmFsdWUuX3dhbGsoZSl9KX19KSxLZT1yKCJDYWxsIiwiZXhwcmVzc2lvbiBhcmdzIix7JGRvY3VtZW50YXRpb246IkEgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uIiwkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSBleHByZXNzaW9uIHRvIGludm9rZSBhcyBmdW5jdGlvbiIsYXJnczoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgYXJndW1lbnRzIn0sX3dhbGs6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsodCksdGhpcy5hcmdzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5fd2Fsayh0KX0pfSl9fSksR2U9cigiTmV3IixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gb2JqZWN0IGluc3RhbnRpYXRpb24uICBEZXJpdmVzIGZyb20gYSBmdW5jdGlvbiBjYWxsIHNpbmNlIGl0IGhhcyBleGFjdGx5IHRoZSBzYW1lIHByb3BlcnRpZXMifSxLZSksWWU9cigiU2VxdWVuY2UiLCJleHByZXNzaW9ucyIseyRkb2N1bWVudGF0aW9uOiJBIHNlcXVlbmNlIGV4cHJlc3Npb24gKGNvbW1hLXNlcGFyYXRlZCBleHByZXNzaW9ucykiLCRwcm9wZG9jOntleHByZXNzaW9uczoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgZXhwcmVzc2lvbnMgKGF0IGxlYXN0IHR3bykifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19KSxXZT1yKCJQcm9wQWNjZXNzIiwiZXhwcmVzc2lvbiBwcm9wZXJ0eSIseyRkb2N1bWVudGF0aW9uOidCYXNlIGNsYXNzIGZvciBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbnMsIGkuZS4gYGEuZm9vYCBvciBgYVsiZm9vIl1gJywkcHJvcGRvYzp7ZXhwcmVzc2lvbjoiW0FTVF9Ob2RlXSB0aGUg4oCcY29udGFpbmVy4oCdIGV4cHJlc3Npb24iLHByb3BlcnR5OiJbQVNUX05vZGV8c3RyaW5nXSB0aGUgcHJvcGVydHkgdG8gYWNjZXNzLiAgRm9yIEFTVF9Eb3QgdGhpcyBpcyBhbHdheXMgYSBwbGFpbiBzdHJpbmcsIHdoaWxlIGZvciBBU1RfU3ViIGl0J3MgYW4gYXJiaXRyYXJ5IEFTVF9Ob2RlIn19KSxRZT1yKCJEb3QiLG51bGwseyRkb2N1bWVudGF0aW9uOiJBIGRvdHRlZCBwcm9wZXJ0eSBhY2Nlc3MgZXhwcmVzc2lvbiIsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSl9KX19LFdlKSxaZT1yKCJTdWIiLG51bGwseyRkb2N1bWVudGF0aW9uOidJbmRleC1zdHlsZSBwcm9wZXJ0eSBhY2Nlc3MsIGkuZS4gYGFbImZvbyJdYCcsX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmV4cHJlc3Npb24uX3dhbGsoZSksdGhpcy5wcm9wZXJ0eS5fd2FsayhlKX0pfX0sV2UpLEplPXIoIlVuYXJ5Iiwib3BlcmF0b3IgZXhwcmVzc2lvbiIseyRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciB1bmFyeSBleHByZXNzaW9ucyIsJHByb3Bkb2M6e29wZXJhdG9yOiJbc3RyaW5nXSB0aGUgb3BlcmF0b3IiLGV4cHJlc3Npb246IltBU1RfTm9kZV0gZXhwcmVzc2lvbiB0aGF0IHRoaXMgdW5hcnkgb3BlcmF0b3IgYXBwbGllcyB0byJ9LF93YWxrOmZ1bmN0aW9uKGUpe3JldHVybiBlLl92aXNpdCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5leHByZXNzaW9uLl93YWxrKGUpfSl9fSksWGU9cigiVW5hcnlQcmVmaXgiLG51bGwseyRkb2N1bWVudGF0aW9uOiJVbmFyeSBwcmVmaXggZXhwcmVzc2lvbiwgaS5lLiBgdHlwZW9mIGlgIG9yIGArK2lgIn0sSmUpLGV0PXIoIlVuYXJ5UG9zdGZpeCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlVuYXJ5IHBvc3RmaXggZXhwcmVzc2lvbiwgaS5lLiBgaSsrYCJ9LEplKSx0dD1yKCJCaW5hcnkiLCJvcGVyYXRvciBsZWZ0IHJpZ2h0Iix7JGRvY3VtZW50YXRpb246IkJpbmFyeSBleHByZXNzaW9uLCBpLmUuIGBhICsgYmAiLCRwcm9wZG9jOntsZWZ0OiJbQVNUX05vZGVdIGxlZnQtaGFuZCBzaWRlIGV4cHJlc3Npb24iLG9wZXJhdG9yOiJbc3RyaW5nXSB0aGUgb3BlcmF0b3IiLHJpZ2h0OiJbQVNUX05vZGVdIHJpZ2h0LWhhbmQgc2lkZSBleHByZXNzaW9uIn0sX3dhbGs6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3Zpc2l0KHRoaXMsZnVuY3Rpb24oKXt0aGlzLmxlZnQuX3dhbGsoZSksdGhpcy5yaWdodC5fd2FsayhlKX0pfX0pLG50PXIoIkNvbmRpdGlvbmFsIiwiY29uZGl0aW9uIGNvbnNlcXVlbnQgYWx0ZXJuYXRpdmUiLHskZG9jdW1lbnRhdGlvbjoiQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiB1c2luZyB0aGUgdGVybmFyeSBvcGVyYXRvciwgaS5lLiBgYSA/IGIgOiBjYCIsJHByb3Bkb2M6e2NvbmRpdGlvbjoiW0FTVF9Ob2RlXSIsY29uc2VxdWVudDoiW0FTVF9Ob2RlXSIsYWx0ZXJuYXRpdmU6IltBU1RfTm9kZV0ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuY29uZGl0aW9uLl93YWxrKGUpLHRoaXMuY29uc2VxdWVudC5fd2FsayhlKSx0aGlzLmFsdGVybmF0aXZlLl93YWxrKGUpfSl9fSkscnQ9cigiQXNzaWduIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gYXNzaWdubWVudCBleHByZXNzaW9uIOKAlCBgYSA9IGIgKyA1YCJ9LHR0KSxpdD1yKCJBcnJheSIsImVsZW1lbnRzIix7JGRvY3VtZW50YXRpb246IkFuIGFycmF5IGxpdGVyYWwiLCRwcm9wZG9jOntlbGVtZW50czoiW0FTVF9Ob2RlKl0gYXJyYXkgb2YgZWxlbWVudHMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtlLl93YWxrKHQpfSl9KX19KSxvdD1yKCJPYmplY3QiLCJwcm9wZXJ0aWVzIix7JGRvY3VtZW50YXRpb246IkFuIG9iamVjdCBsaXRlcmFsIiwkcHJvcGRvYzp7cHJvcGVydGllczoiW0FTVF9PYmplY3RQcm9wZXJ0eSpdIGFycmF5IG9mIHByb3BlcnRpZXMifSxfd2FsazpmdW5jdGlvbih0KXtyZXR1cm4gdC5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuX3dhbGsodCl9KX0pfX0pLGF0PXIoIk9iamVjdFByb3BlcnR5Iiwia2V5IHZhbHVlIix7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGxpdGVyYWwgb2JqZWN0IHByb3BlcnRpZXMiLCRwcm9wZG9jOntrZXk6IltzdHJpbmd8QVNUX1N5bWJvbEFjY2Vzc29yXSBwcm9wZXJ0eSBuYW1lLiBGb3IgT2JqZWN0S2V5VmFsIHRoaXMgaXMgYSBzdHJpbmcuIEZvciBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoaXMgaXMgYW4gQVNUX1N5bWJvbEFjY2Vzc29yLiIsdmFsdWU6IltBU1RfTm9kZV0gcHJvcGVydHkgdmFsdWUuICBGb3IgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGlzIGlzIGFuIEFTVF9BY2Nlc3Nvci4ifSxfd2FsazpmdW5jdGlvbihlKXtyZXR1cm4gZS5fdmlzaXQodGhpcyxmdW5jdGlvbigpe3RoaXMudmFsdWUuX3dhbGsoZSl9KX19KSxzdD1yKCJPYmplY3RLZXlWYWwiLCJxdW90ZSIseyRkb2N1bWVudGF0aW9uOiJBIGtleTogdmFsdWUgb2JqZWN0IHByb3BlcnR5IiwkcHJvcGRvYzp7cXVvdGU6IltzdHJpbmddIHRoZSBvcmlnaW5hbCBxdW90ZSBjaGFyYWN0ZXIifX0sYXQpLFk9cigiT2JqZWN0U2V0dGVyIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQW4gb2JqZWN0IHNldHRlciBwcm9wZXJ0eSJ9LGF0KSxXPXIoIk9iamVjdEdldHRlciIsbnVsbCx7JGRvY3VtZW50YXRpb246IkFuIG9iamVjdCBnZXR0ZXIgcHJvcGVydHkifSxhdCksdXQ9cigiU3ltYm9sIiwic2NvcGUgbmFtZSB0aGVkZWYiLHskcHJvcGRvYzp7bmFtZToiW3N0cmluZ10gbmFtZSBvZiB0aGlzIHN5bWJvbCIsc2NvcGU6IltBU1RfU2NvcGUvU10gdGhlIGN1cnJlbnQgc2NvcGUgKG5vdCBuZWNlc3NhcmlseSB0aGUgZGVmaW5pdGlvbiBzY29wZSkiLHRoZWRlZjoiW1N5bWJvbERlZi9TXSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHN5bWJvbCJ9LCRkb2N1bWVudGF0aW9uOiJCYXNlIGNsYXNzIGZvciBhbGwgc3ltYm9scyJ9KSxRPXIoIlN5bWJvbEFjY2Vzc29yIixudWxsLHskZG9jdW1lbnRhdGlvbjoiVGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSBhY2Nlc3NvciAoc2V0dGVyL2dldHRlciBmdW5jdGlvbikifSx1dCksbHQ9cigiU3ltYm9sRGVjbGFyYXRpb24iLCJpbml0Iix7JGRvY3VtZW50YXRpb246IkEgZGVjbGFyYXRpb24gc3ltYm9sIChzeW1ib2wgaW4gdmFyLCBmdW5jdGlvbiBuYW1lIG9yIGFyZ3VtZW50LCBzeW1ib2wgaW4gY2F0Y2gpIn0sdXQpLGN0PXIoIlN5bWJvbFZhciIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBkZWZpbmluZyBhIHZhcmlhYmxlIn0sbHQpLGZ0PXIoIlN5bWJvbEZ1bmFyZyIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBmdW5jdGlvbiBhcmd1bWVudCJ9LGN0KSxwdD1yKCJTeW1ib2xEZWZ1biIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBkZWZpbmluZyBhIGZ1bmN0aW9uIn0sbHQpLGh0PXIoIlN5bWJvbExhbWJkYSIsbnVsbCx7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBmdW5jdGlvbiBleHByZXNzaW9uIn0sbHQpLGR0PXIoIlN5bWJvbENhdGNoIixudWxsLHskZG9jdW1lbnRhdGlvbjoiU3ltYm9sIG5hbWluZyB0aGUgZXhjZXB0aW9uIGluIGNhdGNoIn0sbHQpLFo9cigiTGFiZWwiLCJyZWZlcmVuY2VzIix7JGRvY3VtZW50YXRpb246IlN5bWJvbCBuYW1pbmcgYSBsYWJlbCAoZGVjbGFyYXRpb24pIiwkcHJvcGRvYzp7cmVmZXJlbmNlczoiW0FTVF9Mb29wQ29udHJvbCpdIGEgbGlzdCBvZiBub2RlcyByZWZlcnJpbmcgdG8gdGhpcyBsYWJlbCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLnJlZmVyZW5jZXM9W10sdGhpcy50aGVkZWY9dGhpc319LHV0KSxtdD1yKCJTeW1ib2xSZWYiLG51bGwseyRkb2N1bWVudGF0aW9uOiJSZWZlcmVuY2UgdG8gc29tZSBzeW1ib2wgKG5vdCBkZWZpbml0aW9uL2RlY2xhcmF0aW9uKSJ9LHV0KSxKPXIoIkxhYmVsUmVmIixudWxsLHskZG9jdW1lbnRhdGlvbjoiUmVmZXJlbmNlIHRvIGEgbGFiZWwgc3ltYm9sIn0sdXQpLGd0PXIoIlRoaXMiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYHRoaXNgIHN5bWJvbCJ9LHV0KSx2dD1yKCJDb25zdGFudCIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdGFudHMiLGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9fSksYnQ9cigiU3RyaW5nIiwidmFsdWUgcXVvdGUiLHskZG9jdW1lbnRhdGlvbjoiQSBzdHJpbmcgbGl0ZXJhbCIsJHByb3Bkb2M6e3ZhbHVlOiJbc3RyaW5nXSB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmciLHF1b3RlOiJbc3RyaW5nXSB0aGUgb3JpZ2luYWwgcXVvdGUgY2hhcmFjdGVyIn19LHZ0KSx5dD1yKCJOdW1iZXIiLCJ2YWx1ZSBsaXRlcmFsIix7JGRvY3VtZW50YXRpb246IkEgbnVtYmVyIGxpdGVyYWwiLCRwcm9wZG9jOnt2YWx1ZToiW251bWJlcl0gdGhlIG51bWVyaWMgdmFsdWUiLGxpdGVyYWw6IltzdHJpbmddIG51bWVyaWMgdmFsdWUgYXMgc3RyaW5nIChvcHRpb25hbCkifX0sdnQpLF90PXIoIlJlZ0V4cCIsInZhbHVlIix7JGRvY3VtZW50YXRpb246IkEgcmVnZXhwIGxpdGVyYWwiLCRwcm9wZG9jOnt2YWx1ZToiW1JlZ0V4cF0gdGhlIGFjdHVhbCByZWdleHAifX0sdnQpLGE9cigiQXRvbSIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGF0b21zIn0sdnQpLHd0PXIoIk51bGwiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYG51bGxgIGF0b20iLHZhbHVlOm51bGx9LGEpLEV0PXIoIk5hTiIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBpbXBvc3NpYmxlIHZhbHVlIix2YWx1ZTpOYU59LGEpLEF0PXIoIlVuZGVmaW5lZCIsbnVsbCx7JGRvY3VtZW50YXRpb246IlRoZSBgdW5kZWZpbmVkYCB2YWx1ZSIsdmFsdWU6dm9pZCAwfSxhKSx4dD1yKCJIb2xlIixudWxsLHskZG9jdW1lbnRhdGlvbjoiQSBob2xlIGluIGFuIGFycmF5Iix2YWx1ZTp2b2lkIDB9LGEpLGt0PXIoIkluZmluaXR5IixudWxsLHskZG9jdW1lbnRhdGlvbjoiVGhlIGBJbmZpbml0eWAgdmFsdWUiLHZhbHVlOjEvMH0sYSksQ3Q9cigiQm9vbGVhbiIsbnVsbCx7JGRvY3VtZW50YXRpb246IkJhc2UgY2xhc3MgZm9yIGJvb2xlYW5zIn0sYSksT3Q9cigiRmFsc2UiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYGZhbHNlYCBhdG9tIix2YWx1ZTohMX0sQ3QpLFN0PXIoIlRydWUiLG51bGwseyRkb2N1bWVudGF0aW9uOiJUaGUgYHRydWVgIGF0b20iLHZhbHVlOiEwfSxDdCk7ZnVuY3Rpb24gRHQoZSl7dGhpcy52aXNpdD1lLHRoaXMuc3RhY2s9W10sdGhpcy5kaXJlY3RpdmVzPU9iamVjdC5jcmVhdGUobnVsbCl9RHQucHJvdG90eXBlPXtfdmlzaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2goZSk7dmFyIG49dGhpcy52aXNpdChlLHQ/ZnVuY3Rpb24oKXt0LmNhbGwoZSl9Om5lKTtyZXR1cm4hbiYmdCYmdC5jYWxsKGUpLHRoaXMucG9wKCksbn0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTItKGV8fDApXX0scHVzaDpmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgT2U/dGhpcy5kaXJlY3RpdmVzPU9iamVjdC5jcmVhdGUodGhpcy5kaXJlY3RpdmVzKTplIGluc3RhbmNlb2YgcGUmJiF0aGlzLmRpcmVjdGl2ZXNbZS52YWx1ZV0mJih0aGlzLmRpcmVjdGl2ZXNbZS52YWx1ZV09ZSksdGhpcy5zdGFjay5wdXNoKGUpfSxwb3A6ZnVuY3Rpb24oKXt0aGlzLnN0YWNrLnBvcCgpaW5zdGFuY2VvZiBPZSYmKHRoaXMuZGlyZWN0aXZlcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5kaXJlY3RpdmVzKSl9LHNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX0sZmluZF9wYXJlbnQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuc3RhY2ssbj10Lmxlbmd0aDswPD0tLW47KXt2YXIgcj10W25dO2lmKHIgaW5zdGFuY2VvZiBlKXJldHVybiByfX0saGFzX2RpcmVjdGl2ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRpcmVjdGl2ZXNbZV07aWYodClyZXR1cm4gdDt2YXIgbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKG4gaW5zdGFuY2VvZiBrZSlmb3IodmFyIHI9MDtyPG4uYm9keS5sZW5ndGg7KytyKXt2YXIgaT1uLmJvZHlbcl07aWYoIShpIGluc3RhbmNlb2YgcGUpKWJyZWFrO2lmKGkudmFsdWU9PWUpcmV0dXJuIGl9fSxsb29wY29udHJvbF90YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGFjaztpZihlLmxhYmVsKWZvcih2YXIgbj10Lmxlbmd0aDswPD0tLW47KXtpZigocj10W25dKWluc3RhbmNlb2YgdmUmJnIubGFiZWwubmFtZT09ZS5sYWJlbC5uYW1lKXJldHVybiByLmJvZHl9ZWxzZSBmb3Iobj10Lmxlbmd0aDswPD0tLW47KXt2YXIgcjtpZigocj10W25dKWluc3RhbmNlb2YgYmV8fGUgaW5zdGFuY2VvZiBGZSYmciBpbnN0YW5jZW9mIE1lKXJldHVybiByfX0saW5fYm9vbGVhbl9jb250ZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5zZWxmKCksbj0wO2U9dGhpcy5wYXJlbnQobik7bisrKXtpZihlIGluc3RhbmNlb2YgaGV8fGUgaW5zdGFuY2VvZiBudCYmZS5jb25kaXRpb249PT10fHxlIGluc3RhbmNlb2YgeWUmJmUuY29uZGl0aW9uPT09dHx8ZSBpbnN0YW5jZW9mIEVlJiZlLmNvbmRpdGlvbj09PXR8fGUgaW5zdGFuY2VvZiBVZSYmZS5jb25kaXRpb249PT10fHxlIGluc3RhbmNlb2YgWGUmJiIhIj09ZS5vcGVyYXRvciYmZS5leHByZXNzaW9uPT09dClyZXR1cm4hMDtpZighKGUgaW5zdGFuY2VvZiB0dCYmKCImJiI9PWUub3BlcmF0b3J8fCJ8fCI9PWUub3BlcmF0b3IpfHxlIGluc3RhbmNlb2YgbnR8fGUudGFpbF9ub2RlKCk9PT10KSlyZXR1cm4hMTt0PWV9fX07dmFyIFg9ImJyZWFrIGNhc2UgY2F0Y2ggY29uc3QgY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkZWxldGUgZG8gZWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiBpZiBpbiBpbnN0YW5jZW9mIG5ldyByZXR1cm4gc3dpdGNoIHRocm93IHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCIsUz0iZmFsc2UgbnVsbCB0cnVlIixiPSJhYnN0cmFjdCBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZW51bSBleHBvcnQgZXh0ZW5kcyBmaW5hbCBmbG9hdCBnb3RvIGltcGxlbWVudHMgaW1wb3J0IGludCBpbnRlcmZhY2UgbGV0IGxvbmcgbmF0aXZlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHNob3J0IHN0YXRpYyBzdXBlciBzeW5jaHJvbml6ZWQgdGhpcyB0aHJvd3MgdHJhbnNpZW50IHZvbGF0aWxlIHlpZWxkICIrUysiICIrWCxOPSJyZXR1cm4gbmV3IGRlbGV0ZSB0aHJvdyBlbHNlIGNhc2UiO1g9YWUoWCksYj1hZShiKSxOPWFlKE4pLFM9YWUoUyk7dmFyIFA9YWUoZSgiKy0qJiU9PD4hP3x+XiIpKSxJPS9eMHhbMC05YS1mXSskL2ksej0vXjBbMC03XSskLyxqPWFlKFsiaW4iLCJpbnN0YW5jZW9mIiwidHlwZW9mIiwibmV3Iiwidm9pZCIsImRlbGV0ZSIsIisrIiwiLS0iLCIrIiwiLSIsIiEiLCJ+IiwiJiIsInwiLCJeIiwiKiIsIi8iLCIlIiwiPj4iLCI8PCIsIj4+PiIsIjwiLCI+IiwiPD0iLCI+PSIsIj09IiwiPT09IiwiIT0iLCIhPT0iLCI/IiwiPSIsIis9IiwiLT0iLCIvPSIsIio9IiwiJT0iLCI+Pj0iLCI8PD0iLCI+Pj49IiwifD0iLCJePSIsIiY9IiwiJiYiLCJ8fCJdKSxWPWFlKGUoIiDCoFxuXHJcdFxmXHbigIvigIDigIHigILigIPigITigIXigIbigIfigIjigInigIpcdTIwMjhcdTIwMjnigK/igZ/jgIBcdWZlZmYiKSksSD1hZShlKCJcblxyXHUyMDI4XHUyMDI5IikpLGVlPWFlKGUoIlt7KCw7OiIpKSxUdD1hZShlKCJbXXt9KCksOzoiKSksaT17bGV0dGVyOm5ldyBSZWdFeHAoIltcXHUwMDQxLVxcdTAwNUFcXHUwMDYxLVxcdTAwN0FcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjJcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXSIpLGRpZ2l0Om5ldyBSZWdFeHAoIltcXHUwMDMwLVxcdTAwMzlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTldIiksbm9uX3NwYWNpbmdfbWFyazpuZXcgUmVnRXhwKCJbXFx1MDMwMC1cXHUwMzZGXFx1MDQ4My1cXHUwNDg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDYxMC1cXHUwNjFBXFx1MDY0Qi1cXHUwNjVFXFx1MDY3MFxcdTA2RDYtXFx1MDZEQ1xcdTA2REYtXFx1MDZFNFxcdTA2RTdcXHUwNkU4XFx1MDZFQS1cXHUwNkVEXFx1MDcxMVxcdTA3MzAtXFx1MDc0QVxcdTA3QTYtXFx1MDdCMFxcdTA3RUItXFx1MDdGM1xcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA5MDAtXFx1MDkwMlxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUUyXFx1MDlFM1xcdTBBMDFcXHUwQTAyXFx1MEEzQ1xcdTBBNDFcXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MVxcdTBBODJcXHUwQUJDXFx1MEFDMS1cXHUwQUM1XFx1MEFDN1xcdTBBQzhcXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxXFx1MEIzQ1xcdTBCM0ZcXHUwQjQxLVxcdTBCNDRcXHUwQjREXFx1MEI1NlxcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQzBcXHUwQkNEXFx1MEMzRS1cXHUwQzQwXFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDQkNcXHUwQ0JGXFx1MENDNlxcdTBDQ0NcXHUwQ0NEXFx1MENFMlxcdTBDRTNcXHUwRDQxLVxcdTBENDRcXHUwRDREXFx1MEQ2MlxcdTBENjNcXHUwRENBXFx1MEREMi1cXHUwREQ0XFx1MERENlxcdTBFMzFcXHUwRTM0LVxcdTBFM0FcXHUwRTQ3LVxcdTBFNEVcXHUwRUIxXFx1MEVCNC1cXHUwRUI5XFx1MEVCQlxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGNzEtXFx1MEY3RVxcdTBGODAtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY5MC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkQtXFx1MTAzMFxcdTEwMzItXFx1MTAzN1xcdTEwMzlcXHUxMDNBXFx1MTAzRFxcdTEwM0VcXHUxMDU4XFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNzEtXFx1MTA3NFxcdTEwODJcXHUxMDg1XFx1MTA4NlxcdTEwOERcXHUxMDlEXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN0I3LVxcdTE3QkRcXHUxN0M2XFx1MTdDOS1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MjJcXHUxOTI3XFx1MTkyOFxcdTE5MzJcXHUxOTM5LVxcdTE5M0JcXHUxQTE3XFx1MUExOFxcdTFBNTZcXHUxQTU4LVxcdTFBNUVcXHUxQTYwXFx1MUE2MlxcdTFBNjUtXFx1MUE2Q1xcdTFBNzMtXFx1MUE3Q1xcdTFBN0ZcXHUxQjAwLVxcdTFCMDNcXHUxQjM0XFx1MUIzNi1cXHUxQjNBXFx1MUIzQ1xcdTFCNDJcXHUxQjZCLVxcdTFCNzNcXHUxQjgwXFx1MUI4MVxcdTFCQTItXFx1MUJBNVxcdTFCQThcXHUxQkE5XFx1MUMyQy1cXHUxQzMzXFx1MUMzNlxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRTBcXHUxQ0UyLVxcdTFDRThcXHUxQ0VEXFx1MURDMC1cXHUxREU2XFx1MURGRC1cXHUxREZGXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2RlxcdUE2N0NcXHVBNjdEXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODI1XFx1QTgyNlxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTFcXHVBOTgwLVxcdUE5ODJcXHVBOUIzXFx1QTlCNi1cXHVBOUI5XFx1QTlCQ1xcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBQjBcXHVBQUIyLVxcdUFBQjRcXHVBQUI3XFx1QUFCOFxcdUFBQkVcXHVBQUJGXFx1QUFDMVxcdUFCRTVcXHVBQkU4XFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZdIiksc3BhY2VfY29tYmluaW5nX21hcms6bmV3IFJlZ0V4cCgiW1xcdTA5MDNcXHUwOTNFLVxcdTA5NDBcXHUwOTQ5LVxcdTA5NENcXHUwOTRFXFx1MDk4MlxcdTA5ODNcXHUwOUJFLVxcdTA5QzBcXHUwOUM3XFx1MDlDOFxcdTA5Q0JcXHUwOUNDXFx1MDlEN1xcdTBBMDNcXHUwQTNFLVxcdTBBNDBcXHUwQTgzXFx1MEFCRS1cXHUwQUMwXFx1MEFDOVxcdTBBQ0JcXHUwQUNDXFx1MEIwMlxcdTBCMDNcXHUwQjNFXFx1MEI0MFxcdTBCNDdcXHUwQjQ4XFx1MEI0QlxcdTBCNENcXHUwQjU3XFx1MEJCRVxcdTBCQkZcXHUwQkMxXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDQ1xcdTBCRDdcXHUwQzAxLVxcdTBDMDNcXHUwQzQxLVxcdTBDNDRcXHUwQzgyXFx1MEM4M1xcdTBDQkVcXHUwQ0MwLVxcdTBDQzRcXHUwQ0M3XFx1MENDOFxcdTBDQ0FcXHUwQ0NCXFx1MENENVxcdTBDRDZcXHUwRDAyXFx1MEQwM1xcdTBEM0UtXFx1MEQ0MFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0Q1xcdTBENTdcXHUwRDgyXFx1MEQ4M1xcdTBEQ0YtXFx1MEREMVxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEYzRVxcdTBGM0ZcXHUwRjdGXFx1MTAyQlxcdTEwMkNcXHUxMDMxXFx1MTAzOFxcdTEwM0JcXHUxMDNDXFx1MTA1NlxcdTEwNTdcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDgzXFx1MTA4NFxcdTEwODctXFx1MTA4Q1xcdTEwOEZcXHUxMDlBLVxcdTEwOUNcXHUxN0I2XFx1MTdCRS1cXHUxN0M1XFx1MTdDN1xcdTE3QzhcXHUxOTIzLVxcdTE5MjZcXHUxOTI5LVxcdTE5MkJcXHUxOTMwXFx1MTkzMVxcdTE5MzMtXFx1MTkzOFxcdTE5QjAtXFx1MTlDMFxcdTE5QzhcXHUxOUM5XFx1MUExOS1cXHUxQTFCXFx1MUE1NVxcdTFBNTdcXHUxQTYxXFx1MUE2M1xcdTFBNjRcXHUxQTZELVxcdTFBNzJcXHUxQjA0XFx1MUIzNVxcdTFCM0JcXHUxQjNELVxcdTFCNDFcXHUxQjQzXFx1MUI0NFxcdTFCODJcXHUxQkExXFx1MUJBNlxcdTFCQTdcXHUxQkFBXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGMlxcdUE4MjNcXHVBODI0XFx1QTgyN1xcdUE4ODBcXHVBODgxXFx1QThCNC1cXHVBOEMzXFx1QTk1MlxcdUE5NTNcXHVBOTgzXFx1QTlCNFxcdUE5QjVcXHVBOUJBXFx1QTlCQlxcdUE5QkQtXFx1QTlDMFxcdUFBMkZcXHVBQTMwXFx1QUEzM1xcdUFBMzRcXHVBQTREXFx1QUE3QlxcdUFCRTNcXHVBQkU0XFx1QUJFNlxcdUFCRTdcXHVBQkU5XFx1QUJFQVxcdUFCRUNdIiksY29ubmVjdG9yX3B1bmN0dWF0aW9uOm5ldyBSZWdFeHAoIltcXHUwMDVGXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRjNGXSIpfTtmdW5jdGlvbiBCdChlKXtyZXR1cm4gOTc8PWUmJmU8PTEyMnx8NjU8PWUmJmU8PTkwfHwxNzA8PWUmJmkubGV0dGVyLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gUnQoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLmNoYXJDb2RlQXQoMCkpLDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBMdChlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPWUuY2hhckNvZGVBdCgwKSksNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIEZ0KGUpe3JldHVybiA0ODw9ZSYmZTw9NTd9ZnVuY3Rpb24gZihlKXtyZXR1cm4hYltlXSYmL15bYS16XyRdW2EtejAtOV8kXSokL2kudGVzdChlKX1mdW5jdGlvbiBxdChlKXtyZXR1cm4gMzY9PWV8fDk1PT1lfHxCdChlKX1mdW5jdGlvbiBVdChlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHF0KHQpfHxGdCh0KXx8ODIwND09dHx8ODIwNT09dHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGkubm9uX3NwYWNpbmdfbWFyay50ZXN0KGUpfHxpLnNwYWNlX2NvbWJpbmluZ19tYXJrLnRlc3QoZSl9KGUpfHxmdW5jdGlvbihlKXtyZXR1cm4gaS5jb25uZWN0b3JfcHVuY3R1YXRpb24udGVzdChlKX0oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiBpLmRpZ2l0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9KHQpfWZ1bmN0aW9uIE10KGUpe3JldHVybi9eW2Etel8kXVthLXowLTlfJF0qJC9pLnRlc3QoZSl9ZnVuY3Rpb24gTnQoZSx0LG4scixpKXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLmZpbGVuYW1lPXQsdGhpcy5saW5lPW4sdGhpcy5jb2w9cix0aGlzLnBvcz1pfWZ1bmN0aW9uIFB0KGUsdCxuLHIsaSl7dGhyb3cgbmV3IE50KGUsdCxuLHIsaSl9ZnVuY3Rpb24gSXQoZSx0LG4pe3JldHVybiBlLnR5cGU9PXQmJihudWxsPT1ufHxlLnZhbHVlPT1uKX0oKE50LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU50KS5wcm90b3R5cGUubmFtZT0iU3ludGF4RXJyb3IiLHQoTnQpO3ZhciB6dD17fTtmdW5jdGlvbiBqdChpLG8sYSxzKXt2YXIgdT17dGV4dDppLGZpbGVuYW1lOm8scG9zOjAsdG9rcG9zOjAsbGluZToxLHRva2xpbmU6MCxjb2w6MCx0b2tjb2w6MCxuZXdsaW5lX2JlZm9yZTohMSxyZWdleF9hbGxvd2VkOiExLGNvbW1lbnRzX2JlZm9yZTpbXSxkaXJlY3RpdmVzOnt9LGRpcmVjdGl2ZV9zdGFjazpbXX07ZnVuY3Rpb24gbCgpe3JldHVybiB1LnRleHQuY2hhckF0KHUucG9zKX1mdW5jdGlvbiBjKGUsdCl7dmFyIG49dS50ZXh0LmNoYXJBdCh1LnBvcysrKTtpZihlJiYhbil0aHJvdyB6dDtyZXR1cm4gSFtuXT8odS5uZXdsaW5lX2JlZm9yZT11Lm5ld2xpbmVfYmVmb3JlfHwhdCwrK3UubGluZSx1LmNvbD0wLHR8fCJcciIhPW58fCJcbiIhPWwoKXx8KCsrdS5wb3Msbj0iXG4iKSk6Kyt1LmNvbCxufWZ1bmN0aW9uIGYoZSl7Zm9yKDswPGUtLTspYygpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIHUudGV4dC5zdWJzdHIodS5wb3MsZS5sZW5ndGgpPT1lfWZ1bmN0aW9uIGgoKXt1LnRva2xpbmU9dS5saW5lLHUudG9rY29sPXUuY29sLHUudG9rcG9zPXUucG9zfXZhciBkPSExO2Z1bmN0aW9uIG0oZSx0LG4pe3UucmVnZXhfYWxsb3dlZD0ib3BlcmF0b3IiPT1lJiYhSHRbdF18fCJrZXl3b3JkIj09ZSYmTlt0XXx8InB1bmMiPT1lJiZlZVt0XSwicHVuYyI9PWUmJiIuIj09dD9kPSEwOm58fChkPSExKTt2YXIgcj17dHlwZTplLHZhbHVlOnQsbGluZTp1LnRva2xpbmUsY29sOnUudG9rY29sLHBvczp1LnRva3BvcyxlbmRsaW5lOnUubGluZSxlbmRjb2w6dS5jb2wsZW5kcG9zOnUucG9zLG5sYjp1Lm5ld2xpbmVfYmVmb3JlLGZpbGU6b307cmV0dXJuL14oPzpudW18c3RyaW5nfHJlZ2V4cCkkL2kudGVzdChlKSYmKHIucmF3PWkuc3Vic3RyaW5nKHIucG9zLHIuZW5kcG9zKSksbnx8KHIuY29tbWVudHNfYmVmb3JlPXUuY29tbWVudHNfYmVmb3JlLHIuY29tbWVudHNfYWZ0ZXI9dS5jb21tZW50c19iZWZvcmU9W10pLHUubmV3bGluZV9iZWZvcmU9ITEsbmV3IE8ocil9ZnVuY3Rpb24gZygpe2Zvcig7VltsKCldOyljKCl9ZnVuY3Rpb24gdihlKXtQdChlLG8sdS50b2tsaW5lLHUudG9rY29sLHUudG9rcG9zKX1mdW5jdGlvbiBiKHIpe3ZhciBpPSExLG89ITEsYT0hMSxzPSIuIj09cixlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPSIiLHI9MDsodD1sKCkpJiZlKHQscisrKTspbis9YygpO3JldHVybiBufShmdW5jdGlvbihlLHQpe3ZhciBuPWUuY2hhckNvZGVBdCgwKTtzd2l0Y2gobil7Y2FzZSAxMjA6Y2FzZSA4ODpyZXR1cm4hYSYmKGE9ITApO2Nhc2UgMTAxOmNhc2UgNjk6cmV0dXJuISFhfHwhaSYmKGk9bz0hMCk7Y2FzZSA0NTpyZXR1cm4gb3x8MD09dCYmIXI7Y2FzZSA0MzpyZXR1cm4gbztjYXNlIG89ITEsNDY6cmV0dXJuIShzfHxhfHxpKSYmKHM9ITApfXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gRnQoZSl8fEJ0KGUpfShuKX0pO3ImJihlPXIrZSksei50ZXN0KGUpJiZDLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmdigiTGVnYWN5IG9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIpO3ZhciB0PWZ1bmN0aW9uKGUpe2lmKEkudGVzdChlKSlyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMiksMTYpO2lmKHoudGVzdChlKSlyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMSksOCk7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gdD09ZT90OnZvaWQgMH0oZSk7aWYoIWlzTmFOKHQpKXJldHVybiBtKCJudW0iLHQpO3YoIkludmFsaWQgc3ludGF4OiAiK2UpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9YyghMCxlKTtzd2l0Y2godC5jaGFyQ29kZUF0KDApKXtjYXNlIDExMDpyZXR1cm4iXG4iO2Nhc2UgMTE0OnJldHVybiJcciI7Y2FzZSAxMTY6cmV0dXJuIlx0IjtjYXNlIDk4OnJldHVybiJcYiI7Y2FzZSAxMTg6cmV0dXJuIlx2IjtjYXNlIDEwMjpyZXR1cm4iXGYiO2Nhc2UgMTIwOnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4oMikpO2Nhc2UgMTE3OnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4oNCkpO2Nhc2UgMTA6cmV0dXJuIiI7Y2FzZSAxMzppZigiXG4iPT1sKCkpcmV0dXJuIGMoITAsZSksIiJ9cmV0dXJuIjAiPD10JiZ0PD0iNyI/ZnVuY3Rpb24oZSl7dmFyIHQ9bCgpOyIwIjw9dCYmdDw9IjciJiYoZSs9YyghMCkpWzBdPD0iMyImJiIwIjw9KHQ9bCgpKSYmdDw9IjciJiYoZSs9YyghMCkpO2lmKCIwIj09PWUpcmV0dXJuIlwwIjswPGUubGVuZ3RoJiZDLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmdigiTGVnYWN5IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZSw4KSl9KHQpOnR9ZnVuY3Rpb24gbihlKXtmb3IodmFyIHQ9MDswPGU7LS1lKXt2YXIgbj1wYXJzZUludChjKCEwKSwxNik7aXNOYU4obikmJnYoIkludmFsaWQgaGV4LWNoYXJhY3RlciBwYXR0ZXJuIGluIHN0cmluZyIpLHQ9dDw8NHxufXJldHVybiB0fXZhciBfPXQoIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnQiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1jKCksbj0iIjs7KXt2YXIgcj1jKCEwLCEwKTtpZigiXFwiPT1yKXI9eSghMCk7ZWxzZSBpZihIW3JdKXYoIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnQiKTtlbHNlIGlmKHI9PXQpYnJlYWs7bis9cn12YXIgaT1tKCJzdHJpbmciLG4pO3JldHVybiBpLnF1b3RlPWUsaX0pO2Z1bmN0aW9uIHcoZSl7dmFyIHQsbj11LnJlZ2V4X2FsbG93ZWQscj1mdW5jdGlvbigpe2Zvcih2YXIgZT11LnRleHQsdD11LnBvcyxuPXUudGV4dC5sZW5ndGg7dDxuOysrdCl7dmFyIHI9ZVt0XTtpZihIW3JdKXJldHVybiB0fXJldHVybi0xfSgpO3JldHVybi0xPT1yPyh0PXUudGV4dC5zdWJzdHIodS5wb3MpLHUucG9zPXUudGV4dC5sZW5ndGgpOih0PXUudGV4dC5zdWJzdHJpbmcodS5wb3MsciksdS5wb3M9ciksdS5jb2w9dS50b2tjb2wrKHUucG9zLXUudG9rcG9zKSx1LmNvbW1lbnRzX2JlZm9yZS5wdXNoKG0oZSx0LCEwKSksdS5yZWdleF9hbGxvd2VkPW4sQ312YXIgZT10KCJVbnRlcm1pbmF0ZWQgbXVsdGlsaW5lIGNvbW1lbnQiLGZ1bmN0aW9uKCl7dmFyIGU9dS5yZWdleF9hbGxvd2VkLHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj11LnRleHQuaW5kZXhPZihlLHUucG9zKTtpZih0JiYtMT09bil0aHJvdyB6dDtyZXR1cm4gbn0oIiovIiwhMCksbj11LnRleHQuc3Vic3RyaW5nKHUucG9zLHQpLnJlcGxhY2UoL1xyXG58XHJ8XHUyMDI4fFx1MjAyOS9nLCJcbiIpO3JldHVybiBmKG4ubGVuZ3RoKzIpLHUuY29tbWVudHNfYmVmb3JlLnB1c2gobSgiY29tbWVudDIiLG4sITApKSx1LnJlZ2V4X2FsbG93ZWQ9ZSxDfSk7ZnVuY3Rpb24gRSgpe2Zvcih2YXIgZSx0LG49ITEscj0iIixpPSExO251bGwhPShlPWwoKSk7KWlmKG4pInUiIT1lJiZ2KCJFeHBlY3RpbmcgVW5pY29kZUVzY2FwZVNlcXVlbmNlIC0tIHVYWFhYIiksVXQoZT15KCkpfHx2KCJVbmljb2RlIGNoYXI6ICIrZS5jaGFyQ29kZUF0KDApKyIgaXMgbm90IHZhbGlkIGluIGlkZW50aWZpZXIiKSxyKz1lLG49ITE7ZWxzZSBpZigiXFwiPT1lKWk9bj0hMCxjKCk7ZWxzZXtpZighVXQoZSkpYnJlYWs7cis9YygpfXJldHVybiBYW3JdJiZpJiYodD1yLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkscj0iXFx1IisiMDAwMCIuc3Vic3RyKHQubGVuZ3RoKSt0K3Iuc2xpY2UoMSkpLHJ9dmFyIEE9dCgiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ITEscj0hMTt0PWMoITApOylpZihIW3RdKXYoIlVuZXhwZWN0ZWQgbGluZSB0ZXJtaW5hdG9yIik7ZWxzZSBpZihuKWUrPSJcXCIrdCxuPSExO2Vsc2UgaWYoIlsiPT10KXI9ITAsZSs9dDtlbHNlIGlmKCJdIj09dCYmcilyPSExLGUrPXQ7ZWxzZXtpZigiLyI9PXQmJiFyKWJyZWFrOyJcXCI9PXQ/bj0hMDplKz10fXZhciBpPUUoKTt0cnl7dmFyIG89bmV3IFJlZ0V4cChlLGkpO3JldHVybiBvLnJhd19zb3VyY2U9ZSxtKCJyZWdleHAiLG8pfWNhdGNoKGUpe3YoZS5tZXNzYWdlKX19KTtmdW5jdGlvbiB4KGUpe3JldHVybiBtKCJvcGVyYXRvciIsZnVuY3Rpb24gZSh0KXtpZighbCgpKXJldHVybiB0O3ZhciBuPXQrbCgpO3JldHVybiBqW25dPyhjKCksZShuKSk6dH0oZXx8YygpKSl9ZnVuY3Rpb24gaygpe3N3aXRjaChjKCksbCgpKXtjYXNlIi8iOnJldHVybiBjKCksdygiY29tbWVudDEiKTtjYXNlIioiOnJldHVybiBjKCksZSgpfXJldHVybiB1LnJlZ2V4X2FsbG93ZWQ/QSgiIik6eCgiLyIpfWZ1bmN0aW9uIHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUpfWNhdGNoKGUpe2lmKGUhPT16dCl0aHJvdyBlO3YodCl9fX1mdW5jdGlvbiBDKGUpe2lmKG51bGwhPWUpcmV0dXJuIEEoZSk7Zm9yKHMmJjA9PXUucG9zJiZwKCIjISIpJiYoaCgpLGYoMiksdygiY29tbWVudDUiKSk7Oyl7aWYoZygpLGgoKSxhKXtpZihwKCJceDNjIS0tIikpe2YoNCksdygiY29tbWVudDMiKTtjb250aW51ZX1pZihwKCItLVx4M2UiKSYmdS5uZXdsaW5lX2JlZm9yZSl7ZigzKSx3KCJjb21tZW50NCIpO2NvbnRpbnVlfX12YXIgdD1sKCk7aWYoIXQpcmV0dXJuIG0oImVvZiIpO3ZhciBuPXQuY2hhckNvZGVBdCgwKTtzd2l0Y2gobil7Y2FzZSAzNDpjYXNlIDM5OnJldHVybiBfKHQpO2Nhc2UgNDY6cmV0dXJuIGMoKSxGdChsKCkuY2hhckNvZGVBdCgwKSk/YigiLiIpOm0oInB1bmMiLCIuIik7Y2FzZSA0Nzp2YXIgcj1rKCk7aWYocj09PUMpY29udGludWU7cmV0dXJuIHJ9aWYoRnQobikpcmV0dXJuIGIoKTtpZihUdFt0XSlyZXR1cm4gbSgicHVuYyIsYygpKTtpZihQW3RdKXJldHVybiB4KCk7aWYoOTI9PW58fHF0KG4pKXJldHVybiB2b2lkIDAsaT1FKCksZD9tKCJuYW1lIixpKTpTW2ldP20oImF0b20iLGkpOlhbaV0/altpXT9tKCJvcGVyYXRvciIsaSk6bSgia2V5d29yZCIsaSk6bSgibmFtZSIsaSk7YnJlYWt9dmFyIGk7digiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyIrdCsiJyIpfXJldHVybiBDLmNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih1PWUpLHV9LEMuYWRkX2RpcmVjdGl2ZT1mdW5jdGlvbihlKXt1LmRpcmVjdGl2ZV9zdGFja1t1LmRpcmVjdGl2ZV9zdGFjay5sZW5ndGgtMV0ucHVzaChlKSx2b2lkIDA9PT11LmRpcmVjdGl2ZXNbZV0/dS5kaXJlY3RpdmVzW2VdPTE6dS5kaXJlY3RpdmVzW2VdKyt9LEMucHVzaF9kaXJlY3RpdmVzX3N0YWNrPWZ1bmN0aW9uKCl7dS5kaXJlY3RpdmVfc3RhY2sucHVzaChbXSl9LEMucG9wX2RpcmVjdGl2ZXNfc3RhY2s9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dS5kaXJlY3RpdmVfc3RhY2tbdS5kaXJlY3RpdmVfc3RhY2subGVuZ3RoLTFdLHQ9MDt0PGUubGVuZ3RoO3QrKyl1LmRpcmVjdGl2ZXNbZVt0XV0tLTt1LmRpcmVjdGl2ZV9zdGFjay5wb3AoKX0sQy5oYXNfZGlyZWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiAwPHUuZGlyZWN0aXZlc1tlXX0sQ312YXIgVnQ9YWUoWyJ0eXBlb2YiLCJ2b2lkIiwiZGVsZXRlIiwiLS0iLCIrKyIsIiEiLCJ+IiwiLSIsIisiXSksSHQ9YWUoWyItLSIsIisrIl0pLCR0PWFlKFsiPSIsIis9IiwiLT0iLCIvPSIsIio9IiwiJT0iLCI+Pj0iLCI8PD0iLCI+Pj49IiwifD0iLCJePSIsIiY9Il0pLEt0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pZm9yKHZhciByPWVbbl0saT0wO2k8ci5sZW5ndGg7KytpKXRbcltpXV09bisxO3JldHVybiB0fShbWyJ8fCJdLFsiJiYiXSxbInwiXSxbIl4iXSxbIiYiXSxbIj09IiwiPT09IiwiIT0iLCIhPT0iXSxbIjwiLCI+IiwiPD0iLCI+PSIsImluIiwiaW5zdGFuY2VvZiJdLFsiPj4iLCI8PCIsIj4+PiJdLFsiKyIsIi0iXSxbIioiLCIvIiwiJSJdXSx7fSksR3Q9YWUoWyJhdG9tIiwibnVtIiwic3RyaW5nIiwicmVnZXhwIiwibmFtZSJdKTtmdW5jdGlvbiBZdChlLHUpe3U9JCh1LHtiYXJlX3JldHVybnM6ITEsZXhwcmVzc2lvbjohMSxmaWxlbmFtZTpudWxsLGh0bWw1X2NvbW1lbnRzOiEwLHNoZWJhbmc6ITAsc3RyaWN0OiExLHRvcGxldmVsOm51bGx9LCEwKTt2YXIgbD17aW5wdXQ6InN0cmluZyI9PXR5cGVvZiBlP2p0KGUsdS5maWxlbmFtZSx1Lmh0bWw1X2NvbW1lbnRzLHUuc2hlYmFuZyk6ZSx0b2tlbjpudWxsLHByZXY6bnVsbCxwZWVrZWQ6bnVsbCxpbl9mdW5jdGlvbjowLGluX2RpcmVjdGl2ZXM6ITAsaW5fbG9vcDowLGxhYmVsczpbXX07ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBJdChsLnRva2VuLGUsdCl9ZnVuY3Rpb24gZigpe3JldHVybiBsLnBlZWtlZHx8KGwucGVla2VkPWwuaW5wdXQoKSl9ZnVuY3Rpb24gcCgpe3JldHVybiBsLnByZXY9bC50b2tlbixsLnBlZWtlZD8obC50b2tlbj1sLnBlZWtlZCxsLnBlZWtlZD1udWxsKTpsLnRva2VuPWwuaW5wdXQoKSxsLmluX2RpcmVjdGl2ZXM9bC5pbl9kaXJlY3RpdmVzJiYoInN0cmluZyI9PWwudG9rZW4udHlwZXx8YygicHVuYyIsIjsiKSksbC50b2tlbn1mdW5jdGlvbiBoKCl7cmV0dXJuIGwucHJldn1mdW5jdGlvbiBkKGUsdCxuLHIpe3ZhciBpPWwuaW5wdXQuY29udGV4dCgpO1B0KGUsaS5maWxlbmFtZSxudWxsIT10P3Q6aS50b2tsaW5lLG51bGwhPW4/bjppLnRva2NvbCxudWxsIT1yP3I6aS50b2twb3MpfWZ1bmN0aW9uIG4oZSx0KXtkKHQsZS5saW5lLGUuY29sKX1mdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUrKHZvaWQgMD09PXQ/IiI6IiDCqyIrdCsiwrsiKX1mdW5jdGlvbiBtKGUpe251bGw9PWUmJihlPWwudG9rZW4pLG4oZSwiVW5leHBlY3RlZCB0b2tlbjogIityKGUudHlwZSxlLnZhbHVlKSl9ZnVuY3Rpb24gZyhlLHQpe2lmKGMoZSx0KSlyZXR1cm4gcCgpO24obC50b2tlbiwiVW5leHBlY3RlZCB0b2tlbjogIityKGwudG9rZW4udHlwZSxsLnRva2VuLnZhbHVlKSsiLCBleHBlY3RlZDogIityKGUsdCkpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGcoInB1bmMiLGUpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUubmxifHwhc2UoZS5jb21tZW50c19iZWZvcmUsZnVuY3Rpb24oZSl7cmV0dXJuIWUubmxifSl9ZnVuY3Rpb24geSgpe3JldHVybiF1LnN0cmljdCYmKGMoImVvZiIpfHxjKCJwdW5jIiwifSIpfHxiKGwudG9rZW4pKX1mdW5jdGlvbiBfKGUpe2MoInB1bmMiLCI7Iik/cCgpOmV8fHkoKXx8ZygicHVuYyIsIjsiKX1mdW5jdGlvbiB3KCl7digiKCIpO3ZhciBlPVYoITApO3JldHVybiB2KCIpIiksZX1mdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWwudG9rZW4sdD1yLmFwcGx5KG51bGwsYXJndW1lbnRzKSxuPWgoKTtyZXR1cm4gdC5zdGFydD1lLHQuZW5kPW4sdH19ZnVuY3Rpb24gRSgpeyhjKCJvcGVyYXRvciIsIi8iKXx8Yygib3BlcmF0b3IiLCIvPSIpKSYmKGwucGVla2VkPW51bGwsbC50b2tlbj1sLmlucHV0KGwudG9rZW4udmFsdWUuc3Vic3RyKDEpKSl9bC50b2tlbj1wKCk7dmFyIEE9dChmdW5jdGlvbihlKXtzd2l0Y2goRSgpLGwudG9rZW4udHlwZSl7Y2FzZSJzdHJpbmciOmlmKGwuaW5fZGlyZWN0aXZlcyl7dmFyIHQ9ZigpOy0xPT1sLnRva2VuLnJhdy5pbmRleE9mKCJcXCIpJiYoSXQodCwicHVuYyIsIjsiKXx8SXQodCwicHVuYyIsIn0iKXx8Yih0KXx8SXQodCwiZW9mIikpP2wuaW5wdXQuYWRkX2RpcmVjdGl2ZShsLnRva2VuLnZhbHVlKTpsLmluX2RpcmVjdGl2ZXM9ITF9dmFyIG49bC5pbl9kaXJlY3RpdmVzLHI9eCgpO3JldHVybiBuP25ldyBwZShyLmJvZHkpOnI7Y2FzZSJudW0iOmNhc2UicmVnZXhwIjpjYXNlIm9wZXJhdG9yIjpjYXNlImF0b20iOnJldHVybiB4KCk7Y2FzZSJuYW1lIjpyZXR1cm4gSXQoZigpLCJwdW5jIiwiOiIpP2Z1bmN0aW9uKCl7dmFyIHQ9VShaKTtzZShsLmxhYmVscyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT10Lm5hbWV9KXx8ZCgiTGFiZWwgIit0Lm5hbWUrIiBkZWZpbmVkIHR3aWNlIik7digiOiIpLGwubGFiZWxzLnB1c2godCk7dmFyIGU9QSgpO2wubGFiZWxzLnBvcCgpLGUgaW5zdGFuY2VvZiBiZXx8dC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIHFlJiYoZT1lLmxhYmVsLnN0YXJ0LGQoIkNvbnRpbnVlIGxhYmVsIGAiK3QubmFtZSsiYCByZWZlcnMgdG8gbm9uLUl0ZXJhdGlvblN0YXRlbWVudC4iLGUubGluZSxlLmNvbCxlLnBvcykpfSk7cmV0dXJuIG5ldyB2ZSh7Ym9keTplLGxhYmVsOnR9KX0oKTp4KCk7Y2FzZSJwdW5jIjpzd2l0Y2gobC50b2tlbi52YWx1ZSl7Y2FzZSJ7IjpyZXR1cm4gbmV3IG1lKHtzdGFydDpsLnRva2VuLGJvZHk6TygpLGVuZDpoKCl9KTtjYXNlIlsiOmNhc2UiKCI6cmV0dXJuIHgoKTtjYXNlIjsiOnJldHVybiBsLmluX2RpcmVjdGl2ZXM9ITEscCgpLG5ldyBnZTtkZWZhdWx0Om0oKX1jYXNlImtleXdvcmQiOnN3aXRjaChsLnRva2VuLnZhbHVlKXtjYXNlImJyZWFrIjpyZXR1cm4gcCgpLGsoRmUpO2Nhc2UiY29udGludWUiOnJldHVybiBwKCksayhxZSk7Y2FzZSJkZWJ1Z2dlciI6cmV0dXJuIHAoKSxfKCksbmV3IGZlO2Nhc2UiZG8iOnAoKTt2YXIgaT1IKEEpO2coImtleXdvcmQiLCJ3aGlsZSIpO3ZhciBvPXcoKTtyZXR1cm4gXyghMCksbmV3IF9lKHtib2R5OmksY29uZGl0aW9uOm99KTtjYXNlIndoaWxlIjpyZXR1cm4gcCgpLG5ldyB3ZSh7Y29uZGl0aW9uOncoKSxib2R5OkgoQSl9KTtjYXNlImZvciI6cmV0dXJuIHAoKSxmdW5jdGlvbigpe3YoIigiKTt2YXIgZT1udWxsO2lmKCFjKCJwdW5jIiwiOyIpJiYoZT1jKCJrZXl3b3JkIiwidmFyIik/KHAoKSxEKCEwKSk6VighMCwhMCksYygib3BlcmF0b3IiLCJpbiIpKSlyZXR1cm4gZSBpbnN0YW5jZW9mIEhlPzE8ZS5kZWZpbml0aW9ucy5sZW5ndGgmJmQoIk9ubHkgb25lIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFsbG93ZWQgaW4gZm9yLi5pbiBsb29wIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpOnooZSl8fGQoIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLi5pbiBsb29wIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpLHAoKSxmdW5jdGlvbihlKXt2YXIgdD1WKCEwKTtyZXR1cm4gdigiKSIpLG5ldyBBZSh7aW5pdDplLG9iamVjdDp0LGJvZHk6SChBKX0pfShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7digiOyIpO3ZhciB0PWMoInB1bmMiLCI7Iik/bnVsbDpWKCEwKTt2KCI7Iik7dmFyIG49YygicHVuYyIsIikiKT9udWxsOlYoITApO3JldHVybiB2KCIpIiksbmV3IEVlKHtpbml0OmUsY29uZGl0aW9uOnQsc3RlcDpuLGJvZHk6SChBKX0pfShlKX0oKTtjYXNlImZ1bmN0aW9uIjpyZXR1cm4hZSYmbC5pbnB1dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJmQoIkluIHN0cmljdCBtb2RlIGNvZGUsIGZ1bmN0aW9ucyBjYW4gb25seSBiZSBkZWNsYXJlZCBhdCB0b3AgbGV2ZWwgb3IgaW1tZWRpYXRlbHkgd2l0aGluIGFub3RoZXIgZnVuY3Rpb24uIikscCgpLEMoVGUpO2Nhc2UiaWYiOnJldHVybiBwKCksZnVuY3Rpb24oKXt2YXIgZT13KCksdD1BKCksbj1udWxsO2MoImtleXdvcmQiLCJlbHNlIikmJihwKCksbj1BKCkpO3JldHVybiBuZXcgVWUoe2NvbmRpdGlvbjplLGJvZHk6dCxhbHRlcm5hdGl2ZTpufSl9KCk7Y2FzZSJyZXR1cm4iOjAhPWwuaW5fZnVuY3Rpb258fHUuYmFyZV9yZXR1cm5zfHxkKCIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uIikscCgpO3ZhciBhPW51bGw7cmV0dXJuIGMoInB1bmMiLCI7Iik/cCgpOnkoKXx8KGE9VighMCksXygpKSxuZXcgUmUoe3ZhbHVlOmF9KTtjYXNlInN3aXRjaCI6cmV0dXJuIHAoKSxuZXcgTWUoe2V4cHJlc3Npb246dygpLGJvZHk6SChTKX0pO2Nhc2UidGhyb3ciOnAoKSxiKGwudG9rZW4pJiZkKCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgJ3Rocm93JyIpO2E9VighMCk7cmV0dXJuIF8oKSxuZXcgSyh7dmFsdWU6YX0pO2Nhc2UidHJ5IjpyZXR1cm4gcCgpLGZ1bmN0aW9uKCl7dmFyIGU9TygpLHQ9bnVsbCxuPW51bGw7aWYoYygia2V5d29yZCIsImNhdGNoIikpe3ZhciByPWwudG9rZW47cCgpLHYoIigiKTt2YXIgaT1VKGR0KTt2KCIpIiksdD1uZXcgemUoe3N0YXJ0OnIsYXJnbmFtZTppLGJvZHk6TygpLGVuZDpoKCl9KX1pZihjKCJrZXl3b3JkIiwiZmluYWxseSIpKXt2YXIgcj1sLnRva2VuO3AoKSxuPW5ldyBqZSh7c3RhcnQ6cixib2R5Ok8oKSxlbmQ6aCgpfSl9dHx8bnx8ZCgiTWlzc2luZyBjYXRjaC9maW5hbGx5IGJsb2NrcyIpO3JldHVybiBuZXcgSWUoe2JvZHk6ZSxiY2F0Y2g6dCxiZmluYWxseTpufSl9KCk7Y2FzZSJ2YXIiOnAoKTt2YXIgcz1EKCk7cmV0dXJuIF8oKSxzO2Nhc2Uid2l0aCI6cmV0dXJuIGwuaW5wdXQuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiZkKCJTdHJpY3QgbW9kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCIpLHAoKSxuZXcgeGUoe2V4cHJlc3Npb246dygpLGJvZHk6QSgpfSl9fW0oKX0pO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIG5ldyBoZSh7Ym9keTooZT1WKCEwKSxfKCksZSl9KX1mdW5jdGlvbiBrKGUpe3ZhciB0LG49bnVsbDt5KCl8fChuPVUoSiwhMCkpLG51bGwhPW4/KCh0PUcoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09bi5uYW1lfSxsLmxhYmVscykpfHxkKCJVbmRlZmluZWQgbGFiZWwgIituLm5hbWUpLG4udGhlZGVmPXQpOjA9PWwuaW5fbG9vcCYmZChlLlRZUEUrIiBub3QgaW5zaWRlIGEgbG9vcCBvciBzd2l0Y2giKSxfKCk7dmFyIHI9bmV3IGUoe2xhYmVsOm59KTtyZXR1cm4gdCYmdC5yZWZlcmVuY2VzLnB1c2gocikscn12YXIgQz1mdW5jdGlvbihlKXt2YXIgdD1lPT09VGUsbj1jKCJuYW1lIik/VSh0P3B0Omh0KTpudWxsO3QmJiFuJiZnKCJuYW1lIiksIW58fGU9PT1TZXx8biBpbnN0YW5jZW9mIGx0fHxtKGgoKSksdigiKCIpO2Zvcih2YXIgcj1bXSxpPSEwOyFjKCJwdW5jIiwiKSIpOylpP2k9ITE6digiLCIpLHIucHVzaChVKGZ0KSk7cCgpO3ZhciBvPWwuaW5fbG9vcCxhPWwubGFiZWxzOysrbC5pbl9mdW5jdGlvbixsLmluX2RpcmVjdGl2ZXM9ITAsbC5pbnB1dC5wdXNoX2RpcmVjdGl2ZXNfc3RhY2soKSxsLmluX2xvb3A9MCxsLmxhYmVscz1bXTt2YXIgcz1PKCEwKTtyZXR1cm4gbC5pbnB1dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJihuJiZxKG4pLHIuZm9yRWFjaChxKSksbC5pbnB1dC5wb3BfZGlyZWN0aXZlc19zdGFjaygpLC0tbC5pbl9mdW5jdGlvbixsLmluX2xvb3A9byxsLmxhYmVscz1hLG5ldyBlKHtuYW1lOm4sYXJnbmFtZXM6cixib2R5OnN9KX07ZnVuY3Rpb24gTyhlKXt2KCJ7Iik7Zm9yKHZhciB0PVtdOyFjKCJwdW5jIiwifSIpOyljKCJlb2YiKSYmZygicHVuYyIsIn0iKSx0LnB1c2goQShlKSk7cmV0dXJuIHAoKSx0fWZ1bmN0aW9uIFMoKXt2KCJ7Iik7Zm9yKHZhciBlLHQ9W10sbj1udWxsLHI9bnVsbDshYygicHVuYyIsIn0iKTspYygiZW9mIikmJmcoInB1bmMiLCJ9IiksYygia2V5d29yZCIsImNhc2UiKT8ociYmKHIuZW5kPWgoKSksbj1bXSxyPW5ldyBQZSh7c3RhcnQ6KGU9bC50b2tlbixwKCksZSksZXhwcmVzc2lvbjpWKCEwKSxib2R5Om59KSx0LnB1c2gociksdigiOiIpKTpjKCJrZXl3b3JkIiwiZGVmYXVsdCIpPyhyJiYoci5lbmQ9aCgpKSxuPVtdLHI9bmV3IE5lKHtzdGFydDooZT1sLnRva2VuLHAoKSx2KCI6IiksZSksYm9keTpufSksdC5wdXNoKHIpKToobnx8bSgpLG4ucHVzaChBKCkpKTtyZXR1cm4gciYmKHIuZW5kPWgoKSkscCgpLHR9dmFyIEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBIZSh7c3RhcnQ6aCgpLGRlZmluaXRpb25zOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTt0LnB1c2gobmV3ICRlKHtzdGFydDpsLnRva2VuLG5hbWU6VShjdCksdmFsdWU6Yygib3BlcmF0b3IiLCI9Iik/KHAoKSxWKCExLGUpKTpudWxsLGVuZDpoKCl9KSksYygicHVuYyIsIiwiKTspcCgpO3JldHVybiB0fShlKSxlbmQ6aCgpfSl9O3ZhciBzPWZ1bmN0aW9uKGUpe2lmKGMoIm9wZXJhdG9yIiwibmV3IikpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWwudG9rZW47Zygib3BlcmF0b3IiLCJuZXciKTt2YXIgbixyPXMoITEpO249YygicHVuYyIsIigiKT8ocCgpLFQoIikiKSk6W107dmFyIGk9bmV3IEdlKHtzdGFydDp0LGV4cHJlc3Npb246cixhcmdzOm4sZW5kOmgoKX0pO3JldHVybiBNKGkpLE4oaSxlKX0oZSk7dmFyIHQ9bC50b2tlbjtpZihjKCJwdW5jIikpe3N3aXRjaCh0LnZhbHVlKXtjYXNlIigiOnAoKTt2YXIgbj1WKCEwKSxyPXQuY29tbWVudHNfYmVmb3JlLmxlbmd0aDtpZihbXS51bnNoaWZ0LmFwcGx5KG4uc3RhcnQuY29tbWVudHNfYmVmb3JlLHQuY29tbWVudHNfYmVmb3JlKSx0LmNvbW1lbnRzX2JlZm9yZT1uLnN0YXJ0LmNvbW1lbnRzX2JlZm9yZSwwPT0odC5jb21tZW50c19iZWZvcmVfbGVuZ3RoPXIpJiYwPHQuY29tbWVudHNfYmVmb3JlLmxlbmd0aCl7dmFyIGk9dC5jb21tZW50c19iZWZvcmVbMF07aS5ubGJ8fChpLm5sYj10Lm5sYix0Lm5sYj0hMSl9dC5jb21tZW50c19hZnRlcj1uLnN0YXJ0LmNvbW1lbnRzX2FmdGVyLG4uc3RhcnQ9dCx2KCIpIik7dmFyIG89aCgpO3JldHVybiBvLmNvbW1lbnRzX2JlZm9yZT1uLmVuZC5jb21tZW50c19iZWZvcmUsW10ucHVzaC5hcHBseShuLmVuZC5jb21tZW50c19hZnRlcixvLmNvbW1lbnRzX2FmdGVyKSxvLmNvbW1lbnRzX2FmdGVyPW4uZW5kLmNvbW1lbnRzX2FmdGVyLG4uZW5kPW8sbiBpbnN0YW5jZW9mIEtlJiZNKG4pLE4obixlKTtjYXNlIlsiOnJldHVybiBOKEIoKSxlKTtjYXNlInsiOnJldHVybiBOKFIoKSxlKX1tKCl9aWYoYygia2V5d29yZCIsImZ1bmN0aW9uIikpe3AoKTt2YXIgYT1DKERlKTtyZXR1cm4gYS5zdGFydD10LGEuZW5kPWgoKSxOKGEsZSl9aWYoR3RbbC50b2tlbi50eXBlXSlyZXR1cm4gTihmdW5jdGlvbigpe3ZhciBlLHQ9bC50b2tlbjtzd2l0Y2godC50eXBlKXtjYXNlIm5hbWUiOmU9RihtdCk7YnJlYWs7Y2FzZSJudW0iOmU9bmV3IHl0KHtzdGFydDp0LGVuZDp0LHZhbHVlOnQudmFsdWV9KTticmVhaztjYXNlInN0cmluZyI6ZT1uZXcgYnQoe3N0YXJ0OnQsZW5kOnQsdmFsdWU6dC52YWx1ZSxxdW90ZTp0LnF1b3RlfSk7YnJlYWs7Y2FzZSJyZWdleHAiOmU9bmV3IF90KHtzdGFydDp0LGVuZDp0LHZhbHVlOnQudmFsdWV9KTticmVhaztjYXNlImF0b20iOnN3aXRjaCh0LnZhbHVlKXtjYXNlImZhbHNlIjplPW5ldyBPdCh7c3RhcnQ6dCxlbmQ6dH0pO2JyZWFrO2Nhc2UidHJ1ZSI6ZT1uZXcgU3Qoe3N0YXJ0OnQsZW5kOnR9KTticmVhaztjYXNlIm51bGwiOmU9bmV3IHd0KHtzdGFydDp0LGVuZDp0fSl9fXJldHVybiBwKCksZX0oKSxlKTttKCl9O2Z1bmN0aW9uIFQoZSx0LG4pe2Zvcih2YXIgcj0hMCxpPVtdOyFjKCJwdW5jIixlKSYmKHI/cj0hMTp2KCIsIiksIXR8fCFjKCJwdW5jIixlKSk7KWMoInB1bmMiLCIsIikmJm4/aS5wdXNoKG5ldyB4dCh7c3RhcnQ6bC50b2tlbixlbmQ6bC50b2tlbn0pKTppLnB1c2goVighMSkpO3JldHVybiBwKCksaX12YXIgQj10KGZ1bmN0aW9uKCl7cmV0dXJuIHYoIlsiKSxuZXcgaXQoe2VsZW1lbnRzOlQoIl0iLCF1LnN0cmljdCwhMCl9KX0pLGE9dChmdW5jdGlvbigpe3JldHVybiBDKFNlKX0pLFI9dChmdW5jdGlvbigpe3YoInsiKTtmb3IodmFyIGU9ITAsdD1bXTshYygicHVuYyIsIn0iKSYmKGU/ZT0hMTp2KCIsIiksdS5zdHJpY3R8fCFjKCJwdW5jIiwifSIpKTspe3ZhciBuPWwudG9rZW4scj1uLnR5cGUsaT1MKCk7aWYoIm5hbWUiPT1yJiYhYygicHVuYyIsIjoiKSl7dmFyIG89bmV3IFEoe3N0YXJ0OmwudG9rZW4sbmFtZToiIitMKCksZW5kOmgoKX0pO2lmKCJnZXQiPT1pKXt0LnB1c2gobmV3IFcoe3N0YXJ0Om4sa2V5Om8sdmFsdWU6YSgpLGVuZDpoKCl9KSk7Y29udGludWV9aWYoInNldCI9PWkpe3QucHVzaChuZXcgWSh7c3RhcnQ6bixrZXk6byx2YWx1ZTphKCksZW5kOmgoKX0pKTtjb250aW51ZX19digiOiIpLHQucHVzaChuZXcgc3Qoe3N0YXJ0Om4scXVvdGU6bi5xdW90ZSxrZXk6IiIraSx2YWx1ZTpWKCExKSxlbmQ6aCgpfSkpfXJldHVybiBwKCksbmV3IG90KHtwcm9wZXJ0aWVzOnR9KX0pO2Z1bmN0aW9uIEwoKXt2YXIgZT1sLnRva2VuO3N3aXRjaChlLnR5cGUpe2Nhc2Uib3BlcmF0b3IiOlhbZS52YWx1ZV18fG0oKTtjYXNlIm51bSI6Y2FzZSJzdHJpbmciOmNhc2UibmFtZSI6Y2FzZSJrZXl3b3JkIjpjYXNlImF0b20iOnJldHVybiBwKCksZS52YWx1ZTtkZWZhdWx0Om0oKX19ZnVuY3Rpb24gRihlKXt2YXIgdD1sLnRva2VuLnZhbHVlO3JldHVybiBuZXcoInRoaXMiPT10P2d0OmUpKHtuYW1lOlN0cmluZyh0KSxzdGFydDpsLnRva2VuLGVuZDpsLnRva2VufSl9ZnVuY3Rpb24gcShlKXsiYXJndW1lbnRzIiE9ZS5uYW1lJiYiZXZhbCIhPWUubmFtZXx8ZCgiVW5leHBlY3RlZCAiK2UubmFtZSsiIGluIHN0cmljdCBtb2RlIixlLnN0YXJ0LmxpbmUsZS5zdGFydC5jb2wsZS5zdGFydC5wb3MpfWZ1bmN0aW9uIFUoZSx0KXtpZighYygibmFtZSIpKXJldHVybiB0fHxkKCJOYW1lIGV4cGVjdGVkIiksbnVsbDt2YXIgbj1GKGUpO3JldHVybiBsLmlucHV0Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmbiBpbnN0YW5jZW9mIGx0JiZxKG4pLHAoKSxufWZ1bmN0aW9uIE0oZSl7Zm9yKHZhciB0PWUuc3RhcnQsbj10LmNvbW1lbnRzX2JlZm9yZSxyPXVlKHQsImNvbW1lbnRzX2JlZm9yZV9sZW5ndGgiKT90LmNvbW1lbnRzX2JlZm9yZV9sZW5ndGg6bi5sZW5ndGg7MDw9LS1yOyl7dmFyIGk9bltyXTtpZigvW0AjXV9fUFVSRV9fLy50ZXN0KGkudmFsdWUpKXtlLnB1cmU9aTticmVha319fXZhciBOPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zdGFydDtpZihjKCJwdW5jIiwiLiIpKXJldHVybiBwKCksTihuZXcgUWUoe3N0YXJ0Om4sZXhwcmVzc2lvbjplLHByb3BlcnR5OmZ1bmN0aW9uKCl7YygibmFtZSIpfHxnKCJuYW1lIik7dmFyIGU9bC50b2tlbi52YWx1ZTtyZXR1cm4gcCgpLGV9KCksZW5kOmgoKX0pLHQpO2lmKGMoInB1bmMiLCJbIikpe3AoKTt2YXIgcj1WKCEwKTtyZXR1cm4gdigiXSIpLE4obmV3IFplKHtzdGFydDpuLGV4cHJlc3Npb246ZSxwcm9wZXJ0eTpyLGVuZDpoKCl9KSx0KX1pZih0JiZjKCJwdW5jIiwiKCIpKXtwKCk7dmFyIGk9bmV3IEtlKHtzdGFydDpuLGV4cHJlc3Npb246ZSxhcmdzOlQoIikiKSxlbmQ6aCgpfSk7cmV0dXJuIE0oaSksTihpLCEwKX1yZXR1cm4gZX0sUD1mdW5jdGlvbihlKXt2YXIgdD1sLnRva2VuO2lmKGMoIm9wZXJhdG9yIikmJlZ0W3QudmFsdWVdKXtwKCksRSgpO3ZhciBuPWkoWGUsdCxQKGUpKTtyZXR1cm4gbi5zdGFydD10LG4uZW5kPWgoKSxufWZvcih2YXIgcj1zKGUpO2MoIm9wZXJhdG9yIikmJkh0W2wudG9rZW4udmFsdWVdJiYhYihsLnRva2VuKTspKHI9aShldCxsLnRva2VuLHIpKS5zdGFydD10LHIuZW5kPWwudG9rZW4scCgpO3JldHVybiByfTtmdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj10LnZhbHVlO3N3aXRjaChyKXtjYXNlIisrIjpjYXNlIi0tIjp6KG4pfHxkKCJJbnZhbGlkIHVzZSBvZiAiK3IrIiBvcGVyYXRvciIsdC5saW5lLHQuY29sLHQucG9zKTticmVhaztjYXNlImRlbGV0ZSI6biBpbnN0YW5jZW9mIG10JiZsLmlucHV0Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmZCgiQ2FsbGluZyBkZWxldGUgb24gZXhwcmVzc2lvbiBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIsbi5zdGFydC5saW5lLG4uc3RhcnQuY29sLG4uc3RhcnQucG9zKX1yZXR1cm4gbmV3IGUoe29wZXJhdG9yOnIsZXhwcmVzc2lvbjpufSl9dmFyIEk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWMoIm9wZXJhdG9yIik/bC50b2tlbi52YWx1ZTpudWxsOyJpbiI9PXImJm4mJihyPW51bGwpO3ZhciBpPW51bGwhPXI/S3Rbcl06bnVsbDtpZihudWxsIT1pJiZ0PGkpe3AoKTt2YXIgbz1JKFAoITApLGksbik7cmV0dXJuIEkobmV3IHR0KHtzdGFydDplLnN0YXJ0LGxlZnQ6ZSxvcGVyYXRvcjpyLHJpZ2h0Om8sZW5kOm8uZW5kfSksdCxuKX1yZXR1cm4gZX07dmFyIG89ZnVuY3Rpb24oZSl7dmFyIHQ9bC50b2tlbixuPWZ1bmN0aW9uKGUpe3JldHVybiBJKFAoITApLDAsZSl9KGUpO2lmKGMoIm9wZXJhdG9yIiwiPyIpKXtwKCk7dmFyIHI9VighMSk7cmV0dXJuIHYoIjoiKSxuZXcgbnQoe3N0YXJ0OnQsY29uZGl0aW9uOm4sY29uc2VxdWVudDpyLGFsdGVybmF0aXZlOlYoITEsZSksZW5kOmgoKX0pfXJldHVybiBufTtmdW5jdGlvbiB6KGUpe3JldHVybiBlIGluc3RhbmNlb2YgV2V8fGUgaW5zdGFuY2VvZiBtdH12YXIgaj1mdW5jdGlvbihlKXt2YXIgdD1sLnRva2VuLG49byhlKSxyPWwudG9rZW4udmFsdWU7aWYoYygib3BlcmF0b3IiKSYmJHRbcl0pe2lmKHoobikpcmV0dXJuIHAoKSxuZXcgcnQoe3N0YXJ0OnQsbGVmdDpuLG9wZXJhdG9yOnIscmlnaHQ6aihlKSxlbmQ6aCgpfSk7ZCgiSW52YWxpZCBhc3NpZ25tZW50Iil9cmV0dXJuIG59LFY9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49bC50b2tlbixyPVtdO3IucHVzaChqKHQpKSxlJiZjKCJwdW5jIiwiLCIpOylwKCksZT0hMDtyZXR1cm4gMT09ci5sZW5ndGg/clswXTpuZXcgWWUoe3N0YXJ0Om4sZXhwcmVzc2lvbnM6cixlbmQ6ZigpfSl9O2Z1bmN0aW9uIEgoZSl7KytsLmluX2xvb3A7dmFyIHQ9ZSgpO3JldHVybi0tbC5pbl9sb29wLHR9cmV0dXJuIHUuZXhwcmVzc2lvbj8oRSgpLFYoITApKTpmdW5jdGlvbigpe3ZhciBlPWwudG9rZW4sdD1bXTtmb3IobC5pbnB1dC5wdXNoX2RpcmVjdGl2ZXNfc3RhY2soKTshYygiZW9mIik7KXQucHVzaChBKCEwKSk7bC5pbnB1dC5wb3BfZGlyZWN0aXZlc19zdGFjaygpO3ZhciBuPWgoKSxyPXUudG9wbGV2ZWw7cmV0dXJuIHI/KHIuYm9keT1yLmJvZHkuY29uY2F0KHQpLHIuZW5kPW4pOnI9bmV3IENlKHtzdGFydDplLGJvZHk6dCxlbmQ6bn0pLHJ9KCl9ZnVuY3Rpb24gV3QoZSx0KXtEdC5jYWxsKHRoaXMpLHRoaXMuYmVmb3JlPWUsdGhpcy5hZnRlcj10fWZ1bmN0aW9uIHMoZSx0LG4pe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5vcmlnPVt0XSx0aGlzLmluaXQ9bix0aGlzLmVsaW1pbmF0ZWQ9MCx0aGlzLnNjb3BlPWUsdGhpcy5yZWZlcmVuY2VzPVtdLHRoaXMucmVwbGFjZWQ9MCx0aGlzLmdsb2JhbD0hMSx0aGlzLm1hbmdsZWRfbmFtZT1udWxsLHRoaXMudW5kZWNsYXJlZD0hMSx0aGlzLmlkPXMubmV4dF9pZCsrfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1lLm5hbWVzX2luX3VzZTtpZighbil7ZS5uYW1lc19pbl91c2U9bj1PYmplY3QuY3JlYXRlKGUubWFuZ2xlZF9uYW1lc3x8bnVsbCksZS5jbmFtZV9ob2xlcz1bXTt2YXIgcj10LmNhY2hlJiZ0LmNhY2hlLnByb3BzO2UuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtlLnVubWFuZ2xlYWJsZSh0KSYmKG5bZS5uYW1lXT0hMCksZS5nbG9iYWwmJnImJnIuaGFzKGUubmFtZSkmJihuW3IuZ2V0KGUubmFtZSldPSEwKX0pfXJldHVybiBufWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGU9JChlLHtldmFsOiExLGllODohMSxrZWVwX2ZuYW1lczohMSxyZXNlcnZlZDpbXSx0b3BsZXZlbDohMX0pLEFycmF5LmlzQXJyYXkoZS5yZXNlcnZlZCl8fChlLnJlc2VydmVkPVtdKSxnKGUucmVzZXJ2ZWQsImFyZ3VtZW50cyIpLGUucmVzZXJ2ZWQuaGFzPWFlKGUucmVzZXJ2ZWQpLGV9V3QucHJvdG90eXBlPW5ldyBEdCxmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIG9lKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNmb3JtKHQsITApfSl9ZShsZSxuZSksZSh2ZSxmdW5jdGlvbihlLHQpe2UubGFiZWw9ZS5sYWJlbC50cmFuc2Zvcm0odCksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKGhlLGZ1bmN0aW9uKGUsdCl7ZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKGRlLGZ1bmN0aW9uKGUsdCl7ZS5ib2R5PW4oZS5ib2R5LHQpfSksZShfZSxmdW5jdGlvbihlLHQpe2UuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpLGUuY29uZGl0aW9uPWUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KX0pLGUod2UsZnVuY3Rpb24oZSx0KXtlLmNvbmRpdGlvbj1lLmNvbmRpdGlvbi50cmFuc2Zvcm0odCksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKEVlLGZ1bmN0aW9uKGUsdCl7ZS5pbml0JiYoZS5pbml0PWUuaW5pdC50cmFuc2Zvcm0odCkpLGUuY29uZGl0aW9uJiYoZS5jb25kaXRpb249ZS5jb25kaXRpb24udHJhbnNmb3JtKHQpKSxlLnN0ZXAmJihlLnN0ZXA9ZS5zdGVwLnRyYW5zZm9ybSh0KSksZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0odCl9KSxlKEFlLGZ1bmN0aW9uKGUsdCl7ZS5pbml0PWUuaW5pdC50cmFuc2Zvcm0odCksZS5vYmplY3Q9ZS5vYmplY3QudHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpfSksZSh4ZSxmdW5jdGlvbihlLHQpe2UuZXhwcmVzc2lvbj1lLmV4cHJlc3Npb24udHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpfSksZShCZSxmdW5jdGlvbihlLHQpe2UudmFsdWUmJihlLnZhbHVlPWUudmFsdWUudHJhbnNmb3JtKHQpKX0pLGUoTGUsZnVuY3Rpb24oZSx0KXtlLmxhYmVsJiYoZS5sYWJlbD1lLmxhYmVsLnRyYW5zZm9ybSh0KSl9KSxlKFVlLGZ1bmN0aW9uKGUsdCl7ZS5jb25kaXRpb249ZS5jb25kaXRpb24udHJhbnNmb3JtKHQpLGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKHQpLGUuYWx0ZXJuYXRpdmUmJihlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKHQpKX0pLGUoTWUsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KSxlLmJvZHk9bihlLmJvZHksdCl9KSxlKFBlLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCksZS5ib2R5PW4oZS5ib2R5LHQpfSksZShJZSxmdW5jdGlvbihlLHQpe2UuYm9keT1uKGUuYm9keSx0KSxlLmJjYXRjaCYmKGUuYmNhdGNoPWUuYmNhdGNoLnRyYW5zZm9ybSh0KSksZS5iZmluYWxseSYmKGUuYmZpbmFsbHk9ZS5iZmluYWxseS50cmFuc2Zvcm0odCkpfSksZSh6ZSxmdW5jdGlvbihlLHQpe2UuYXJnbmFtZT1lLmFyZ25hbWUudHJhbnNmb3JtKHQpLGUuYm9keT1uKGUuYm9keSx0KX0pLGUoVmUsZnVuY3Rpb24oZSx0KXtlLmRlZmluaXRpb25zPW4oZS5kZWZpbml0aW9ucyx0KX0pLGUoJGUsZnVuY3Rpb24oZSx0KXtlLm5hbWU9ZS5uYW1lLnRyYW5zZm9ybSh0KSxlLnZhbHVlJiYoZS52YWx1ZT1lLnZhbHVlLnRyYW5zZm9ybSh0KSl9KSxlKE9lLGZ1bmN0aW9uKGUsdCl7ZS5uYW1lJiYoZS5uYW1lPWUubmFtZS50cmFuc2Zvcm0odCkpLGUuYXJnbmFtZXM9bihlLmFyZ25hbWVzLHQpLGUuYm9keT1uKGUuYm9keSx0KX0pLGUoS2UsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KSxlLmFyZ3M9bihlLmFyZ3MsdCl9KSxlKFllLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9ucz1uKGUuZXhwcmVzc2lvbnMsdCl9KSxlKFFlLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCl9KSxlKFplLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uPWUuZXhwcmVzc2lvbi50cmFuc2Zvcm0odCksZS5wcm9wZXJ0eT1lLnByb3BlcnR5LnRyYW5zZm9ybSh0KX0pLGUoSmUsZnVuY3Rpb24oZSx0KXtlLmV4cHJlc3Npb249ZS5leHByZXNzaW9uLnRyYW5zZm9ybSh0KX0pLGUodHQsZnVuY3Rpb24oZSx0KXtlLmxlZnQ9ZS5sZWZ0LnRyYW5zZm9ybSh0KSxlLnJpZ2h0PWUucmlnaHQudHJhbnNmb3JtKHQpfSksZShudCxmdW5jdGlvbihlLHQpe2UuY29uZGl0aW9uPWUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KSxlLmNvbnNlcXVlbnQ9ZS5jb25zZXF1ZW50LnRyYW5zZm9ybSh0KSxlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKHQpfSksZShpdCxmdW5jdGlvbihlLHQpe2UuZWxlbWVudHM9bihlLmVsZW1lbnRzLHQpfSksZShvdCxmdW5jdGlvbihlLHQpe2UucHJvcGVydGllcz1uKGUucHJvcGVydGllcyx0KX0pLGUoYXQsZnVuY3Rpb24oZSx0KXtlLnZhbHVlPWUudmFsdWUudHJhbnNmb3JtKHQpfSl9KGZ1bmN0aW9uKGUsaSl7ZS5ERUZNRVRIT0QoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSx0KXt2YXIgbixyO3JldHVybiBlLnB1c2godGhpcyksZS5iZWZvcmUmJihuPWUuYmVmb3JlKHRoaXMsaSx0KSksdm9pZCAwPT09biYmKGkobj10aGlzLGUpLGUuYWZ0ZXImJnZvaWQgMCE9PShyPWUuYWZ0ZXIobix0KSkmJihuPXIpKSxlLnBvcCgpLG59KX0pLHMubmV4dF9pZD0xLHMucHJvdG90eXBlPXt1bm1hbmdsZWFibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fChlPXt9KSx0aGlzLmdsb2JhbCYmIWUudG9wbGV2ZWx8fHRoaXMudW5kZWNsYXJlZHx8IWUuZXZhbCYmdGhpcy5zY29wZS5waW5uZWQoKXx8ZS5rZWVwX2ZuYW1lcyYmKHRoaXMub3JpZ1swXWluc3RhbmNlb2YgaHR8fHRoaXMub3JpZ1swXWluc3RhbmNlb2YgcHQpfSxtYW5nbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYWNoZSYmZS5jYWNoZS5wcm9wcztpZih0aGlzLmdsb2JhbCYmdCYmdC5oYXModGhpcy5uYW1lKSl0aGlzLm1hbmdsZWRfbmFtZT10LmdldCh0aGlzLm5hbWUpO2Vsc2UgaWYoIXRoaXMubWFuZ2xlZF9uYW1lJiYhdGhpcy51bm1hbmdsZWFibGUoZSkpe3ZhciBuOyhuPXRoaXMucmVkZWZpbmVkKCkpP3RoaXMubWFuZ2xlZF9uYW1lPW4ubWFuZ2xlZF9uYW1lfHxuLm5hbWU6dGhpcy5tYW5nbGVkX25hbWU9ZnVuY3Rpb24oZSxyLHQpe3ZhciBuLGk9YyhlLHIpLG89ZS5jbmFtZV9ob2xlcyxhPU9iamVjdC5jcmVhdGUobnVsbCkscz1bZV07dC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY29wZTtkb3tpZighKHMuaW5kZXhPZih0KTwwKSlicmVhaztmb3IodmFyIG4gaW4gYyh0LHIpKWFbbl09ITA7cy5wdXNoKHQpfXdoaWxlKHQ9dC5wYXJlbnRfc2NvcGUpfSk7Zm9yKHZhciB1PTAsbD1vLmxlbmd0aDt1PGw7dSsrKWlmKG49bShvW3VdKSwhYVtuXSlyZXR1cm4gby5zcGxpY2UodSwxKSxlLm5hbWVzX2luX3VzZVtuXT0hMCxuO2Zvcig7OylpZihuPW0oKytlLmNuYW1lKSwhaVtuXSYmZihuKSYmIXIucmVzZXJ2ZWQuaGFzW25dKXtpZighYVtuXSlicmVhaztvLnB1c2goZS5jbmFtZSl9cmV0dXJuIGUubmFtZXNfaW5fdXNlW25dPSEwLG59KHRoaXMuc2NvcGUsZSx0aGlzKSx0aGlzLmdsb2JhbCYmdCYmdC5zZXQodGhpcy5uYW1lLHRoaXMubWFuZ2xlZF9uYW1lKX19LHJlZGVmaW5lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZnVuJiZ0aGlzLmRlZnVuLnZhcmlhYmxlcy5nZXQodGhpcy5uYW1lKX19LENlLkRFRk1FVEhPRCgiZmlndXJlX291dF9zY29wZSIsZnVuY3Rpb24oYSl7YT0kKGEse2NhY2hlOm51bGwsaWU4OiExfSk7dmFyIG89dGhpcyxzPW8ucGFyZW50X3Njb3BlPW51bGwsdT1udWxsLGw9bmV3IER0KGZ1bmN0aW9uKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHplKXt2YXIgbj1zO3JldHVybihzPW5ldyBrZShlKSkuaW5pdF9zY29wZV92YXJzKG4pLHQoKSxzPW4sITB9aWYoZSBpbnN0YW5jZW9mIGtlKXtlLmluaXRfc2NvcGVfdmFycyhzKTtuPXM7dmFyIHI9dTtyZXR1cm4gdT1zPWUsdCgpLHM9bix1PXIsITB9aWYoZSBpbnN0YW5jZW9mIHhlKWZvcih2YXIgaT1zO2k7aT1pLnBhcmVudF9zY29wZSlpLnVzZXNfd2l0aD0hMDtlbHNlIGlmKGUgaW5zdGFuY2VvZiB1dCYmKGUuc2NvcGU9cyksZSBpbnN0YW5jZW9mIFomJigoZS50aGVkZWY9ZSkucmVmZXJlbmNlcz1bXSksZSBpbnN0YW5jZW9mIHB0KShlLnNjb3BlPXUucGFyZW50X3Njb3BlLnJlc29sdmUoKSkuZGVmX2Z1bmN0aW9uKGUsdSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgaHQpe3ZhciBvPXUuZGVmX2Z1bmN0aW9uKGUsImFyZ3VtZW50cyI9PWUubmFtZT92b2lkIDA6dSk7YS5pZTgmJihvLmRlZnVuPXUucGFyZW50X3Njb3BlLnJlc29sdmUoKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgY3Qpe2lmKHUuZGVmX3ZhcmlhYmxlKGUsIlN5bWJvbFZhciI9PWUuVFlQRT9udWxsOnZvaWQgMCksdSE9PXMpe2UubWFya19lbmNsb3NlZChhKTtvPXMuZmluZF92YXJpYWJsZShlKTtlLnRoZWRlZiE9PW8mJihlLnRoZWRlZj1vKSxlLnJlZmVyZW5jZShhKX19ZWxzZSBlIGluc3RhbmNlb2YgZHQmJihzLmRlZl92YXJpYWJsZShlKS5kZWZ1bj11KX0pO28ud2FsayhsKSxvLmdsb2JhbHM9bmV3IEw7bD1uZXcgRHQoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIExlKXJldHVybiBlLmxhYmVsJiZlLmxhYmVsLnRoZWRlZi5yZWZlcmVuY2VzLnB1c2goZSksITA7aWYoZSBpbnN0YW5jZW9mIG10KXt2YXIgdD1lLm5hbWU7aWYoImV2YWwiPT10JiZsLnBhcmVudCgpaW5zdGFuY2VvZiBLZSlmb3IodmFyIG49ZS5zY29wZTtuJiYhbi51c2VzX2V2YWw7bj1uLnBhcmVudF9zY29wZSluLnVzZXNfZXZhbD0hMDt2YXIgcj1lLnNjb3BlLmZpbmRfdmFyaWFibGUodCk7cmV0dXJuIHI/ci5zY29wZSBpbnN0YW5jZW9mIE9lJiYiYXJndW1lbnRzIj09dCYmKHIuc2NvcGUudXNlc19hcmd1bWVudHM9ITApOnI9by5kZWZfZ2xvYmFsKGUpLGUudGhlZGVmPXIsZS5yZWZlcmVuY2UoYSksITB9aWYoZSBpbnN0YW5jZW9mIGR0KXt2YXIgaT1lLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTtpZihpKWZvcihuPWUuc2NvcGU7biYmKGcobi5lbmNsb3NlZCxpKSxuIT09aS5zY29wZSk7bj1uLnBhcmVudF9zY29wZSk7cmV0dXJuITB9fSk7ZnVuY3Rpb24gbihlLHQpe3ZhciBuPWUubmFtZSxyPWUudGhlZGVmLGk9dC5maW5kX3ZhcmlhYmxlKG4pfHxvLmdsb2JhbHMuZ2V0KG4pfHx0LmRlZl92YXJpYWJsZShlKTtyLm9yaWcuY29uY2F0KHIucmVmZXJlbmNlcykuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRoZWRlZj1pLGUucmVmZXJlbmNlKGEpfSl9by53YWxrKGwpLGEuaWU4JiZvLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBkdClyZXR1cm4gbihlLGUudGhlZGVmLmRlZnVuKSwhMDtpZihlIGluc3RhbmNlb2YgaHQpe3ZhciB0PWUudGhlZGVmO3JldHVybiBuKGUsZS5zY29wZS5wYXJlbnRfc2NvcGUpLGUudGhlZGVmLmluaXQ9dC5pbml0LCEwfX0pKX0pLENlLkRFRk1FVEhPRCgiZGVmX2dsb2JhbCIsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nbG9iYWxzLG49ZS5uYW1lO2lmKHQuaGFzKG4pKXJldHVybiB0LmdldChuKTt2YXIgcj1uZXcgcyh0aGlzLGUpO3JldHVybiByLnVuZGVjbGFyZWQ9ITAsci5nbG9iYWw9ITAsdC5zZXQobixyKSxyfSksa2UuREVGTUVUSE9EKCJpbml0X3Njb3BlX3ZhcnMiLGZ1bmN0aW9uKGUpe3RoaXMudmFyaWFibGVzPW5ldyBMLHRoaXMuZnVuY3Rpb25zPW5ldyBMLHRoaXMudXNlc193aXRoPSExLHRoaXMudXNlc19ldmFsPSExLHRoaXMucGFyZW50X3Njb3BlPWUsdGhpcy5lbmNsb3NlZD1bXSx0aGlzLmNuYW1lPS0xfSksT2UuREVGTUVUSE9EKCJpbml0X3Njb3BlX3ZhcnMiLGZ1bmN0aW9uKCl7a2UucHJvdG90eXBlLmluaXRfc2NvcGVfdmFycy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy51c2VzX2FyZ3VtZW50cz0hMSx0aGlzLmRlZl92YXJpYWJsZShuZXcgZnQoe25hbWU6ImFyZ3VtZW50cyIsc3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9KSl9KSx1dC5ERUZNRVRIT0QoIm1hcmtfZW5jbG9zZWQiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmRlZmluaXRpb24oKSxuPXRoaXMuc2NvcGU7biYmKGcobi5lbmNsb3NlZCx0KSxlLmtlZXBfZm5hbWVzJiZuLmZ1bmN0aW9ucy5lYWNoKGZ1bmN0aW9uKGUpe2codC5zY29wZS5lbmNsb3NlZCxlKX0pLG4hPT10LnNjb3BlKTtuPW4ucGFyZW50X3Njb3BlKTt9KSx1dC5ERUZNRVRIT0QoInJlZmVyZW5jZSIsZnVuY3Rpb24oZSl7dGhpcy5kZWZpbml0aW9uKCkucmVmZXJlbmNlcy5wdXNoKHRoaXMpLHRoaXMubWFya19lbmNsb3NlZChlKX0pLGtlLkRFRk1FVEhPRCgiZmluZF92YXJpYWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB1dCYmKGU9ZS5uYW1lKSx0aGlzLnZhcmlhYmxlcy5nZXQoZSl8fHRoaXMucGFyZW50X3Njb3BlJiZ0aGlzLnBhcmVudF9zY29wZS5maW5kX3ZhcmlhYmxlKGUpfSksa2UuREVGTUVUSE9EKCJkZWZfZnVuY3Rpb24iLGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5kZWZfdmFyaWFibGUoZSx0KTtyZXR1cm4oIW4uaW5pdHx8bi5pbml0IGluc3RhbmNlb2YgVGUpJiYobi5pbml0PXQpLHRoaXMuZnVuY3Rpb25zLnNldChlLm5hbWUsbiksbn0pLGtlLkRFRk1FVEhPRCgiZGVmX3ZhcmlhYmxlIixmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMudmFyaWFibGVzLmdldChlLm5hbWUpO3JldHVybiBuPyhuLm9yaWcucHVzaChlKSxuLmluaXQmJihuLnNjb3BlIT09ZS5zY29wZXx8bi5pbml0IGluc3RhbmNlb2YgRGUpJiYobi5pbml0PXQpKToobj1uZXcgcyh0aGlzLGUsdCksdGhpcy52YXJpYWJsZXMuc2V0KGUubmFtZSxuKSxuLmdsb2JhbD0hdGhpcy5wYXJlbnRfc2NvcGUpLGUudGhlZGVmPW59KSxPZS5ERUZNRVRIT0QoInJlc29sdmUiLEQpLGtlLkRFRk1FVEhPRCgicmVzb2x2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnRfc2NvcGV9KSxDZS5ERUZNRVRIT0QoInJlc29sdmUiLEQpLHV0LkRFRk1FVEhPRCgidW5tYW5nbGVhYmxlIixmdW5jdGlvbihlKXt2YXIgdD10aGlzLmRlZmluaXRpb24oKTtyZXR1cm4hdHx8dC51bm1hbmdsZWFibGUoZSl9KSxaLkRFRk1FVEhPRCgidW5tYW5nbGVhYmxlIixyZSksdXQuREVGTUVUSE9EKCJ1bnJlZmVyZW5jZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGVmaW5pdGlvbigpLnJlZmVyZW5jZXMubGVuZ3RoJiYhdGhpcy5zY29wZS5waW5uZWQoKX0pLHV0LkRFRk1FVEhPRCgiZGVmaW5pdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aGVkZWZ9KSx1dC5ERUZNRVRIT0QoImdsb2JhbCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZpbml0aW9uKCkuZ2xvYmFsfSksQ2UuREVGTUVUSE9EKCJtYW5nbGVfbmFtZXMiLGZ1bmN0aW9uKHMpe3M9cChzKTt2YXIgdT0tMTtpZihzLmNhY2hlJiZzLmNhY2hlLnByb3BzKXt2YXIgdD10aGlzLm1hbmdsZWRfbmFtZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtzLmNhY2hlLnByb3BzLmVhY2goZnVuY3Rpb24oZSl7dFtlXT0hMH0pfXZhciBsPVtdLGU9bmV3IER0KGZ1bmN0aW9uKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHZlKXt2YXIgbj11O3JldHVybiB0KCksdT1uLCEwfWlmKGUgaW5zdGFuY2VvZiBrZSlyZXR1cm4gdCgpLHMuY2FjaGUmJmUgaW5zdGFuY2VvZiBDZSYmZS5nbG9iYWxzLmVhY2goYyksZS52YXJpYWJsZXMuZWFjaChjKSwhMDtpZihlIGluc3RhbmNlb2YgWil7Zm9yKHZhciByOyFmKHI9bSgrK3UpKTspO3JldHVybiBlLm1hbmdsZWRfbmFtZT1yLCEwfWlmKCFzLmllOCYmZSBpbnN0YW5jZW9mIHplKXt2YXIgaT1lLmFyZ25hbWUuZGVmaW5pdGlvbigpLG89aS5yZWRlZmluZWQoKTtyZXR1cm4gbyYmKGwucHVzaChpKSxhKGUuYXJnbmFtZSksaS5yZWZlcmVuY2VzLmZvckVhY2goYSkpLHQoKSxvfHxjKGkpLCEwfWZ1bmN0aW9uIGEoZSl7ZS50aGVkZWY9byxlLnJlZmVyZW5jZShzKSxlLnRoZWRlZj1pfX0pO2Z1bmN0aW9uIGMoZSl7cy5yZXNlcnZlZC5oYXNbZS5uYW1lXXx8ZS5tYW5nbGUocyl9dGhpcy53YWxrKGUpLGwuZm9yRWFjaChjKX0pLENlLkRFRk1FVEhPRCgiZmluZF9jb2xsaWRpbmdfbmFtZXMiLGZ1bmN0aW9uKG4pe3ZhciByPW4uY2FjaGUmJm4uY2FjaGUucHJvcHMsdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBuLnJlc2VydmVkLmZvckVhY2goaSksdGhpcy5nbG9iYWxzLmVhY2gobyksdGhpcy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2Yga2UmJmUudmFyaWFibGVzLmVhY2gobyksZSBpbnN0YW5jZW9mIGR0JiZvKGUuZGVmaW5pdGlvbigpKX0pKSx0O2Z1bmN0aW9uIGkoZSl7dFtlXT0hMH1mdW5jdGlvbiBvKGUpe3ZhciB0PWUubmFtZTtpZihlLmdsb2JhbCYmciYmci5oYXModCkpdD1yLmdldCh0KTtlbHNlIGlmKCFlLnVubWFuZ2xlYWJsZShuKSlyZXR1cm47aSh0KX19KSxDZS5ERUZNRVRIT0QoImV4cGFuZF9uYW1lcyIsZnVuY3Rpb24obil7bS5yZXNldCgpLG0uc29ydCgpLG49cChuKTt2YXIgcj10aGlzLmZpbmRfY29sbGlkaW5nX25hbWVzKG4pLGk9MDtmdW5jdGlvbiB0KHQpe2lmKCEodC5nbG9iYWwmJm4uY2FjaGV8fHQudW5tYW5nbGVhYmxlKG4pfHxuLnJlc2VydmVkLmhhc1t0Lm5hbWVdKSl7dmFyIGU9dC5yZWRlZmluZWQoKTt0Lm5hbWU9ZT9lLm5hbWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU7ZT1tKGkrKykscltlXXx8IWYoZSk7KTtyZXR1cm4gZX0oKSx0Lm9yaWcuZm9yRWFjaChmdW5jdGlvbihlKXtlLm5hbWU9dC5uYW1lfSksdC5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5uYW1lPXQubmFtZX0pfX10aGlzLmdsb2JhbHMuZWFjaCh0KSx0aGlzLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBrZSYmZS52YXJpYWJsZXMuZWFjaCh0KSxlIGluc3RhbmNlb2YgZHQmJnQoZS5kZWZpbml0aW9uKCkpfSkpfSksbGUuREVGTUVUSE9EKCJ0YWlsX25vZGUiLEQpLFllLkRFRk1FVEhPRCgidGFpbF9ub2RlIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cHJlc3Npb25zW3RoaXMuZXhwcmVzc2lvbnMubGVuZ3RoLTFdfSksQ2UuREVGTUVUSE9EKCJjb21wdXRlX2NoYXJfZnJlcXVlbmN5IixmdW5jdGlvbihuKXtuPXAobiksbS5yZXNldCgpO3RyeXtsZS5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wcmludChlLHQpLHRoaXMgaW5zdGFuY2VvZiB1dCYmIXRoaXMudW5tYW5nbGVhYmxlKG4pP20uY29uc2lkZXIodGhpcy5uYW1lLC0xKTpuLnByb3BlcnRpZXMmJih0aGlzIGluc3RhbmNlb2YgUWU/bS5jb25zaWRlcih0aGlzLnByb3BlcnR5LC0xKTp0aGlzIGluc3RhbmNlb2YgWmUmJmZ1bmN0aW9uIGUodCl7dCBpbnN0YW5jZW9mIGJ0P20uY29uc2lkZXIodC52YWx1ZSwtMSk6dCBpbnN0YW5jZW9mIG50PyhlKHQuY29uc2VxdWVudCksZSh0LmFsdGVybmF0aXZlKSk6dCBpbnN0YW5jZW9mIFllJiZlKHQudGFpbF9ub2RlKCkpfSh0aGlzLnByb3BlcnR5KSl9LG0uY29uc2lkZXIodGhpcy5wcmludF90b19zdHJpbmcoKSwxKX1maW5hbGx5e2xlLnByb3RvdHlwZS5wcmludD1sZS5wcm90b3R5cGUuX3ByaW50fW0uc29ydCgpfSk7dmFyIG09ZnVuY3Rpb24oKXt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUubGVuZ3RoO248cjtuKyspe3ZhciBpPWVbbl07dC5wdXNoKGkpLG9baV09LS4wMSpufXJldHVybiB0fXZhciByLGksdD1lKCIwMTIzNDU2Nzg5Iiksbj1lKCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJF8iKTtmdW5jdGlvbiBhKCl7aT1PYmplY3QuY3JlYXRlKG8pfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gaVt0XS1pW2VdfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9IiIsbj01NDtmb3IoZSsrO3QrPXJbLS1lJW5dLGU9TWF0aC5mbG9vcihlL24pLG49NjQsMDxlOyk7cmV0dXJuIHR9cmV0dXJuIHUuY29uc2lkZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpW2Vbbl1dKz10fSx1LnNvcnQ9ZnVuY3Rpb24oKXtyPW4uc29ydChzKS5jb25jYXQodC5zb3J0KHMpKX0sKHUucmVzZXQ9YSkoKSx1fSgpLFF0PS9eJHxbO3tdW1xzXG5dKiQvO2Z1bmN0aW9uIFp0KGUpe3JldHVybiJjb21tZW50MiI9PWUudHlwZSYmL0BwcmVzZXJ2ZXxAbGljZW5zZXxAY2Nfb24vaS50ZXN0KGUudmFsdWUpfWZ1bmN0aW9uIEp0KHMpe3ZhciBlPSFzO3M9JChzLHthc2NpaV9vbmx5OiExLGJlYXV0aWZ5OiExLGJyYWNlczohMSxjb21tZW50czohMSxpZTg6ITEsaW5kZW50X2xldmVsOjQsaW5kZW50X3N0YXJ0OjAsaW5saW5lX3NjcmlwdDohMCxrZWVwX3F1b3RlZF9wcm9wczohMSxtYXhfbGluZV9sZW46ITEscHJlYW1ibGU6bnVsbCxwcmVzZXJ2ZV9saW5lOiExLHF1b3RlX2tleXM6ITEscXVvdGVfc3R5bGU6MCxzZW1pY29sb25zOiEwLHNoZWJhbmc6ITAsc291cmNlX21hcDpudWxsLHdlYmtpdDohMSx3aWR0aDo4MCx3cmFwX2lpZmU6ITF9LCEwKTt2YXIgdT1yZTtpZihzLmNvbW1lbnRzKXt2YXIgdD1zLmNvbW1lbnRzO2lmKCJzdHJpbmciPT10eXBlb2Ygcy5jb21tZW50cyYmL15cLy4qXC9bYS16QS1aXSokLy50ZXN0KHMuY29tbWVudHMpKXt2YXIgbj1zLmNvbW1lbnRzLmxhc3RJbmRleE9mKCIvIik7dD1uZXcgUmVnRXhwKHMuY29tbWVudHMuc3Vic3RyKDEsbi0xKSxzLmNvbW1lbnRzLnN1YnN0cihuKzEpKX11PXQgaW5zdGFuY2VvZiBSZWdFeHA/ZnVuY3Rpb24oZSl7cmV0dXJuImNvbW1lbnQ1IiE9ZS50eXBlJiZ0LnRlc3QoZS52YWx1ZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiJjb21tZW50NSIhPWUudHlwZSYmdCh0aGlzLGUpfToic29tZSI9PT10P1p0OmllfXZhciBpPTAsbz0wLGE9MSxsPTAsYz0iIixmPXMuYXNjaWlfb25seT9mdW5jdGlvbihlLG4pe3JldHVybiBlLnJlcGxhY2UoL1tcdTAwMDAtXHUwMDFmXHUwMDdmLVx1ZmZmZl0vZyxmdW5jdGlvbihlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO2lmKHQubGVuZ3RoPD0yJiYhbil7Zm9yKDt0Lmxlbmd0aDwyOyl0PSIwIit0O3JldHVybiJcXHgiK3R9Zm9yKDt0Lmxlbmd0aDw0Oyl0PSIwIit0O3JldHVybiJcXHUiK3R9KX06ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSIiLG49MCxyPWUubGVuZ3RoO248cjtuKyspUnQoZVtuXSkmJiFMdChlW24rMV0pfHxMdChlW25dKSYmIVJ0KGVbbi0xXSk/dCs9IlxcdSIrZS5jaGFyQ29kZUF0KG4pLnRvU3RyaW5nKDE2KTp0Kz1lW25dO3JldHVybiB0fTtmdW5jdGlvbiBwKGUsdCl7dmFyIG49ZnVuY3Rpb24obixlKXt2YXIgcj0wLGk9MDtmdW5jdGlvbiB0KCl7cmV0dXJuIiciK24ucmVwbGFjZSgvXHgyNy9nLCJcXCciKSsiJyJ9ZnVuY3Rpb24gbygpe3JldHVybiciJytuLnJlcGxhY2UoL1x4MjIvZywnXFwiJykrJyInfXN3aXRjaChuPW4ucmVwbGFjZSgvW1xcXGJcZlxuXHJcdlx0XHgyMlx4MjdcdTIwMjhcdTIwMjlcMFx1ZmVmZl0vZyxmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlJyInOnJldHVybisrciwnIic7Y2FzZSInIjpyZXR1cm4rK2ksIiciO2Nhc2UiXFwiOnJldHVybiJcXFxcIjtjYXNlIlxuIjpyZXR1cm4iXFxuIjtjYXNlIlxyIjpyZXR1cm4iXFxyIjtjYXNlIlx0IjpyZXR1cm4iXFx0IjtjYXNlIlxiIjpyZXR1cm4iXFxiIjtjYXNlIlxmIjpyZXR1cm4iXFxmIjtjYXNlIlx2IjpyZXR1cm4gcy5pZTg/IlxceDBCIjoiXFx2IjtjYXNlIlx1MjAyOCI6cmV0dXJuIlxcdTIwMjgiO2Nhc2UiXHUyMDI5IjpyZXR1cm4iXFx1MjAyOSI7Y2FzZSJcdWZlZmYiOnJldHVybiJcXHVmZWZmIjtjYXNlIlwwIjpyZXR1cm4vWzAtOV0vLnRlc3Qobi5jaGFyQXQodCsxKSk/IlxceDAwIjoiXFwwIn1yZXR1cm4gZX0pLG49ZihuKSxzLnF1b3RlX3N0eWxlKXtjYXNlIDE6cmV0dXJuIHQoKTtjYXNlIDI6cmV0dXJuIG8oKTtjYXNlIDM6cmV0dXJuIiciPT1lP3QoKTpvKCk7ZGVmYXVsdDpyZXR1cm4gaTxyP3QoKTpvKCl9fShlLHQpO3JldHVybiBzLmlubGluZV9zY3JpcHQmJihuPShuPShuPW4ucmVwbGFjZSgvPFx4MmYoc2NyaXB0KShbPlwvXHRcblxmXHIgXSkvZ2ksIjxcXC8kMSQyIikpLnJlcGxhY2UoL1x4M2MhLS0vZywiXFx4M2MhLS0iKSkucmVwbGFjZSgvLS1ceDNlL2csIi0tXFx4M2UiKSksbn1mdW5jdGlvbiByKGUpe3JldHVybiBmdW5jdGlvbiBlKHQsbil7aWYobjw9MClyZXR1cm4iIjtpZigxPT1uKXJldHVybiB0O3ZhciByPWUodCxuPj4xKTtyZXR1cm4gcis9ciwxJm4/cit0OnJ9KCIgIixzLmluZGVudF9zdGFydCtpLWUqcy5pbmRlbnRfbGV2ZWwpfXZhciBoLGQsbT0hMSxnPTAsdj0hMCxiPSExLHk9ITEsXz0hMSx3PSExLEU9LTEsQT0iIix4PXMuc291cmNlX21hcCYmW10saz14P2Z1bmN0aW9uKHQsbil7eC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UubGluZSs9dCxlLmNvbCs9bn0pfTpuZSxDPXg/ZnVuY3Rpb24oKXt4LmZvckVhY2goZnVuY3Rpb24odCl7dHJ5e3Muc291cmNlX21hcC5hZGQodC50b2tlbi5maWxlLHQubGluZSx0LmNvbCx0LnRva2VuLmxpbmUsdC50b2tlbi5jb2wsdC5uYW1lfHwibmFtZSIhPXQudG9rZW4udHlwZT90Lm5hbWU6dC50b2tlbi52YWx1ZSl9Y2F0Y2goZSl7bGUud2FybigiQ291bGRuJ3QgZmlndXJlIG91dCBtYXBwaW5nIGZvciB7ZmlsZX06e2xpbmV9LHtjb2x9IOKGkiB7Y2xpbmV9LHtjY29sfSBbe25hbWV9XSIse2ZpbGU6dC50b2tlbi5maWxlLGxpbmU6dC50b2tlbi5saW5lLGNvbDp0LnRva2VuLmNvbCxjbGluZTp0LmxpbmUsY2NvbDp0LmNvbCxuYW1lOnQubmFtZXx8IiJ9KX19KSx4PVtdfTpuZTtmdW5jdGlvbiBPKGUpe3ZhciB0PWMubGFzdEluZGV4T2YoIlxuIik7Zzx0JiYoZz10KTt2YXIgbj1jLnNsaWNlKDAsZykscj1jLnNsaWNlKGcpO2ZvcihrKGUsci5sZW5ndGgtbyksYSs9ZSxsKz1lLG89ci5sZW5ndGgsYz1uO2UtLTspYys9IlxuIjtjKz1yfXZhciBTPXMubWF4X2xpbmVfbGVuP2Z1bmN0aW9uKCl7dj9vPnMubWF4X2xpbmVfbGVuJiZsZS53YXJuKCJPdXRwdXQgZXhjZWVkcyB7bWF4X2xpbmVfbGVufSBjaGFyYWN0ZXJzIixzKToobz5zLm1heF9saW5lX2xlbiYmTygxKSx2PSEwLEMoKSl9Om5lLEQ9YWUoIiggWyArICogLyAtICwgLiIpO2Z1bmN0aW9uIFQoZSl7dmFyIHQ9KGU9U3RyaW5nKGUpKS5jaGFyQXQoMCk7XyYmdCYmKF89ITEsIlxuIiE9dCYmKFQoIlxuIiksUigpKSksdyYmdCYmKHc9ITEsL1tcczt9KV0vLnRlc3QodCl8fEIoKSksRT0tMTt2YXIgbj1BLmNoYXJBdChBLmxlbmd0aC0xKTt5JiYoeT0hMSwoIjoiPT1uJiYifSI9PXR8fCghdHx8Ijt9Ii5pbmRleE9mKHQpPDApJiYiOyIhPW4pJiYocy5zZW1pY29sb25zfHxEW3RdPyhjKz0iOyIsbysrLGwrKyk6KFMoKSxjKz0iXG4iLGwrKyxhKyssbz0wLC9eXHMrJC8udGVzdChlKSYmKHk9ITApKSxzLmJlYXV0aWZ5fHwoYj0hMSkpKSxiJiYoKFV0KG4pJiYoVXQodCl8fCJcXCI9PXQpfHwiLyI9PXQmJnQ9PW58fCgiKyI9PXR8fCItIj09dCkmJnQ9PUEpJiYoYys9IiAiLG8rKyxsKyspLGI9ITEpLGgmJih4LnB1c2goe3Rva2VuOmgsbmFtZTpkLGxpbmU6YSxjb2w6b30pLGg9ITEsdiYmQygpKSxjKz1lLG09IigiPT1lW2UubGVuZ3RoLTFdLGwrPWUubGVuZ3RoO3ZhciByPWUuc3BsaXQoL1xyP1xuLyksaT1yLmxlbmd0aC0xO2ErPWksbys9clswXS5sZW5ndGgsMDxpJiYoUygpLG89cltpXS5sZW5ndGgpLEE9ZX12YXIgQj1zLmJlYXV0aWZ5P2Z1bmN0aW9uKCl7VCgiICIpfTpmdW5jdGlvbigpe2I9ITB9LFI9cy5iZWF1dGlmeT9mdW5jdGlvbihlKXtzLmJlYXV0aWZ5JiZUKHIoZT8uNTowKSl9Om5lLEw9cy5iZWF1dGlmeT9mdW5jdGlvbihlLHQpeyEwPT09ZSYmKGU9TigpKTt2YXIgbj1pO2k9ZTt2YXIgcj10KCk7cmV0dXJuIGk9bixyfTpmdW5jdGlvbihlLHQpe3JldHVybiB0KCl9LEY9cy5tYXhfbGluZV9sZW58fHMucHJlc2VydmVfbGluZT9mdW5jdGlvbigpe1MoKSxnPWMubGVuZ3RoLHY9ITF9Om5lLHE9cy5iZWF1dGlmeT9mdW5jdGlvbigpe2lmKEU8MClyZXR1cm4gVCgiXG4iKTsiXG4iIT1jW0VdJiYoYz1jLnNsaWNlKDAsRSkrIlxuIitjLnNsaWNlKEUpLGwrKyxhKyspLEUrK306RixVPXMuYmVhdXRpZnk/ZnVuY3Rpb24oKXtUKCI7Iil9OmZ1bmN0aW9uKCl7eT0hMH07ZnVuY3Rpb24gTSgpe3k9ITEsVCgiOyIpfWZ1bmN0aW9uIE4oKXtyZXR1cm4gaStzLmluZGVudF9sZXZlbH1mdW5jdGlvbiBQKCl7cmV0dXJuIHZ8fFMoKSxjfWZ1bmN0aW9uIEkoKXt2YXIgZT1jLmxhc3RJbmRleE9mKCJcbiIpO3JldHVybi9eICokLy50ZXN0KGMuc2xpY2UoZSsxKSl9dmFyIHo9W107cmV0dXJue2dldDpQLHRvU3RyaW5nOlAsaW5kZW50OlIsaW5kZW50YXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gaX0sY3VycmVudF93aWR0aDpmdW5jdGlvbigpe3JldHVybiBvLWl9LHNob3VsZF9icmVhazpmdW5jdGlvbigpe3JldHVybiBzLndpZHRoJiZ0aGlzLmN1cnJlbnRfd2lkdGgoKT49cy53aWR0aH0saGFzX3BhcmVuczpmdW5jdGlvbigpe3JldHVybiBtfSxuZXdsaW5lOnEscHJpbnQ6VCxzcGFjZTpCLGNvbW1hOmZ1bmN0aW9uKCl7RigpLFQoIiwiKSxGKCksQigpfSxjb2xvbjpmdW5jdGlvbigpe1QoIjoiKSxCKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gQX0sc2VtaWNvbG9uOlUsZm9yY2Vfc2VtaWNvbG9uOk0sdG9fdXRmODpmLHByaW50X25hbWU6ZnVuY3Rpb24oZSl7VChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksZT1mKGUsITApfShlKSl9LHByaW50X3N0cmluZzpmdW5jdGlvbihlLHQsbil7dmFyIHI9cChlLHQpOyEwPT09biYmLTE9PT1yLmluZGV4T2YoIlxcIikmJihRdC50ZXN0KGMpfHxNKCksTSgpKSxUKHIpfSxlbmNvZGVfc3RyaW5nOnAsbmV4dF9pbmRlbnQ6Tix3aXRoX2luZGVudDpMLHdpdGhfYmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIFQoInsiKSxxKCksTChOKCksZnVuY3Rpb24oKXt0PWUoKX0pLFIoKSxUKCJ9IiksdH0sd2l0aF9wYXJlbnM6ZnVuY3Rpb24oZSl7VCgiKCIpLEYoKTt2YXIgdD1lKCk7cmV0dXJuIEYoKSxUKCIpIiksdH0sd2l0aF9zcXVhcmU6ZnVuY3Rpb24oZSl7VCgiWyIpLEYoKTt2YXIgdD1lKCk7cmV0dXJuIEYoKSxUKCJdIiksdH0sYWRkX21hcHBpbmc6eD9mdW5jdGlvbihlLHQpe2g9ZSxkPXR9Om5lLG9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0scHJlcGVuZF9jb21tZW50czplP25lOmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsdD1lLnN0YXJ0O2lmKHQmJighdC5jb21tZW50c19iZWZvcmV8fHQuY29tbWVudHNfYmVmb3JlLl9kdW1wZWQhPT1yKSl7dmFyIGk9dC5jb21tZW50c19iZWZvcmU7aWYoaXx8KGk9dC5jb21tZW50c19iZWZvcmU9W10pLGkuX2R1bXBlZD1yLGUgaW5zdGFuY2VvZiBCZSYmZS52YWx1ZSl7dmFyIG89bmV3IER0KGZ1bmN0aW9uKGUpe3ZhciB0PW8ucGFyZW50KCk7aWYoISh0IGluc3RhbmNlb2YgQmV8fHQgaW5zdGFuY2VvZiB0dCYmdC5sZWZ0PT09ZXx8IkNhbGwiPT10LlRZUEUmJnQuZXhwcmVzc2lvbj09PWV8fHQgaW5zdGFuY2VvZiBudCYmdC5jb25kaXRpb249PT1lfHx0IGluc3RhbmNlb2YgUWUmJnQuZXhwcmVzc2lvbj09PWV8fHQgaW5zdGFuY2VvZiBZZSYmdC5leHByZXNzaW9uc1swXT09PWV8fHQgaW5zdGFuY2VvZiBaZSYmdC5leHByZXNzaW9uPT09ZXx8dCBpbnN0YW5jZW9mIGV0KSlyZXR1cm4hMDt2YXIgbj1lLnN0YXJ0LmNvbW1lbnRzX2JlZm9yZTtuJiZuLl9kdW1wZWQhPT1yJiYobi5fZHVtcGVkPXIsaT1pLmNvbmNhdChuKSl9KTtvLnB1c2goZSksZS52YWx1ZS53YWxrKG8pfWlmKDA9PWwpezA8aS5sZW5ndGgmJnMuc2hlYmFuZyYmImNvbW1lbnQ1Ij09aVswXS50eXBlJiYoVCgiIyEiK2kuc2hpZnQoKS52YWx1ZSsiXG4iKSxSKCkpO3ZhciBuPXMucHJlYW1ibGU7biYmVChuLnJlcGxhY2UoL1xyXG4/fFtcblx1MjAyOFx1MjAyOV18XHMqJC9nLCJcbiIpKX1pZigwIT0oaT1pLmZpbHRlcih1LGUpKS5sZW5ndGgpe3ZhciBhPUkoKTtpLmZvckVhY2goZnVuY3Rpb24oZSx0KXthfHwoZS5ubGI/KFQoIlxuIiksUigpLGE9ITApOjA8dCYmQigpKSwvY29tbWVudFsxMzRdLy50ZXN0KGUudHlwZSk/KFQoIi8vIitlLnZhbHVlLnJlcGxhY2UoL1tAI11fX1BVUkVfXy9nLCIgIikrIlxuIiksUigpLGE9ITApOiJjb21tZW50MiI9PWUudHlwZSYmKFQoIi8qIitlLnZhbHVlLnJlcGxhY2UoL1tAI11fX1BVUkVfXy9nLCIgIikrIiovIiksYT0hMSl9KSxhfHwodC5ubGI/KFQoIlxuIiksUigpKTpCKCkpfX19LGFwcGVuZF9jb21tZW50czplfHx1PT09cmU/bmU6ZnVuY3Rpb24oZSxuKXt2YXIgdD1lLmVuZDtpZih0KXt2YXIgcj10W24/ImNvbW1lbnRzX2JlZm9yZSI6ImNvbW1lbnRzX2FmdGVyIl07aWYociYmci5fZHVtcGVkIT09dGhpcyYmKGUgaW5zdGFuY2VvZiBjZXx8c2UocixmdW5jdGlvbihlKXtyZXR1cm4hL2NvbW1lbnRbMTM0XS8udGVzdChlLnR5cGUpfSkpKXtyLl9kdW1wZWQ9dGhpczt2YXIgaT1jLmxlbmd0aDtyLmZpbHRlcih1LGUpLmZvckVhY2goZnVuY3Rpb24oZSx0KXt3PSExLF8/KFQoIlxuIiksUigpLF89ITEpOmUubmxiJiYoMDx0fHwhSSgpKT8oVCgiXG4iKSxSKCkpOigwPHR8fCFuKSYmQigpLC9jb21tZW50WzEzNF0vLnRlc3QoZS50eXBlKT8oVCgiLy8iK2UudmFsdWUucmVwbGFjZSgvW0AjXV9fUFVSRV9fL2csIiAiKSksXz0hMCk6ImNvbW1lbnQyIj09ZS50eXBlJiYoVCgiLyoiK2UudmFsdWUucmVwbGFjZSgvW0AjXV9fUFVSRV9fL2csIiAiKSsiKi8iKSx3PSEwKX0pLGMubGVuZ3RoPmkmJihFPWkpfX19LGxpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sY29sOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHBvczpmdW5jdGlvbigpe3JldHVybiBsfSxwdXNoX25vZGU6ZnVuY3Rpb24oZSl7ei5wdXNoKGUpfSxwb3Bfbm9kZTpzLnByZXNlcnZlX2xpbmU/ZnVuY3Rpb24oKXt2YXIgZT16LnBvcCgpO2Uuc3RhcnQmJmUuc3RhcnQubGluZT5hJiZPKGUuc3RhcnQubGluZS1hKX06ZnVuY3Rpb24oKXt6LnBvcCgpfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHpbei5sZW5ndGgtMi0oZXx8MCldfX19ZnVuY3Rpb24gWHQoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBYdCkpcmV0dXJuIG5ldyBYdChlLHQpO1d0LmNhbGwodGhpcyx0aGlzLmJlZm9yZSx0aGlzLmFmdGVyKSx0aGlzLm9wdGlvbnM9JChlLHthcmd1bWVudHM6IXQsYXNzaWdubWVudHM6IXQsYm9vbGVhbnM6IXQsY29sbGFwc2VfdmFyczohdCxjb21wYXJpc29uczohdCxjb25kaXRpb25hbHM6IXQsZGVhZF9jb2RlOiF0LGRpcmVjdGl2ZXM6IXQsZHJvcF9jb25zb2xlOiExLGRyb3BfZGVidWdnZXI6IXQsZXZhbHVhdGU6IXQsZXhwcmVzc2lvbjohMSxnbG9iYWxfZGVmczohMSxob2lzdF9mdW5zOiExLGhvaXN0X3Byb3BzOiF0LGhvaXN0X3ZhcnM6ITEsaWU4OiExLGlmX3JldHVybjohdCxpbmxpbmU6IXQsam9pbl92YXJzOiF0LGtlZXBfZmFyZ3M6ITAsa2VlcF9mbmFtZXM6ITEsa2VlcF9pbmZpbml0eTohMSxsb29wczohdCxuZWdhdGVfaWlmZTohdCxwYXNzZXM6MSxwcm9wZXJ0aWVzOiF0LHB1cmVfZ2V0dGVyczohdCYmInN0cmljdCIscHVyZV9mdW5jczpudWxsLHJlZHVjZV9mdW5jczohdCxyZWR1Y2VfdmFyczohdCxzZXF1ZW5jZXM6IXQsc2lkZV9lZmZlY3RzOiF0LHN3aXRjaGVzOiF0LHRvcF9yZXRhaW46bnVsbCx0b3BsZXZlbDohKCFlfHwhZS50b3BfcmV0YWluKSx0eXBlb2ZzOiF0LHVuc2FmZTohMSx1bnNhZmVfY29tcHM6ITEsdW5zYWZlX0Z1bmN0aW9uOiExLHVuc2FmZV9tYXRoOiExLHVuc2FmZV9wcm90bzohMSx1bnNhZmVfcmVnZXhwOiExLHVuc2FmZV91bmRlZmluZWQ6ITEsdW51c2VkOiF0LHdhcm5pbmdzOiExfSwhMCk7dmFyIG49dGhpcy5vcHRpb25zLmdsb2JhbF9kZWZzO2lmKCJvYmplY3QiPT10eXBlb2Ygbilmb3IodmFyIHIgaW4gbikvXkAvLnRlc3QocikmJnVlKG4scikmJihuW3Iuc2xpY2UoMSldPVl0KG5bcl0se2V4cHJlc3Npb246ITB9KSk7ITA9PT10aGlzLm9wdGlvbnMuaW5saW5lJiYodGhpcy5vcHRpb25zLmlubGluZT0zKTt2YXIgaT10aGlzLm9wdGlvbnMucHVyZV9mdW5jczsiZnVuY3Rpb24iPT10eXBlb2YgaT90aGlzLnB1cmVfZnVuY3M9aToic3RyaW5nIj09dHlwZW9mIGk/dGhpcy5wdXJlX2Z1bmNzPWZ1bmN0aW9uKGUpe3JldHVybiBpIT09ZS5leHByZXNzaW9uLnByaW50X3RvX3N0cmluZygpfTpBcnJheS5pc0FycmF5KGkpP3RoaXMucHVyZV9mdW5jcz1mdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleE9mKGUuZXhwcmVzc2lvbi5wcmludF90b19zdHJpbmcoKSk8MH06dGhpcy5wdXJlX2Z1bmNzPWllO3ZhciBvPXRoaXMub3B0aW9ucy50b3BfcmV0YWluO28gaW5zdGFuY2VvZiBSZWdFeHA/dGhpcy50b3BfcmV0YWluPWZ1bmN0aW9uKGUpe3JldHVybiBvLnRlc3QoZS5uYW1lKX06ImZ1bmN0aW9uIj09dHlwZW9mIG8/dGhpcy50b3BfcmV0YWluPW86byYmKCJzdHJpbmciPT10eXBlb2YgbyYmKG89by5zcGxpdCgvLC8pKSx0aGlzLnRvcF9yZXRhaW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PW8uaW5kZXhPZihlLm5hbWUpfSk7dmFyIGE9dGhpcy5vcHRpb25zLnRvcGxldmVsO3RoaXMudG9wbGV2ZWw9InN0cmluZyI9PXR5cGVvZiBhP3tmdW5jczovZnVuY3MvLnRlc3QoYSksdmFyczovdmFycy8udGVzdChhKX06e2Z1bmNzOmEsdmFyczphfTt2YXIgcz10aGlzLm9wdGlvbnMuc2VxdWVuY2VzO3RoaXMuc2VxdWVuY2VzX2xpbWl0PTE9PXM/ODAwOjB8cyx0aGlzLndhcm5pbmdzX3Byb2R1Y2VkPXt9fWZ1bmN0aW9uIHkoZSx0KXtlLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgWWU/eShlLnRhaWxfbm9kZSgpLHQpOmUgaW5zdGFuY2VvZiBidD90KGUudmFsdWUpOmUgaW5zdGFuY2VvZiBudCYmKHkoZS5jb25zZXF1ZW50LHQpLHkoZS5hbHRlcm5hdGl2ZSx0KSksITB9KSl9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPSh0PSQodCx7YnVpbHRpbnM6ITEsY2FjaGU6bnVsbCxkZWJ1ZzohMSxrZWVwX3F1b3RlZDohMSxvbmx5X2NhY2hlOiExLHJlZ2V4Om51bGwscmVzZXJ2ZWQ6bnVsbH0sITApKS5yZXNlcnZlZDtBcnJheS5pc0FycmF5KG4pfHwobj1bXSksdC5idWlsdGluc3x8ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtnKHQsZSl9WyJudWxsIiwidHJ1ZSIsImZhbHNlIiwiSW5maW5pdHkiLCItSW5maW5pdHkiLCJ1bmRlZmluZWQiXS5mb3JFYWNoKG4pLFtBcnJheSxCb29sZWFuLERhdGUsRXJyb3IsRnVuY3Rpb24sTWF0aCxOdW1iZXIsT2JqZWN0LFJlZ0V4cCxTdHJpbmddLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKG4pLGUucHJvdG90eXBlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlLnByb3RvdHlwZSkubWFwKG4pfSl9KG4pO3ZhciByLGk9LTE7dC5jYWNoZT8ocj10LmNhY2hlLnByb3BzKS5lYWNoKGZ1bmN0aW9uKGUpe2cobixlKX0pOnI9bmV3IEw7dmFyIG8sYT10LnJlZ2V4LHM9ITEhPT10LmRlYnVnO3MmJihvPSEwPT09dC5kZWJ1Zz8iIjp0LmRlYnVnKTt2YXIgdT1bXSxsPVtdO3JldHVybiBlLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBzdD9wKGUua2V5KTplIGluc3RhbmNlb2YgYXQ/cChlLmtleS5uYW1lKTplIGluc3RhbmNlb2YgUWU/cChlLnByb3BlcnR5KTplIGluc3RhbmNlb2YgWmU/eShlLnByb3BlcnR5LHApOmUgaW5zdGFuY2VvZiBLZSYmIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSI9PWUuZXhwcmVzc2lvbi5wcmludF90b19zdHJpbmcoKSYmeShlLmFyZ3NbMV0scCl9KSksZS50cmFuc2Zvcm0obmV3IFd0KGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBzdD9lLmtleT1oKGUua2V5KTplIGluc3RhbmNlb2YgYXQ/ZS5rZXkubmFtZT1oKGUua2V5Lm5hbWUpOmUgaW5zdGFuY2VvZiBRZT9lLnByb3BlcnR5PWgoZS5wcm9wZXJ0eSk6IXQua2VlcF9xdW90ZWQmJmUgaW5zdGFuY2VvZiBaZT9lLnByb3BlcnR5PWQoZS5wcm9wZXJ0eSk6ZSBpbnN0YW5jZW9mIEtlJiYiT2JqZWN0LmRlZmluZVByb3BlcnR5Ij09ZS5leHByZXNzaW9uLnByaW50X3RvX3N0cmluZygpJiYoZS5hcmdzWzFdPWQoZS5hcmdzWzFdKSl9KSk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4hKDA8PWwuaW5kZXhPZihlKSkmJighKDA8PW4uaW5kZXhPZihlKSkmJih0Lm9ubHlfY2FjaGU/ci5oYXMoZSk6IS9eLT9bMC05XSsoXC5bMC05XSspPyhlWystXVswLTldKyk/JC8udGVzdChlKSkpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIShhJiYhYS50ZXN0KGUpKSYmKCEoMDw9bi5pbmRleE9mKGUpKSYmKHIuaGFzKGUpfHwwPD11LmluZGV4T2YoZSkpKX1mdW5jdGlvbiBwKGUpe2MoZSkmJmcodSxlKSxmKGUpfHxnKGwsZSl9ZnVuY3Rpb24gaChlKXtpZighZihlKSlyZXR1cm4gZTt2YXIgdD1yLmdldChlKTtpZighdCl7aWYocyl7dmFyIG49Il8kIitlKyIkIitvKyJfIjtjKG4pJiYodD1uKX1pZighdClmb3IoOyFjKHQ9bSgrK2kpKTspO3Iuc2V0KGUsdCl9cmV0dXJuIHR9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS50cmFuc2Zvcm0obmV3IFd0KGZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBZZSl7dmFyIHQ9ZS5leHByZXNzaW9ucy5sZW5ndGgtMTtlLmV4cHJlc3Npb25zW3RdPWQoZS5leHByZXNzaW9uc1t0XSl9ZWxzZSBlIGluc3RhbmNlb2YgYnQ/ZS52YWx1ZT1oKGUudmFsdWUpOmUgaW5zdGFuY2VvZiBudCYmKGUuY29uc2VxdWVudD1kKGUuY29uc2VxdWVudCksZS5hbHRlcm5hdGl2ZT1kKGUuYWx0ZXJuYXRpdmUpKTtyZXR1cm4gZX0pKX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2UuREVGTUVUSE9EKCJfY29kZWdlbiIsdCl9dmFyIG89ITEsYT1udWxsLHM9bnVsbDtmdW5jdGlvbiBuKGUsdCl7QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7bihlLHQpfSk6ZS5ERUZNRVRIT0QoIm5lZWRzX3BhcmVucyIsdCl9ZnVuY3Rpb24gcihlLG4scix0KXt2YXIgaT1lLmxlbmd0aC0xO289dCxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXshMCE9PW98fGUgaW5zdGFuY2VvZiBwZXx8ZSBpbnN0YW5jZW9mIGdlfHxlIGluc3RhbmNlb2YgaGUmJmUuYm9keSBpbnN0YW5jZW9mIGJ0fHwobz0hMSksZSBpbnN0YW5jZW9mIGdlfHwoci5pbmRlbnQoKSxlLnByaW50KHIpLHQ9PWkmJm58fChyLm5ld2xpbmUoKSxuJiZyLm5ld2xpbmUoKSkpLCEwPT09byYmZSBpbnN0YW5jZW9mIGhlJiZlLmJvZHkgaW5zdGFuY2VvZiBidCYmKG89ITEpfSksbz0hMX1mdW5jdGlvbiBpKGUsdCl7dC5wcmludCgieyIpLHQud2l0aF9pbmRlbnQodC5uZXh0X2luZGVudCgpLGZ1bmN0aW9uKCl7dC5hcHBlbmRfY29tbWVudHMoZSwhMCl9KSx0LnByaW50KCJ9Iil9ZnVuY3Rpb24gdShlLHQsbil7MDxlLmJvZHkubGVuZ3RoP3Qud2l0aF9ibG9jayhmdW5jdGlvbigpe3IoZS5ib2R5LCExLHQsbil9KTppKGUsdCl9ZnVuY3Rpb24gbChlLHQsbil7ZS5wcmludCh0KSxuJiYoZS5zcGFjZSgpLG4ucHJpbnQoZSkpLGUuc2VtaWNvbG9uKCl9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHI9ITE7biYmZS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIShyfHxlIGluc3RhbmNlb2Yga2UpfHwoZSBpbnN0YW5jZW9mIHR0JiYiaW4iPT1lLm9wZXJhdG9yP3I9ITA6dm9pZCAwKX0pKSxlLnByaW50KHQscil9ZnVuY3Rpb24gZihlLHQsbil7bi5vcHRpb24oInF1b3RlX2tleXMiKT9uLnByaW50X3N0cmluZyhlKToiIisgK2U9PWUmJjA8PWU/bi5wcmludChkKGUpKTooYltlXT8hbi5vcHRpb24oImllOCIpOk10KGUpKT90JiZuLm9wdGlvbigia2VlcF9xdW90ZWRfcHJvcHMiKT9uLnByaW50X3N0cmluZyhlLHQpOm4ucHJpbnRfbmFtZShlKTpuLnByaW50X3N0cmluZyhlLHQpfWZ1bmN0aW9uIHAoZSx0KXt0Lm9wdGlvbigiYnJhY2VzIik/bShlLHQpOiFlfHxlIGluc3RhbmNlb2YgZ2U/dC5mb3JjZV9zZW1pY29sb24oKTplLnByaW50KHQpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gMDxlLmFyZ3MubGVuZ3RofHx0Lm9wdGlvbigiYmVhdXRpZnkiKX1mdW5jdGlvbiBkKGUpe3ZhciB0LG4scixpPWUudG9TdHJpbmcoMTApLnJlcGxhY2UoL14wXC4vLCIuIikucmVwbGFjZSgiZSsiLCJlIiksbz1baV07cmV0dXJuIE1hdGguZmxvb3IoZSk9PT1lJiYoZTwwP28ucHVzaCgiLTB4IisoLWUpLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpKTpvLnB1c2goIjB4IitlLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpKSksKHQ9L15cLjArLy5leGVjKGkpKT8obj10WzBdLmxlbmd0aCxyPWkuc2xpY2Uobiksby5wdXNoKHIrImUtIisoci5sZW5ndGgrbi0xKSkpOih0PS8wKyQvLmV4ZWMoaSkpPyhuPXRbMF0ubGVuZ3RoLG8ucHVzaChpLnNsaWNlKDAsLW4pKyJlIituKSk6KHQ9L14oXGQpXC4oXGQrKWUoLT9cZCspJC8uZXhlYyhpKSkmJm8ucHVzaCh0WzFdK3RbMl0rImUiKyh0WzNdLXRbMl0ubGVuZ3RoKSksZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMF0sbj10Lmxlbmd0aCxyPTE7cjxlLmxlbmd0aDsrK3IpZVtyXS5sZW5ndGg8biYmKG49KHQ9ZVtyXSkubGVuZ3RoKTtyZXR1cm4gdH0obyl9ZnVuY3Rpb24gbShlLHQpeyFlfHxlIGluc3RhbmNlb2YgZ2U/dC5wcmludCgie30iKTplIGluc3RhbmNlb2YgbWU/ZS5wcmludCh0KTp0LndpdGhfYmxvY2soZnVuY3Rpb24oKXt0LmluZGVudCgpLGUucHJpbnQodCksdC5uZXdsaW5lKCl9KX1mdW5jdGlvbiB0KGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuREVGTUVUSE9EKCJhZGRfc291cmNlX21hcCIsdCl9KX1sZS5ERUZNRVRIT0QoInByaW50IixmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLl9jb2RlZ2VuO2Z1bmN0aW9uIGkoKXtlLnByZXBlbmRfY29tbWVudHMobiksbi5hZGRfc291cmNlX21hcChlKSxyKG4sZSksZS5hcHBlbmRfY29tbWVudHMobil9biBpbnN0YW5jZW9mIGtlP2E9bjohcyYmbiBpbnN0YW5jZW9mIHBlJiYidXNlIGFzbSI9PW4udmFsdWUmJihzPWEpLGUucHVzaF9ub2RlKG4pLHR8fG4ubmVlZHNfcGFyZW5zKGUpP2Uud2l0aF9wYXJlbnMoaSk6aSgpLGUucG9wX25vZGUoKSxuPT09cyYmKHM9bnVsbCl9KSxsZS5ERUZNRVRIT0QoIl9wcmludCIsbGUucHJvdG90eXBlLnByaW50KSxsZS5ERUZNRVRIT0QoInByaW50X3RvX3N0cmluZyIsZnVuY3Rpb24oZSl7dmFyIHQ9SnQoZSk7cmV0dXJuIHRoaXMucHJpbnQodCksdC5nZXQoKX0pLG4obGUscmUpLG4oRGUsZnVuY3Rpb24oZSl7aWYoIWUuaGFzX3BhcmVucygpJiZGKGUpKXJldHVybiEwO3ZhciB0O2lmKGUub3B0aW9uKCJ3ZWJraXQiKSYmKCh0PWUucGFyZW50KCkpaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcykpcmV0dXJuITA7aWYoZS5vcHRpb24oIndyYXBfaWlmZSIpJiYoKHQ9ZS5wYXJlbnQoKSlpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT10aGlzKSlyZXR1cm4hMH0pLG4ob3QsZnVuY3Rpb24oZSl7cmV0dXJuIWUuaGFzX3BhcmVucygpJiZGKGUpfSksbihKZSxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO3JldHVybiB0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbj09PXRoaXN8fHQgaW5zdGFuY2VvZiBLZSYmdC5leHByZXNzaW9uPT09dGhpc30pLG4oWWUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtyZXR1cm4gdCBpbnN0YW5jZW9mIEtlfHx0IGluc3RhbmNlb2YgSmV8fHQgaW5zdGFuY2VvZiB0dHx8dCBpbnN0YW5jZW9mICRlfHx0IGluc3RhbmNlb2YgV2V8fHQgaW5zdGFuY2VvZiBpdHx8dCBpbnN0YW5jZW9mIGF0fHx0IGluc3RhbmNlb2YgbnR9KSxuKHR0LGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT10aGlzKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBKZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIHR0KXt2YXIgbj10Lm9wZXJhdG9yLHI9S3Rbbl0saT10aGlzLm9wZXJhdG9yLG89S3RbaV07aWYobzxyfHxyPT1vJiZ0aGlzPT09dC5yaWdodClyZXR1cm4hMH19KSxuKFdlLGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEdlJiZ0LmV4cHJlc3Npb249PT10aGlzKXt2YXIgbj0hMTtyZXR1cm4gdGhpcy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIShufHxlIGluc3RhbmNlb2Yga2UpfHwoZSBpbnN0YW5jZW9mIEtlP249ITA6dm9pZCAwKX0pKSxufX0pLG4oS2UsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtpZih0IGluc3RhbmNlb2YgR2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpcmV0dXJuITA7aWYoZS5vcHRpb24oIndlYmtpdCIpKXt2YXIgbj1lLnBhcmVudCgxKTtyZXR1cm4gdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgRGUmJnQgaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcyYmbiBpbnN0YW5jZW9mIHJ0JiZuLmxlZnQ9PT10fX0pLG4oR2UsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnQoKTtpZighaCh0aGlzLGUpJiYodCBpbnN0YW5jZW9mIFdlfHx0IGluc3RhbmNlb2YgS2UmJnQuZXhwcmVzc2lvbj09PXRoaXMpKXJldHVybiEwfSksbih5dCxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO2lmKHQgaW5zdGFuY2VvZiBXZSYmdC5leHByZXNzaW9uPT09dGhpcyl7dmFyIG49dGhpcy5nZXRWYWx1ZSgpO2lmKG48MHx8L14wLy50ZXN0KGQobikpKXJldHVybiEwfX0pLG4oW3J0LG50XSxmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudCgpO3JldHVybiB0IGluc3RhbmNlb2YgSmV8fCh0IGluc3RhbmNlb2YgdHQmJiEodCBpbnN0YW5jZW9mIHJ0KXx8KHQgaW5zdGFuY2VvZiBLZSYmdC5leHByZXNzaW9uPT09dGhpc3x8KHQgaW5zdGFuY2VvZiBudCYmdC5jb25kaXRpb249PT10aGlzfHwodCBpbnN0YW5jZW9mIFdlJiZ0LmV4cHJlc3Npb249PT10aGlzfHx2b2lkIDApKSkpfSksZShwZSxmdW5jdGlvbihlLHQpe3QucHJpbnRfc3RyaW5nKGUudmFsdWUsZS5xdW90ZSksdC5zZW1pY29sb24oKX0pLGUoZmUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJkZWJ1Z2dlciIpLHQuc2VtaWNvbG9uKCl9KSx2LkRFRk1FVEhPRCgiX2RvX3ByaW50X2JvZHkiLGZ1bmN0aW9uKGUpe3AodGhpcy5ib2R5LGUpfSksZShjZSxmdW5jdGlvbihlLHQpe2UuYm9keS5wcmludCh0KSx0LnNlbWljb2xvbigpfSksZShDZSxmdW5jdGlvbihlLHQpe3IoZS5ib2R5LCEwLHQsITApLHQucHJpbnQoIiIpfSksZSh2ZSxmdW5jdGlvbihlLHQpe2UubGFiZWwucHJpbnQodCksdC5jb2xvbigpLGUuYm9keS5wcmludCh0KX0pLGUoaGUsZnVuY3Rpb24oZSx0KXtlLmJvZHkucHJpbnQodCksdC5zZW1pY29sb24oKX0pLGUobWUsZnVuY3Rpb24oZSx0KXt1KGUsdCl9KSxlKGdlLGZ1bmN0aW9uKGUsdCl7dC5zZW1pY29sb24oKX0pLGUoX2UsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJkbyIpLHQuc3BhY2UoKSxtKGUuYm9keSx0KSx0LnNwYWNlKCksdC5wcmludCgid2hpbGUiKSx0LnNwYWNlKCksdC53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuY29uZGl0aW9uLnByaW50KHQpfSksdC5zZW1pY29sb24oKX0pLGUod2UsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ3aGlsZSIpLHQuc3BhY2UoKSx0LndpdGhfcGFyZW5zKGZ1bmN0aW9uKCl7ZS5jb25kaXRpb24ucHJpbnQodCl9KSx0LnNwYWNlKCksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoRWUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJmb3IiKSx0LnNwYWNlKCksdC53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuaW5pdD8oZS5pbml0IGluc3RhbmNlb2YgVmU/ZS5pbml0LnByaW50KHQpOmMoZS5pbml0LHQsITApLHQucHJpbnQoIjsiKSx0LnNwYWNlKCkpOnQucHJpbnQoIjsiKSxlLmNvbmRpdGlvbj8oZS5jb25kaXRpb24ucHJpbnQodCksdC5wcmludCgiOyIpLHQuc3BhY2UoKSk6dC5wcmludCgiOyIpLGUuc3RlcCYmZS5zdGVwLnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxlKEFlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgiZm9yIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmluaXQucHJpbnQodCksdC5zcGFjZSgpLHQucHJpbnQoImluIiksdC5zcGFjZSgpLGUub2JqZWN0LnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxlKHhlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgid2l0aCIpLHQuc3BhY2UoKSx0LndpdGhfcGFyZW5zKGZ1bmN0aW9uKCl7ZS5leHByZXNzaW9uLnByaW50KHQpfSksdC5zcGFjZSgpLGUuX2RvX3ByaW50X2JvZHkodCl9KSxPZS5ERUZNRVRIT0QoIl9kb19wcmludCIsZnVuY3Rpb24obixlKXt2YXIgdD10aGlzO2V8fG4ucHJpbnQoImZ1bmN0aW9uIiksdC5uYW1lJiYobi5zcGFjZSgpLHQubmFtZS5wcmludChuKSksbi53aXRoX3BhcmVucyhmdW5jdGlvbigpe3QuYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3QmJm4uY29tbWEoKSxlLnByaW50KG4pfSl9KSxuLnNwYWNlKCksdSh0LG4sITApfSksZShPZSxmdW5jdGlvbihlLHQpe2UuX2RvX3ByaW50KHQpfSksZShSZSxmdW5jdGlvbihlLHQpe2wodCwicmV0dXJuIixlLnZhbHVlKX0pLGUoSyxmdW5jdGlvbihlLHQpe2wodCwidGhyb3ciLGUudmFsdWUpfSksZShGZSxmdW5jdGlvbihlLHQpe2wodCwiYnJlYWsiLGUubGFiZWwpfSksZShxZSxmdW5jdGlvbihlLHQpe2wodCwiY29udGludWUiLGUubGFiZWwpfSksZShVZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImlmIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmNvbmRpdGlvbi5wcmludCh0KX0pLHQuc3BhY2UoKSxlLmFsdGVybmF0aXZlPyhmdW5jdGlvbihlLHQpe3ZhciBuPWUuYm9keTtpZih0Lm9wdGlvbigiYnJhY2VzIil8fHQub3B0aW9uKCJpZTgiKSYmbiBpbnN0YW5jZW9mIF9lKXJldHVybiBtKG4sdCk7aWYoIW4pcmV0dXJuIHQuZm9yY2Vfc2VtaWNvbG9uKCk7Zm9yKDs7KWlmKG4gaW5zdGFuY2VvZiBVZSl7aWYoIW4uYWx0ZXJuYXRpdmUpcmV0dXJuIG0oZS5ib2R5LHQpO249bi5hbHRlcm5hdGl2ZX1lbHNle2lmKCEobiBpbnN0YW5jZW9mIHYpKWJyZWFrO249bi5ib2R5fXAoZS5ib2R5LHQpfShlLHQpLHQuc3BhY2UoKSx0LnByaW50KCJlbHNlIiksdC5zcGFjZSgpLGUuYWx0ZXJuYXRpdmUgaW5zdGFuY2VvZiBVZT9lLmFsdGVybmF0aXZlLnByaW50KHQpOnAoZS5hbHRlcm5hdGl2ZSx0KSk6ZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoTWUsZnVuY3Rpb24oZSxuKXtuLnByaW50KCJzd2l0Y2giKSxuLnNwYWNlKCksbi53aXRoX3BhcmVucyhmdW5jdGlvbigpe2UuZXhwcmVzc2lvbi5wcmludChuKX0pLG4uc3BhY2UoKTt2YXIgcj1lLmJvZHkubGVuZ3RoLTE7cjwwP2koZSxuKTpuLndpdGhfYmxvY2soZnVuY3Rpb24oKXtlLmJvZHkuZm9yRWFjaChmdW5jdGlvbihlLHQpe24uaW5kZW50KCEwKSxlLnByaW50KG4pLHQ8ciYmMDxlLmJvZHkubGVuZ3RoJiZuLm5ld2xpbmUoKX0pfSl9KSxNLkRFRk1FVEhPRCgiX2RvX3ByaW50X2JvZHkiLGZ1bmN0aW9uKHQpe3QubmV3bGluZSgpLHRoaXMuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuaW5kZW50KCksZS5wcmludCh0KSx0Lm5ld2xpbmUoKX0pfSksZShOZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImRlZmF1bHQ6IiksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoUGUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJjYXNlIiksdC5zcGFjZSgpLGUuZXhwcmVzc2lvbi5wcmludCh0KSx0LnByaW50KCI6IiksZS5fZG9fcHJpbnRfYm9keSh0KX0pLGUoSWUsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ0cnkiKSx0LnNwYWNlKCksdShlLHQpLGUuYmNhdGNoJiYodC5zcGFjZSgpLGUuYmNhdGNoLnByaW50KHQpKSxlLmJmaW5hbGx5JiYodC5zcGFjZSgpLGUuYmZpbmFsbHkucHJpbnQodCkpfSksZSh6ZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImNhdGNoIiksdC5zcGFjZSgpLHQud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmFyZ25hbWUucHJpbnQodCl9KSx0LnNwYWNlKCksdShlLHQpfSksZShqZSxmdW5jdGlvbihlLHQpe3QucHJpbnQoImZpbmFsbHkiKSx0LnNwYWNlKCksdShlLHQpfSksZShIZSxmdW5jdGlvbihlLG4pe24ucHJpbnQoInZhciIpLG4uc3BhY2UoKSxlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0JiZuLmNvbW1hKCksZS5wcmludChuKX0pO3ZhciB0PW4ucGFyZW50KCk7KHQmJnQuaW5pdCE9PWV8fCEodCBpbnN0YW5jZW9mIEVlfHx0IGluc3RhbmNlb2YgQWUpKSYmbi5zZW1pY29sb24oKX0pLGUoJGUsZnVuY3Rpb24oZSx0KXtpZihlLm5hbWUucHJpbnQodCksZS52YWx1ZSl7dC5zcGFjZSgpLHQucHJpbnQoIj0iKSx0LnNwYWNlKCk7dmFyIG49dC5wYXJlbnQoMSkscj1uIGluc3RhbmNlb2YgRWV8fG4gaW5zdGFuY2VvZiBBZTtjKGUudmFsdWUsdCxyKX19KSxlKEtlLGZ1bmN0aW9uKGUsbil7ZS5leHByZXNzaW9uLnByaW50KG4pLGUgaW5zdGFuY2VvZiBHZSYmIWgoZSxuKXx8KChlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBLZXx8ZS5leHByZXNzaW9uIGluc3RhbmNlb2YgT2UpJiZuLmFkZF9tYXBwaW5nKGUuc3RhcnQpLG4ud2l0aF9wYXJlbnMoZnVuY3Rpb24oKXtlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbihlLHQpe3QmJm4uY29tbWEoKSxlLnByaW50KG4pfSl9KSl9KSxlKEdlLGZ1bmN0aW9uKGUsdCl7dC5wcmludCgibmV3IiksdC5zcGFjZSgpLEtlLnByb3RvdHlwZS5fY29kZWdlbihlLHQpfSksZShZZSxmdW5jdGlvbihlLG4pe2UuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlLHQpezA8dCYmKG4uY29tbWEoKSxuLnNob3VsZF9icmVhaygpJiYobi5uZXdsaW5lKCksbi5pbmRlbnQoKSkpLGUucHJpbnQobil9KX0pLGUoUWUsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cHJlc3Npb247bi5wcmludCh0KTt2YXIgcj1lLnByb3BlcnR5O3Qub3B0aW9uKCJpZTgiKSYmYltyXT8odC5wcmludCgiWyIpLHQuYWRkX21hcHBpbmcoZS5lbmQpLHQucHJpbnRfc3RyaW5nKHIpLHQucHJpbnQoIl0iKSk6KG4gaW5zdGFuY2VvZiB5dCYmMDw9bi5nZXRWYWx1ZSgpJiYoL1t4YS1mLildL2kudGVzdCh0Lmxhc3QoKSl8fHQucHJpbnQoIi4iKSksdC5wcmludCgiLiIpLHQuYWRkX21hcHBpbmcoZS5lbmQpLHQucHJpbnRfbmFtZShyKSl9KSxlKFplLGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uLnByaW50KHQpLHQucHJpbnQoIlsiKSxlLnByb3BlcnR5LnByaW50KHQpLHQucHJpbnQoIl0iKX0pLGUoWGUsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm9wZXJhdG9yO3QucHJpbnQobiksKC9eW2Etel0vaS50ZXN0KG4pfHwvWystXSQvLnRlc3QobikmJmUuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFhlJiYvXlsrLV0vLnRlc3QoZS5leHByZXNzaW9uLm9wZXJhdG9yKSkmJnQuc3BhY2UoKSxlLmV4cHJlc3Npb24ucHJpbnQodCl9KSxlKGV0LGZ1bmN0aW9uKGUsdCl7ZS5leHByZXNzaW9uLnByaW50KHQpLHQucHJpbnQoZS5vcGVyYXRvcil9KSxlKHR0LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5vcGVyYXRvcjtlLmxlZnQucHJpbnQodCksIj4iPT1uWzBdJiZlLmxlZnQgaW5zdGFuY2VvZiBldCYmIi0tIj09ZS5sZWZ0Lm9wZXJhdG9yP3QucHJpbnQoIiAiKTp0LnNwYWNlKCksdC5wcmludChuKSwoIjwiPT1ufHwiPDwiPT1uKSYmZS5yaWdodCBpbnN0YW5jZW9mIFhlJiYiISI9PWUucmlnaHQub3BlcmF0b3ImJmUucmlnaHQuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFhlJiYiLS0iPT1lLnJpZ2h0LmV4cHJlc3Npb24ub3BlcmF0b3I/dC5wcmludCgiICIpOnQuc3BhY2UoKSxlLnJpZ2h0LnByaW50KHQpfSksZShudCxmdW5jdGlvbihlLHQpe2UuY29uZGl0aW9uLnByaW50KHQpLHQuc3BhY2UoKSx0LnByaW50KCI/IiksdC5zcGFjZSgpLGUuY29uc2VxdWVudC5wcmludCh0KSx0LnNwYWNlKCksdC5jb2xvbigpLGUuYWx0ZXJuYXRpdmUucHJpbnQodCl9KSxlKGl0LGZ1bmN0aW9uKHQscil7ci53aXRoX3NxdWFyZShmdW5jdGlvbigpe3ZhciBlPXQuZWxlbWVudHMsbj1lLmxlbmd0aDswPG4mJnIuc3BhY2UoKSxlLmZvckVhY2goZnVuY3Rpb24oZSx0KXt0JiZyLmNvbW1hKCksZS5wcmludChyKSx0PT09bi0xJiZlIGluc3RhbmNlb2YgeHQmJnIuY29tbWEoKX0pLDA8biYmci5zcGFjZSgpfSl9KSxlKG90LGZ1bmN0aW9uKGUsbil7MDxlLnByb3BlcnRpZXMubGVuZ3RoP24ud2l0aF9ibG9jayhmdW5jdGlvbigpe2UucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dCYmKG4ucHJpbnQoIiwiKSxuLm5ld2xpbmUoKSksbi5pbmRlbnQoKSxlLnByaW50KG4pfSksbi5uZXdsaW5lKCl9KTppKGUsbil9KSxlKHN0LGZ1bmN0aW9uKGUsdCl7ZihlLmtleSxlLnF1b3RlLHQpLHQuY29sb24oKSxlLnZhbHVlLnByaW50KHQpfSksYXQuREVGTUVUSE9EKCJfcHJpbnRfZ2V0dGVyX3NldHRlciIsZnVuY3Rpb24oZSx0KXt0LnByaW50KGUpLHQuc3BhY2UoKSxmKHRoaXMua2V5Lm5hbWUsdGhpcy5xdW90ZSx0KSx0aGlzLnZhbHVlLl9kb19wcmludCh0LCEwKX0pLGUoWSxmdW5jdGlvbihlLHQpe2UuX3ByaW50X2dldHRlcl9zZXR0ZXIoInNldCIsdCl9KSxlKFcsZnVuY3Rpb24oZSx0KXtlLl9wcmludF9nZXR0ZXJfc2V0dGVyKCJnZXQiLHQpfSksZSh1dCxmdW5jdGlvbihlLHQpe3ZhciBuPWUuZGVmaW5pdGlvbigpO3QucHJpbnRfbmFtZShuP24ubWFuZ2xlZF9uYW1lfHxuLm5hbWU6ZS5uYW1lKX0pLGUoeHQsbmUpLGUoZ3QsZnVuY3Rpb24oZSx0KXt0LnByaW50KCJ0aGlzIil9KSxlKHZ0LGZ1bmN0aW9uKGUsdCl7dC5wcmludChlLmdldFZhbHVlKCkpfSksZShidCxmdW5jdGlvbihlLHQpe3QucHJpbnRfc3RyaW5nKGUuZ2V0VmFsdWUoKSxlLnF1b3RlLG8pfSksZSh5dCxmdW5jdGlvbihlLHQpe3MmJmUuc3RhcnQmJm51bGwhPWUuc3RhcnQucmF3P3QucHJpbnQoZS5zdGFydC5yYXcpOnQucHJpbnQoZChlLmdldFZhbHVlKCkpKX0pLGUoX3QsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldFZhbHVlKCkscj1uLnRvU3RyaW5nKCk7bi5yYXdfc291cmNlJiYocj0iLyIrbi5yYXdfc291cmNlK3Iuc2xpY2Uoci5sYXN0SW5kZXhPZigiLyIpKSkscj10LnRvX3V0ZjgociksdC5wcmludChyKTt2YXIgaT10LnBhcmVudCgpO2kgaW5zdGFuY2VvZiB0dCYmL15pbi8udGVzdChpLm9wZXJhdG9yKSYmaS5sZWZ0PT09ZSYmdC5wcmludCgiICIpfSksdChbbGUsdmUsQ2VdLG5lKSx0KFtpdCxtZSx6ZSx2dCxmZSxWZSxwZSxqZSxVLE9lLEdlLG90LHYsdXQsTWUsTSxJZV0sZnVuY3Rpb24oZSl7ZS5hZGRfbWFwcGluZyh0aGlzLnN0YXJ0KX0pLHQoW1csWV0sZnVuY3Rpb24oZSl7ZS5hZGRfbWFwcGluZyh0aGlzLnN0YXJ0LHRoaXMua2V5Lm5hbWUpfSksdChbYXRdLGZ1bmN0aW9uKGUpe2UuYWRkX21hcHBpbmcodGhpcy5zdGFydCx0aGlzLmtleSl9KX0oKSxuKFh0LnByb3RvdHlwZT1uZXcgV3Qse29wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zW2VdfSxleHBvc2VkOmZ1bmN0aW9uKGUpe2lmKGUuZ2xvYmFsKWZvcih2YXIgdD0wLG49ZS5vcmlnLmxlbmd0aDt0PG47dCsrKWlmKCF0aGlzLnRvcGxldmVsW2Uub3JpZ1t0XWluc3RhbmNlb2YgcHQ/ImZ1bmNzIjoidmFycyJdKXJldHVybiEwO3JldHVybiExfSxjb21wcmVzczpmdW5jdGlvbihlKXtlPWUucmVzb2x2ZV9kZWZpbmVzKHRoaXMpLHRoaXMub3B0aW9uKCJleHByZXNzaW9uIikmJmUucHJvY2Vzc19leHByZXNzaW9uKCEwKTtmb3IodmFyIHQ9K3RoaXMub3B0aW9ucy5wYXNzZXN8fDEsbj0xLzAscj0hMSxpPXtpZTg6dGhpcy5vcHRpb24oImllOCIpfSxvPTA7bzx0O28rKylpZihlLmZpZ3VyZV9vdXRfc2NvcGUoaSksKDA8b3x8dGhpcy5vcHRpb24oInJlZHVjZV92YXJzIikpJiZlLnJlc2V0X29wdF9mbGFncyh0aGlzKSxlPWUudHJhbnNmb3JtKHRoaXMpLDE8dCl7dmFyIGE9MDtpZihlLndhbGsobmV3IER0KGZ1bmN0aW9uKCl7YSsrfSkpLHRoaXMuaW5mbygicGFzcyAiK28rIjogbGFzdF9jb3VudDogIituKyIsIGNvdW50OiAiK2EpLGE8biluPWEscj0hMTtlbHNle2lmKHIpYnJlYWs7cj0hMH19cmV0dXJuIHRoaXMub3B0aW9uKCJleHByZXNzaW9uIikmJmUucHJvY2Vzc19leHByZXNzaW9uKCExKSxlfSxpbmZvOmZ1bmN0aW9uKCl7InZlcmJvc2UiPT10aGlzLm9wdGlvbnMud2FybmluZ3MmJmxlLndhcm4uYXBwbHkobGUsYXJndW1lbnRzKX0sd2FybjpmdW5jdGlvbihlLHQpe2lmKHRoaXMub3B0aW9ucy53YXJuaW5ncyl7dmFyIG49QihlLHQpO24gaW4gdGhpcy53YXJuaW5nc19wcm9kdWNlZHx8KHRoaXMud2FybmluZ3NfcHJvZHVjZWRbbl09ITAsbGUud2Fybi5hcHBseShsZSxhcmd1bWVudHMpKX19LGNsZWFyX3dhcm5pbmdzOmZ1bmN0aW9uKCl7dGhpcy53YXJuaW5nc19wcm9kdWNlZD17fX0sYmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtpZihlLl9zcXVlZXplZClyZXR1cm4gZTt2YXIgcj1lIGluc3RhbmNlb2Yga2U7ciYmKGUuaG9pc3RfcHJvcGVydGllcyh0aGlzKSxlLmhvaXN0X2RlY2xhcmF0aW9ucyh0aGlzKSksdChlLHRoaXMpLHQoZSx0aGlzKTt2YXIgaT1lLm9wdGltaXplKHRoaXMpO3JldHVybiByJiYoaS5kcm9wX3VudXNlZCh0aGlzKSx0KGksdGhpcykpLGk9PT1lJiYoaS5fc3F1ZWV6ZWQ9ITApLGl9fSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gZyhlLHQpe2lmKCEoKHQ9ZCh0KSlpbnN0YW5jZW9mIGxlKSl7dmFyIG47aWYoZSBpbnN0YW5jZW9mIGl0KXt2YXIgcj1lLmVsZW1lbnRzO2lmKCJsZW5ndGgiPT10KXJldHVybiBQKHIubGVuZ3RoLGUpOyJudW1iZXIiPT10eXBlb2YgdCYmdCBpbiByJiYobj1yW3RdKX1lbHNlIGlmKGUgaW5zdGFuY2VvZiBvdCl7dD0iIit0O2Zvcih2YXIgaT1lLnByb3BlcnRpZXMsbz1pLmxlbmd0aDswPD0tLW87KXtpZighKGlbb11pbnN0YW5jZW9mIHN0KSlyZXR1cm47bnx8aVtvXS5rZXkhPT10fHwobj1pW29dLnZhbHVlKX19cmV0dXJuIG4gaW5zdGFuY2VvZiBtdCYmbi5maXhlZF92YWx1ZSgpfHxufX1mdW5jdGlvbiBZKGUsdCxuLHIsaSxvKXt2YXIgYT10LnBhcmVudChpKSxzPWVlKG4sYSk7aWYocylyZXR1cm4gcztpZighbyYmYSBpbnN0YW5jZW9mIEtlJiZhLmV4cHJlc3Npb249PT1uJiYhYS5pc19leHByX3B1cmUoZSkmJighKHIgaW5zdGFuY2VvZiBEZSl8fCEoYSBpbnN0YW5jZW9mIEdlKSYmci5jb250YWluc190aGlzKCkpKXJldHVybiEwO2lmKGEgaW5zdGFuY2VvZiBpdClyZXR1cm4gWShlLHQsYSxhLGkrMSk7aWYoYSBpbnN0YW5jZW9mIHN0JiZuPT09YS52YWx1ZSl7dmFyIHU9dC5wYXJlbnQoaSsxKTtyZXR1cm4gWShlLHQsdSx1LGkrMil9aWYoYSBpbnN0YW5jZW9mIFdlJiZhLmV4cHJlc3Npb249PT1uKXt2YXIgbD1nKHIsYS5wcm9wZXJ0eSk7cmV0dXJuIW8mJlkoZSx0LGEsbCxpKzEpfX1mdW5jdGlvbiBXKGUpe2lmKGUgaW5zdGFuY2VvZiBndClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuIGUuZGVmaW5pdGlvbigpLm9yaWdbMF1pbnN0YW5jZW9mIGh0O2lmKGUgaW5zdGFuY2VvZiBXZSl7aWYoKGU9ZS5leHByZXNzaW9uKWluc3RhbmNlb2YgbXQpe2lmKGUuaXNfaW1tdXRhYmxlKCkpcmV0dXJuITE7ZT1lLmZpeGVkX3ZhbHVlKCl9cmV0dXJuIWV8fCghIWUuaXNfY29uc3RhbnQoKXx8VyhlKSl9cmV0dXJuITF9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbixyPTA7KG49ZS5wYXJlbnQocisrKSkmJiEobiBpbnN0YW5jZW9mIGtlKTspaWYobiBpbnN0YW5jZW9mIHplKXtuPW4uYXJnbmFtZS5kZWZpbml0aW9uKCkuc2NvcGU7YnJlYWt9cmV0dXJuIG4uZmluZF92YXJpYWJsZSh0KX1mdW5jdGlvbiBRKGUsdCxuKXtyZXR1cm4gbnx8KG49e30pLHQmJihuLnN0YXJ0fHwobi5zdGFydD10LnN0YXJ0KSxuLmVuZHx8KG4uZW5kPXQuZW5kKSksbmV3IGUobil9ZnVuY3Rpb24gTihlLHQpe3JldHVybiAxPT10Lmxlbmd0aD90WzBdOlEoWWUsZSx7ZXhwcmVzc2lvbnM6dC5yZWR1Y2UoaCxbXSl9KX1mdW5jdGlvbiBQKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlInN0cmluZyI6cmV0dXJuIFEoYnQsdCx7dmFsdWU6ZX0pO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNOYU4oZSk/UShFdCx0KTppc0Zpbml0ZShlKT8xL2U8MD9RKFhlLHQse29wZXJhdG9yOiItIixleHByZXNzaW9uOlEoeXQsdCx7dmFsdWU6LWV9KX0pOlEoeXQsdCx7dmFsdWU6ZX0pOmU8MD9RKFhlLHQse29wZXJhdG9yOiItIixleHByZXNzaW9uOlEoa3QsdCl9KTpRKGt0LHQpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFEoZT9TdDpPdCx0KTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIFEoQXQsdCk7ZGVmYXVsdDppZihudWxsPT09ZSlyZXR1cm4gUSh3dCx0LHt2YWx1ZTpudWxsfSk7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUShfdCx0LHt2YWx1ZTplfSk7dGhyb3cgbmV3IEVycm9yKEIoIkNhbid0IGhhbmRsZSBjb25zdGFudCBvZiB0eXBlOiB7dHlwZX0iLHt0eXBlOnR5cGVvZiBlfSkpfX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBXZXx8ZS5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJmoodCkmJiJldmFsIj09dC5uYW1lfWZ1bmN0aW9uIFooZSx0LG4scil7cmV0dXJuIHQgaW5zdGFuY2VvZiBYZSYmImRlbGV0ZSI9PXQub3BlcmF0b3J8fCJDYWxsIj09dC5UWVBFJiZ0LmV4cHJlc3Npb249PT1uJiZhKGUscik/TihuLFtRKHl0LG4se3ZhbHVlOjB9KSxyXSk6cn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBZZT9lLnB1c2guYXBwbHkoZSx0LmV4cHJlc3Npb25zKTplLnB1c2godCksZX1mdW5jdGlvbiBfKGUpe2lmKG51bGw9PT1lKXJldHVybltdO2lmKGUgaW5zdGFuY2VvZiBtZSlyZXR1cm4gZS5ib2R5O2lmKGUgaW5zdGFuY2VvZiBnZSlyZXR1cm5bXTtpZihlIGluc3RhbmNlb2YgY2UpcmV0dXJuW2VdO3Rocm93IG5ldyBFcnJvcigiQ2FuJ3QgY29udmVydCB0aGluZyB0byBzdGF0ZW1lbnQgYXJyYXkiKX1mdW5jdGlvbiBJKGUpe3JldHVybiBudWxsPT09ZXx8KGUgaW5zdGFuY2VvZiBnZXx8ZSBpbnN0YW5jZW9mIG1lJiYwPT1lLmJvZHkubGVuZ3RoKX1mdW5jdGlvbiB3KGUpe3JldHVybiBlIGluc3RhbmNlb2YgYmUmJmUuYm9keSBpbnN0YW5jZW9mIG1lP2UuYm9keTplfWZ1bmN0aW9uIEooZSl7Zm9yKDtlIGluc3RhbmNlb2YgV2U7KWU9ZS5leHByZXNzaW9uO3JldHVybiBlfWZ1bmN0aW9uIHooZSl7cmV0dXJuIkNhbGwiPT1lLlRZUEUmJihlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBEZXx8eihlLmV4cHJlc3Npb24pKX1mdW5jdGlvbiBqKGUpe3JldHVybiBlIGluc3RhbmNlb2YgbXQmJmUuZGVmaW5pdGlvbigpLnVuZGVjbGFyZWR9ZShsZSxmdW5jdGlvbihlLHQpe3JldHVybiBlfSksbGUuREVGTUVUSE9EKCJlcXVpdmFsZW50X3RvIixmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5UWVBFPT1lLlRZUEUmJnRoaXMucHJpbnRfdG9fc3RyaW5nKCk9PWUucHJpbnRfdG9fc3RyaW5nKCl9KSxrZS5ERUZNRVRIT0QoInByb2Nlc3NfZXhwcmVzc2lvbiIsZnVuY3Rpb24ocixpKXt2YXIgbz10aGlzLGE9bmV3IFd0KGZ1bmN0aW9uKGUpe2lmKHImJmUgaW5zdGFuY2VvZiBoZSlyZXR1cm4gUShSZSxlLHt2YWx1ZTplLmJvZHl9KTtpZighciYmZSBpbnN0YW5jZW9mIFJlKXtpZihpKXt2YXIgdD1lLnZhbHVlJiZlLnZhbHVlLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShpLCEwKTtyZXR1cm4gdD9RKGhlLGUse2JvZHk6dH0pOlEoZ2UsZSl9cmV0dXJuIFEoaGUsZSx7Ym9keTplLnZhbHVlfHxRKFhlLGUse29wZXJhdG9yOiJ2b2lkIixleHByZXNzaW9uOlEoeXQsZSx7dmFsdWU6MH0pfSl9KX1pZihlIGluc3RhbmNlb2YgT2UmJmUhPT1vKXJldHVybiBlO2lmKGUgaW5zdGFuY2VvZiBkZSl7dmFyIG49ZS5ib2R5Lmxlbmd0aC0xOzA8PW4mJihlLmJvZHlbbl09ZS5ib2R5W25dLnRyYW5zZm9ybShhKSl9ZWxzZSBlIGluc3RhbmNlb2YgVWU/KGUuYm9keT1lLmJvZHkudHJhbnNmb3JtKGEpLGUuYWx0ZXJuYXRpdmUmJihlLmFsdGVybmF0aXZlPWUuYWx0ZXJuYXRpdmUudHJhbnNmb3JtKGEpKSk6ZSBpbnN0YW5jZW9mIHhlJiYoZS5ib2R5PWUuYm9keS50cmFuc2Zvcm0oYSkpO3JldHVybiBlfSk7by50cmFuc2Zvcm0oYSl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKGUsdCxuKXtuLmFzc2lnbm1lbnRzPTAsbi5jaGFpbmVkPSExLG4uZGlyZWN0X2FjY2Vzcz0hMSxuLmVzY2FwZWQ9ITEsbi5maXhlZD0hbi5zY29wZS5waW5uZWQoKSYmIXQuZXhwb3NlZChuKSYmIShuLmluaXQgaW5zdGFuY2VvZiBEZSYmbi5pbml0IT09bi5zY29wZSkmJm4uaW5pdCxuLmZpeGVkIGluc3RhbmNlb2YgVGUmJiFzZShuLnJlZmVyZW5jZXMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zY29wZTtkb3tpZihuLnNjb3BlPT09dClyZXR1cm4hMH13aGlsZSh0IGluc3RhbmNlb2YgRGUmJih0PXQucGFyZW50X3Njb3BlKSl9KSYmKGUuZGVmdW5faWRzW24uaWRdPSExKSxuLnJlY3Vyc2l2ZV9yZWZzPTAsbi5yZWZlcmVuY2VzPVtdLG4uc2hvdWxkX3JlcGxhY2U9dm9pZCAwLG4uc2luZ2xlX3VzZT12b2lkIDB9ZnVuY3Rpb24gYSh0LG4sZSl7ZS52YXJpYWJsZXMuZWFjaChmdW5jdGlvbihlKXtyKHQsbixlKSxudWxsPT09ZS5maXhlZD8oZS5zYWZlX2lkcz10LnNhZmVfaWRzLGYodCxlLCEwKSk6ZS5maXhlZCYmKHQubG9vcF9pZHNbZS5pZF09dC5pbl9sb29wLGYodCxlLCEwKSl9KSxlLm1heV9jYWxsX3RoaXM9ZnVuY3Rpb24oKXtlLm1heV9jYWxsX3RoaXM9bmUsZS5jb250YWluc190aGlzKCkmJmUuZnVuY3Rpb25zLmVhY2goZnVuY3Rpb24oZSl7ZS5pbml0IGluc3RhbmNlb2YgVGUmJiEoZS5pZCBpbiB0LmRlZnVuX2lkcykmJih0LmRlZnVuX2lkc1tlLmlkXT0hMSl9KX19ZnVuY3Rpb24gcyh0LG4pe2lmKG4uaWQgaW4gdC5kZWZ1bl9pZHMpe3ZhciBlPXQuZGVmdW5faWRzW24uaWRdO2lmKCFlKXJldHVybjt2YXIgcj10LmRlZnVuX3Zpc2l0ZWRbbi5pZF07aWYoZT09PXQuc2FmZV9pZHMpe2lmKCFyKXJldHVybiBuLmZpeGVkfWVsc2Ugcj9uLmluaXQuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtuLmluaXQudmFyaWFibGVzLmdldChlLm5hbWUpIT09ZSYmKHAodCxlKXx8KGUuZml4ZWQ9ITEpKX0pOnQuZGVmdW5faWRzW24uaWRdPSExfWVsc2V7aWYoIXQuaW5fbG9vcClyZXR1cm4gdC5kZWZ1bl9pZHNbbi5pZF09dC5zYWZlX2lkcyxuLmZpeGVkO3QuZGVmdW5faWRzW24uaWRdPSExfX1mdW5jdGlvbiB1KHQsZSl7ZS5mdW5jdGlvbnMuZWFjaChmdW5jdGlvbihlKXtlLmluaXQgaW5zdGFuY2VvZiBUZSYmIXQuZGVmdW5fdmlzaXRlZFtlLmlkXSYmKHQuZGVmdW5faWRzW2UuaWRdPXQuc2FmZV9pZHMsZS5pbml0LndhbGsodCkpfSl9ZnVuY3Rpb24gbChlKXtlLnNhZmVfaWRzPU9iamVjdC5jcmVhdGUoZS5zYWZlX2lkcyl9ZnVuY3Rpb24gYyhlKXtlLnNhZmVfaWRzPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnNhZmVfaWRzKX1mdW5jdGlvbiBmKGUsdCxuKXtlLnNhZmVfaWRzW3QuaWRdPW59ZnVuY3Rpb24gcChlLHQpe2lmKCJtIj09dC5zaW5nbGVfdXNlKXJldHVybiExO2lmKGUuc2FmZV9pZHNbdC5pZF0pe2lmKG51bGw9PXQuZml4ZWQpe3ZhciBuPXQub3JpZ1swXTtpZihuIGluc3RhbmNlb2YgZnR8fCJhcmd1bWVudHMiPT1uLm5hbWUpcmV0dXJuITE7dC5maXhlZD1RKEF0LG4pfXJldHVybiEwfXJldHVybiB0LmZpeGVkIGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gaChlLHQsbixyKXtyZXR1cm4gdm9pZCAwPT09dC5maXhlZHx8KG51bGw9PT10LmZpeGVkJiZ0LnNhZmVfaWRzPyh0LnNhZmVfaWRzW3QuaWRdPSExLGRlbGV0ZSB0LnNhZmVfaWRzLCEwKTohIXVlKGUuc2FmZV9pZHMsdC5pZCkmJighIXAoZSx0KSYmKCExIT09dC5maXhlZCYmKCEobnVsbCE9dC5maXhlZCYmKCFyfHx0LnJlZmVyZW5jZXMubGVuZ3RoPnQuYXNzaWdubWVudHMpKSYmKHQuZml4ZWQgaW5zdGFuY2VvZiBUZT9yIGluc3RhbmNlb2YgbGUmJnQuZml4ZWQucGFyZW50X3Njb3BlPT09bjpzZSh0Lm9yaWcsZnVuY3Rpb24oZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgcHR8fGUgaW5zdGFuY2VvZiBodCl9KSkpKSkpfWZ1bmN0aW9uIGQoZSx0LG4scixpLG8sYSl7dmFyIHM9ZS5wYXJlbnQobyk7aWYoIWl8fCFpLmlzX2NvbnN0YW50KCkpe2lmKHMgaW5zdGFuY2VvZiBydCYmIj0iPT1zLm9wZXJhdG9yJiZyPT09cy5yaWdodHx8cyBpbnN0YW5jZW9mIEtlJiYociE9PXMuZXhwcmVzc2lvbnx8cyBpbnN0YW5jZW9mIEdlKXx8cyBpbnN0YW5jZW9mIEJlJiZyPT09cy52YWx1ZSYmci5zY29wZSE9PXQuc2NvcGV8fHMgaW5zdGFuY2VvZiAkZSYmcj09PXMudmFsdWUpcmV0dXJuISgxPGEpfHxpJiZpLmlzX2NvbnN0YW50X2V4cHJlc3Npb24obil8fChhPTEpLHZvaWQoKCF0LmVzY2FwZWR8fHQuZXNjYXBlZD5hKSYmKHQuZXNjYXBlZD1hKSk7aWYocyBpbnN0YW5jZW9mIGl0fHxzIGluc3RhbmNlb2YgdHQmJlhbcy5vcGVyYXRvcl18fHMgaW5zdGFuY2VvZiBudCYmciE9PXMuY29uZGl0aW9ufHxzIGluc3RhbmNlb2YgWWUmJnI9PT1zLnRhaWxfbm9kZSgpKWQoZSx0LG4scyxzLG8rMSxhKTtlbHNlIGlmKHMgaW5zdGFuY2VvZiBzdCYmcj09PXMudmFsdWUpe3ZhciB1PWUucGFyZW50KG8rMSk7ZChlLHQsbix1LHUsbysyLGEpfWVsc2UgaWYocyBpbnN0YW5jZW9mIFdlJiZyPT09cy5leHByZXNzaW9uJiYoZChlLHQsbixzLGk9ZyhpLHMucHJvcGVydHkpLG8rMSxhKzEpLGkpKXJldHVybjswPG98fHMgaW5zdGFuY2VvZiBZZSYmciE9PXMudGFpbF9ub2RlKCl8fHMgaW5zdGFuY2VvZiBoZXx8KHQuZGlyZWN0X2FjY2Vzcz0hMCl9fWZ1bmN0aW9uIG0oZSl7aWYoZSBpbnN0YW5jZW9mIFplKXt2YXIgdD1lLmV4cHJlc3Npb24sbj1lLnByb3BlcnR5O3QgaW5zdGFuY2VvZiBtdCYmImFyZ3VtZW50cyI9PXQubmFtZSYmbiBpbnN0YW5jZW9mIHl0JiYodC5kZWZpbml0aW9uKCkucmVhc3NpZ25lZD0hMCl9fWUobGUsbmUpO3ZhciBuPW5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdXQpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3QmJihlIGluc3RhbmNlb2YgbXQmJnQucmVmZXJlbmNlcy5wdXNoKGUpLHQuZml4ZWQ9ITEpfX0pO2UoU2UsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsKGUpLGEoZSxuLHRoaXMpLHQoKSxjKGUpLHUoZSx0aGlzKSwhMH0pLGUocnQsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT1yLmxlZnQ7aWYoaSBpbnN0YW5jZW9mIG10KXt2YXIgbz1pLmRlZmluaXRpb24oKSxhPWgoZSxvLGkuc2NvcGUsci5yaWdodCk7by5hc3NpZ25tZW50cysrO3ZhciBzPW8uZml4ZWQ7aWYoc3x8Ij0iPT1yLm9wZXJhdG9yKXt2YXIgdT0iPSI9PXIub3BlcmF0b3IsbD11P3IucmlnaHQ6cjtpZighWShuLGUscixsLDApJiYodXx8KG8uY2hhaW5lZD0hMCksby5maXhlZD11P2Z1bmN0aW9uKCl7cmV0dXJuIHIucmlnaHR9OmZ1bmN0aW9uKCl7cmV0dXJuIFEodHQscix7b3BlcmF0b3I6ci5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OnMgaW5zdGFuY2VvZiBsZT9zOnMoKSxyaWdodDpyLnJpZ2h0fSl9LGEpKXJldHVybiBvLnJlZmVyZW5jZXMucHVzaChpKSxmKGUsbywhMSksci5yaWdodC53YWxrKGUpLGYoZSxvLCEwKSxkKGUsbyxpLnNjb3BlLHIsbCwwLDEpLCEwfX1lbHNlIG0oaSl9KSxlKHR0LGZ1bmN0aW9uKGUpe2lmKFhbdGhpcy5vcGVyYXRvcl0pcmV0dXJuIHRoaXMubGVmdC53YWxrKGUpLGwoZSksdGhpcy5yaWdodC53YWxrKGUpLGMoZSksITB9KSxlKEtlLGZ1bmN0aW9uKGUsdCl7ZS5maW5kX3BhcmVudChrZSkubWF5X2NhbGxfdGhpcygpO3ZhciBuPXRoaXMuZXhwcmVzc2lvbjtpZihuIGluc3RhbmNlb2YgbXQpe3ZhciByPW4uZGVmaW5pdGlvbigpO2lmKHIuZml4ZWQgaW5zdGFuY2VvZiBUZSl7dmFyIGk9cyhlLHIpO2lmKGkpcmV0dXJuIHQoKSxpLndhbGsoZSksITB9fX0pLGUoUGUsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSksdGhpcy5leHByZXNzaW9uLndhbGsoZSksYyhlKSxsKGUpLHEodGhpcyxlKSxjKGUpLCEwfSksZShudCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb25kaXRpb24ud2FsayhlKSxsKGUpLHRoaXMuY29uc2VxdWVudC53YWxrKGUpLGMoZSksbChlKSx0aGlzLmFsdGVybmF0aXZlLndhbGsoZSksYyhlKSwhMH0pLGUoTmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlKSx0KCksYyhlKSwhMH0pLGUoVGUsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMubmFtZS5kZWZpbml0aW9uKCkuaWQ7cmV0dXJuIGUuZGVmdW5fdmlzaXRlZFtyXXx8ZS5kZWZ1bl9pZHNbcl0hPT1lLnNhZmVfaWRzfHwoZS5kZWZ1bl92aXNpdGVkW3JdPSEwLHRoaXMuaW5saW5lZD0hMSxsKGUpLGEoZSxuLHRoaXMpLHQoKSxjKGUpLHUoZSx0aGlzKSksITB9KSxlKF9lLGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5fbG9vcDtyZXR1cm4gZS5pbl9sb29wPXRoaXMsbChlKSx0aGlzLmJvZHkud2FsayhlKSx4KHRoaXMpJiYoYyhlKSxsKGUpKSx0aGlzLmNvbmRpdGlvbi53YWxrKGUpLGMoZSksZS5pbl9sb29wPXQsITB9KSxlKEVlLGZ1bmN0aW9uKGUpe3RoaXMuaW5pdCYmdGhpcy5pbml0LndhbGsoZSk7dmFyIHQ9ZS5pbl9sb29wO3JldHVybiBlLmluX2xvb3A9dGhpcyxsKGUpLHRoaXMuY29uZGl0aW9uJiZ0aGlzLmNvbmRpdGlvbi53YWxrKGUpLHRoaXMuYm9keS53YWxrKGUpLHRoaXMuc3RlcCYmKHgodGhpcykmJihjKGUpLGwoZSkpLHRoaXMuc3RlcC53YWxrKGUpKSxjKGUpLGUuaW5fbG9vcD10LCEwfSksZShBZSxmdW5jdGlvbihlKXt0aGlzLmluaXQud2FsayhuKSx0aGlzLm9iamVjdC53YWxrKGUpO3ZhciB0PWUuaW5fbG9vcDtyZXR1cm4gZS5pbl9sb29wPXRoaXMsbChlKSx0aGlzLmJvZHkud2FsayhlKSxjKGUpLGUuaW5fbG9vcD10LCEwfSksZShEZSxmdW5jdGlvbihyLGUsdCl7dmFyIGksbz10aGlzO3JldHVybiBvLmlubGluZWQ9ITEsbChyKSxhKHIsdCxvKSwhby5uYW1lJiYoaT1yLnBhcmVudCgpKWluc3RhbmNlb2YgS2UmJmkuZXhwcmVzc2lvbj09PW8mJm8uYXJnbmFtZXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPWUuZGVmaW5pdGlvbigpO3ZvaWQgMCE9PW4uZml4ZWR8fG8udXNlc19hcmd1bWVudHMmJiFyLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKT9uLmZpeGVkPSExOihuLmZpeGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGkuYXJnc1t0XXx8UShBdCxpKX0sci5sb29wX2lkc1tuLmlkXT1yLmluX2xvb3AsZihyLG4sITApKX0pLGUoKSxjKHIpLHUocixvKSwhMH0pLGUoVWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLndhbGsoZSksbChlKSx0aGlzLmJvZHkud2FsayhlKSxjKGUpLHRoaXMuYWx0ZXJuYXRpdmUmJihsKGUpLHRoaXMuYWx0ZXJuYXRpdmUud2FsayhlKSxjKGUpKSwhMH0pLGUodmUsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSksdGhpcy5ib2R5LndhbGsoZSksYyhlKSwhMH0pLGUoZHQsZnVuY3Rpb24oKXt0aGlzLmRlZmluaXRpb24oKS5maXhlZD0hMX0pLGUobXQsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10aGlzLmRlZmluaXRpb24oKTtpZihvLnJlZmVyZW5jZXMucHVzaCh0aGlzKSwxPT1vLnJlZmVyZW5jZXMubGVuZ3RoJiYhby5maXhlZCYmby5vcmlnWzBdaW5zdGFuY2VvZiBwdCYmKGUubG9vcF9pZHNbby5pZF09ZS5pbl9sb29wKSx2b2lkIDAhPT1vLmZpeGVkJiZwKGUsbyk/by5maXhlZCYmKChyPXRoaXMuZml4ZWRfdmFsdWUoKSlpbnN0YW5jZW9mIE9lJiYkKGUsbyk/by5yZWN1cnNpdmVfcmVmcysrOnImJmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5vcHRpb24oInVudXNlZCIpJiYhbi5zY29wZS5waW5uZWQoKSYmbi5yZWZlcmVuY2VzLmxlbmd0aC1uLnJlY3Vyc2l2ZV9yZWZzPT0xJiZlLmxvb3BfaWRzW24uaWRdPT09ZS5pbl9sb29wfShlLG4sbyk/by5zaW5nbGVfdXNlPXIgaW5zdGFuY2VvZiBPZSYmIXIucGlubmVkKCl8fG8uc2NvcGU9PT10aGlzLnNjb3BlJiZyLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oKTpvLnNpbmdsZV91c2U9ITEsWShuLGUsdGhpcyxyLDAsZnVuY3Rpb24oZSl7cmV0dXJuISFlJiYoZS5pc19jb25zdGFudCgpfHxlIGluc3RhbmNlb2YgT2V8fGUgaW5zdGFuY2VvZiBndCl9KHIpKSYmKG8uc2luZ2xlX3VzZT9vLnNpbmdsZV91c2U9Im0iOm8uZml4ZWQ9ITEpKTpvLmZpeGVkPSExLGQoZSxvLHRoaXMuc2NvcGUsdGhpcyxyLDAsMSksby5maXhlZCBpbnN0YW5jZW9mIFRlJiYhKChpPWUucGFyZW50KCkpaW5zdGFuY2VvZiBLZSYmaS5leHByZXNzaW9uPT09dGhpcykpe3ZhciBhPXMoZSxvKTthJiZhLndhbGsoZSl9fSksZShDZSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZ2xvYmFscy5lYWNoKGZ1bmN0aW9uKGUpe3IodCxuLGUpfSksbCh0KSxhKHQsbix0aGlzKSxlKCksYyh0KSx1KHQsdGhpcyksITB9KSxlKEllLGZ1bmN0aW9uKGUpe3JldHVybiBsKGUpLHEodGhpcyxlKSxjKGUpLHRoaXMuYmNhdGNoJiYobChlKSx0aGlzLmJjYXRjaC53YWxrKGUpLGMoZSkpLHRoaXMuYmZpbmFsbHkmJnRoaXMuYmZpbmFsbHkud2FsayhlKSwhMH0pLGUoSmUsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCIrKyI9PW4ub3BlcmF0b3J8fCItLSI9PW4ub3BlcmF0b3Ipe3ZhciByPW4uZXhwcmVzc2lvbjtpZihyIGluc3RhbmNlb2YgbXQpe3ZhciBpPXIuZGVmaW5pdGlvbigpLG89aChlLGksci5zY29wZSwhMCk7aS5hc3NpZ25tZW50cysrO3ZhciBhPWkuZml4ZWQ7aWYoYSYmKGkuY2hhaW5lZD0hMCxpLmZpeGVkPWZ1bmN0aW9uKCl7cmV0dXJuIFEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OlEoWGUsbix7b3BlcmF0b3I6IisiLGV4cHJlc3Npb246YSBpbnN0YW5jZW9mIGxlP2E6YSgpfSkscmlnaHQ6USh5dCxuLHt2YWx1ZToxfSl9KX0sbykpcmV0dXJuIGkucmVmZXJlbmNlcy5wdXNoKHIpLGYoZSxpLCEwKSwhMH1lbHNlIG0ocil9fSksZSgkZSxmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLm5hbWUuZGVmaW5pdGlvbigpO2lmKG4udmFsdWUpe2lmKGgoZSxyLG4ubmFtZS5zY29wZSxuLnZhbHVlKSlyZXR1cm4gci5maXhlZD1mdW5jdGlvbigpe3JldHVybiBuLnZhbHVlfSxlLmxvb3BfaWRzW3IuaWRdPWUuaW5fbG9vcCxmKGUsciwhMSksdCgpLGYoZSxyLCEwKSwhMDtyLmZpeGVkPSExfX0pLGUod2UsZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmluX2xvb3A7cmV0dXJuIGUuaW5fbG9vcD10aGlzLGwoZSksdCgpLGMoZSksZS5pbl9sb29wPW4sITB9KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgicmVkdWNlX3ZhcnMiLHQpfSksQ2UuREVGTUVUSE9EKCJyZXNldF9vcHRfZmxhZ3MiLGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBEdChuLm9wdGlvbigicmVkdWNlX3ZhcnMiKT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9zcXVlZXplZD0hMSxlLl9vcHRpbWl6ZWQ9ITEsZS5yZWR1Y2VfdmFycyhyLHQsbil9OmZ1bmN0aW9uKGUpe2UuX3NxdWVlemVkPSExLGUuX29wdGltaXplZD0hMX0pO3IuZGVmdW5faWRzPU9iamVjdC5jcmVhdGUobnVsbCksci5kZWZ1bl92aXNpdGVkPU9iamVjdC5jcmVhdGUobnVsbCksci5pbl9sb29wPW51bGwsci5sb29wX2lkcz1PYmplY3QuY3JlYXRlKG51bGwpLHIuc2FmZV9pZHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLndhbGsocil9KSx1dC5ERUZNRVRIT0QoImZpeGVkX3ZhbHVlIixmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVmaW5pdGlvbigpLmZpeGVkO3JldHVybiFlfHxlIGluc3RhbmNlb2YgbGU/ZTplKCl9KSxtdC5ERUZNRVRIT0QoImlzX2ltbXV0YWJsZSIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRlZmluaXRpb24oKS5vcmlnO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgaHR9KTt2YXIgdD1hZSgiQXJyYXkgQm9vbGVhbiBjbGVhckludGVydmFsIGNsZWFyVGltZW91dCBjb25zb2xlIERhdGUgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCBlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IEVycm9yIGVzY2FwZSBldmFsIEV2YWxFcnJvciBGdW5jdGlvbiBpc0Zpbml0ZSBpc05hTiBKU09OIE1hdGggTnVtYmVyIHBhcnNlRmxvYXQgcGFyc2VJbnQgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBSZWdFeHAgT2JqZWN0IHNldEludGVydmFsIHNldFRpbWVvdXQgU3RyaW5nIFN5bnRheEVycm9yIFR5cGVFcnJvciB1bmVzY2FwZSBVUklFcnJvciIpO210LkRFRk1FVEhPRCgiaXNfZGVjbGFyZWQiLGZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmRlZmluaXRpb24oKS51bmRlY2xhcmVkfHxlLm9wdGlvbigidW5zYWZlIikmJnRbdGhpcy5uYW1lXX0pO3ZhciBuLHIsVj1hZSgiSW5maW5pdHkgTmFOIHVuZGVmaW5lZCIpO2Z1bmN0aW9uIGkoZSx1KXt2YXIgSCwkLEs7IWZ1bmN0aW9uKCl7dmFyIGU9dS5zZWxmKCksdD0wO2Rve2lmKGUgaW5zdGFuY2VvZiB6ZXx8ZSBpbnN0YW5jZW9mIGplKXQrKztlbHNlIGlmKGUgaW5zdGFuY2VvZiBiZSlIPSEwO2Vsc2V7aWYoZSBpbnN0YW5jZW9mIGtlKXtLPWU7YnJlYWt9ZSBpbnN0YW5jZW9mIEllJiYoJD0hMCl9fXdoaWxlKGU9dS5wYXJlbnQodCsrKSl9KCk7Zm9yKHZhciBHLHQ9MTA7Rz0hMSxpKGUpLHUub3B0aW9uKCJkZWFkX2NvZGUiKSYmbyhlLHUpLHUub3B0aW9uKCJpZl9yZXR1cm4iKSYmcihlLHUpLDA8dS5zZXF1ZW5jZXNfbGltaXQmJihhKGUsdSkscyhlLHUpKSx1Lm9wdGlvbigiam9pbl92YXJzIikmJmYoZSksdS5vcHRpb24oImNvbGxhcHNlX3ZhcnMiKSYmbihlLHUpLEcmJjA8dC0tOyk7ZnVuY3Rpb24gbihuLHUpe2lmKEsucGlubmVkKCkpcmV0dXJuIG47Zm9yKHZhciBsLGUsdCxjPVtdLG89bi5sZW5ndGgsYT1uZXcgV3QoZnVuY3Rpb24oZSl7aWYoaylyZXR1cm4gZTtpZigheClyZXR1cm4gZSE9PWlbc10/ZTorK3M8aS5sZW5ndGg/QihlKTooeD0hMCwoaD1mdW5jdGlvbiBlKHQsbixyKXt2YXIgaT1hLnBhcmVudChuKTtpZihpIGluc3RhbmNlb2YgcnQpcmV0dXJuIHImJiEoaS5sZWZ0IGluc3RhbmNlb2YgV2V8fGkubGVmdC5uYW1lIGluIHkpP2UoaSxuKzEscik6dDtpZihpIGluc3RhbmNlb2YgdHQpcmV0dXJuIXJ8fFhbaS5vcGVyYXRvcl0mJmkubGVmdCE9PXQ/dDplKGksbisxLHIpO2lmKGkgaW5zdGFuY2VvZiBLZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgUGUpcmV0dXJuIHQ7aWYoaSBpbnN0YW5jZW9mIG50KXJldHVybiByJiZpLmNvbmRpdGlvbj09PXQ/ZShpLG4rMSxyKTp0O2lmKGkgaW5zdGFuY2VvZiBWZSlyZXR1cm4gZShpLG4rMSwhMCk7aWYoaSBpbnN0YW5jZW9mIEJlKXJldHVybiByP2UoaSxuKzEscik6dDtpZihpIGluc3RhbmNlb2YgVWUpcmV0dXJuIHImJmkuY29uZGl0aW9uPT09dD9lKGksbisxLHIpOnQ7aWYoaSBpbnN0YW5jZW9mIGJlKXJldHVybiB0O2lmKGkgaW5zdGFuY2VvZiBXZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgWWUpcmV0dXJuIGUoaSxuKzEsaS50YWlsX25vZGUoKSE9PXQpO2lmKGkgaW5zdGFuY2VvZiBoZSlyZXR1cm4gZShpLG4rMSwhMCk7aWYoaSBpbnN0YW5jZW9mIE1lKXJldHVybiB0O2lmKGkgaW5zdGFuY2VvZiBKZSlyZXR1cm4gdDtpZihpIGluc3RhbmNlb2YgJGUpcmV0dXJuIHQ7cmV0dXJuIG51bGx9KGUsMCkpPT09ZSYmKGs9ITApLGUpO3ZhciB0LG49YS5wYXJlbnQoKTtpZihmdW5jdGlvbihlLHQpe2lmKHQgaW5zdGFuY2VvZiBFZSlyZXR1cm4gZSE9PXQuaW5pdDtpZihlIGluc3RhbmNlb2YgcnQpcmV0dXJuIj0iIT1lLm9wZXJhdG9yJiZtLmVxdWl2YWxlbnRfdG8oZS5sZWZ0KTtpZihlIGluc3RhbmNlb2YgS2UpcmV0dXJuIG0gaW5zdGFuY2VvZiBXZSYmbS5lcXVpdmFsZW50X3RvKGUuZXhwcmVzc2lvbik7cmV0dXJuIGUgaW5zdGFuY2VvZiBmZXx8KGUgaW5zdGFuY2VvZiBiZT8hKGUgaW5zdGFuY2VvZiBFZSk6ZSBpbnN0YW5jZW9mIExlfHxlIGluc3RhbmNlb2YgSWV8fGUgaW5zdGFuY2VvZiB4ZXx8IXcmJmUgaW5zdGFuY2VvZiBtdCYmIWUuaXNfZGVjbGFyZWQodSkpfShlLG4pKXJldHVybiBrPSEwLGU7aWYoIWQmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0dD9YW3Qub3BlcmF0b3JdJiZ0LmxlZnQhPT1lOnQgaW5zdGFuY2VvZiBudD90LmNvbmRpdGlvbiE9PWU6dCBpbnN0YW5jZW9mIFVlJiZ0LmNvbmRpdGlvbiE9PWV9KGUsbikmJihkPW4pLCFPfHxlIGluc3RhbmNlb2YgbHR8fCEodiYmbS5lcXVpdmFsZW50X3RvKGUpfHxiJiYodD1iKGUsdGhpcykpKSlyZXR1cm4oZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgS2UpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIEJlKXJldHVybiBnfHxtIGluc3RhbmNlb2YgV2V8fGoobSk7aWYoZSBpbnN0YW5jZW9mIERlKXJldHVybiB1Lm9wdGlvbigiaWU4IikmJmUubmFtZSYmZS5uYW1lLm5hbWUgaW4geTtpZihlIGluc3RhbmNlb2YgV2UpcmV0dXJuIGd8fGUuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKHUpO2lmKGUgaW5zdGFuY2VvZiBtdClyZXR1cm4geihlLHQpPyF0fHwiPSIhPXQub3BlcmF0b3J8fHQubGVmdCE9PWU6ZyYmaihlKTtpZihlIGluc3RhbmNlb2YgZ3QpcmV0dXJuIHooZSx0KTtpZihlIGluc3RhbmNlb2YgJGUpcmV0dXJuISFlLnZhbHVlJiYoZS5uYW1lLm5hbWUgaW4geXx8ZyYmaihlLm5hbWUpKTt2YXIgbj1lZShlLmxlZnQsZSk7aWYobiYmbi5uYW1lIGluIHkpcmV0dXJuITA7aWYobiBpbnN0YW5jZW9mIFdlKXJldHVybiEwfShlLG4pfHxFKGUpKSYmKGg9ZSlpbnN0YW5jZW9mIGtlJiYoaz0hMCksQihlKTtpZihkJiYodHx8IV98fCF3KSlyZXR1cm4gaz0hMCxlO2lmKGVlKGUsbikpcmV0dXJuIHAmJkMrKyxlO2lmKEMrKyxwJiZmIGluc3RhbmNlb2YgJGUpcmV0dXJuIGU7aWYoRz1rPSEwLHUuaW5mbygiQ29sbGFwc2luZyB7bmFtZX0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7bmFtZTplLnByaW50X3RvX3N0cmluZygpLGZpbGU6ZS5zdGFydC5maWxlLGxpbmU6ZS5zdGFydC5saW5lLGNvbDplLnN0YXJ0LmNvbH0pLGYgaW5zdGFuY2VvZiBldClyZXR1cm4gUShYZSxmLGYpO2lmKGYgaW5zdGFuY2VvZiAkZSl7dmFyIHI9Zi5uYW1lLmRlZmluaXRpb24oKTtyZXR1cm4gci5yZWZlcmVuY2VzLmxlbmd0aC1yLnJlcGxhY2VkIT0xfHx1LmV4cG9zZWQocik/UShydCxmLHtvcGVyYXRvcjoiPSIsbGVmdDpRKG10LGYubmFtZSxmLm5hbWUpLHJpZ2h0OmYudmFsdWV9KTooci5yZXBsYWNlZCsrLFoodSxuLGUsZi52YWx1ZSkpfXJldHVybiBmLndyaXRlX29ubHk9ITEsZn0sZnVuY3Rpb24oZSl7a3x8KGg9PT1lJiYoaz0hMCksZD09PWUmJihkPW51bGwpKX0pLHI9bmV3IFd0KGZ1bmN0aW9uKGUpe3JldHVybiBrP2U6eD9lIGluc3RhbmNlb2YgbXQmJmUubmFtZT09VC5uYW1lPygtLUN8fChrPSEwKSxlZShlLHIucGFyZW50KCkpP2U6KFQucmVwbGFjZWQrKyxwLnJlcGxhY2VkLS0sZi52YWx1ZS5jbG9uZSgpKSk6ZSBpbnN0YW5jZW9mIE5lfHxlIGluc3RhbmNlb2Yga2U/ZTp2b2lkIDA6ZSE9PWlbc10/ZTorK3M8aS5sZW5ndGg/dm9pZCAwOih4PSEwLGUpfSk7MDw9LS1vOyl7MD09byYmdS5vcHRpb24oInVudXNlZCIpJiZSKCk7dmFyIGk9W107Zm9yKEwobltvXSk7MDxjLmxlbmd0aDspe2k9Yy5wb3AoKTt2YXIgcz0wLGY9aVtpLmxlbmd0aC0xXSxwPW51bGwsaD1udWxsLGQ9bnVsbCxtPUYoZiksZz1tJiZtLmhhc19zaWRlX2VmZmVjdHModSksdj1tJiYhZyYmIVcobSksYj1xKGYgaW5zdGFuY2VvZiBydCYmIj0iPT1mLm9wZXJhdG9yJiZmLnJpZ2h0KTtpZih2fHxiKXt2YXIgeT1NKGYpLF89KHQ9dm9pZCAwLCh0PUooZT1tKSlpbnN0YW5jZW9mIG10JiZ0LmRlZmluaXRpb24oKS5zY29wZT09PUsmJiEoSCYmKHQubmFtZSBpbiB5JiZ5W3QubmFtZV0hPT1lfHxmIGluc3RhbmNlb2YgSmV8fGYgaW5zdGFuY2VvZiBydCYmIj0iIT1mLm9wZXJhdG9yKSkpO2d8fChnPVAoZikpO3ZhciB3PUkoKSxFPWYubWF5X3Rocm93KHUpPyQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaGFzX3NpZGVfZWZmZWN0cyh1KX06VjpyZSxBPWYubmFtZSBpbnN0YW5jZW9mIGZ0LHg9QSxrPSExLEM9MCxPPSFsfHwheDtpZighTyl7Zm9yKHZhciBTPXUuc2VsZigpLmFyZ25hbWVzLmxhc3RJbmRleE9mKGYubmFtZSkrMTshayYmUzxsLmxlbmd0aDtTKyspbFtTXS50cmFuc2Zvcm0oYSk7Tz0hMH1mb3IodmFyIEQ9bzshayYmRDxuLmxlbmd0aDtEKyspbltEXS50cmFuc2Zvcm0oYSk7aWYocCl7dmFyIFQ9Zi5uYW1lLmRlZmluaXRpb24oKTtpZihrJiZULnJlZmVyZW5jZXMubGVuZ3RoLVQucmVwbGFjZWQ+QylDPSExO2Vsc2V7az0hMSxzPTAseD1BO2ZvcihEPW87IWsmJkQ8bi5sZW5ndGg7RCsrKW5bRF0udHJhbnNmb3JtKHIpO3Auc2luZ2xlX3VzZT0hMX19QyYmIU4oZikmJm4uc3BsaWNlKG8sMSl9fX1mdW5jdGlvbiBCKGUpe2lmKGUgaW5zdGFuY2VvZiBrZSlyZXR1cm4gZTtpZihlIGluc3RhbmNlb2YgTWUpe2UuZXhwcmVzc2lvbj1lLmV4cHJlc3Npb24udHJhbnNmb3JtKGEpO2Zvcih2YXIgdD0wLG49ZS5ib2R5Lmxlbmd0aDshayYmdDxuO3QrKyl7dmFyIHI9ZS5ib2R5W3RdO2lmKHIgaW5zdGFuY2VvZiBQZSl7aWYoIXgpe2lmKHIhPT1pW3NdKWNvbnRpbnVlO3MrK31pZihyLmV4cHJlc3Npb249ci5leHByZXNzaW9uLnRyYW5zZm9ybShhKSwhdylicmVha319cmV0dXJuIGs9ITAsZX19ZnVuY3Rpb24gUigpe3ZhciBlLG49dS5zZWxmKCk7aWYobiBpbnN0YW5jZW9mIERlJiYhbi5uYW1lJiYhbi51c2VzX2FyZ3VtZW50cyYmIW4ucGlubmVkKCkmJihlPXUucGFyZW50KCkpaW5zdGFuY2VvZiBLZSYmZS5leHByZXNzaW9uPT09bil7dmFyIHI9dS5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0Iik7ciYmIXRlKHIsbi5ib2R5KSYmKHI9ITEpO3ZhciB0PW4uYXJnbmFtZXMubGVuZ3RoO2w9ZS5hcmdzLnNsaWNlKHQpO2Zvcih2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpLG89dDswPD0tLW87KXt2YXIgYT1uLmFyZ25hbWVzW29dLHM9ZS5hcmdzW29dO2wudW5zaGlmdChRKCRlLGEse25hbWU6YSx2YWx1ZTpzfSkpLGEubmFtZSBpbiBpfHwoaVthLm5hbWVdPSEwLHM/cyBpbnN0YW5jZW9mIE9lJiZzLnBpbm5lZCgpP3M9bnVsbDpzLndhbGsobmV3IER0KGZ1bmN0aW9uKGUpe2lmKCFzKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiBtdCYmbi52YXJpYWJsZXMuaGFzKGUubmFtZSkpe3ZhciB0PWUuZGVmaW5pdGlvbigpLnNjb3BlO2lmKHQhPT1LKWZvcig7dD10LnBhcmVudF9zY29wZTspaWYodD09PUspcmV0dXJuITA7cz1udWxsfXJldHVybiBlIGluc3RhbmNlb2YgZ3QmJihyfHwhdGhpcy5maW5kX3BhcmVudChrZSkpPyEocz1udWxsKTp2b2lkIDB9KSk6cz1RKEF0LGEpLnRyYW5zZm9ybSh1KSxzJiZjLnVuc2hpZnQoW1EoJGUsYSx7bmFtZTphLHZhbHVlOnN9KV0pKX19fWZ1bmN0aW9uIEwoZSl7aWYoaS5wdXNoKGUpLGUgaW5zdGFuY2VvZiBydCljLnB1c2goaS5zbGljZSgpKSxMKGUubGVmdCksTChlLnJpZ2h0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiB0dClMKGUubGVmdCksTChlLnJpZ2h0KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBLZSlMKGUuZXhwcmVzc2lvbiksZS5hcmdzLmZvckVhY2goTCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgUGUpTChlLmV4cHJlc3Npb24pO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG50KUwoZS5jb25kaXRpb24pLEwoZS5jb25zZXF1ZW50KSxMKGUuYWx0ZXJuYXRpdmUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFZlKWUuZGVmaW5pdGlvbnMuZm9yRWFjaChMKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBRZSlMKGUuZXhwcmVzc2lvbik7ZWxzZSBpZihlIGluc3RhbmNlb2YgeWUpTChlLmNvbmRpdGlvbiksZS5ib2R5IGluc3RhbmNlb2YgZGV8fEwoZS5ib2R5KTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBCZSllLnZhbHVlJiZMKGUudmFsdWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEVlKWUuaW5pdCYmTChlLmluaXQpLGUuY29uZGl0aW9uJiZMKGUuY29uZGl0aW9uKSxlLnN0ZXAmJkwoZS5zdGVwKSxlLmJvZHkgaW5zdGFuY2VvZiBkZXx8TChlLmJvZHkpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEFlKUwoZS5vYmplY3QpLGUuYm9keSBpbnN0YW5jZW9mIGRlfHxMKGUuYm9keSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgVWUpTChlLmNvbmRpdGlvbiksZS5ib2R5IGluc3RhbmNlb2YgZGV8fEwoZS5ib2R5KSwhZS5hbHRlcm5hdGl2ZXx8ZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGRlfHxMKGUuYWx0ZXJuYXRpdmUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFllKWUuZXhwcmVzc2lvbnMuZm9yRWFjaChMKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBoZSlMKGUuYm9keSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgWmUpTChlLmV4cHJlc3Npb24pLEwoZS5wcm9wZXJ0eSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgTWUpTChlLmV4cHJlc3Npb24pLGUuYm9keS5mb3JFYWNoKEwpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEplKSIrKyI9PWUub3BlcmF0b3J8fCItLSI9PWUub3BlcmF0b3I/Yy5wdXNoKGkuc2xpY2UoKSk6TChlLmV4cHJlc3Npb24pO2Vsc2UgaWYoZSBpbnN0YW5jZW9mICRlJiZlLnZhbHVlKXt2YXIgdD1lLm5hbWUuZGVmaW5pdGlvbigpO3QucmVmZXJlbmNlcy5sZW5ndGg+dC5yZXBsYWNlZCYmYy5wdXNoKGkuc2xpY2UoKSksTChlLnZhbHVlKX1pLnBvcCgpfWZ1bmN0aW9uIEYoZSl7aWYoIShlIGluc3RhbmNlb2YgJGUpKXJldHVybiBlW2UgaW5zdGFuY2VvZiBydD8ibGVmdCI6ImV4cHJlc3Npb24iXTt2YXIgdD1lLm5hbWUuZGVmaW5pdGlvbigpO2lmKHRlKGUubmFtZSx0Lm9yaWcpKXt2YXIgbj10LnJlZmVyZW5jZXMubGVuZ3RoLXQucmVwbGFjZWQ7cmV0dXJuIDE8dC5vcmlnLmxlbmd0aC10LmVsaW1pbmF0ZWQmJiEoZS5uYW1lIGluc3RhbmNlb2YgZnQpfHwoMTxuP2Z1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7aWYodCBpbnN0YW5jZW9mIG10JiYiYXJndW1lbnRzIiE9dC5uYW1lKXt2YXIgbj10LmRlZmluaXRpb24oKTtpZighbi51bmRlY2xhcmVkKXJldHVybiBwPW59fShlKTohdS5leHBvc2VkKHQpKT9RKG10LGUubmFtZSxlLm5hbWUpOnZvaWQgMH19ZnVuY3Rpb24gcSh0KXtpZighdClyZXR1cm4hMTtpZih0IGluc3RhbmNlb2YgbXQpe3ZhciBlPXQuZXZhbHVhdGUodSk7cmV0dXJuIGU9PT10P2k6VShlLGkpfWlmKHQgaW5zdGFuY2VvZiBndClyZXR1cm4gaTtpZih0LmlzX3RydXRoeSgpKXJldHVybiBVKCEwLHJlKTtpZih0LmlzX2NvbnN0YW50KCkpcmV0dXJuIFUodC5ldmFsdWF0ZSh1KSxpKTtpZighKG0gaW5zdGFuY2VvZiBtdCkpcmV0dXJuITE7aWYoIWZ1bmN0aW9uIGUodCl7cmV0dXJuISh0IGluc3RhbmNlb2YgaXQpJiYodCBpbnN0YW5jZW9mIHR0JiZYW3Qub3BlcmF0b3JdP2UodC5sZWZ0KSYmZSh0LnJpZ2h0KTohKHQgaW5zdGFuY2VvZiBLZSkmJih0IGluc3RhbmNlb2YgbnQ/ZSh0LmNvbnNlcXVlbnQpJiZlKHQuYWx0ZXJuYXRpdmUpOiEodCBpbnN0YW5jZW9mIG90fHx0Lmhhc19zaWRlX2VmZmVjdHModSkpKSl9KHQpKXJldHVybiExO3ZhciBuLHI9bS5kZWZpbml0aW9uKCk7cmV0dXJuIHQud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYobilyZXR1cm4hMDtlIGluc3RhbmNlb2YgbXQmJmUuZGVmaW5pdGlvbigpPT09ciYmKG49ITApfSkpLCFuJiZpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQuZXF1aXZhbGVudF90byhlKX19ZnVuY3Rpb24gVShuLHIpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKHQuaW5fYm9vbGVhbl9jb250ZXh0KCkpe2lmKG4mJmUuaXNfdHJ1dGh5KCkmJiFlLmhhc19zaWRlX2VmZmVjdHModSkpcmV0dXJuITA7aWYoZS5pc19jb25zdGFudCgpKXJldHVybiFlLmV2YWx1YXRlKHUpPT0hbn1yZXR1cm4gcihlKX19ZnVuY3Rpb24gTShlKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2YgaW5zdGFuY2VvZiAkZSYmKG5bZi5uYW1lLm5hbWVdPW0pO3ZhciByPW5ldyBEdChmdW5jdGlvbihlKXt2YXIgdD1KKGUpOyh0IGluc3RhbmNlb2YgbXR8fHQgaW5zdGFuY2VvZiBndCkmJihuW3QubmFtZV09blt0Lm5hbWVdfHxZKHUscixlLGUsMCkpfSk7cmV0dXJuIGUud2FsayhyKSxufWZ1bmN0aW9uIE4ocil7aWYoci5uYW1lIGluc3RhbmNlb2YgZnQpe3ZhciBlPXUuc2VsZigpLmFyZ25hbWVzLmluZGV4T2Yoci5uYW1lKSx0PXUucGFyZW50KCkuYXJncztyZXR1cm4gdFtlXSYmKHRbZV09USh5dCx0W2VdLHt2YWx1ZTowfSkpLCEwfXZhciBpPSExO3JldHVybiBuW29dLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBpP2U6ZT09PXJ8fGUuYm9keT09PXI/ZSBpbnN0YW5jZW9mICRlPyhpPSEwLGUudmFsdWU9bnVsbCxlKTpuPyhpPSEwLG9lLnNraXApOnRoaXMucGFyZW50KCk/dm9pZCAwOihpPSEwLG51bGwpOnZvaWQgMH0sZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIFllKXN3aXRjaChlLmV4cHJlc3Npb25zLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gZS5leHByZXNzaW9uc1swXX19KSl9ZnVuY3Rpb24gUChlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBKZSkmJmZ1bmN0aW9uKGUpe3JldHVybiBlW2UgaW5zdGFuY2VvZiBydD8icmlnaHQiOiJ2YWx1ZSJdfShlKS5oYXNfc2lkZV9lZmZlY3RzKHUpfWZ1bmN0aW9uIEkoKXtpZihnKXJldHVybiExO2lmKHApcmV0dXJuITA7aWYobSBpbnN0YW5jZW9mIG10KXt2YXIgZT1tLmRlZmluaXRpb24oKTtpZihlLnJlZmVyZW5jZXMubGVuZ3RoLWUucmVwbGFjZWQ9PShmIGluc3RhbmNlb2YgJGU/MToyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB6KGUsdCl7dmFyIG49eVtlLm5hbWVdO2lmKG4pcmV0dXJuIG4hPT1tPyEodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT1lKTp2b2lkKGI9ITEpfWZ1bmN0aW9uIGooZSl7dmFyIHQ9ZS5kZWZpbml0aW9uKCk7cmV0dXJuISgxPT10Lm9yaWcubGVuZ3RoJiZ0Lm9yaWdbMF1pbnN0YW5jZW9mIHB0KSYmKHQuc2NvcGUhPT1LfHwhc2UodC5yZWZlcmVuY2VzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjb3BlLnJlc29sdmUoKT09PUt9KSl9ZnVuY3Rpb24gVihlLHQpe2lmKGUgaW5zdGFuY2VvZiBydClyZXR1cm4gVihlLmxlZnQsITApO2lmKGUgaW5zdGFuY2VvZiBKZSlyZXR1cm4gVihlLmV4cHJlc3Npb24sITApO2lmKGUgaW5zdGFuY2VvZiAkZSlyZXR1cm4gZS52YWx1ZSYmVihlLnZhbHVlKTtpZih0KXtpZihlIGluc3RhbmNlb2YgUWUpcmV0dXJuIFYoZS5leHByZXNzaW9uLCEwKTtpZihlIGluc3RhbmNlb2YgWmUpcmV0dXJuIFYoZS5leHByZXNzaW9uLCEwKTtpZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuIGUuZGVmaW5pdGlvbigpLnNjb3BlIT09S31yZXR1cm4hMX19ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KXt2YXIgcj1lW25dO3IgaW5zdGFuY2VvZiBtZT8oRz0hMCxpKHIuYm9keSksW10uc3BsaWNlLmFwcGx5KGUsW24sMV0uY29uY2F0KHIuYm9keSkpLG4rPXIuYm9keS5sZW5ndGgpOnIgaW5zdGFuY2VvZiBnZT8oRz0hMCxlLnNwbGljZShuLDEpKTpyIGluc3RhbmNlb2YgcGU/dC5pbmRleE9mKHIudmFsdWUpPDA/KG4rKyx0LnB1c2goci52YWx1ZSkpOihHPSEwLGUuc3BsaWNlKG4sMSkpOm4rK319ZnVuY3Rpb24gcihpLG4pe2Zvcih2YXIgcj1uLnNlbGYoKSxlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7MDw9LS1uOyl7dmFyIHI9ZVtuXTtpZihyIGluc3RhbmNlb2YgVWUmJnIuYm9keSBpbnN0YW5jZW9mIFJlJiYxPCsrdClyZXR1cm4hMH1yZXR1cm4hMX0oaSksbz1yIGluc3RhbmNlb2YgT2UsdD1pLmxlbmd0aDswPD0tLXQ7KXt2YXIgYT1pW3RdLHM9dih0KSx1PWlbc107aWYobyYmIXUmJmEgaW5zdGFuY2VvZiBSZSl7aWYoIWEudmFsdWUpe0c9ITAsaS5zcGxpY2UodCwxKTtjb250aW51ZX1pZihhLnZhbHVlIGluc3RhbmNlb2YgWGUmJiJ2b2lkIj09YS52YWx1ZS5vcGVyYXRvcil7Rz0hMCxpW3RdPVEoaGUsYSx7Ym9keTphLnZhbHVlLmV4cHJlc3Npb259KTtjb250aW51ZX19aWYoYSBpbnN0YW5jZW9mIFVlKXt2YXIgbDtpZihkKGw9QShhLmJvZHkpKSl7bC5sYWJlbCYmUihsLmxhYmVsLnRoZWRlZi5yZWZlcmVuY2VzLGwpLEc9ITAsKGE9YS5jbG9uZSgpKS5jb25kaXRpb249YS5jb25kaXRpb24ubmVnYXRlKG4pO3ZhciBjPWcoYS5ib2R5LGwpO2EuYm9keT1RKG1lLGEse2JvZHk6XyhhLmFsdGVybmF0aXZlKS5jb25jYXQobSgpKX0pLGEuYWx0ZXJuYXRpdmU9UShtZSxhLHtib2R5OmN9KSxpW3RdPWEudHJhbnNmb3JtKG4pO2NvbnRpbnVlfWlmKGwmJiFhLmFsdGVybmF0aXZlJiZhLmJvZHkgaW5zdGFuY2VvZiBtZSYmdSBpbnN0YW5jZW9mIFUpe3ZhciBmPWEuY29uZGl0aW9uLm5lZ2F0ZShuKTtpZihmLnByaW50X3RvX3N0cmluZygpLmxlbmd0aDw9YS5jb25kaXRpb24ucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoKXtHPSEwLChhPWEuY2xvbmUoKSkuY29uZGl0aW9uPWYsaVtzXT1hLmJvZHksYS5ib2R5PXUsaVt0XT1hLnRyYW5zZm9ybShuKTtjb250aW51ZX19aWYoZChsPUEoYS5hbHRlcm5hdGl2ZSkpKXtsLmxhYmVsJiZSKGwubGFiZWwudGhlZGVmLnJlZmVyZW5jZXMsbCksRz0hMCwoYT1hLmNsb25lKCkpLmJvZHk9UShtZSxhLmJvZHkse2JvZHk6XyhhLmJvZHkpLmNvbmNhdChtKCkpfSk7Yz1nKGEuYWx0ZXJuYXRpdmUsbCk7YS5hbHRlcm5hdGl2ZT1RKG1lLGEuYWx0ZXJuYXRpdmUse2JvZHk6Y30pLGlbdF09YS50cmFuc2Zvcm0obik7Y29udGludWV9fWlmKGEgaW5zdGFuY2VvZiBVZSYmYS5ib2R5IGluc3RhbmNlb2YgUmUpe3ZhciBwPWEuYm9keS52YWx1ZTtpZighcCYmIWEuYWx0ZXJuYXRpdmUmJihvJiYhdXx8dSBpbnN0YW5jZW9mIFJlJiYhdS52YWx1ZSkpe0c9ITAsaVt0XT1RKGhlLGEuY29uZGl0aW9uLHtib2R5OmEuY29uZGl0aW9ufSk7Y29udGludWV9aWYocCYmIWEuYWx0ZXJuYXRpdmUmJnUgaW5zdGFuY2VvZiBSZSYmdS52YWx1ZSl7Rz0hMCwoYT1hLmNsb25lKCkpLmFsdGVybmF0aXZlPXUsaS5zcGxpY2UodCwxLGEudHJhbnNmb3JtKG4pKSxpLnNwbGljZShzLDEpO2NvbnRpbnVlfWlmKHAmJiFhLmFsdGVybmF0aXZlJiYoIXUmJm8mJmV8fHUgaW5zdGFuY2VvZiBSZSkpe0c9ITAsKGE9YS5jbG9uZSgpKS5hbHRlcm5hdGl2ZT11fHxRKFJlLGEse3ZhbHVlOm51bGx9KSxpLnNwbGljZSh0LDEsYS50cmFuc2Zvcm0obikpLHUmJmkuc3BsaWNlKHMsMSk7Y29udGludWV9dmFyIGg9aVtiKHQpXTtpZihuLm9wdGlvbigic2VxdWVuY2VzIikmJm8mJiFhLmFsdGVybmF0aXZlJiZoIGluc3RhbmNlb2YgVWUmJmguYm9keSBpbnN0YW5jZW9mIFJlJiZ2KHMpPT1pLmxlbmd0aCYmdSBpbnN0YW5jZW9mIGhlKXtHPSEwLChhPWEuY2xvbmUoKSkuYWx0ZXJuYXRpdmU9UShtZSx1LHtib2R5Olt1LFEoUmUsdSx7dmFsdWU6bnVsbH0pXX0pLGkuc3BsaWNlKHQsMSxhLnRyYW5zZm9ybShuKSksaS5zcGxpY2UocywxKTtjb250aW51ZX19fWZ1bmN0aW9uIGQoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZSBpbnN0YW5jZW9mIExlP24ubG9vcGNvbnRyb2xfdGFyZ2V0KGUpOm51bGw7cmV0dXJuIGUgaW5zdGFuY2VvZiBSZSYmbyYmZnVuY3Rpb24oZSl7cmV0dXJuIWV8fGUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yfShlLnZhbHVlKXx8ZSBpbnN0YW5jZW9mIHFlJiZyPT09dyh0KXx8ZSBpbnN0YW5jZW9mIEZlJiZ0IGluc3RhbmNlb2YgbWUmJnI9PT10fWZ1bmN0aW9uIG0oKXt2YXIgZT1pLnNsaWNlKHQrMSk7cmV0dXJuIGkubGVuZ3RoPXQrMSxlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBUZSl8fChpLnB1c2goZSksITEpfSl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPV8oZSkuc2xpY2UoMCwtMSk7cmV0dXJuIHQudmFsdWUmJm4ucHVzaChRKGhlLHQudmFsdWUse2JvZHk6dC52YWx1ZS5leHByZXNzaW9ufSkpLG59ZnVuY3Rpb24gdihlKXtmb3IodmFyIHQ9ZSsxLG49aS5sZW5ndGg7dDxuO3QrKyl7dmFyIHI9aVt0XTtpZighKHIgaW5zdGFuY2VvZiBIZSYmeShyKSkpYnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gYihlKXtmb3IodmFyIHQ9ZTswPD0tLXQ7KXt2YXIgbj1pW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhlJiZ5KG4pKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gbyh0LG4pe2Zvcih2YXIgZSxyPW4uc2VsZigpLGk9MCxvPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXt2YXIgcz10W2ldO2lmKHMgaW5zdGFuY2VvZiBMZSl7dmFyIHU9bi5sb29wY29udHJvbF90YXJnZXQocyk7cyBpbnN0YW5jZW9mIEZlJiYhKHUgaW5zdGFuY2VvZiBiZSkmJncodSk9PT1yfHxzIGluc3RhbmNlb2YgcWUmJncodSk9PT1yP3MubGFiZWwmJlIocy5sYWJlbC50aGVkZWYucmVmZXJlbmNlcyxzKTp0W28rK109c31lbHNlIHRbbysrXT1zO2lmKEEocykpe2U9dC5zbGljZShpKzEpO2JyZWFrfX10Lmxlbmd0aD1vLEc9byE9YSxlJiZlLmZvckVhY2goZnVuY3Rpb24oZSl7RShuLGUsdCl9KX1mdW5jdGlvbiB5KGUpe3JldHVybiBzZShlLmRlZmluaXRpb25zLGZ1bmN0aW9uKGUpe3JldHVybiFlLnZhbHVlfSl9ZnVuY3Rpb24gYSh0LGUpe2lmKCEodC5sZW5ndGg8Mikpe2Zvcih2YXIgbj1bXSxyPTAsaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7dmFyIGE9dFtpXTtpZihhIGluc3RhbmNlb2YgaGUpe24ubGVuZ3RoPj1lLnNlcXVlbmNlc19saW1pdCYmdSgpO3ZhciBzPWEuYm9keTswPG4ubGVuZ3RoJiYocz1zLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKSkscyYmaChuLHMpfWVsc2UgYSBpbnN0YW5jZW9mIFZlJiZ5KGEpfHxhIGluc3RhbmNlb2YgVGV8fHUoKSx0W3IrK109YX11KCksKHQubGVuZ3RoPXIpIT1vJiYoRz0hMCl9ZnVuY3Rpb24gdSgpe2lmKG4ubGVuZ3RoKXt2YXIgZT1OKG5bMF0sbik7dFtyKytdPVEoaGUsZSx7Ym9keTplfSksbj1bXX19fWZ1bmN0aW9uIHAoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBtZSkpcmV0dXJuIGU7Zm9yKHZhciBuPW51bGwscj0wLGk9ZS5ib2R5Lmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lLmJvZHlbcl07aWYobyBpbnN0YW5jZW9mIEhlJiZ5KG8pKXQucHVzaChvKTtlbHNle2lmKG4pcmV0dXJuITE7bj1vfX1yZXR1cm4gbn1mdW5jdGlvbiBzKGUsbil7ZnVuY3Rpb24gdChlKXtpLS0sRz0hMDt2YXIgdD1yLmJvZHk7cmV0dXJuIE4odCxbdCxlXSkudHJhbnNmb3JtKG4pfWZvcih2YXIgcixpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgYT1lW29dO2lmKHIpaWYoYSBpbnN0YW5jZW9mIEJlKWEudmFsdWU9dChhLnZhbHVlfHxRKEF0LGEpLnRyYW5zZm9ybShuKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgRWUpe2lmKCEoYS5pbml0IGluc3RhbmNlb2YgVmUpKXt2YXIgcz0hMTtyLmJvZHkud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISEoc3x8ZSBpbnN0YW5jZW9mIGtlKXx8KGUgaW5zdGFuY2VvZiB0dCYmImluIj09ZS5vcGVyYXRvcj9zPSEwOnZvaWQgMCl9KSksc3x8KGEuaW5pdD9hLmluaXQ9dChhLmluaXQpOihhLmluaXQ9ci5ib2R5LGktLSxHPSEwKSl9fWVsc2UgYSBpbnN0YW5jZW9mIEFlP2Eub2JqZWN0PXQoYS5vYmplY3QpOmEgaW5zdGFuY2VvZiBVZT9hLmNvbmRpdGlvbj10KGEuY29uZGl0aW9uKTphIGluc3RhbmNlb2YgTWU/YS5leHByZXNzaW9uPXQoYS5leHByZXNzaW9uKTphIGluc3RhbmNlb2YgeGUmJihhLmV4cHJlc3Npb249dChhLmV4cHJlc3Npb24pKTtpZihuLm9wdGlvbigiY29uZGl0aW9uYWxzIikmJmEgaW5zdGFuY2VvZiBVZSl7dmFyIHU9W10sbD1wKGEuYm9keSx1KSxjPXAoYS5hbHRlcm5hdGl2ZSx1KTtpZighMSE9PWwmJiExIT09YyYmMDx1Lmxlbmd0aCl7dmFyIGY9dS5sZW5ndGg7dS5wdXNoKFEoVWUsYSx7Y29uZGl0aW9uOmEuY29uZGl0aW9uLGJvZHk6bHx8UShnZSxhLmJvZHkpLGFsdGVybmF0aXZlOmN9KSksdS51bnNoaWZ0KGksMSksW10uc3BsaWNlLmFwcGx5KGUsdSksbys9ZixpKz1mKzEsRz0hKHI9bnVsbCk7Y29udGludWV9fWVbaSsrXT1hLHI9YSBpbnN0YW5jZW9mIGhlP2E6bnVsbH1lLmxlbmd0aD1pfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbjtpZih0IGluc3RhbmNlb2YgcnQ/bj1bdF06dCBpbnN0YW5jZW9mIFllJiYobj10LmV4cHJlc3Npb25zLnNsaWNlKCkpLG4pe2lmKGUgaW5zdGFuY2VvZiBWZSl7dmFyIHI9ZS5kZWZpbml0aW9uc1tlLmRlZmluaXRpb25zLmxlbmd0aC0xXTtpZihjKHIubmFtZSxyLnZhbHVlLG4pKXJldHVybiBufWZvcih2YXIgaT1uLmxlbmd0aC0xOzA8PS0taTspe3ZhciBvPW5baV07aWYobyBpbnN0YW5jZW9mIHJ0JiYoIj0iPT1vLm9wZXJhdG9yJiZvLmxlZnQgaW5zdGFuY2VvZiBtdCkpe3ZhciBhPW4uc2xpY2UoaSsxKTtpZihjKG8ubGVmdCxvLnJpZ2h0LGEpKXJldHVybiBuLnNsaWNlKDAsaSsxKS5jb25jYXQoYSl9fX19ZnVuY3Rpb24gYyhlLHQsbil7aWYodCBpbnN0YW5jZW9mIG90KXt2YXIgcj0hMTtkb3t2YXIgaT1uWzBdO2lmKCEoaSBpbnN0YW5jZW9mIHJ0KSlicmVhaztpZigiPSIhPWkub3BlcmF0b3IpYnJlYWs7aWYoIShpLmxlZnQgaW5zdGFuY2VvZiBXZSkpYnJlYWs7dmFyIG89aS5sZWZ0LmV4cHJlc3Npb247aWYoIShvIGluc3RhbmNlb2YgbXQpKWJyZWFrO2lmKGUubmFtZSE9by5uYW1lKWJyZWFrO2lmKCFpLnJpZ2h0LmlzX2NvbnN0YW50X2V4cHJlc3Npb24oSykpYnJlYWs7dmFyIGE9aS5sZWZ0LnByb3BlcnR5O2lmKGEgaW5zdGFuY2VvZiBsZSYmKGE9YS5ldmFsdWF0ZSh1KSksYSBpbnN0YW5jZW9mIGxlKWJyZWFrO2E9IiIrYTt2YXIgcz11Lmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKT9mdW5jdGlvbihlKXtyZXR1cm4gZS5rZXkhPWEmJmUua2V5Lm5hbWUhPWF9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmtleS5uYW1lIT1hfTtpZighc2UodC5wcm9wZXJ0aWVzLHMpKWJyZWFrO3QucHJvcGVydGllcy5wdXNoKFEoc3QsaSx7a2V5OmEsdmFsdWU6aS5yaWdodH0pKSxuLnNoaWZ0KCkscj0hMH13aGlsZShuLmxlbmd0aCk7cmV0dXJuIHJ9fWZ1bmN0aW9uIGYocil7Zm9yKHZhciBlLHQ9MCxpPS0xLG49ci5sZW5ndGg7dDxuO3QrKyl7dmFyIG89clt0XSxhPXJbaV07aWYobyBpbnN0YW5jZW9mIFZlKWEmJmEuVFlQRT09by5UWVBFPyhhLmRlZmluaXRpb25zPWEuZGVmaW5pdGlvbnMuY29uY2F0KG8uZGVmaW5pdGlvbnMpLEc9ITApOmUmJmUuVFlQRT09by5UWVBFJiZ5KG8pPyhlLmRlZmluaXRpb25zPWUuZGVmaW5pdGlvbnMuY29uY2F0KG8uZGVmaW5pdGlvbnMpLEc9ITApOmU9clsrK2ldPW87ZWxzZSBpZihvIGluc3RhbmNlb2YgQmUpby52YWx1ZT11KG8udmFsdWUpO2Vsc2UgaWYobyBpbnN0YW5jZW9mIEVlKXsocz1sKGEsby5pbml0KSk/KEc9ITAsby5pbml0PXMubGVuZ3RoP04oby5pbml0LHMpOm51bGwsclsrK2ldPW8pOmEgaW5zdGFuY2VvZiBIZSYmKCFvLmluaXR8fG8uaW5pdC5UWVBFPT1hLlRZUEUpPyhvLmluaXQmJihhLmRlZmluaXRpb25zPWEuZGVmaW5pdGlvbnMuY29uY2F0KG8uaW5pdC5kZWZpbml0aW9ucykpLG8uaW5pdD1hLHJbaV09byxHPSEwKTplJiZvLmluaXQmJmUuVFlQRT09by5pbml0LlRZUEUmJnkoby5pbml0KT8oZS5kZWZpbml0aW9ucz1lLmRlZmluaXRpb25zLmNvbmNhdChvLmluaXQuZGVmaW5pdGlvbnMpLG8uaW5pdD1udWxsLHJbKytpXT1vLEc9ITApOnJbKytpXT1vfWVsc2UgaWYobyBpbnN0YW5jZW9mIEFlKW8ub2JqZWN0PXUoby5vYmplY3QpO2Vsc2UgaWYobyBpbnN0YW5jZW9mIFVlKW8uY29uZGl0aW9uPXUoby5jb25kaXRpb24pO2Vsc2UgaWYobyBpbnN0YW5jZW9mIGhlKXt2YXIgcztpZihzPWwoYSxvLmJvZHkpKXtpZihHPSEwLCFzLmxlbmd0aCljb250aW51ZTtvLmJvZHk9TihvLmJvZHkscyl9clsrK2ldPW99ZWxzZSBvIGluc3RhbmNlb2YgTWU/by5leHByZXNzaW9uPXUoby5leHByZXNzaW9uKTpvIGluc3RhbmNlb2YgeGU/by5leHByZXNzaW9uPXUoby5leHByZXNzaW9uKTpyWysraV09b31mdW5jdGlvbiB1KGUpe3JbKytpXT1vO3ZhciB0PWwoYSxlKTtpZighdClyZXR1cm4gZTtHPSEwO3ZhciBuPWUudGFpbF9ub2RlKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV0hPT1uJiZ0LnB1c2gobi5sZWZ0KSxOKGUsdCl9ci5sZW5ndGg9aSsxfX1mdW5jdGlvbiBFKHQsZSxuKXtlIGluc3RhbmNlb2YgVGV8fHQud2FybigiRHJvcHBpbmcgdW5yZWFjaGFibGUgY29kZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLGUud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBWZT8odC53YXJuKCJEZWNsYXJhdGlvbnMgaW4gdW5yZWFjaGFibGUgY29kZSEgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLnN0YXJ0KSxlLnJlbW92ZV9pbml0aWFsaXplcnMoKSxuLnB1c2goZSksITApOmUgaW5zdGFuY2VvZiBUZT8obi5wdXNoKGUpLCEwKTplIGluc3RhbmNlb2Yga2V8fHZvaWQgMH0pKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdnQ/ZS5nZXRWYWx1ZSgpOmUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yJiZlLmV4cHJlc3Npb24gaW5zdGFuY2VvZiB2dD92b2lkIDA6ZX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGUuaXNfdW5kZWZpbmVkfHxlIGluc3RhbmNlb2YgQXR8fGUgaW5zdGFuY2VvZiBYZSYmInZvaWQiPT1lLm9wZXJhdG9yJiYhZS5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHModCl9KG49ZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfdHJ1dGh5Iix0KX0pKGxlLHJlKSxuKGl0LGllKSxuKHJ0LGZ1bmN0aW9uKCl7cmV0dXJuIj0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX3RydXRoeSgpfSksbihPZSxpZSksbihvdCxpZSksbihfdCxpZSksbihZZSxmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhaWxfbm9kZSgpLmlzX3RydXRoeSgpfSksbihtdCxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZml4ZWRfdmFsdWUoKTtpZighZSlyZXR1cm4hMTt0aGlzLmlzX3RydXRoeT1yZTt2YXIgdD1lLmlzX3RydXRoeSgpO3JldHVybiBkZWxldGUgdGhpcy5pc190cnV0aHksdH0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuL3N0cmljdC8udGVzdChlLm9wdGlvbigicHVyZV9nZXR0ZXJzIikpfWxlLkRFRk1FVEhPRCgibWF5X3Rocm93X29uX2FjY2VzcyIsZnVuY3Rpb24oZSl7cmV0dXJuIWUub3B0aW9uKCJwdXJlX2dldHRlcnMiKXx8dGhpcy5fZG90X3Rocm93KGUpfSksZShsZSxyKSxlKGl0LHJlKSxlKHJ0LGZ1bmN0aW9uKGUpe3JldHVybiI9Ij09dGhpcy5vcGVyYXRvciYmdGhpcy5yaWdodC5fZG90X3Rocm93KGUpfSksZSh0dCxmdW5jdGlvbihlKXtyZXR1cm4oIiYmIj09dGhpcy5vcGVyYXRvcnx8Inx8Ij09dGhpcy5vcGVyYXRvcikmJih0aGlzLmxlZnQuX2RvdF90aHJvdyhlKXx8dGhpcy5yaWdodC5fZG90X3Rocm93KGUpKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5fZG90X3Rocm93KGUpfHx0aGlzLmFsdGVybmF0aXZlLl9kb3RfdGhyb3coZSl9KSxlKHZ0LHJlKSxlKFFlLGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIG10JiYodD10LmZpeGVkX3ZhbHVlKCkpLCEodCBpbnN0YW5jZW9mIE9lJiYicHJvdG90eXBlIj09dGhpcy5wcm9wZXJ0eSl9KSxlKE9lLHJlKSxlKHd0LGllKSxlKG90LGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybiExO2Zvcih2YXIgdD10aGlzLnByb3BlcnRpZXMubGVuZ3RoOzA8PS0tdDspaWYodGhpcy5wcm9wZXJ0aWVzW3RdLnZhbHVlIGluc3RhbmNlb2YgU2UpcmV0dXJuITA7cmV0dXJuITF9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRhaWxfbm9kZSgpLl9kb3RfdGhyb3coZSl9KSxlKG10LGZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNfdW5kZWZpbmVkKXJldHVybiEwO2lmKCFyKGUpKXJldHVybiExO2lmKGoodGhpcykmJnRoaXMuaXNfZGVjbGFyZWQoZSkpcmV0dXJuITE7aWYodGhpcy5pc19pbW11dGFibGUoKSlyZXR1cm4hMTt2YXIgdD10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIXQpcmV0dXJuITA7dGhpcy5fZG90X3Rocm93PWllO3ZhciBuPXQuX2RvdF90aHJvdyhlKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2RvdF90aHJvdyxufSksZShYZSxmdW5jdGlvbigpe3JldHVybiJ2b2lkIj09dGhpcy5vcGVyYXRvcn0pLGUoZXQscmUpLGUoQXQsaWUpfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJfZG90X3Rocm93Iix0KX0pLGZ1bmN0aW9uKGUpe2UobGUscmUpLGUocnQsZnVuY3Rpb24oZSl7cmV0dXJuIj0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX2Jvb2xlYW4oZSl9KTt2YXIgdD1hZSgiaW4gaW5zdGFuY2VvZiA9PSAhPSA9PT0gIT09IDwgPD0gPj0gPiIpO2UodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRbdGhpcy5vcGVyYXRvcl18fFhbdGhpcy5vcGVyYXRvcl0mJnRoaXMubGVmdC5pc19ib29sZWFuKGUpJiZ0aGlzLnJpZ2h0LmlzX2Jvb2xlYW4oZSl9KSxlKEN0LGllKTt2YXIgbj1hZSgiZXZlcnkgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSBzb21lIik7ZShLZSxmdW5jdGlvbihlKXtpZighZS5vcHRpb24oInVuc2FmZSIpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIFFlJiYoblt0LnByb3BlcnR5XXx8InRlc3QiPT10LnByb3BlcnR5JiZ0LmV4cHJlc3Npb24gaW5zdGFuY2VvZiBfdCl9KSxlKG50LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnNlcXVlbnQuaXNfYm9vbGVhbihlKSYmdGhpcy5hbHRlcm5hdGl2ZS5pc19ib29sZWFuKGUpfSksZShHZSxyZSksZShZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19ib29sZWFuKGUpfSksZShtdCxmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIXQpcmV0dXJuITE7dGhpcy5pc19ib29sZWFuPXJlO3ZhciBuPXQuaXNfYm9vbGVhbihlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfYm9vbGVhbixufSk7dmFyIHI9YWUoIiEgZGVsZXRlIik7ZShYZSxmdW5jdGlvbigpe3JldHVybiByW3RoaXMub3BlcmF0b3JdfSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImlzX2Jvb2xlYW4iLHQpfSksZnVuY3Rpb24oZSl7ZShsZSxyZSk7dmFyIHQ9YWUoIi0gKiAvICUgJiB8IF4gPDwgPj4gPj4+Iik7ZShydCxmdW5jdGlvbihlKXtyZXR1cm4gdFt0aGlzLm9wZXJhdG9yLnNsaWNlKDAsLTEpXXx8Ij0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLnJpZ2h0LmlzX251bWJlcihlKX0pLGUodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRbdGhpcy5vcGVyYXRvcl18fCIrIj09dGhpcy5vcGVyYXRvciYmdGhpcy5sZWZ0LmlzX251bWJlcihlKSYmdGhpcy5yaWdodC5pc19udW1iZXIoZSl9KTt2YXIgbj1hZShbImNoYXJDb2RlQXQiLCJnZXREYXRlIiwiZ2V0RGF5IiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbGxpc2Vjb25kcyIsImdldE1pbnV0ZXMiLCJnZXRNb250aCIsImdldFNlY29uZHMiLCJnZXRUaW1lIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRVVENEYXRlIiwiZ2V0VVRDRGF5IiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENIb3VycyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJnZXRVVENNb250aCIsImdldFVUQ1NlY29uZHMiLCJnZXRZZWFyIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwibG9jYWxlQ29tcGFyZSIsInB1c2giLCJzZWFyY2giLCJzZXREYXRlIiwic2V0RnVsbFllYXIiLCJzZXRIb3VycyIsInNldE1pbGxpc2Vjb25kcyIsInNldE1pbnV0ZXMiLCJzZXRNb250aCIsInNldFNlY29uZHMiLCJzZXRUaW1lIiwic2V0VVRDRGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0VVRDSG91cnMiLCJzZXRVVENNaWxsaXNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0VVRDTW9udGgiLCJzZXRVVENTZWNvbmRzIiwic2V0WWVhciIsInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkIiwidG9QcmVjaXNpb24iXSk7ZShLZSxmdW5jdGlvbihlKXtpZighZS5vcHRpb24oInVuc2FmZSIpKXJldHVybiExO3ZhciB0PXRoaXMuZXhwcmVzc2lvbjtyZXR1cm4gdCBpbnN0YW5jZW9mIFFlJiYoblt0LnByb3BlcnR5XXx8aih0LmV4cHJlc3Npb24pJiYiTWF0aCI9PXQuZXhwcmVzc2lvbi5uYW1lKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5pc19udW1iZXIoZSkmJnRoaXMuYWx0ZXJuYXRpdmUuaXNfbnVtYmVyKGUpfSksZShHZSxyZSksZSh5dCxpZSksZShZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19udW1iZXIoZSl9KSxlKG10LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZml4ZWRfdmFsdWUoKTtpZighdClyZXR1cm4hMTt0aGlzLmlzX251bWJlcj1yZTt2YXIgbj10LmlzX251bWJlcihlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfbnVtYmVyLG59KTt2YXIgcj1hZSgiKyAtIH4gKysgLS0iKTtlKEplLGZ1bmN0aW9uKCl7cmV0dXJuIHJbdGhpcy5vcGVyYXRvcl19KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfbnVtYmVyIix0KX0pLChyPWZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImlzX3N0cmluZyIsdCl9KShsZSxyZSkscihydCxmdW5jdGlvbihlKXtyZXR1cm4oIj0iPT10aGlzLm9wZXJhdG9yfHwiKz0iPT10aGlzLm9wZXJhdG9yKSYmdGhpcy5yaWdodC5pc19zdHJpbmcoZSl9KSxyKHR0LGZ1bmN0aW9uKGUpe3JldHVybiIrIj09dGhpcy5vcGVyYXRvciYmKHRoaXMubGVmdC5pc19zdHJpbmcoZSl8fHRoaXMucmlnaHQuaXNfc3RyaW5nKGUpKX0pLHIobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc2VxdWVudC5pc19zdHJpbmcoZSkmJnRoaXMuYWx0ZXJuYXRpdmUuaXNfc3RyaW5nKGUpfSkscihZZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50YWlsX25vZGUoKS5pc19zdHJpbmcoZSl9KSxyKGJ0LGllKSxyKG10LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZml4ZWRfdmFsdWUoKTtpZighdClyZXR1cm4hMTt0aGlzLmlzX3N0cmluZz1yZTt2YXIgbj10LmlzX3N0cmluZyhlKTtyZXR1cm4gZGVsZXRlIHRoaXMuaXNfc3RyaW5nLG59KSxyKFhlLGZ1bmN0aW9uKCl7cmV0dXJuInR5cGVvZiI9PXRoaXMub3BlcmF0b3J9KTt2YXIgWD1hZSgiJiYgfHwiKSxzPWFlKCJkZWxldGUgKysgLS0iKTtmdW5jdGlvbiBlZShlLHQpe3JldHVybiB0IGluc3RhbmNlb2YgSmUmJnNbdC5vcGVyYXRvcl0/dC5leHByZXNzaW9uOnQgaW5zdGFuY2VvZiBydCYmdC5sZWZ0PT09ZT9lOnZvaWQgMH1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGUucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoPnQucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoP3Q6ZX1mdW5jdGlvbiBIKGUsdCxuKXtyZXR1cm4oRihlKT9mdW5jdGlvbihlLHQpe3JldHVybiB5KFEoaGUsZSx7Ym9keTplfSksUShoZSx0LHtib2R5OnR9KSkuYm9keX06eSkodCxuKX1mdW5jdGlvbiBsKGUpe2Zvcih2YXIgdCBpbiBlKWVbdF09YWUoZVt0XSl9IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0KXtlLndhcm4oImdsb2JhbF9kZWZzICIrdC5wcmludF90b19zdHJpbmcoKSsiIHJlZGVmaW5lZCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHQuc3RhcnQpfUNlLkRFRk1FVEhPRCgicmVzb2x2ZV9kZWZpbmVzIixmdW5jdGlvbihvKXtyZXR1cm4gby5vcHRpb24oImdsb2JhbF9kZWZzIik/KHRoaXMuZmlndXJlX291dF9zY29wZSh7aWU4Om8ub3B0aW9uKCJpZTgiKX0pLHRoaXMudHJhbnNmb3JtKG5ldyBXdChmdW5jdGlvbihlKXt2YXIgdD1lLl9maW5kX2RlZnMobywiIik7aWYodCl7Zm9yKHZhciBuLHI9MCxpPWU7KG49dGhpcy5wYXJlbnQocisrKSkmJm4gaW5zdGFuY2VvZiBXZSYmbi5leHByZXNzaW9uPT09aTspaT1uO2lmKCFlZShpLG4pKXJldHVybiB0O2EobyxlKX19KSkpOnRoaXN9KSxlKGxlLG5lKSxlKFFlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5fZmluZF9kZWZzKGUsIi4iK3RoaXMucHJvcGVydHkrdCl9KSxlKGx0LGZ1bmN0aW9uKGUpe3RoaXMuZ2xvYmFsKCkmJnVlKGUub3B0aW9uKCJnbG9iYWxfZGVmcyIpLHRoaXMubmFtZSkmJmEoZSx0aGlzKX0pLGUobXQsZnVuY3Rpb24oZSx0KXtpZih0aGlzLmdsb2JhbCgpKXt2YXIgbj1lLm9wdGlvbigiZ2xvYmFsX2RlZnMiKSxyPXRoaXMubmFtZSt0O3JldHVybiB1ZShuLHIpP2Z1bmN0aW9uIHQoZSxuKXtpZihlIGluc3RhbmNlb2YgbGUpcmV0dXJuIFEoZS5DVE9SLG4sZSk7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gUShpdCxuLHtlbGVtZW50czplLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLG4pfSl9KTtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPVtdO2Zvcih2YXIgaSBpbiBlKXVlKGUsaSkmJnIucHVzaChRKHN0LG4se2tleTppLHZhbHVlOnQoZVtpXSxuKX0pKTtyZXR1cm4gUShvdCxuLHtwcm9wZXJ0aWVzOnJ9KX1yZXR1cm4gUChlLG4pfShuW3JdLHRoaXMpOnZvaWQgMH19KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiX2ZpbmRfZGVmcyIsdCl9KTt2YXIgdT1bImNvbnN0cnVjdG9yIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sbT17QXJyYXk6WyJpbmRleE9mIiwiam9pbiIsImxhc3RJbmRleE9mIiwic2xpY2UiXS5jb25jYXQodSksQm9vbGVhbjp1LEZ1bmN0aW9uOnUsTnVtYmVyOlsidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiJdLmNvbmNhdCh1KSxPYmplY3Q6dSxSZWdFeHA6WyJ0ZXN0Il0uY29uY2F0KHUpLFN0cmluZzpbImNoYXJBdCIsImNoYXJDb2RlQXQiLCJjb25jYXQiLCJpbmRleE9mIiwiaXRhbGljcyIsImxhc3RJbmRleE9mIiwibWF0Y2giLCJyZXBsYWNlIiwic2VhcmNoIiwic2xpY2UiLCJzcGxpdCIsInN1YnN0ciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJ0cmltIl0uY29uY2F0KHUpfTtsKG0pO3ZhciBiPXtBcnJheTpbImlzQXJyYXkiXSxNYXRoOlsiYWJzIiwiYWNvcyIsImFzaW4iLCJhdGFuIiwiY2VpbCIsImNvcyIsImV4cCIsImZsb29yIiwibG9nIiwicm91bmQiLCJzaW4iLCJzcXJ0IiwidGFuIiwiYXRhbjIiLCJwb3ciLCJtYXgiLCJtaW4iXSxOdW1iZXI6WyJpc0Zpbml0ZSIsImlzTmFOIl0sT2JqZWN0OlsiY3JlYXRlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldFByb3RvdHlwZU9mIiwiaXNFeHRlbnNpYmxlIiwiaXNGcm96ZW4iLCJpc1NlYWxlZCIsImtleXMiXSxTdHJpbmc6WyJmcm9tQ2hhckNvZGUiXX07bChiKSxmdW5jdGlvbihlKXtsZS5ERUZNRVRIT0QoImV2YWx1YXRlIixmdW5jdGlvbihlKXtpZighZS5vcHRpb24oImV2YWx1YXRlIikpcmV0dXJuIHRoaXM7dmFyIHQ9W10sbj10aGlzLl9ldmFsKGUsdCwxKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RlbGV0ZSBlLl9ldmFsfSksIW58fG4gaW5zdGFuY2VvZiBSZWdFeHA/bjoiZnVuY3Rpb24iPT10eXBlb2Ygbnx8Im9iamVjdCI9PXR5cGVvZiBuP3RoaXM6bn0pO3ZhciB0PWFlKCIhIH4gLSArIHZvaWQiKTtsZS5ERUZNRVRIT0QoImlzX2NvbnN0YW50IixmdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgdnQ/ISh0aGlzIGluc3RhbmNlb2YgX3QpOnRoaXMgaW5zdGFuY2VvZiBYZSYmdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgdnQmJnRbdGhpcy5vcGVyYXRvcl19KSxlKGNlLGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEIoIkNhbm5vdCBldmFsdWF0ZSBhIHN0YXRlbWVudCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHRoaXMuc3RhcnQpKX0pLGUoT2UsRCksZShsZSxEKSxlKHZ0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0pLGUoRGUsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJuIHQubm9kZT10aGlzLHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24oKXt9In0sdH1yZXR1cm4gdGhpc30pLGUoaXQsZnVuY3Rpb24oZSx0LG4pe2lmKGUub3B0aW9uKCJ1bnNhZmUiKSl7Zm9yKHZhciByPVtdLGk9MCxvPXRoaXMuZWxlbWVudHMubGVuZ3RoO2k8bztpKyspe3ZhciBhPXRoaXMuZWxlbWVudHNbaV0scz1hLl9ldmFsKGUsdCxuKTtpZihhPT09cylyZXR1cm4gdGhpcztyLnB1c2gocyl9cmV0dXJuIHJ9cmV0dXJuIHRoaXN9KSxlKG90LGZ1bmN0aW9uKGUsdCxuKXtpZihlLm9wdGlvbigidW5zYWZlIikpe2Zvcih2YXIgcj17fSxpPTAsbz10aGlzLnByb3BlcnRpZXMubGVuZ3RoO2k8bztpKyspe3ZhciBhPXRoaXMucHJvcGVydGllc1tpXSxzPWEua2V5O2lmKHMgaW5zdGFuY2VvZiB1dClzPXMubmFtZTtlbHNlIGlmKHMgaW5zdGFuY2VvZiBsZSYmKHM9cy5fZXZhbChlLHQsbikpPT09YS5rZXkpcmV0dXJuIHRoaXM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5wcm90b3R5cGVbc10pcmV0dXJuIHRoaXM7aWYoIShhLnZhbHVlIGluc3RhbmNlb2YgRGUpJiYocltzXT1hLnZhbHVlLl9ldmFsKGUsdCxuKSxyW3NdPT09YS52YWx1ZSkpcmV0dXJuIHRoaXN9cmV0dXJuIHJ9cmV0dXJuIHRoaXN9KTt2YXIgYT1hZSgiISB0eXBlb2Ygdm9pZCIpO2UoWGUsZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZXhwcmVzc2lvbjtpZihlLm9wdGlvbigidHlwZW9mcyIpJiYidHlwZW9mIj09dGhpcy5vcGVyYXRvciYmKHIgaW5zdGFuY2VvZiBPZXx8ciBpbnN0YW5jZW9mIG10JiZyLmZpeGVkX3ZhbHVlKClpbnN0YW5jZW9mIE9lKSlyZXR1cm4iZnVuY3Rpb24iO2FbdGhpcy5vcGVyYXRvcl18fG4rKzt2YXIgaT1yLl9ldmFsKGUsdCxuKTtpZihpPT09dGhpcy5leHByZXNzaW9uKXJldHVybiB0aGlzO3N3aXRjaCh0aGlzLm9wZXJhdG9yKXtjYXNlIiEiOnJldHVybiFpO2Nhc2UidHlwZW9mIjpyZXR1cm4gaSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzOnR5cGVvZiBpO2Nhc2Uidm9pZCI6cmV0dXJuO2Nhc2UifiI6cmV0dXJufmk7Y2FzZSItIjpyZXR1cm4taTtjYXNlIisiOnJldHVybitpO2Nhc2UiKysiOmNhc2UiLS0iOmlmKHIgaW5zdGFuY2VvZiBtdCl7dmFyIG89ci5kZWZpbml0aW9uKCkucmVmZXJlbmNlcztpZihvW28ubGVuZ3RoLTFdPT09cilyZXR1cm4gaX19cmV0dXJuIHRoaXN9KTt2YXIgcz1hZSgiJiYgfHwgPT09ICE9PSIpO2UodHQsZnVuY3Rpb24oZSx0LG4pe3NbdGhpcy5vcGVyYXRvcl18fG4rKzt2YXIgcj10aGlzLmxlZnQuX2V2YWwoZSx0LG4pO2lmKHI9PT10aGlzLmxlZnQpcmV0dXJuIHRoaXM7dmFyIGksbz10aGlzLnJpZ2h0Ll9ldmFsKGUsdCxuKTtpZihvPT09dGhpcy5yaWdodClyZXR1cm4gdGhpcztzd2l0Y2godGhpcy5vcGVyYXRvcil7Y2FzZSImJiI6aT1yJiZvO2JyZWFrO2Nhc2UifHwiOmk9cnx8bzticmVhaztjYXNlInwiOmk9cnxvO2JyZWFrO2Nhc2UiJiI6aT1yJm87YnJlYWs7Y2FzZSJeIjppPXJebzticmVhaztjYXNlIisiOmk9citvO2JyZWFrO2Nhc2UiKiI6aT1yKm87YnJlYWs7Y2FzZSIvIjppPXIvbzticmVhaztjYXNlIiUiOmk9ciVvO2JyZWFrO2Nhc2UiLSI6aT1yLW87YnJlYWs7Y2FzZSI8PCI6aT1yPDxvO2JyZWFrO2Nhc2UiPj4iOmk9cj4+bzticmVhaztjYXNlIj4+PiI6aT1yPj4+bzticmVhaztjYXNlIj09IjppPXI9PW87YnJlYWs7Y2FzZSI9PT0iOmk9cj09PW87YnJlYWs7Y2FzZSIhPSI6aT1yIT1vO2JyZWFrO2Nhc2UiIT09IjppPXIhPT1vO2JyZWFrO2Nhc2UiPCI6aT1yPG87YnJlYWs7Y2FzZSI8PSI6aT1yPD1vO2JyZWFrO2Nhc2UiPiI6aT1vPHI7YnJlYWs7Y2FzZSI+PSI6aT1vPD1yO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXN9cmV0dXJuIGlzTmFOKGkpJiZlLmZpbmRfcGFyZW50KHhlKT90aGlzOml9KSxlKG50LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNvbmRpdGlvbi5fZXZhbChlLHQsbik7aWYocj09PXRoaXMuY29uZGl0aW9uKXJldHVybiB0aGlzO3ZhciBpPXI/dGhpcy5jb25zZXF1ZW50OnRoaXMuYWx0ZXJuYXRpdmUsbz1pLl9ldmFsKGUsdCxuKTtyZXR1cm4gbz09PWk/dGhpczpvfSksZShtdCxmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmZpeGVkX3ZhbHVlKCk7aWYoIWkpcmV0dXJuIHRoaXM7aWYoMDw9dC5pbmRleE9mKGkpKXI9aS5fZXZhbCgpO2Vsc2V7aWYodGhpcy5fZXZhbD1ELHI9aS5fZXZhbChlLHQsbiksZGVsZXRlIHRoaXMuX2V2YWwscj09PWkpcmV0dXJuIHRoaXM7aS5fZXZhbD1mdW5jdGlvbigpe3JldHVybiByfSx0LnB1c2goaSl9aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXt2YXIgbz10aGlzLmRlZmluaXRpb24oKS5lc2NhcGVkO2lmKG8mJm88bilyZXR1cm4gdGhpc31yZXR1cm4gcn0pO3ZhciBkPXtBcnJheTpBcnJheSxNYXRoOk1hdGgsTnVtYmVyOk51bWJlcixPYmplY3Q6T2JqZWN0LFN0cmluZzpTdHJpbmd9LHU9e01hdGg6WyJFIiwiTE4xMCIsIkxOMiIsIkxPRzJFIiwiTE9HMTBFIiwiUEkiLCJTUVJUMV8yIiwiU1FSVDIiXSxOdW1iZXI6WyJNQVhfVkFMVUUiLCJNSU5fVkFMVUUiLCJOYU4iLCJORUdBVElWRV9JTkZJTklUWSIsIlBPU0lUSVZFX0lORklOSVRZIl19O2wodSksZShXZSxmdW5jdGlvbihlLHQsbil7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgcj10aGlzLnByb3BlcnR5O2lmKHIgaW5zdGFuY2VvZiBsZSYmKHI9ci5fZXZhbChlLHQsbikpPT09dGhpcy5wcm9wZXJ0eSlyZXR1cm4gdGhpczt2YXIgaSxvPXRoaXMuZXhwcmVzc2lvbjtpZihqKG8pKXt2YXIgYT11W28ubmFtZV07aWYoIWF8fCFhW3JdKXJldHVybiB0aGlzO2k9ZFtvLm5hbWVdfWVsc2V7aWYoIShpPW8uX2V2YWwoZSx0LG4rMSkpfHxpPT09b3x8IXVlKGkscikpcmV0dXJuIHRoaXM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGkpc3dpdGNoKHIpe2Nhc2UibmFtZSI6cmV0dXJuIGkubm9kZS5uYW1lP2kubm9kZS5uYW1lLm5hbWU6IiI7Y2FzZSJsZW5ndGgiOnJldHVybiBpLm5vZGUuYXJnbmFtZXMubGVuZ3RoO2RlZmF1bHQ6cmV0dXJuIHRoaXN9fXJldHVybiBpW3JdfXJldHVybiB0aGlzfSksZShLZSxmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5leHByZXNzaW9uO2lmKHQub3B0aW9uKCJ1bnNhZmUiKSYmciBpbnN0YW5jZW9mIFdlKXt2YXIgaSxvPXIucHJvcGVydHk7aWYobyBpbnN0YW5jZW9mIGxlJiYobz1vLl9ldmFsKHQsZSxuKSk9PT1yLnByb3BlcnR5KXJldHVybiB0aGlzO3ZhciBhPXIuZXhwcmVzc2lvbjtpZihqKGEpKXt2YXIgcz1iW2EubmFtZV07aWYoIXN8fCFzW29dKXJldHVybiB0aGlzO2k9ZFthLm5hbWVdfWVsc2V7aWYoKGk9YS5fZXZhbCh0LGUsbisxKSk9PT1hfHwhaSlyZXR1cm4gdGhpczt2YXIgdT1tW2kuY29uc3RydWN0b3IubmFtZV07aWYoIXV8fCF1W29dKXJldHVybiB0aGlzfWZvcih2YXIgbD1bXSxjPTAsZj10aGlzLmFyZ3MubGVuZ3RoO2M8ZjtjKyspe3ZhciBwPXRoaXMuYXJnc1tjXSxoPXAuX2V2YWwodCxlLG4pO2lmKHA9PT1oKXJldHVybiB0aGlzO2wucHVzaChoKX10cnl7cmV0dXJuIGlbb10uYXBwbHkoaSxsKX1jYXRjaChlKXt0Lndhcm4oIkVycm9yIGV2YWx1YXRpbmcge2NvZGV9IFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIse2NvZGU6dGhpcy5wcmludF90b19zdHJpbmcoKSxmaWxlOnRoaXMuc3RhcnQuZmlsZSxsaW5lOnRoaXMuc3RhcnQubGluZSxjb2w6dGhpcy5zdGFydC5jb2x9KX19cmV0dXJuIHRoaXN9KSxlKEdlLEQpfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJfZXZhbCIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiBvKGUpe3JldHVybiBRKFhlLGUse29wZXJhdG9yOiIhIixleHByZXNzaW9uOmV9KX1mdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj1vKGUpO2lmKG4pe3ZhciBpPVEoaGUsdCx7Ym9keTp0fSk7cmV0dXJuIHkocixpKT09PWk/dDpyfXJldHVybiB5KHIsdCl9ZShsZSxmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfSksZShjZSxmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IG5lZ2F0ZSBhIHN0YXRlbWVudCIpfSksZShEZSxmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfSksZShYZSxmdW5jdGlvbigpe3JldHVybiIhIj09dGhpcy5vcGVyYXRvcj90aGlzLmV4cHJlc3Npb246byh0aGlzKX0pLGUoWWUsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5leHByZXNzaW9ucy5zbGljZSgpO3JldHVybiB0LnB1c2godC5wb3AoKS5uZWdhdGUoZSkpLE4odGhpcyx0KX0pLGUobnQsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsb25lKCk7cmV0dXJuIG4uY29uc2VxdWVudD1uLmNvbnNlcXVlbnQubmVnYXRlKGUpLG4uYWx0ZXJuYXRpdmU9bi5hbHRlcm5hdGl2ZS5uZWdhdGUoZSksaSh0aGlzLG4sdCl9KSxlKHR0LGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jbG9uZSgpLHI9dGhpcy5vcGVyYXRvcjtpZihlLm9wdGlvbigidW5zYWZlX2NvbXBzIikpc3dpdGNoKHIpe2Nhc2UiPD0iOnJldHVybiBuLm9wZXJhdG9yPSI+IixuO2Nhc2UiPCI6cmV0dXJuIG4ub3BlcmF0b3I9Ij49IixuO2Nhc2UiPj0iOnJldHVybiBuLm9wZXJhdG9yPSI8IixuO2Nhc2UiPiI6cmV0dXJuIG4ub3BlcmF0b3I9Ijw9IixufXN3aXRjaChyKXtjYXNlIj09IjpyZXR1cm4gbi5vcGVyYXRvcj0iIT0iLG47Y2FzZSIhPSI6cmV0dXJuIG4ub3BlcmF0b3I9Ij09IixuO2Nhc2UiPT09IjpyZXR1cm4gbi5vcGVyYXRvcj0iIT09IixuO2Nhc2UiIT09IjpyZXR1cm4gbi5vcGVyYXRvcj0iPT09IixuO2Nhc2UiJiYiOnJldHVybiBuLm9wZXJhdG9yPSJ8fCIsbi5sZWZ0PW4ubGVmdC5uZWdhdGUoZSx0KSxuLnJpZ2h0PW4ucmlnaHQubmVnYXRlKGUpLGkodGhpcyxuLHQpO2Nhc2UifHwiOnJldHVybiBuLm9wZXJhdG9yPSImJiIsbi5sZWZ0PW4ubGVmdC5uZWdhdGUoZSx0KSxuLnJpZ2h0PW4ucmlnaHQubmVnYXRlKGUpLGkodGhpcyxuLHQpfXJldHVybiBvKHRoaXMpfSl9KGZ1bmN0aW9uKGUsbil7ZS5ERUZNRVRIT0QoIm5lZ2F0ZSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKHRoaXMsZSx0KX0pfSk7dmFyIGM9YWUoIkJvb2xlYW4gZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCBEYXRlIGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgRXJyb3IgZXNjYXBlIEV2YWxFcnJvciBpc0Zpbml0ZSBpc05hTiBOdW1iZXIgT2JqZWN0IHBhcnNlRmxvYXQgcGFyc2VJbnQgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdHJpbmcgU3ludGF4RXJyb3IgVHlwZUVycm9yIHVuZXNjYXBlIFVSSUVycm9yIik7ZnVuY3Rpb24gQShlKXtyZXR1cm4gZSYmZS5hYm9ydHMoKX1LZS5ERUZNRVRIT0QoImlzX2V4cHJfcHVyZSIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInVuc2FmZSIpKXt2YXIgdD10aGlzLmV4cHJlc3Npb247aWYoaih0KSYmY1t0Lm5hbWVdKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBRZSYmaih0LmV4cHJlc3Npb24pKXt2YXIgbj1iW3QuZXhwcmVzc2lvbi5uYW1lXTtyZXR1cm4gbiYmblt0LnByb3BlcnR5XX19cmV0dXJuIHRoaXMucHVyZXx8IWUucHVyZV9mdW5jcyh0aGlzKX0pLGxlLkRFRk1FVEhPRCgiaXNfY2FsbF9wdXJlIixyZSksUWUuREVGTUVUSE9EKCJpc19jYWxsX3B1cmUiLGZ1bmN0aW9uKGUpe2lmKGUub3B0aW9uKCJ1bnNhZmUiKSl7dmFyIHQsbj10aGlzLmV4cHJlc3Npb247cmV0dXJuIG4gaW5zdGFuY2VvZiBpdD90PW0uQXJyYXk6bi5pc19ib29sZWFuKGUpP3Q9bS5Cb29sZWFuOm4uaXNfbnVtYmVyKGUpP3Q9bS5OdW1iZXI6biBpbnN0YW5jZW9mIF90P3Q9bS5SZWdFeHA6bi5pc19zdHJpbmcoZSk/dD1tLlN0cmluZzp0aGlzLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fCh0PW0uT2JqZWN0KSx0JiZ0W3RoaXMucHJvcGVydHldfX0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpZihlW25dLmhhc19zaWRlX2VmZmVjdHModCkpcmV0dXJuITA7cmV0dXJuITF9ZShsZSxpZSksZShpdCxmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLmVsZW1lbnRzLGUpfSksZShydCxpZSksZSh0dCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZWZ0Lmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMucmlnaHQuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoZGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcy5ib2R5LGUpfSksZShLZSxmdW5jdGlvbihlKXtyZXR1cm4hKHRoaXMuaXNfZXhwcl9wdXJlKGUpfHx0aGlzLmV4cHJlc3Npb24uaXNfY2FsbF9wdXJlKGUpJiYhdGhpcy5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMoZSkpfHx0KHRoaXMuYXJncyxlKX0pLGUoUGUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMuY29uc2VxdWVudC5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmFsdGVybmF0aXZlLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKHZ0LHJlKSxlKFZlLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZGVmaW5pdGlvbnMsZSl9KSxlKFFlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2VzcyhlKXx8dGhpcy5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKGdlLHJlKSxlKFVlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbmRpdGlvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmJvZHkmJnRoaXMuYm9keS5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLmFsdGVybmF0aXZlJiZ0aGlzLmFsdGVybmF0aXZlLmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKHZlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoT2UscmUpLGUob3QsZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcy5wcm9wZXJ0aWVzLGUpfSksZShhdCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZS5oYXNfc2lkZV9lZmZlY3RzKGUpfSksZShaZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0aGlzLnByb3BlcnR5Lmhhc19zaWRlX2VmZmVjdHMoZSl9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZXhwcmVzc2lvbnMsZSl9KSxlKGhlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoTWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobHQscmUpLGUobXQsZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNfZGVjbGFyZWQoZSl9KSxlKGd0LHJlKSxlKEllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuYm9keSxlKXx8dGhpcy5iY2F0Y2gmJnRoaXMuYmNhdGNoLmhhc19zaWRlX2VmZmVjdHMoZSl8fHRoaXMuYmZpbmFsbHkmJnRoaXMuYmZpbmFsbHkuaGFzX3NpZGVfZWZmZWN0cyhlKX0pLGUoSmUsZnVuY3Rpb24oZSl7cmV0dXJuIHNbdGhpcy5vcGVyYXRvcl18fHRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpfSksZSgkZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZX0pfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJoYXNfc2lkZV9lZmZlY3RzIix0KX0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7MDw9LS1uOylpZihlW25dLm1heV90aHJvdyh0KSlyZXR1cm4hMDtyZXR1cm4hMX1lKGxlLGllKSxlKHZ0LHJlKSxlKGdlLHJlKSxlKE9lLHJlKSxlKGx0LHJlKSxlKGd0LHJlKSxlKGl0LGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZWxlbWVudHMsZSl9KSxlKHJ0LGZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5yaWdodC5tYXlfdGhyb3coZSl8fCEoIWUuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiYiPSI9PXRoaXMub3BlcmF0b3ImJnRoaXMubGVmdCBpbnN0YW5jZW9mIG10KSYmdGhpcy5sZWZ0Lm1heV90aHJvdyhlKX0pLGUodHQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVmdC5tYXlfdGhyb3coZSl8fHRoaXMucmlnaHQubWF5X3Rocm93KGUpfSksZShkZSxmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLmJvZHksZSl9KSxlKEtlLGZ1bmN0aW9uKGUpe3JldHVybiEhdCh0aGlzLmFyZ3MsZSl8fCF0aGlzLmlzX2V4cHJfcHVyZShlKSYmKCEhdGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKXx8KCEodGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgT2UpfHx0KHRoaXMuZXhwcmVzc2lvbi5ib2R5LGUpKSl9KSxlKFBlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93KGUpfHx0KHRoaXMuYm9keSxlKX0pLGUobnQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLm1heV90aHJvdyhlKXx8dGhpcy5jb25zZXF1ZW50Lm1heV90aHJvdyhlKXx8dGhpcy5hbHRlcm5hdGl2ZS5tYXlfdGhyb3coZSl9KSxlKFZlLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZGVmaW5pdGlvbnMsZSl9KSxlKFFlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2VzcyhlKXx8dGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKX0pLGUoVWUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uZGl0aW9uLm1heV90aHJvdyhlKXx8dGhpcy5ib2R5JiZ0aGlzLmJvZHkubWF5X3Rocm93KGUpfHx0aGlzLmFsdGVybmF0aXZlJiZ0aGlzLmFsdGVybmF0aXZlLm1heV90aHJvdyhlKX0pLGUodmUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYm9keS5tYXlfdGhyb3coZSl9KSxlKG90LGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMucHJvcGVydGllcyxlKX0pLGUoYXQsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmFsdWUubWF5X3Rocm93KGUpfSksZShSZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52YWx1ZSYmdGhpcy52YWx1ZS5tYXlfdGhyb3coZSl9KSxlKFllLGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMuZXhwcmVzc2lvbnMsZSl9KSxlKGhlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJvZHkubWF5X3Rocm93KGUpfSksZShaZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvd19vbl9hY2Nlc3MoZSl8fHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3coZSl8fHRoaXMucHJvcGVydHkubWF5X3Rocm93KGUpfSksZShNZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uLm1heV90aHJvdyhlKXx8dCh0aGlzLmJvZHksZSl9KSxlKG10LGZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmlzX2RlY2xhcmVkKGUpfSksZShJZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iY2F0Y2g/dGhpcy5iY2F0Y2gubWF5X3Rocm93KGUpOnQodGhpcy5ib2R5LGUpfHx0aGlzLmJmaW5hbGx5JiZ0aGlzLmJmaW5hbGx5Lm1heV90aHJvdyhlKX0pLGUoSmUsZnVuY3Rpb24oZSl7cmV0dXJuISgidHlwZW9mIj09dGhpcy5vcGVyYXRvciYmdGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgbXQpJiZ0aGlzLmV4cHJlc3Npb24ubWF5X3Rocm93KGUpfSksZSgkZSxmdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMudmFsdWUmJnRoaXMudmFsdWUubWF5X3Rocm93KGUpfSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoIm1heV90aHJvdyIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aDswPD0tLXQ7KWlmKCFlW3RdLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oKSlyZXR1cm4hMTtyZXR1cm4hMH1lKGxlLHJlKSxlKGl0LGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5lbGVtZW50cyl9KSxlKHR0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdC5pc19jb25zdGFudF9leHByZXNzaW9uKCkmJnRoaXMucmlnaHQuaXNfY29uc3RhbnRfZXhwcmVzc2lvbigpfSksZSh2dCxpZSksZShPZSxmdW5jdGlvbihyKXt2YXIgaT10aGlzLG89ITA7cmV0dXJuIGkud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYoIW8pcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIG10KXtpZihpLmlubGluZWQpcmV0dXJuIShvPSExKTt2YXIgdD1lLmRlZmluaXRpb24oKTtpZih0ZSh0LGkuZW5jbG9zZWQpJiYhaS52YXJpYWJsZXMuaGFzKHQubmFtZSkpe2lmKHIpe3ZhciBuPXIuZmluZF92YXJpYWJsZShlKTtpZih0LnVuZGVjbGFyZWQ/IW46bj09PXQpcmV0dXJuIG89ImYiLCEwfW89ITF9cmV0dXJuITB9fSkpLG99KSxlKG90LGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5wcm9wZXJ0aWVzKX0pLGUoYXQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZS5pc19jb25zdGFudF9leHByZXNzaW9uKCl9KSxlKEplLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5pc19jb25zdGFudF9leHByZXNzaW9uKCl9KX0oZnVuY3Rpb24oZSx0KXtlLkRFRk1FVEhPRCgiaXNfY29uc3RhbnRfZXhwcmVzc2lvbiIsdCl9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGU9dGhpcy5ib2R5Lmxlbmd0aDtyZXR1cm4gMDxlJiZBKHRoaXMuYm9keVtlLTFdKX1lKGNlLFQpLGUoVSxEKSxlKG1lLHQpLGUoTSx0KSxlKFVlLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRpdmUmJkEodGhpcy5ib2R5KSYmQSh0aGlzLmFsdGVybmF0aXZlKSYmdGhpc30pfShmdW5jdGlvbihlLHQpe2UuREVGTUVUSE9EKCJhYm9ydHMiLHQpfSk7dmFyIGY9YWUoWyJ1c2UgYXNtIiwidXNlIHN0cmljdCJdKTtmdW5jdGlvbiB4KHQsZSl7dmFyIG49ITEscj1uZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISEobnx8ZSBpbnN0YW5jZW9mIGtlKXx8KGUgaW5zdGFuY2VvZiBMZSYmci5sb29wY29udHJvbF90YXJnZXQoZSk9PT10P249ITA6dm9pZCAwKX0pO3JldHVybiBlIGluc3RhbmNlb2YgdmUmJnIucHVzaChlKSxyLnB1c2godCksdC5ib2R5LndhbGsociksbn1lKHBlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIXQub3B0aW9uKCJkaXJlY3RpdmVzIil8fGZbZS52YWx1ZV0mJnQuaGFzX2RpcmVjdGl2ZShlLnZhbHVlKT09PWU/ZTpRKGdlLGUpfSksZShmZSxmdW5jdGlvbihlLHQpe3JldHVybiB0Lm9wdGlvbigiZHJvcF9kZWJ1Z2dlciIpP1EoZ2UsZSk6ZX0pLGUodmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ib2R5IGluc3RhbmNlb2YgRmUmJnQubG9vcGNvbnRyb2xfdGFyZ2V0KGUuYm9keSk9PT1lLmJvZHk/UShnZSxlKTowPT1lLmxhYmVsLnJlZmVyZW5jZXMubGVuZ3RoP2UuYm9keTplfSksZShkZSxmdW5jdGlvbihlLHQpe3JldHVybiBpKGUuYm9keSx0KSxlfSksZShtZSxmdW5jdGlvbihlLHQpe3N3aXRjaChpKGUuYm9keSx0KSxlLmJvZHkubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGUuYm9keVswXTtjYXNlIDA6cmV0dXJuIFEoZ2UsZSl9cmV0dXJuIGV9KSxlKE9lLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZS5ib2R5LHQpLHQub3B0aW9uKCJzaWRlX2VmZmVjdHMiKSYmMT09ZS5ib2R5Lmxlbmd0aCYmZS5ib2R5WzBdPT09dC5oYXNfZGlyZWN0aXZlKCJ1c2Ugc3RyaWN0IikmJihlLmJvZHkubGVuZ3RoPTApLGV9KSxrZS5ERUZNRVRIT0QoImRyb3BfdW51c2VkIixmdW5jdGlvbih5KXtpZih5Lm9wdGlvbigidW51c2VkIikmJiF5Lmhhc19kaXJlY3RpdmUoInVzZSBhc20iKSl7dmFyIF89dGhpcztpZighXy5waW5uZWQoKSl7dmFyIHc9IShfIGluc3RhbmNlb2YgQ2UpfHx5LnRvcGxldmVsLmZ1bmNzLEU9IShfIGluc3RhbmNlb2YgQ2UpfHx5LnRvcGxldmVsLnZhcnMsQT0va2VlcF9hc3NpZ24vLnRlc3QoeS5vcHRpb24oInVudXNlZCIpKT9yZTpmdW5jdGlvbihlLHQpe3ZhciBuO2lmKGUgaW5zdGFuY2VvZiBydCYmKGUud3JpdGVfb25seXx8Ij0iPT1lLm9wZXJhdG9yKT9uPWUubGVmdDplIGluc3RhbmNlb2YgSmUmJmUud3JpdGVfb25seSYmKG49ZS5leHByZXNzaW9uKSwhL3N0cmljdC8udGVzdCh5Lm9wdGlvbigicHVyZV9nZXR0ZXJzIikpKXJldHVybiBuIGluc3RhbmNlb2YgbXQmJm47Zm9yKDtuIGluc3RhbmNlb2YgV2UmJiFuLmV4cHJlc3Npb24ubWF5X3Rocm93X29uX2FjY2Vzcyh5KTspbiBpbnN0YW5jZW9mIFplJiZ0LnVuc2hpZnQobi5wcm9wZXJ0eSksbj1uLmV4cHJlc3Npb247cmV0dXJuIG4gaW5zdGFuY2VvZiBtdCYmc2Uobi5kZWZpbml0aW9uKCkub3JpZyxmdW5jdGlvbihlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBodCl9KSYmbn0scz1bXSx4PU9iamVjdC5jcmVhdGUobnVsbCksaz1PYmplY3QuY3JlYXRlKG51bGwpLHU9T2JqZWN0LmNyZWF0ZShudWxsKSxsPU9iamVjdC5jcmVhdGUobnVsbCk7XyBpbnN0YW5jZW9mIENlJiZ5LnRvcF9yZXRhaW4mJl8udmFyaWFibGVzLmVhY2goZnVuY3Rpb24oZSl7IXkudG9wX3JldGFpbihlKXx8ZS5pZCBpbiB4fHwoeFtlLmlkXT0hMCxzLnB1c2goZSkpfSk7dmFyIEM9bmV3IEwscj1uZXcgTCxPPXRoaXMsYz1uZXcgRHQoZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgT2UmJmUudXNlc19hcmd1bWVudHMmJiFjLmhhc19kaXJlY3RpdmUoInVzZSBzdHJpY3QiKSYmZS5hcmduYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3QuaWQgaW4geHx8KHhbdC5pZF09ITAscy5wdXNoKHQpKX0pLGUhPT1fKXtpZihlIGluc3RhbmNlb2YgVGUpe3ZhciBuPWUubmFtZS5kZWZpbml0aW9uKCk7cmV0dXJuIHd8fE8hPT1ffHxuLmlkIGluIHh8fCh4W24uaWRdPSEwLHMucHVzaChuKSksci5hZGQobi5pZCxlKSwhMH1yZXR1cm4gZSBpbnN0YW5jZW9mIGZ0JiZPPT09XyYmQy5hZGQoZS5kZWZpbml0aW9uKCkuaWQsZSksZSBpbnN0YW5jZW9mIFZlJiZPPT09Xz8oZS5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZS5kZWZpbml0aW9uKCk7ZS5uYW1lIGluc3RhbmNlb2YgY3QmJkMuYWRkKHQuaWQsZSksRXx8dC5pZCBpbiB4fHwoeFt0LmlkXT0hMCxzLnB1c2godCkpLGUudmFsdWUmJihyLmFkZCh0LmlkLGUudmFsdWUpLGUudmFsdWUuaGFzX3NpZGVfZWZmZWN0cyh5KSYmZS52YWx1ZS53YWxrKGMpLHQuY2hhaW5lZHx8ZS5uYW1lLmZpeGVkX3ZhbHVlKCkhPT1lLnZhbHVlfHwoa1t0LmlkXT1lKSl9KSwhMCk6aShlLHQpfX0pO18ud2FsayhjKSxjPW5ldyBEdChpKTtmb3IodmFyIGU9MDtlPHMubGVuZ3RoO2UrKyl7dmFyIHQ9ci5nZXQoc1tlXS5pZCk7dCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uud2FsayhjKX0pfXZhciBTPXkub3B0aW9uKCJrZWVwX2ZuYW1lcyIpP3JlOnkub3B0aW9uKCJpZTgiKT9mdW5jdGlvbihlKXtyZXR1cm4heS5leHBvc2VkKGUpJiYhZS5yZWZlcmVuY2VzLmxlbmd0aH06ZnVuY3Rpb24oZSl7cmV0dXJuIShlLmlkIGluIHgpfHwxPGUub3JpZy5sZW5ndGh9LEQ9bmV3IFd0KGZ1bmN0aW9uKGEsZSx0KXt2YXIgbj1ELnBhcmVudCgpO2lmKEUpe3ZhciByPVtdO2lmKGM9QShhLHIpKXt2YXIgaT0oZj1jLmRlZmluaXRpb24oKSkuaWQgaW4geCxvPW51bGw7aWYoYSBpbnN0YW5jZW9mIHJ0PyghaXx8YS5sZWZ0PT09YyYmZi5pZCBpbiBrJiZrW2YuaWRdIT09YSkmJihvPWEucmlnaHQpOml8fChvPVEoeXQsYSx7dmFsdWU6MH0pKSxvKXJldHVybiByLnB1c2gobyksWih5LG4sYSxOKGEsci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNmb3JtKEQpfSkpKX19aWYoTz09PV8pe2lmKGEgaW5zdGFuY2VvZiBEZSYmYS5uYW1lJiZTKGEubmFtZS5kZWZpbml0aW9uKCkpJiYoYS5uYW1lPW51bGwpLGEgaW5zdGFuY2VvZiBPZSYmIShhIGluc3RhbmNlb2YgU2UpKWZvcih2YXIgcz0heS5vcHRpb24oImtlZXBfZmFyZ3MiKSx1PWEuYXJnbmFtZXMsbD11Lmxlbmd0aDswPD0tLWw7KXt2YXIgYzsoYz11W2xdKS5kZWZpbml0aW9uKCkuaWQgaW4geD9zPSExOihjLl9fdW51c2VkPSEwLHMmJih1LnBvcCgpLHlbYy51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIGZ1bmN0aW9uIGFyZ3VtZW50IHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoYykpKSl9dmFyIGY7aWYodyYmYSBpbnN0YW5jZW9mIFRlJiZhIT09XylpZighKChmPWEubmFtZS5kZWZpbml0aW9uKCkpLmlkIGluIHgpKXJldHVybiB5W2EubmFtZS51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIGZ1bmN0aW9uIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoYS5uYW1lKSksZi5lbGltaW5hdGVkKyssUShnZSxhKTtpZihhIGluc3RhbmNlb2YgVmUmJiEobiBpbnN0YW5jZW9mIEFlJiZuLmluaXQ9PT1hKSl7dmFyIHA9W10saD1bXSxkPVtdLG09W107c3dpdGNoKGEuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnZhbHVlJiYoZS52YWx1ZT1lLnZhbHVlLnRyYW5zZm9ybShEKSk7dmFyIHQ9ZS5uYW1lLmRlZmluaXRpb24oKTtpZighRXx8dC5pZCBpbiB4KXtpZihlLnZhbHVlJiZ0LmlkIGluIGsmJmtbdC5pZF0hPT1lJiYoZS52YWx1ZT1lLnZhbHVlLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh5KSksZS5uYW1lIGluc3RhbmNlb2YgY3Qpe3ZhciBuPUMuZ2V0KHQuaWQpO2lmKDE8bi5sZW5ndGgmJighZS52YWx1ZXx8dC5vcmlnLmluZGV4T2YoZS5uYW1lKT50LmVsaW1pbmF0ZWQpKXtpZih5Lndhcm4oIkRyb3BwaW5nIGR1cGxpY2F0ZWQgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZSB7bmFtZX0gW3tmaWxlfTp7bGluZX0se2NvbH1dIixiKGUubmFtZSkpLGUudmFsdWUpe3ZhciByPVEobXQsZS5uYW1lLGUubmFtZSk7dC5yZWZlcmVuY2VzLnB1c2gocik7dmFyIGk9UShydCxlLHtvcGVyYXRvcjoiPSIsbGVmdDpyLHJpZ2h0OmUudmFsdWV9KTtrW3QuaWRdPT09ZSYmKGtbdC5pZF09aSksbS5wdXNoKGkudHJhbnNmb3JtKEQpKX1yZXR1cm4gUihuLGUpLHZvaWQgdC5lbGltaW5hdGVkKyt9fWUudmFsdWU/KDA8bS5sZW5ndGgmJigwPGQubGVuZ3RoPyhtLnB1c2goZS52YWx1ZSksZS52YWx1ZT1OKGUudmFsdWUsbSkpOnAucHVzaChRKGhlLGEse2JvZHk6TihhLG0pfSkpLG09W10pLGQucHVzaChlKSk6aC5wdXNoKGUpfWVsc2UgaWYodC5vcmlnWzBdaW5zdGFuY2VvZiBkdCl7KG89ZS52YWx1ZSYmZS52YWx1ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoeSkpJiZtLnB1c2gobyksZS52YWx1ZT1udWxsLGgucHVzaChlKX1lbHNle3ZhciBvOyhvPWUudmFsdWUmJmUudmFsdWUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHkpKT8oeS53YXJuKCJTaWRlIGVmZmVjdHMgaW4gaW5pdGlhbGl6YXRpb24gb2YgdW51c2VkIHZhcmlhYmxlIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoZS5uYW1lKSksbS5wdXNoKG8pKTp5W2UubmFtZS51bnJlZmVyZW5jZWQoKT8id2FybiI6ImluZm8iXSgiRHJvcHBpbmcgdW51c2VkIHZhcmlhYmxlIHtuYW1lfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGIoZS5uYW1lKSksdC5lbGltaW5hdGVkKyt9fSksKDA8aC5sZW5ndGh8fDA8ZC5sZW5ndGgpJiYoYS5kZWZpbml0aW9ucz1oLmNvbmNhdChkKSxwLnB1c2goYSkpLDA8bS5sZW5ndGgmJnAucHVzaChRKGhlLGEse2JvZHk6TihhLG0pfSkpLHAubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQ/b2Uuc2tpcDpRKGdlLGEpO2Nhc2UgMTpyZXR1cm4gcFswXTtkZWZhdWx0OnJldHVybiB0P29lLnNwbGljZShwKTpRKG1lLGEse2JvZHk6cH0pfX1pZihhIGluc3RhbmNlb2YgRWUpcmV0dXJuIGUoYSx0aGlzKSxhLmluaXQgaW5zdGFuY2VvZiBtZSYmKGc9YS5pbml0LGEuaW5pdD1nLmJvZHkucG9wKCksZy5ib2R5LnB1c2goYSkpLGEuaW5pdCBpbnN0YW5jZW9mIGhlP2EuaW5pdD1hLmluaXQuYm9keTpJKGEuaW5pdCkmJihhLmluaXQ9bnVsbCksZz90P29lLnNwbGljZShnLmJvZHkpOmc6YTtpZihhIGluc3RhbmNlb2YgdmUmJmEuYm9keSBpbnN0YW5jZW9mIEVlKXtpZihlKGEsdGhpcyksYS5ib2R5IGluc3RhbmNlb2YgbWUpe3ZhciBnPWEuYm9keTtyZXR1cm4gYS5ib2R5PWcuYm9keS5wb3AoKSxnLmJvZHkucHVzaChhKSx0P29lLnNwbGljZShnLmJvZHkpOmd9cmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIGtlKXt2YXIgdj1PO3JldHVybiBlKE89YSx0aGlzKSxPPXYsYX19ZnVuY3Rpb24gYihlKXtyZXR1cm57bmFtZTplLm5hbWUsZmlsZTplLnN0YXJ0LmZpbGUsbGluZTplLnN0YXJ0LmxpbmUsY29sOmUuc3RhcnQuY29sfX19KTtfLnRyYW5zZm9ybShEKX19ZnVuY3Rpb24gZihlLHQsbil7ZS5pZCBpbiB4fHwodCYmbj8oeFtlLmlkXT0hMCxzLnB1c2goZSkpOih1W2UuaWRdPXQsbFtlLmlkXT1uKSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuLHI9W10saT1BKGUscik7aWYoaSYmXy52YXJpYWJsZXMuZ2V0KGkubmFtZSk9PT0obj1pLmRlZmluaXRpb24oKSkpe2lmKHIuZm9yRWFjaChmdW5jdGlvbihlKXtlLndhbGsoYyl9KSxlIGluc3RhbmNlb2YgcnQpaWYoZS5yaWdodC53YWxrKGMpLGUubGVmdD09PWkpbi5jaGFpbmVkfHxpLmZpeGVkX3ZhbHVlKCkhPT1lLnJpZ2h0fHwoa1tuLmlkXT1lKSxlLndyaXRlX29ubHl8fGYobiwhMCxsW24uaWRdKTtlbHNle3ZhciBvPWkuZml4ZWRfdmFsdWUoKTtvJiZvLmlzX2NvbnN0YW50KCl8fGYobix1W24uaWRdLCEwKX1yZXR1cm4hMH1pZihlIGluc3RhbmNlb2YgbXQpcmV0dXJuKG49ZS5kZWZpbml0aW9uKCkpLmlkIGluIHh8fCh4W24uaWRdPSEwLHMucHVzaChuKSksITA7aWYoZSBpbnN0YW5jZW9mIGtlKXt2YXIgYT1PO3JldHVybiBPPWUsdCgpLE89YSwhMH19fSksa2UuREVGTUVUSE9EKCJob2lzdF9kZWNsYXJhdGlvbnMiLGZ1bmN0aW9uKGkpe2lmKCFpLmhhc19kaXJlY3RpdmUoInVzZSBhc20iKSl7dmFyIG89aS5vcHRpb24oImhvaXN0X2Z1bnMiKSxhPWkub3B0aW9uKCJob2lzdF92YXJzIikscz10aGlzO2lmKGEpe3ZhciB0PTA7cy53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4gMTx0fHwoZSBpbnN0YW5jZW9mIGtlJiZlIT09c3x8KGUgaW5zdGFuY2VvZiBIZT8odCsrLCEwKTp2b2lkIDApKX0pKSx0PD0xJiYoYT0hMSl9aWYob3x8YSl7dmFyIHU9W10sbD1bXSxjPW5ldyBMLGY9MCxwPW5ldyBXdChmdW5jdGlvbihlKXtpZihlIT09cyl7aWYoZSBpbnN0YW5jZW9mIHBlKXJldHVybiB1LnB1c2goZSksUShnZSxlKTtpZihvJiZlIGluc3RhbmNlb2YgVGUmJihwLnBhcmVudCgpPT09c3x8IWkuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpKSlyZXR1cm4gbC5wdXNoKGUpLFEoZ2UsZSk7aWYoYSYmZSBpbnN0YW5jZW9mIEhlKXtlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7Yy5zZXQoZS5uYW1lLm5hbWUsZSksKytmfSk7dmFyIHQ9ZS50b19hc3NpZ25tZW50cyhpKSxuPXAucGFyZW50KCk7aWYobiBpbnN0YW5jZW9mIEFlJiZuLmluaXQ9PT1lKXtpZih0KXJldHVybiB0O3ZhciByPWUuZGVmaW5pdGlvbnNbMF0ubmFtZTtyZXR1cm4gUShtdCxyLHIpfXJldHVybiBuIGluc3RhbmNlb2YgRWUmJm4uaW5pdD09PWU/dDp0P1EoaGUsZSx7Ym9keTp0fSk6UShnZSxlKX1yZXR1cm4gZSBpbnN0YW5jZW9mIGtlP2U6dm9pZCAwfX0pO2lmKHMudHJhbnNmb3JtKHApLDA8Zil7dmFyIG49W107aWYoYy5lYWNoKGZ1bmN0aW9uKGUsdCl7cyBpbnN0YW5jZW9mIE9lJiYhc2Uocy5hcmduYW1lcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT10fSk/Yy5kZWwodCk6KChlPWUuY2xvbmUoKSkudmFsdWU9bnVsbCxuLnB1c2goZSksYy5zZXQodCxlKSl9KSwwPG4ubGVuZ3RoKXtmb3IodmFyIGU9MDtlPHMuYm9keS5sZW5ndGg7KXtpZihzLmJvZHlbZV1pbnN0YW5jZW9mIGhlKXt2YXIgcixoLGQ9cy5ib2R5W2VdLmJvZHk7aWYoZCBpbnN0YW5jZW9mIHJ0JiYiPSI9PWQub3BlcmF0b3ImJihyPWQubGVmdClpbnN0YW5jZW9mIHV0JiZjLmhhcyhyLm5hbWUpKXtpZigobT1jLmdldChyLm5hbWUpKS52YWx1ZSlicmVhazttLnZhbHVlPWQucmlnaHQsUihuLG0pLG4ucHVzaChtKSxzLmJvZHkuc3BsaWNlKGUsMSk7Y29udGludWV9aWYoZCBpbnN0YW5jZW9mIFllJiYoaD1kLmV4cHJlc3Npb25zWzBdKWluc3RhbmNlb2YgcnQmJiI9Ij09aC5vcGVyYXRvciYmKHI9aC5sZWZ0KWluc3RhbmNlb2YgdXQmJmMuaGFzKHIubmFtZSkpe3ZhciBtO2lmKChtPWMuZ2V0KHIubmFtZSkpLnZhbHVlKWJyZWFrO20udmFsdWU9aC5yaWdodCxSKG4sbSksbi5wdXNoKG0pLHMuYm9keVtlXS5ib2R5PU4oZCxkLmV4cHJlc3Npb25zLnNsaWNlKDEpKTtjb250aW51ZX19aWYocy5ib2R5W2VdaW5zdGFuY2VvZiBnZSlzLmJvZHkuc3BsaWNlKGUsMSk7ZWxzZXtpZighKHMuYm9keVtlXWluc3RhbmNlb2YgbWUpKWJyZWFrO3ZhciBnPVtlLDFdLmNvbmNhdChzLmJvZHlbZV0uYm9keSk7cy5ib2R5LnNwbGljZS5hcHBseShzLmJvZHksZyl9fW49UShIZSxzLHtkZWZpbml0aW9uczpufSksbC5wdXNoKG4pfX1zLmJvZHk9dS5jb25jYXQobCxzLmJvZHkpfX19KSxrZS5ERUZNRVRIT0QoInZhcl9uYW1lcyIsZnVuY3Rpb24oKXt2YXIgbj10aGlzLl92YXJfbmFtZXM7cmV0dXJuIG58fCh0aGlzLl92YXJfbmFtZXM9bj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZW5jbG9zZWQuZm9yRWFjaChmdW5jdGlvbihlKXtuW2UubmFtZV09ITB9KSx0aGlzLnZhcmlhYmxlcy5lYWNoKGZ1bmN0aW9uKGUsdCl7blt0XT0hMH0pKSxufSksa2UuREVGTUVUSE9EKCJtYWtlX3Zhcl9uYW1lIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy52YXJfbmFtZXMoKSxuPWU9ZS5yZXBsYWNlKC8oPzpeW15hLXpfJF18W15hLXowLTlfJF0pL2dpLCJfIikscj0wO3Rbbl07cisrKW49ZSsiJCIrcjtyZXR1cm4gdFtuXT0hMCxufSksa2UuREVGTUVUSE9EKCJob2lzdF9wcm9wZXJ0aWVzIixmdW5jdGlvbihlKXtpZihlLm9wdGlvbigiaG9pc3RfcHJvcHMiKSYmIWUuaGFzX2RpcmVjdGl2ZSgidXNlIGFzbSIpKXt2YXIgYz10aGlzLGY9YyBpbnN0YW5jZW9mIENlJiZlLnRvcF9yZXRhaW58fHJlLHA9T2JqZWN0LmNyZWF0ZShudWxsKTtjLnRyYW5zZm9ybShuZXcgV3QoZnVuY3Rpb24ocixlKXtpZihyIGluc3RhbmNlb2YgcnQmJiI9Ij09ci5vcGVyYXRvciYmci53cml0ZV9vbmx5JiZ1KHIubGVmdCxyLnJpZ2h0LDEpKXtlKHIsdGhpcyk7dmFyIGk9bmV3IEwsbz1bXSxhPVtdO3JldHVybiByLnJpZ2h0LnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1sKHIubGVmdCxlLmtleSk7YS5wdXNoKFEoJGUscix7bmFtZTp0LHZhbHVlOm51bGx9KSk7dmFyIG49UShtdCxyLHtuYW1lOnQubmFtZSxzY29wZTpjLHRoZWRlZjp0LmRlZmluaXRpb24oKX0pO24ucmVmZXJlbmNlKHt9KSxvLnB1c2goUShydCxyLHtvcGVyYXRvcjoiPSIsbGVmdDpuLHJpZ2h0OmUudmFsdWV9KSl9KSxwW3IubGVmdC5kZWZpbml0aW9uKCkuaWRdPWksYy5ib2R5LnNwbGljZShjLmJvZHkuaW5kZXhPZih0aGlzLnN0YWNrWzFdKSsxLDAsUShIZSxyLHtkZWZpbml0aW9uczphfSkpLE4ocixvKX1pZihyIGluc3RhbmNlb2YgJGUmJnUoci5uYW1lLHIudmFsdWUsMCkpe2Uocix0aGlzKTtpPW5ldyBMO3ZhciB0PVtdO3JldHVybiByLnZhbHVlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0LnB1c2goUSgkZSxyLHtuYW1lOmwoci5uYW1lLGUua2V5KSx2YWx1ZTplLnZhbHVlfSkpfSkscFtyLm5hbWUuZGVmaW5pdGlvbigpLmlkXT1pLG9lLnNwbGljZSh0KX1pZihyIGluc3RhbmNlb2YgV2UmJnIuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIG10JiYoaT1wW3IuZXhwcmVzc2lvbi5kZWZpbml0aW9uKCkuaWRdKSl7dmFyIG49aS5nZXQoZChyLnByb3BlcnR5KSkscz1RKG10LHIse25hbWU6bi5uYW1lLHNjb3BlOnIuZXhwcmVzc2lvbi5zY29wZSx0aGVkZWY6bn0pO3JldHVybiBzLnJlZmVyZW5jZSh7fSksc31mdW5jdGlvbiB1KGUsdCxuKXtpZihlLnNjb3BlPT09Yyl7dmFyIHI9ZS5kZWZpbml0aW9uKCk7aWYoci5hc3NpZ25tZW50cz09biYmIXIuZGlyZWN0X2FjY2VzcyYmMSE9ci5lc2NhcGVkJiZyLnJlZmVyZW5jZXMubGVuZ3RoIT1uJiYhci5zaW5nbGVfdXNlJiYhZihyKSYmZS5maXhlZF92YWx1ZSgpPT09dClyZXR1cm4gdCBpbnN0YW5jZW9mIG90fX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49UShjdCxlLHtuYW1lOmMubWFrZV92YXJfbmFtZShlLm5hbWUrIl8iK3QpLHNjb3BlOmN9KSxyPWMuZGVmX3ZhcmlhYmxlKG4pO3JldHVybiBpLnNldCh0LHIpLGMuZW5jbG9zZWQucHVzaChyKSxufX0pKX19KSxmdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj1lLmxlbmd0aDtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W10sbz0hMSxhPTA7YTxyO2ErKyl7dmFyIHM9ZVthXS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUodCxuKTtvfD1zIT09ZVthXSxzJiYoaS5wdXNoKHMpLG49ITEpfXJldHVybiBvP2kubGVuZ3RoP2k6bnVsbDplfWUobGUsRCksZShTZSxUKSxlKGl0LGZ1bmN0aW9uKGUsdCl7dmFyIG49YSh0aGlzLmVsZW1lbnRzLGUsdCk7cmV0dXJuIG4mJk4odGhpcyxuKX0pLGUocnQsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZWZ0O3JldHVybiB0Lmhhc19zaWRlX2VmZmVjdHMoZSl8fGUuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpJiZ0IGluc3RhbmNlb2YgV2UmJnQuZXhwcmVzc2lvbi5pc19jb25zdGFudCgpP3RoaXM6KHRoaXMud3JpdGVfb25seT0hMCxKKHQpLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oZS5maW5kX3BhcmVudChrZSkpP3RoaXMucmlnaHQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpOnRoaXMpfSksZSh0dCxmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmlnaHQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7aWYoIW4pcmV0dXJuIHRoaXMubGVmdC5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTtpZihYW3RoaXMub3BlcmF0b3JdKXtpZihuPT09dGhpcy5yaWdodClyZXR1cm4gdGhpczt2YXIgcj10aGlzLmNsb25lKCk7cmV0dXJuIHIucmlnaHQ9bi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSkscn12YXIgaT10aGlzLmxlZnQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7cmV0dXJuIGk/Tih0aGlzLFtpLG4uZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpXSk6bn0pLGUoS2UsZnVuY3Rpb24odCxlKXtpZighdGhpcy5pc19leHByX3B1cmUodCkpe2lmKHRoaXMuZXhwcmVzc2lvbi5pc19jYWxsX3B1cmUodCkpe3ZhciBuPXRoaXMuYXJncy5zbGljZSgpO3JldHVybiBuLnVuc2hpZnQodGhpcy5leHByZXNzaW9uLmV4cHJlc3Npb24pLChuPWEobix0LGUpKSYmTih0aGlzLG4pfWlmKCEodGhpcy5leHByZXNzaW9uIGluc3RhbmNlb2YgRGUpfHx0aGlzLmV4cHJlc3Npb24ubmFtZSYmdGhpcy5leHByZXNzaW9uLm5hbWUuZGVmaW5pdGlvbigpLnJlZmVyZW5jZXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciByPXRoaXMuY2xvbmUoKSxpPXIuZXhwcmVzc2lvbjtyZXR1cm4gaS5wcm9jZXNzX2V4cHJlc3Npb24oITEsdCksaS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlJiZlLnZhbHVlPyhlLnZhbHVlPWUudmFsdWUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHQpLCEwKTplIGluc3RhbmNlb2Yga2UmJmUhPT1pfHx2b2lkIDB9KSkscn10aGlzLnB1cmUmJnQud2FybigiRHJvcHBpbmcgX19QVVJFX18gY2FsbCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHRoaXMuc3RhcnQpO3ZhciBvPWEodGhpcy5hcmdzLHQsZSk7cmV0dXJuIG8mJk4odGhpcyxvKX0pLGUobnQsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zZXF1ZW50LmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKSxuPXRoaXMuYWx0ZXJuYXRpdmUuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUpO2lmKHQ9PT10aGlzLmNvbnNlcXVlbnQmJm49PT10aGlzLmFsdGVybmF0aXZlKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiBuP1EodHQsdGhpcyx7b3BlcmF0b3I6Inx8IixsZWZ0OnRoaXMuY29uZGl0aW9uLHJpZ2h0Om59KTp0aGlzLmNvbmRpdGlvbi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSk7aWYoIW4pcmV0dXJuIFEodHQsdGhpcyx7b3BlcmF0b3I6IiYmIixsZWZ0OnRoaXMuY29uZGl0aW9uLHJpZ2h0OnR9KTt2YXIgcj10aGlzLmNsb25lKCk7cmV0dXJuIHIuY29uc2VxdWVudD10LHIuYWx0ZXJuYXRpdmU9bixyfSksZSh2dCxUKSxlKFFlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGUpP3RoaXM6dGhpcy5leHByZXNzaW9uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlLHQpfSksZShEZSxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lJiZlLm9wdGlvbigiaWU4Iik/dGhpczpudWxsfSksZShvdCxmdW5jdGlvbihlLHQpe3ZhciBuPWEodGhpcy5wcm9wZXJ0aWVzLGUsdCk7cmV0dXJuIG4mJk4odGhpcyxuKX0pLGUoYXQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy52YWx1ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KX0pLGUoWWUsZnVuY3Rpb24oZSx0KXt2YXIgbj1hKHRoaXMuZXhwcmVzc2lvbnMsZSx0KTtyZXR1cm4gbj09PXRoaXMuZXhwcmVzc2lvbnM/dGhpczpuP04odGhpcyxuKTpudWxsfSksZShaZSxmdW5jdGlvbihlLHQpe2lmKHRoaXMuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGUpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuZXhwcmVzc2lvbi5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTtpZighbilyZXR1cm4gdGhpcy5wcm9wZXJ0eS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUoZSx0KTt2YXIgcj10aGlzLnByb3BlcnR5LmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShlKTtyZXR1cm4gcj9OKHRoaXMsW24scl0pOm59KSxlKG10LGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzX2RlY2xhcmVkKGUpPyh0aGlzLmRlZmluaXRpb24oKS5yZXBsYWNlZCsrLG51bGwpOnRoaXN9KSxlKGd0LFQpLGUoSmUsZnVuY3Rpb24oZSx0KXtpZihzW3RoaXMub3BlcmF0b3JdKXJldHVybiB0aGlzLndyaXRlX29ubHk9IXRoaXMuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGUpLHRoaXM7aWYoInR5cGVvZiI9PXRoaXMub3BlcmF0b3ImJnRoaXMuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIG10KXJldHVybiB0aGlzLmV4cHJlc3Npb24uZGVmaW5pdGlvbigpLnJlcGxhY2VkKyssbnVsbDt2YXIgbj10aGlzLmV4cHJlc3Npb24uZHJvcF9zaWRlX2VmZmVjdF9mcmVlKGUsdCk7cmV0dXJuIHQmJm4mJnoobik/bj09PXRoaXMuZXhwcmVzc2lvbiYmIiEiPT10aGlzLm9wZXJhdG9yP3RoaXM6bi5uZWdhdGUoZSx0KTpufSl9KGZ1bmN0aW9uKGUsdCl7ZS5ERUZNRVRIT0QoImRyb3Bfc2lkZV9lZmZlY3RfZnJlZSIsdCl9KSxlKGhlLGZ1bmN0aW9uKGUsdCl7aWYodC5vcHRpb24oInNpZGVfZWZmZWN0cyIpKXt2YXIgbj1lLmJvZHkscj1uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0LCEwKTtpZighcilyZXR1cm4gdC53YXJuKCJEcm9wcGluZyBzaWRlLWVmZmVjdC1mcmVlIHN0YXRlbWVudCBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLFEoZ2UsZSk7aWYociE9PW4pcmV0dXJuIFEoaGUsZSx7Ym9keTpyfSl9cmV0dXJuIGV9KSxlKHdlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQub3B0aW9uKCJsb29wcyIpP1EoRWUsZSxlKS5vcHRpbWl6ZSh0KTplfSksZShfZSxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigibG9vcHMiKSlyZXR1cm4gZTt2YXIgbj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUodCk7aWYoIShuIGluc3RhbmNlb2YgbGUpKXtpZihuKXJldHVybiBRKEVlLGUse2JvZHk6UShtZSxlLmJvZHkse2JvZHk6W2UuYm9keSxRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9ufSldfSl9KS5vcHRpbWl6ZSh0KTtpZigheChlLHQucGFyZW50KCkpKXJldHVybiBRKG1lLGUuYm9keSx7Ym9keTpbZS5ib2R5LFEoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KV19KS5vcHRpbWl6ZSh0KX1yZXR1cm4gZS5ib2R5IGluc3RhbmNlb2YgaGU/UShFZSxlLHtjb25kaXRpb246TihlLmNvbmRpdGlvbixbZS5ib2R5LmJvZHksZS5jb25kaXRpb25dKSxib2R5OlEoZ2UsZSl9KS5vcHRpbWl6ZSh0KTplfSksZShFZSxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigibG9vcHMiKSlyZXR1cm4gZTtpZih0Lm9wdGlvbigic2lkZV9lZmZlY3RzIikmJmUuaW5pdCYmKGUuaW5pdD1lLmluaXQuZHJvcF9zaWRlX2VmZmVjdF9mcmVlKHQpKSxlLmNvbmRpdGlvbil7dmFyIG49ZS5jb25kaXRpb24uZXZhbHVhdGUodCk7aWYoIShuIGluc3RhbmNlb2YgbGUpKWlmKG4pZS5jb25kaXRpb249bnVsbDtlbHNlIGlmKCF0Lm9wdGlvbigiZGVhZF9jb2RlIikpe3ZhciByPWUuY29uZGl0aW9uO2UuY29uZGl0aW9uPVAobixlLmNvbmRpdGlvbiksZS5jb25kaXRpb249eShlLmNvbmRpdGlvbi50cmFuc2Zvcm0odCkscil9aWYobiBpbnN0YW5jZW9mIGxlJiYobj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUodCkpLG4pIWUuY29uZGl0aW9ufHxuIGluc3RhbmNlb2YgbGV8fChlLmJvZHk9UShtZSxlLmJvZHkse2JvZHk6W1EoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KSxlLmJvZHldfSksZS5jb25kaXRpb249bnVsbCk7ZWxzZSBpZih0Lm9wdGlvbigiZGVhZF9jb2RlIikpe3ZhciBpPVtdO3JldHVybiBFKHQsZS5ib2R5LGkpLGUuaW5pdCBpbnN0YW5jZW9mIGNlP2kucHVzaChlLmluaXQpOmUuaW5pdCYmaS5wdXNoKFEoaGUsZS5pbml0LHtib2R5OmUuaW5pdH0pKSxpLnB1c2goUShoZSxlLmNvbmRpdGlvbix7Ym9keTplLmNvbmRpdGlvbn0pKSxRKG1lLGUse2JvZHk6aX0pLm9wdGltaXplKHQpfX1yZXR1cm4gZnVuY3Rpb24gdChuLHIpe3ZhciBlPW4uYm9keSBpbnN0YW5jZW9mIG1lP24uYm9keS5ib2R5WzBdOm4uYm9keTtpZihyLm9wdGlvbigiZGVhZF9jb2RlIikmJm8oZSkpe3ZhciBpPVtdO3JldHVybiBuLmluaXQgaW5zdGFuY2VvZiBjZT9pLnB1c2gobi5pbml0KTpuLmluaXQmJmkucHVzaChRKGhlLG4uaW5pdCx7Ym9keTpuLmluaXR9KSksbi5jb25kaXRpb24mJmkucHVzaChRKGhlLG4uY29uZGl0aW9uLHtib2R5Om4uY29uZGl0aW9ufSkpLEUocixuLmJvZHksaSksUShtZSxuLHtib2R5Oml9KX1yZXR1cm4gZSBpbnN0YW5jZW9mIFVlJiYobyhlLmJvZHkpPyhuLmNvbmRpdGlvbj9uLmNvbmRpdGlvbj1RKHR0LG4uY29uZGl0aW9uLHtsZWZ0Om4uY29uZGl0aW9uLG9wZXJhdG9yOiImJiIscmlnaHQ6ZS5jb25kaXRpb24ubmVnYXRlKHIpfSk6bi5jb25kaXRpb249ZS5jb25kaXRpb24ubmVnYXRlKHIpLGEoZS5hbHRlcm5hdGl2ZSkpOm8oZS5hbHRlcm5hdGl2ZSkmJihuLmNvbmRpdGlvbj9uLmNvbmRpdGlvbj1RKHR0LG4uY29uZGl0aW9uLHtsZWZ0Om4uY29uZGl0aW9uLG9wZXJhdG9yOiImJiIscmlnaHQ6ZS5jb25kaXRpb259KTpuLmNvbmRpdGlvbj1lLmNvbmRpdGlvbixhKGUuYm9keSkpKSxuO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGZSYmci5sb29wY29udHJvbF90YXJnZXQoZSk9PT1yLnNlbGYoKX1mdW5jdGlvbiBhKGUpe2U9XyhlKSxuLmJvZHkgaW5zdGFuY2VvZiBtZT8obi5ib2R5PW4uYm9keS5jbG9uZSgpLG4uYm9keS5ib2R5PWUuY29uY2F0KG4uYm9keS5ib2R5LnNsaWNlKDEpKSxuLmJvZHk9bi5ib2R5LnRyYW5zZm9ybShyKSk6bi5ib2R5PVEobWUsbi5ib2R5LHtib2R5OmV9KS50cmFuc2Zvcm0ociksbj10KG4scil9fShlLHQpfSksZShVZSxmdW5jdGlvbihlLHQpe2lmKEkoZS5hbHRlcm5hdGl2ZSkmJihlLmFsdGVybmF0aXZlPW51bGwpLCF0Lm9wdGlvbigiY29uZGl0aW9uYWxzIikpcmV0dXJuIGU7dmFyIG49ZS5jb25kaXRpb24uZXZhbHVhdGUodCk7aWYoISh0Lm9wdGlvbigiZGVhZF9jb2RlIil8fG4gaW5zdGFuY2VvZiBsZSkpe3ZhciByPWUuY29uZGl0aW9uO2UuY29uZGl0aW9uPVAobixyKSxlLmNvbmRpdGlvbj15KGUuY29uZGl0aW9uLnRyYW5zZm9ybSh0KSxyKX1pZih0Lm9wdGlvbigiZGVhZF9jb2RlIikpe2lmKG4gaW5zdGFuY2VvZiBsZSYmKG49ZS5jb25kaXRpb24uaXNfdHJ1dGh5KCl8fGUuY29uZGl0aW9uLnRhaWxfbm9kZSgpLmV2YWx1YXRlKHQpKSwhbil7dC53YXJuKCJDb25kaXRpb24gYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsZS5jb25kaXRpb24uc3RhcnQpO3ZhciBpPVtdO3JldHVybiBFKHQsZS5ib2R5LGkpLGkucHVzaChRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9ufSkpLGUuYWx0ZXJuYXRpdmUmJmkucHVzaChlLmFsdGVybmF0aXZlKSxRKG1lLGUse2JvZHk6aX0pLm9wdGltaXplKHQpfWlmKCEobiBpbnN0YW5jZW9mIGxlKSl7dC53YXJuKCJDb25kaXRpb24gYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLmNvbmRpdGlvbi5zdGFydCk7aT1bXTtyZXR1cm4gZS5hbHRlcm5hdGl2ZSYmRSh0LGUuYWx0ZXJuYXRpdmUsaSksaS5wdXNoKFEoaGUsZS5jb25kaXRpb24se2JvZHk6ZS5jb25kaXRpb259KSksaS5wdXNoKGUuYm9keSksUShtZSxlLHtib2R5Oml9KS5vcHRpbWl6ZSh0KX19dmFyIG89ZS5jb25kaXRpb24ubmVnYXRlKHQpLGE9ZS5jb25kaXRpb24ucHJpbnRfdG9fc3RyaW5nKCkubGVuZ3RoLHM9by5wcmludF90b19zdHJpbmcoKS5sZW5ndGgsdT1zPGE7aWYoZS5hbHRlcm5hdGl2ZSYmdSl7dT0hMSxlLmNvbmRpdGlvbj1vO3ZhciBsPWUuYm9keTtlLmJvZHk9ZS5hbHRlcm5hdGl2ZXx8UShnZSxlKSxlLmFsdGVybmF0aXZlPWx9aWYoSShlLmJvZHkpJiZJKGUuYWx0ZXJuYXRpdmUpKXJldHVybiBRKGhlLGUuY29uZGl0aW9uLHtib2R5OmUuY29uZGl0aW9uLmNsb25lKCl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBoZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGhlKXJldHVybiBRKGhlLGUse2JvZHk6UShudCxlLHtjb25kaXRpb246ZS5jb25kaXRpb24sY29uc2VxdWVudDplLmJvZHkuYm9keSxhbHRlcm5hdGl2ZTplLmFsdGVybmF0aXZlLmJvZHl9KX0pLm9wdGltaXplKHQpO2lmKEkoZS5hbHRlcm5hdGl2ZSkmJmUuYm9keSBpbnN0YW5jZW9mIGhlKXJldHVybiBhPT09cyYmIXUmJmUuY29uZGl0aW9uIGluc3RhbmNlb2YgdHQmJiJ8fCI9PWUuY29uZGl0aW9uLm9wZXJhdG9yJiYodT0hMCksdT9RKGhlLGUse2JvZHk6USh0dCxlLHtvcGVyYXRvcjoifHwiLGxlZnQ6byxyaWdodDplLmJvZHkuYm9keX0pfSkub3B0aW1pemUodCk6UShoZSxlLHtib2R5OlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0OmUuY29uZGl0aW9uLHJpZ2h0OmUuYm9keS5ib2R5fSl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBnZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIGhlKXJldHVybiBRKGhlLGUse2JvZHk6USh0dCxlLHtvcGVyYXRvcjoifHwiLGxlZnQ6ZS5jb25kaXRpb24scmlnaHQ6ZS5hbHRlcm5hdGl2ZS5ib2R5fSl9KS5vcHRpbWl6ZSh0KTtpZihlLmJvZHkgaW5zdGFuY2VvZiBCZSYmZS5hbHRlcm5hdGl2ZSBpbnN0YW5jZW9mIEJlJiZlLmJvZHkuVFlQRT09ZS5hbHRlcm5hdGl2ZS5UWVBFKXJldHVybiBRKGUuYm9keS5DVE9SLGUse3ZhbHVlOlEobnQsZSx7Y29uZGl0aW9uOmUuY29uZGl0aW9uLGNvbnNlcXVlbnQ6ZS5ib2R5LnZhbHVlfHxRKEF0LGUuYm9keSksYWx0ZXJuYXRpdmU6ZS5hbHRlcm5hdGl2ZS52YWx1ZXx8UShBdCxlLmFsdGVybmF0aXZlKX0pLnRyYW5zZm9ybSh0KX0pLm9wdGltaXplKHQpO2lmKGUuYm9keSBpbnN0YW5jZW9mIFVlJiYhZS5ib2R5LmFsdGVybmF0aXZlJiYhZS5hbHRlcm5hdGl2ZSYmKGU9UShVZSxlLHtjb25kaXRpb246USh0dCxlLmNvbmRpdGlvbix7b3BlcmF0b3I6IiYmIixsZWZ0OmUuY29uZGl0aW9uLHJpZ2h0OmUuYm9keS5jb25kaXRpb259KSxib2R5OmUuYm9keS5ib2R5LGFsdGVybmF0aXZlOm51bGx9KSksQShlLmJvZHkpJiZlLmFsdGVybmF0aXZlKXt2YXIgYz1lLmFsdGVybmF0aXZlO3JldHVybiBlLmFsdGVybmF0aXZlPW51bGwsUShtZSxlLHtib2R5OltlLGNdfSkub3B0aW1pemUodCl9aWYoQShlLmFsdGVybmF0aXZlKSl7aT1lLmJvZHk7cmV0dXJuIGUuYm9keT1lLmFsdGVybmF0aXZlLGUuY29uZGl0aW9uPXU/bzplLmNvbmRpdGlvbi5uZWdhdGUodCksZS5hbHRlcm5hdGl2ZT1udWxsLFEobWUsZSx7Ym9keTpbZSxpXX0pLm9wdGltaXplKHQpfXJldHVybiBlfSksZShNZSxmdW5jdGlvbih0LG4pe2lmKCFuLm9wdGlvbigic3dpdGNoZXMiKSlyZXR1cm4gdDt2YXIgZSxyPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuKTtpZighKHIgaW5zdGFuY2VvZiBsZSkpe3ZhciBpPXQuZXhwcmVzc2lvbjt0LmV4cHJlc3Npb249UChyLGkpLHQuZXhwcmVzc2lvbj15KHQuZXhwcmVzc2lvbi50cmFuc2Zvcm0obiksaSl9aWYoIW4ub3B0aW9uKCJkZWFkX2NvZGUiKSlyZXR1cm4gdDtyIGluc3RhbmNlb2YgbGUmJihyPXQuZXhwcmVzc2lvbi50YWlsX25vZGUoKS5ldmFsdWF0ZShuKSk7Zm9yKHZhciBvLGEscz1bXSx1PVtdLGw9MCxjPXQuYm9keS5sZW5ndGg7bDxjJiYhYTtsKyspe2lmKChlPXQuYm9keVtsXSlpbnN0YW5jZW9mIE5lKW8/YihlLHVbdS5sZW5ndGgtMV0pOm89ZTtlbHNlIGlmKCEociBpbnN0YW5jZW9mIGxlKSl7aWYoISgoZz1lLmV4cHJlc3Npb24uZXZhbHVhdGUobikpaW5zdGFuY2VvZiBsZSkmJmchPT1yKXtiKGUsdVt1Lmxlbmd0aC0xXSk7Y29udGludWV9aWYoZyBpbnN0YW5jZW9mIGxlJiYoZz1lLmV4cHJlc3Npb24udGFpbF9ub2RlKCkuZXZhbHVhdGUobikpLGc9PT1yJiYoYT1lLG8pKXt2YXIgZj11LmluZGV4T2Yobyk7dS5zcGxpY2UoZiwxKSxiKG8sdVtmLTFdKSxvPW51bGx9fWlmKEEoZSkpe3ZhciBwPXVbdS5sZW5ndGgtMV07QShwKSYmcC5ib2R5Lmxlbmd0aD09ZS5ib2R5Lmxlbmd0aCYmUShtZSxwLHApLmVxdWl2YWxlbnRfdG8oUShtZSxlLGUpKSYmKHAuYm9keT1bXSl9dS5wdXNoKGUpfWZvcig7bDxjOyliKHQuYm9keVtsKytdLHVbdS5sZW5ndGgtMV0pO2ZvcigwPHUubGVuZ3RoJiYodVswXS5ib2R5PXMuY29uY2F0KHVbMF0uYm9keSkpLHQuYm9keT11O2U9dVt1Lmxlbmd0aC0xXTspe3ZhciBoPWUuYm9keVtlLmJvZHkubGVuZ3RoLTFdO2lmKGggaW5zdGFuY2VvZiBGZSYmbi5sb29wY29udHJvbF90YXJnZXQoaCk9PT10JiZlLmJvZHkucG9wKCksZS5ib2R5Lmxlbmd0aHx8ZSBpbnN0YW5jZW9mIFBlJiYob3x8ZS5leHByZXNzaW9uLmhhc19zaWRlX2VmZmVjdHMobikpKWJyZWFrO3UucG9wKCk9PT1vJiYobz1udWxsKX1pZigwPT11Lmxlbmd0aClyZXR1cm4gUShtZSx0LHtib2R5OnMuY29uY2F0KFEoaGUsdC5leHByZXNzaW9uLHtib2R5OnQuZXhwcmVzc2lvbn0pKX0pLm9wdGltaXplKG4pO2lmKDE9PXUubGVuZ3RoJiYodVswXT09PWF8fHVbMF09PT1vKSl7dmFyIGQ9ITEsbT1uZXcgRHQoZnVuY3Rpb24oZSl7aWYoZHx8ZSBpbnN0YW5jZW9mIE9lfHxlIGluc3RhbmNlb2YgaGUpcmV0dXJuITA7ZSBpbnN0YW5jZW9mIEZlJiZtLmxvb3Bjb250cm9sX3RhcmdldChlKT09PXQmJihkPSEwKX0pO2lmKHQud2FsayhtKSwhZCl7dmFyIGcsdj11WzBdLmJvZHkuc2xpY2UoKTtyZXR1cm4oZz11WzBdLmV4cHJlc3Npb24pJiZ2LnVuc2hpZnQoUShoZSxnLHtib2R5Omd9KSksdi51bnNoaWZ0KFEoaGUsdC5leHByZXNzaW9uLHtib2R5OnQuZXhwcmVzc2lvbn0pKSxRKG1lLHQse2JvZHk6dn0pLm9wdGltaXplKG4pfX1yZXR1cm4gdDtmdW5jdGlvbiBiKGUsdCl7dCYmIUEodCk/dC5ib2R5PXQuYm9keS5jb25jYXQoZS5ib2R5KTpFKG4sZSxzKX19KSxlKEllLGZ1bmN0aW9uKGUsdCl7aWYoaShlLmJvZHksdCksZS5iY2F0Y2gmJmUuYmZpbmFsbHkmJnNlKGUuYmZpbmFsbHkuYm9keSxJKSYmKGUuYmZpbmFsbHk9bnVsbCksdC5vcHRpb24oImRlYWRfY29kZSIpJiZzZShlLmJvZHksSSkpe3ZhciBuPVtdO3JldHVybiBlLmJjYXRjaCYmKEUodCxlLmJjYXRjaCxuKSxuLmZvckVhY2goZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIFZlJiZlLmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTt0JiYoZS5uYW1lPWUubmFtZS5jbG9uZSgpLGUubmFtZS50aGVkZWY9dCl9KX0pKSxlLmJmaW5hbGx5JiYobj1uLmNvbmNhdChlLmJmaW5hbGx5LmJvZHkpKSxRKG1lLGUse2JvZHk6bn0pLm9wdGltaXplKHQpfXJldHVybiBlfSksVmUuREVGTUVUSE9EKCJyZW1vdmVfaW5pdGlhbGl6ZXJzIixmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnZhbHVlPW51bGx9KX0pLFZlLkRFRk1FVEhPRCgidG9fYXNzaWdubWVudHMiLGZ1bmN0aW9uKGUpe3ZhciByPWUub3B0aW9uKCJyZWR1Y2VfdmFycyIpLHQ9dGhpcy5kZWZpbml0aW9ucy5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZih0LnZhbHVlKXt2YXIgbj1RKG10LHQubmFtZSx0Lm5hbWUpO2UucHVzaChRKHJ0LHQse29wZXJhdG9yOiI9IixsZWZ0Om4scmlnaHQ6dC52YWx1ZX0pKSxyJiYobi5kZWZpbml0aW9uKCkuZml4ZWQ9ITEpfXJldHVybih0PXQubmFtZS5kZWZpbml0aW9uKCkpLmVsaW1pbmF0ZWQrKyx0LnJlcGxhY2VkLS0sZX0sW10pO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOk4odGhpcyx0KX0pLGUoVmUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5kZWZpbml0aW9ucy5sZW5ndGg/ZTpRKGdlLGUpfSksS2UuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoIWUub3B0aW9uKCJzZXF1ZW5jZXMiKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLmV4cHJlc3Npb247aWYoISh0IGluc3RhbmNlb2YgWWUpKXJldHVybiB0aGlzO3ZhciBuPXQudGFpbF9ub2RlKCk7aWYoYShlLG4pJiYhKHRoaXMgaW5zdGFuY2VvZiBHZSkpcmV0dXJuIHRoaXM7dmFyIHI9dC5leHByZXNzaW9ucy5zbGljZSgwLC0xKSxpPXRoaXMuY2xvbmUoKTtyZXR1cm4gaS5leHByZXNzaW9uPW4sci5wdXNoKGkpLE4odGhpcyxyKS5vcHRpbWl6ZShlKX0pLGUoS2UsZnVuY3Rpb24ocyxpKXt2YXIgZT1zLmxpZnRfc2VxdWVuY2VzKGkpO2lmKGUhPT1zKXJldHVybiBlO3ZhciByPXMuZXhwcmVzc2lvbixoPXI7aS5vcHRpb24oInJlZHVjZV92YXJzIikmJmggaW5zdGFuY2VvZiBtdCYmKGg9aC5maXhlZF92YWx1ZSgpKTt2YXIgdD1oIGluc3RhbmNlb2YgT2U7aWYoaS5vcHRpb24oInVudXNlZCIpJiZ0JiYhaC51c2VzX2FyZ3VtZW50cyYmIWgucGlubmVkKCkpe2Zvcih2YXIgbj0wLG89MCxhPTAsdT1zLmFyZ3MubGVuZ3RoO2E8dTthKyspe3ZhciBsPWE+PWguYXJnbmFtZXMubGVuZ3RoO2lmKGx8fGguYXJnbmFtZXNbYV0uX191bnVzZWQpe2lmKGc9cy5hcmdzW2FdLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZShpKSlzLmFyZ3NbbisrXT1nO2Vsc2UgaWYoIWwpe3MuYXJnc1tuKytdPVEoeXQscy5hcmdzW2FdLHt2YWx1ZTowfSk7Y29udGludWV9fWVsc2Ugcy5hcmdzW24rK109cy5hcmdzW2FdO289bn1zLmFyZ3MubGVuZ3RoPW99aWYoaS5vcHRpb24oInVuc2FmZSIpKWlmKGoocikpc3dpdGNoKHIubmFtZSl7Y2FzZSJBcnJheSI6aWYoMT09cy5hcmdzLmxlbmd0aCl7aWYoKG09cy5hcmdzWzBdKWluc3RhbmNlb2YgeXQpdHJ5e3ZhciBjPW0uZ2V0VmFsdWUoKTtpZig2PGMpYnJlYWs7dmFyIGY9QXJyYXkoYyk7Zm9yKGE9MDthPGM7YSsrKWZbYV09USh4dCxzKTtyZXR1cm4gUShpdCxzLHtlbGVtZW50czpmfSl9Y2F0Y2goZSl7aS53YXJuKCJJbnZhbGlkIGFycmF5IGxlbmd0aDoge2xlbmd0aH0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7bGVuZ3RoOmMsZmlsZTpzLnN0YXJ0LmZpbGUsbGluZTpzLnN0YXJ0LmxpbmUsY29sOnMuc3RhcnQuY29sfSk7YnJlYWt9aWYoIW0uaXNfYm9vbGVhbihpKSYmIW0uaXNfc3RyaW5nKGkpKWJyZWFrfXJldHVybiBRKGl0LHMse2VsZW1lbnRzOnMuYXJnc30pO2Nhc2UiT2JqZWN0IjppZigwPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKG90LHMse3Byb3BlcnRpZXM6W119KTticmVhaztjYXNlIlN0cmluZyI6aWYoMD09cy5hcmdzLmxlbmd0aClyZXR1cm4gUShidCxzLHt2YWx1ZToiIn0pO2lmKHMuYXJncy5sZW5ndGg8PTEpcmV0dXJuIFEodHQscyx7bGVmdDpzLmFyZ3NbMF0sb3BlcmF0b3I6IisiLHJpZ2h0OlEoYnQscyx7dmFsdWU6IiJ9KX0pLm9wdGltaXplKGkpO2JyZWFrO2Nhc2UiTnVtYmVyIjppZigwPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKHl0LHMse3ZhbHVlOjB9KTtpZigxPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKFhlLHMse2V4cHJlc3Npb246cy5hcmdzWzBdLG9wZXJhdG9yOiIrIn0pLm9wdGltaXplKGkpO2Nhc2UiQm9vbGVhbiI6aWYoMD09cy5hcmdzLmxlbmd0aClyZXR1cm4gUShPdCxzKTtpZigxPT1zLmFyZ3MubGVuZ3RoKXJldHVybiBRKFhlLHMse2V4cHJlc3Npb246UShYZSxzLHtleHByZXNzaW9uOnMuYXJnc1swXSxvcGVyYXRvcjoiISJ9KSxvcGVyYXRvcjoiISJ9KS5vcHRpbWl6ZShpKTticmVhaztjYXNlIlJlZ0V4cCI6dmFyIHA9W107aWYoc2Uocy5hcmdzLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZXZhbHVhdGUoaSk7cmV0dXJuIHAudW5zaGlmdCh0KSxlIT09dH0pKXRyeXtyZXR1cm4gSChpLHMsUShfdCxzLHt2YWx1ZTpSZWdFeHAuYXBwbHkoUmVnRXhwLHApfSkpfWNhdGNoKGUpe2kud2FybigiRXJyb3IgY29udmVydGluZyB7ZXhwcn0gW3tmaWxlfTp7bGluZX0se2NvbH1dIix7ZXhwcjpzLnByaW50X3RvX3N0cmluZygpLGZpbGU6cy5zdGFydC5maWxlLGxpbmU6cy5zdGFydC5saW5lLGNvbDpzLnN0YXJ0LmNvbH0pfX1lbHNlIGlmKHIgaW5zdGFuY2VvZiBRZSlzd2l0Y2goci5wcm9wZXJ0eSl7Y2FzZSJ0b1N0cmluZyI6aWYoMD09cy5hcmdzLmxlbmd0aCYmIXIuZXhwcmVzc2lvbi5tYXlfdGhyb3dfb25fYWNjZXNzKGkpKXJldHVybiBRKHR0LHMse2xlZnQ6UShidCxzLHt2YWx1ZToiIn0pLG9wZXJhdG9yOiIrIixyaWdodDpyLmV4cHJlc3Npb259KS5vcHRpbWl6ZShpKTticmVhaztjYXNlImpvaW4iOnZhciBkO2lmKHIuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIGl0KWlmKCEoMDxzLmFyZ3MubGVuZ3RoJiYoZD1zLmFyZ3NbMF0uZXZhbHVhdGUoaSkpPT09cy5hcmdzWzBdKSl7Zj1bXTt2YXIgbSxnLHY9W107cmV0dXJuIHIuZXhwcmVzc2lvbi5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZXZhbHVhdGUoaSk7dCE9PWU/di5wdXNoKHQpOigwPHYubGVuZ3RoJiYoZi5wdXNoKFEoYnQscyx7dmFsdWU6di5qb2luKGQpfSkpLHYubGVuZ3RoPTApLGYucHVzaChlKSl9KSwwPHYubGVuZ3RoJiZmLnB1c2goUShidCxzLHt2YWx1ZTp2LmpvaW4oZCl9KSksMD09Zi5sZW5ndGg/UShidCxzLHt2YWx1ZToiIn0pOjE9PWYubGVuZ3RoP2ZbMF0uaXNfc3RyaW5nKGkpP2ZbMF06USh0dCxmWzBdLHtvcGVyYXRvcjoiKyIsbGVmdDpRKGJ0LHMse3ZhbHVlOiIifSkscmlnaHQ6ZlswXX0pOiIiPT1kPyhtPWZbMF0uaXNfc3RyaW5nKGkpfHxmWzFdLmlzX3N0cmluZyhpKT9mLnNoaWZ0KCk6UShidCxzLHt2YWx1ZToiIn0pLGYucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIFEodHQsdCx7b3BlcmF0b3I6IisiLGxlZnQ6ZSxyaWdodDp0fSl9LG0pLm9wdGltaXplKGkpKTooKGc9cy5jbG9uZSgpKS5leHByZXNzaW9uPWcuZXhwcmVzc2lvbi5jbG9uZSgpLGcuZXhwcmVzc2lvbi5leHByZXNzaW9uPWcuZXhwcmVzc2lvbi5leHByZXNzaW9uLmNsb25lKCksZy5leHByZXNzaW9uLmV4cHJlc3Npb24uZWxlbWVudHM9ZixIKGkscyxnKSl9YnJlYWs7Y2FzZSJjaGFyQXQiOmlmKHIuZXhwcmVzc2lvbi5pc19zdHJpbmcoaSkpe3ZhciBiPXMuYXJnc1swXSx5PWI/Yi5ldmFsdWF0ZShpKTowO2lmKHkhPT1iKXJldHVybiBRKFplLHIse2V4cHJlc3Npb246ci5leHByZXNzaW9uLHByb3BlcnR5OlAoMHx5LGJ8fHIpfSkub3B0aW1pemUoaSl9YnJlYWs7Y2FzZSJhcHBseSI6aWYoMj09cy5hcmdzLmxlbmd0aCYmcy5hcmdzWzFdaW5zdGFuY2VvZiBpdClyZXR1cm4oUz1zLmFyZ3NbMV0uZWxlbWVudHMuc2xpY2UoKSkudW5zaGlmdChzLmFyZ3NbMF0pLFEoS2Uscyx7ZXhwcmVzc2lvbjpRKFFlLHIse2V4cHJlc3Npb246ci5leHByZXNzaW9uLHByb3BlcnR5OiJjYWxsIn0pLGFyZ3M6U30pLm9wdGltaXplKGkpO2JyZWFrO2Nhc2UiY2FsbCI6dmFyIF89ci5leHByZXNzaW9uO2lmKF8gaW5zdGFuY2VvZiBtdCYmKF89Xy5maXhlZF92YWx1ZSgpKSxfIGluc3RhbmNlb2YgT2UmJiFfLmNvbnRhaW5zX3RoaXMoKSlyZXR1cm4ocy5hcmdzLmxlbmd0aD9OKHRoaXMsW3MuYXJnc1swXSxRKEtlLHMse2V4cHJlc3Npb246ci5leHByZXNzaW9uLGFyZ3M6cy5hcmdzLnNsaWNlKDEpfSldKTpRKEtlLHMse2V4cHJlc3Npb246ci5leHByZXNzaW9uLGFyZ3M6W119KSkub3B0aW1pemUoaSl9aWYoaS5vcHRpb24oInVuc2FmZV9GdW5jdGlvbiIpJiZqKHIpJiYiRnVuY3Rpb24iPT1yLm5hbWUpe2lmKDA9PXMuYXJncy5sZW5ndGgpcmV0dXJuIFEoRGUscyx7YXJnbmFtZXM6W10sYm9keTpbXX0pO2lmKHNlKHMuYXJncyxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGJ0fSkpdHJ5e3ZhciB3PVl0KGs9Im4oZnVuY3Rpb24oIitzLmFyZ3Muc2xpY2UoMCwtMSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkuam9pbigiLCIpKyIpeyIrcy5hcmdzW3MuYXJncy5sZW5ndGgtMV0udmFsdWUrIn0pIiksRT17aWU4Omkub3B0aW9uKCJpZTgiKX07dy5maWd1cmVfb3V0X3Njb3BlKEUpO3ZhciBBLHg9bmV3IFh0KGkub3B0aW9ucyk7KHc9dy50cmFuc2Zvcm0oeCkpLmZpZ3VyZV9vdXRfc2NvcGUoRSksdy5jb21wdXRlX2NoYXJfZnJlcXVlbmN5KEUpLHcubWFuZ2xlX25hbWVzKEUpLHcud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISFBfHwoZSBpbnN0YW5jZW9mIE9lPyhBPWUsITApOnZvaWQgMCl9KSk7dmFyIGs9SnQoKTtyZXR1cm4gbWUucHJvdG90eXBlLl9jb2RlZ2VuLmNhbGwoQSxBLGspLHMuYXJncz1bUShidCxzLHt2YWx1ZTpBLmFyZ25hbWVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmludF90b19zdHJpbmcoKX0pLmpvaW4oIiwiKX0pLFEoYnQscy5hcmdzW3MuYXJncy5sZW5ndGgtMV0se3ZhbHVlOmsuZ2V0KCkucmVwbGFjZSgvXlx7fFx9JC9nLCIiKX0pXSxzfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIE50KSl0aHJvdyBlO2kud2FybigiRXJyb3IgcGFyc2luZyBjb2RlIHBhc3NlZCB0byBuZXcgRnVuY3Rpb24gW3tmaWxlfTp7bGluZX0se2NvbH1dIixzLmFyZ3Nbcy5hcmdzLmxlbmd0aC0xXS5zdGFydCksaS53YXJuKGUudG9TdHJpbmcoKSl9fXZhciBDPXQmJmguYm9keVswXSxPPWkub3B0aW9uKCJpbmxpbmUiKSYmIXMuaXNfZXhwcl9wdXJlKGkpO2lmKE8mJkMgaW5zdGFuY2VvZiBSZSYmKCEoVD1DLnZhbHVlKXx8VC5pc19jb25zdGFudF9leHByZXNzaW9uKCkpKXtUPVQ/VC5jbG9uZSghMCk6UShBdCxzKTt2YXIgUz1zLmFyZ3MuY29uY2F0KFQpO3JldHVybiBOKHMsUykub3B0aW1pemUoaSl9aWYodCl7dmFyIEQsVCxCLFIsTD0tMTtpZihPJiYhaC51c2VzX2FyZ3VtZW50cyYmIWgucGlubmVkKCkmJiEoaC5uYW1lJiZoIGluc3RhbmNlb2YgRGUpJiYoVD1mdW5jdGlvbihlKXt2YXIgdD1oLmJvZHkubGVuZ3RoO2lmKGkub3B0aW9uKCJpbmxpbmUiKTwzKXJldHVybiAxPT10JiZVKGUpO2U9bnVsbDtmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgcj1oLmJvZHlbbl07aWYociBpbnN0YW5jZW9mIEhlKXtpZihlJiYhc2Uoci5kZWZpbml0aW9ucyxmdW5jdGlvbihlKXtyZXR1cm4hZS52YWx1ZX0pKXJldHVybiExfWVsc2V7aWYociBpbnN0YW5jZW9mIGdlKWNvbnRpbnVlO2lmKGUpcmV0dXJuITE7ZT1yfX1yZXR1cm4gVShlKX0oQykpJiYocj09PWh8fGkub3B0aW9uKCJ1bnVzZWQiKSYmMT09KEQ9ci5kZWZpbml0aW9uKCkpLnJlZmVyZW5jZXMubGVuZ3RoJiYhJChpLEQpJiZoLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oci5zY29wZSkpJiYhcy5wdXJlJiYhaC5jb250YWluc190aGlzKCkmJmZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtkb3tpZigoQj1pLnBhcmVudCgrK0wpKWluc3RhbmNlb2YgemUpZVtCLmFyZ25hbWUubmFtZV09ITA7ZWxzZSBpZihCIGluc3RhbmNlb2YgYmUpUj1bXTtlbHNlIGlmKEIgaW5zdGFuY2VvZiBtdCYmQi5maXhlZF92YWx1ZSgpaW5zdGFuY2VvZiBrZSlyZXR1cm4hMX13aGlsZSghKEIgaW5zdGFuY2VvZiBrZSkpO3ZhciB0PSghKEIgaW5zdGFuY2VvZiBDZSl8fGkudG9wbGV2ZWwudmFycykmJihyIT09aHx8aC5wYXJlbnRfc2NvcGU9PT1pLmZpbmRfcGFyZW50KGtlKSksbj1pLm9wdGlvbigiaW5saW5lIik7cmV0dXJuISghZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWguYm9keS5sZW5ndGg7bjxyO24rKyl7dmFyIGk9aC5ib2R5W25dO2lmKGkgaW5zdGFuY2VvZiBIZSl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBvPWkuZGVmaW5pdGlvbnMubGVuZ3RoOzA8PS0tbzspe3ZhciBhPWkuZGVmaW5pdGlvbnNbb10ubmFtZTtpZihlW2EubmFtZV18fFZbYS5uYW1lXXx8Qi52YXJfbmFtZXMoKVthLm5hbWVdKXJldHVybiExO1ImJlIucHVzaChhLmRlZmluaXRpb24oKSl9fX1yZXR1cm4hMH0oZSwzPD1uJiZ0KXx8IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1oLmFyZ25hbWVzLmxlbmd0aDtuPHI7bisrKXt2YXIgaT1oLmFyZ25hbWVzW25dO2lmKCFpLl9fdW51c2VkKXtpZighdHx8ZVtpLm5hbWVdfHxWW2kubmFtZV18fEIudmFyX25hbWVzKClbaS5uYW1lXSlyZXR1cm4hMTtSJiZSLnB1c2goaS5kZWZpbml0aW9uKCkpfX1yZXR1cm4hMH0oZSwyPD1uJiZ0KXx8UiYmMCE9Ui5sZW5ndGgmJksoaCxSKSl9KCkpcmV0dXJuIGguX3NxdWVlemVkPSEwLE4ocyxmdW5jdGlvbigpe3ZhciBlPVtdLHQ9W107KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWguYXJnbmFtZXMubGVuZ3RoLHI9cy5hcmdzLmxlbmd0aDstLXI+PW47KXQucHVzaChzLmFyZ3Nbcl0pO2ZvcihyPW47MDw9LS1yOyl7dmFyIGk9aC5hcmduYW1lc1tyXSxvPXMuYXJnc1tyXTtpZihpLl9fdW51c2VkfHxCLnZhcl9uYW1lcygpW2kubmFtZV0pbyYmdC5wdXNoKG8pO2Vsc2V7dmFyIGE9UShjdCxpLGkpO2kuZGVmaW5pdGlvbigpLm9yaWcucHVzaChhKSwhbyYmUiYmKG89UShBdCxzKSksTShlLHQsYSxvKX19ZS5yZXZlcnNlKCksdC5yZXZlcnNlKCl9KShlLHQpLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQubGVuZ3RoLHI9MCxpPWguYm9keS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89aC5ib2R5W3JdO2lmKG8gaW5zdGFuY2VvZiBIZSlmb3IodmFyIGE9MCxzPW8uZGVmaW5pdGlvbnMubGVuZ3RoO2E8czthKyspe3ZhciB1PW8uZGVmaW5pdGlvbnNbYV0sbD11Lm5hbWUsYz1sLmRlZmluaXRpb24oKS5yZWRlZmluZWQoKTtpZihjJiYoKGw9bC5jbG9uZSgpKS50aGVkZWY9YyksTShlLHQsbCx1LnZhbHVlKSxSJiZzZShoLmFyZ25hbWVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUhPWwubmFtZX0pKXt2YXIgZj1oLnZhcmlhYmxlcy5nZXQobC5uYW1lKSxwPVEobXQsbCxsKTtmLnJlZmVyZW5jZXMucHVzaChwKSx0LnNwbGljZShuKyssMCxRKHJ0LHUse29wZXJhdG9yOiI9IixsZWZ0OnAscmlnaHQ6UShBdCxsKX0pKX19fX0oZSx0KSx0LnB1c2goVCksZS5sZW5ndGgmJihhPUIuYm9keS5pbmRleE9mKGkucGFyZW50KEwtMSkpKzEsQi5ib2R5LnNwbGljZShhLDAsUShIZSxoLHtkZWZpbml0aW9uczplfSkpKTtyZXR1cm4gdH0oKSkub3B0aW1pemUoaSk7aWYoaS5vcHRpb24oInNpZGVfZWZmZWN0cyIpJiZzZShoLmJvZHksSSkpe1M9cy5hcmdzLmNvbmNhdChRKEF0LHMpKTtyZXR1cm4gTihzLFMpLm9wdGltaXplKGkpfX1pZihpLm9wdGlvbigiZHJvcF9jb25zb2xlIikmJnIgaW5zdGFuY2VvZiBXZSl7Zm9yKHZhciBGPXIuZXhwcmVzc2lvbjtGLmV4cHJlc3Npb247KUY9Ri5leHByZXNzaW9uO2lmKGooRikmJiJjb25zb2xlIj09Ri5uYW1lKXJldHVybiBRKEF0LHMpLm9wdGltaXplKGkpfWlmKGkub3B0aW9uKCJuZWdhdGVfaWlmZSIpJiZpLnBhcmVudCgpaW5zdGFuY2VvZiBoZSYmeihzKSlyZXR1cm4gcy5uZWdhdGUoaSwhMCk7dmFyIHE9cy5ldmFsdWF0ZShpKTtyZXR1cm4gcSE9PXM/KHE9UChxLHMpLm9wdGltaXplKGkpLEgoaSxxLHMpKTpzO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIFJlP2UudmFsdWU/ZS52YWx1ZS5jbG9uZSghMCk6UShBdCxzKTplIGluc3RhbmNlb2YgaGU/UShYZSxlLHtvcGVyYXRvcjoidm9pZCIsZXhwcmVzc2lvbjplLmJvZHkuY2xvbmUoITApfSk6dm9pZCAwOlEoQXQscyl9ZnVuY3Rpb24gTShlLHQsbixyKXt2YXIgaT1uLmRlZmluaXRpb24oKTtCLnZhcmlhYmxlcy5zZXQobi5uYW1lLGkpLEIuZW5jbG9zZWQucHVzaChpKSxCLnZhcl9uYW1lcygpW24ubmFtZV18fChCLnZhcl9uYW1lcygpW24ubmFtZV09ITAsZS5wdXNoKFEoJGUsbix7bmFtZTpuLHZhbHVlOm51bGx9KSkpO3ZhciBvPVEobXQsbixuKTtpLnJlZmVyZW5jZXMucHVzaChvKSxyJiZ0LnB1c2goUShydCxzLHtvcGVyYXRvcjoiPSIsbGVmdDpvLHJpZ2h0OnJ9KSl9fSksZShHZSxmdW5jdGlvbihlLHQpe3ZhciBuPWUubGlmdF9zZXF1ZW5jZXModCk7aWYobiE9PWUpcmV0dXJuIG47aWYodC5vcHRpb24oInVuc2FmZSIpKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoaihyKSlzd2l0Y2goci5uYW1lKXtjYXNlIk9iamVjdCI6Y2FzZSJSZWdFeHAiOmNhc2UiRnVuY3Rpb24iOmNhc2UiRXJyb3IiOmNhc2UiQXJyYXkiOnJldHVybiBRKEtlLGUsZSkudHJhbnNmb3JtKHQpfX1yZXR1cm4gZX0pLGUoWWUsZnVuY3Rpb24oZSxuKXtpZighbi5vcHRpb24oInNpZGVfZWZmZWN0cyIpKXJldHVybiBlO3ZhciByLGksbz1bXTtyPUYobiksaT1lLmV4cHJlc3Npb25zLmxlbmd0aC0xLGUuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3Q8aSYmKGU9ZS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUobixyKSksZSYmKGgobyxlKSxyPSExKX0pO3ZhciB0PW8ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKDswPHQmJnYob1t0XSxuKTspdC0tO3Q8by5sZW5ndGgtMSYmKG9bdF09UShYZSxlLHtvcGVyYXRvcjoidm9pZCIsZXhwcmVzc2lvbjpvW3RdfSksby5sZW5ndGg9dCsxKX0oKSwwPT10PyhlPVoobixuLnBhcmVudCgpLG4uc2VsZigpLG9bMF0pKWluc3RhbmNlb2YgWWV8fChlPWUub3B0aW1pemUobikpOmUuZXhwcmVzc2lvbnM9byxlfSksSmUuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInNlcXVlbmNlcyIpJiZ0aGlzLmV4cHJlc3Npb24gaW5zdGFuY2VvZiBZZSl7dmFyIHQ9dGhpcy5leHByZXNzaW9uLmV4cHJlc3Npb25zLnNsaWNlKCksbj10aGlzLmNsb25lKCk7cmV0dXJuIG4uZXhwcmVzc2lvbj10LnBvcCgpLHQucHVzaChuKSxOKHRoaXMsdCkub3B0aW1pemUoZSl9cmV0dXJuIHRoaXN9KSxlKGV0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGlmdF9zZXF1ZW5jZXModCl9KSxlKFhlLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHByZXNzaW9uO2lmKCJkZWxldGUiPT1lLm9wZXJhdG9yJiYhKG4gaW5zdGFuY2VvZiBtdHx8biBpbnN0YW5jZW9mIFdlfHxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGt0fHxlIGluc3RhbmNlb2YgRXR8fGUgaW5zdGFuY2VvZiBBdH0obikpKXJldHVybiBuIGluc3RhbmNlb2YgWWU/KChuPW4uZXhwcmVzc2lvbnMuc2xpY2UoKSkucHVzaChRKFN0LGUpKSxOKGUsbikub3B0aW1pemUodCkpOk4oZSxbbixRKFN0LGUpXSkub3B0aW1pemUodCk7dmFyIHI9ZS5saWZ0X3NlcXVlbmNlcyh0KTtpZihyIT09ZSlyZXR1cm4gcjtpZih0Lm9wdGlvbigic2lkZV9lZmZlY3RzIikmJiJ2b2lkIj09ZS5vcGVyYXRvcilyZXR1cm4obj1uLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0KSk/KGUuZXhwcmVzc2lvbj1uLGUpOlEoQXQsZSkub3B0aW1pemUodCk7aWYodC5vcHRpb24oImJvb2xlYW5zIikpe2lmKCIhIj09ZS5vcGVyYXRvciYmbi5pc190cnV0aHkoKSlyZXR1cm4gTihlLFtuLFEoT3QsZSldKS5vcHRpbWl6ZSh0KTtpZih0LmluX2Jvb2xlYW5fY29udGV4dCgpKXN3aXRjaChlLm9wZXJhdG9yKXtjYXNlIiEiOmlmKG4gaW5zdGFuY2VvZiBYZSYmIiEiPT1uLm9wZXJhdG9yKXJldHVybiBuLmV4cHJlc3Npb247biBpbnN0YW5jZW9mIHR0JiYoZT1IKHQsZSxuLm5lZ2F0ZSh0LEYodCkpKSk7YnJlYWs7Y2FzZSJ0eXBlb2YiOnJldHVybiB0Lndhcm4oIkJvb2xlYW4gZXhwcmVzc2lvbiBhbHdheXMgdHJ1ZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLChuIGluc3RhbmNlb2YgbXQ/UShTdCxlKTpOKGUsW24sUShTdCxlKV0pKS5vcHRpbWl6ZSh0KX19aWYoIi0iPT1lLm9wZXJhdG9yJiZuIGluc3RhbmNlb2Yga3QmJihuPW4udHJhbnNmb3JtKHQpKSxuIGluc3RhbmNlb2YgdHQmJigiKyI9PWUub3BlcmF0b3J8fCItIj09ZS5vcGVyYXRvcikmJigiKiI9PW4ub3BlcmF0b3J8fCIvIj09bi5vcGVyYXRvcnx8IiUiPT1uLm9wZXJhdG9yKSlyZXR1cm4gUSh0dCxlLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6UShYZSxuLmxlZnQse29wZXJhdG9yOmUub3BlcmF0b3IsZXhwcmVzc2lvbjpuLmxlZnR9KSxyaWdodDpuLnJpZ2h0fSk7aWYoIi0iIT1lLm9wZXJhdG9yfHwhKG4gaW5zdGFuY2VvZiB5dHx8biBpbnN0YW5jZW9mIGt0KSl7dmFyIGk9ZS5ldmFsdWF0ZSh0KTtpZihpIT09ZSlyZXR1cm4gSCh0LGk9UChpLGUpLm9wdGltaXplKHQpLGUpfXJldHVybiBlfSksdHQuREVGTUVUSE9EKCJsaWZ0X3NlcXVlbmNlcyIsZnVuY3Rpb24oZSl7aWYoZS5vcHRpb24oInNlcXVlbmNlcyIpKXtpZih0aGlzLmxlZnQgaW5zdGFuY2VvZiBZZSl7dmFyIHQ9dGhpcy5sZWZ0LmV4cHJlc3Npb25zLnNsaWNlKCk7cmV0dXJuKG49dGhpcy5jbG9uZSgpKS5sZWZ0PXQucG9wKCksdC5wdXNoKG4pLE4odGhpcyx0KS5vcHRpbWl6ZShlKX1pZih0aGlzLnJpZ2h0IGluc3RhbmNlb2YgWWUmJiF0aGlzLmxlZnQuaGFzX3NpZGVfZWZmZWN0cyhlKSl7Zm9yKHZhciBuLHI9Ij0iPT10aGlzLm9wZXJhdG9yJiZ0aGlzLmxlZnQgaW5zdGFuY2VvZiBtdCxpPSh0PXRoaXMucmlnaHQuZXhwcmVzc2lvbnMpLmxlbmd0aC0xLG89MDtvPGkmJihyfHwhdFtvXS5oYXNfc2lkZV9lZmZlY3RzKGUpKTtvKyspO2lmKG89PWkpcmV0dXJuIHQ9dC5zbGljZSgpLChuPXRoaXMuY2xvbmUoKSkucmlnaHQ9dC5wb3AoKSx0LnB1c2gobiksTih0aGlzLHQpLm9wdGltaXplKGUpO2lmKDA8bylyZXR1cm4obj10aGlzLmNsb25lKCkpLnJpZ2h0PU4odGhpcy5yaWdodCx0LnNsaWNlKG8pKSwodD10LnNsaWNlKDAsbykpLnB1c2gobiksTih0aGlzLHQpLm9wdGltaXplKGUpfX1yZXR1cm4gdGhpc30pO3ZhciBrPWFlKCI9PSA9PT0gIT0gIT09ICogJiB8IF4iKTtmdW5jdGlvbiAkKGUsdCl7Zm9yKHZhciBuLHI9MDtuPWUucGFyZW50KHIpO3IrKylpZihuIGluc3RhbmNlb2YgT2Upe3ZhciBpPW4ubmFtZTtpZihpJiZpLmRlZmluaXRpb24oKT09PXQpYnJlYWt9cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgbXR8fGUuVFlQRT09PXQuVFlQRX1mdW5jdGlvbiBLKG4sdCl7dmFyIHI9ITEsaT1uZXcgRHQoZnVuY3Rpb24oZSl7cmV0dXJuISFyfHwoZSBpbnN0YW5jZW9mIG10JiZ0ZShlLmRlZmluaXRpb24oKSx0KT9yPSEwOnZvaWQgMCl9KSxvPW5ldyBEdChmdW5jdGlvbihlKXtpZihyKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiBrZSYmZSE9PW4pe3ZhciB0PW8ucGFyZW50KCk7aWYodCBpbnN0YW5jZW9mIEtlJiZ0LmV4cHJlc3Npb249PT1lKXJldHVybjtyZXR1cm4gZS53YWxrKGkpLCEwfX0pO3JldHVybiBuLndhbGsobykscn1lKHR0LGZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gcigpe3JldHVybiBuLmxlZnQuaXNfY29uc3RhbnQoKXx8bi5yaWdodC5pc19jb25zdGFudCgpfHwhbi5sZWZ0Lmhhc19zaWRlX2VmZmVjdHModCkmJiFuLnJpZ2h0Lmhhc19zaWRlX2VmZmVjdHModCl9ZnVuY3Rpb24gZShlKXtpZihyKCkpe2UmJihuLm9wZXJhdG9yPWUpO3ZhciB0PW4ubGVmdDtuLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXR9fWlmKGtbbi5vcGVyYXRvcl0mJm4ucmlnaHQuaXNfY29uc3RhbnQoKSYmIW4ubGVmdC5pc19jb25zdGFudCgpJiYobi5sZWZ0IGluc3RhbmNlb2YgdHQmJkt0W24ubGVmdC5vcGVyYXRvcl0+PUt0W24ub3BlcmF0b3JdfHxlKCkpLG49bi5saWZ0X3NlcXVlbmNlcyh0KSx0Lm9wdGlvbigiY29tcGFyaXNvbnMiKSlzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSI9PT0iOmNhc2UiIT09Ijp2YXIgaT0hMDsobi5sZWZ0LmlzX3N0cmluZyh0KSYmbi5yaWdodC5pc19zdHJpbmcodCl8fG4ubGVmdC5pc19udW1iZXIodCkmJm4ucmlnaHQuaXNfbnVtYmVyKHQpfHxuLmxlZnQuaXNfYm9vbGVhbih0KSYmbi5yaWdodC5pc19ib29sZWFuKHQpfHxuLmxlZnQuZXF1aXZhbGVudF90byhuLnJpZ2h0KSkmJihuLm9wZXJhdG9yPW4ub3BlcmF0b3Iuc3Vic3RyKDAsMikpO2Nhc2UiPT0iOmNhc2UiIT0iOmlmKCFpJiZ2KG4ubGVmdCx0KSluLmxlZnQ9USh3dCxuLmxlZnQpO2Vsc2UgaWYodC5vcHRpb24oInR5cGVvZnMiKSYmbi5sZWZ0IGluc3RhbmNlb2YgYnQmJiJ1bmRlZmluZWQiPT1uLmxlZnQudmFsdWUmJm4ucmlnaHQgaW5zdGFuY2VvZiBYZSYmInR5cGVvZiI9PW4ucmlnaHQub3BlcmF0b3Ipe3ZhciBvPW4ucmlnaHQuZXhwcmVzc2lvbjsobyBpbnN0YW5jZW9mIG10PyFvLmlzX2RlY2xhcmVkKHQpOm8gaW5zdGFuY2VvZiBXZSYmdC5vcHRpb24oImllOCIpKXx8KG4ucmlnaHQ9byxuLmxlZnQ9UShBdCxuLmxlZnQpLm9wdGltaXplKHQpLDI9PW4ub3BlcmF0b3IubGVuZ3RoJiYobi5vcGVyYXRvcis9Ij0iKSl9ZWxzZSBpZihuLmxlZnQgaW5zdGFuY2VvZiBtdCYmbi5yaWdodCBpbnN0YW5jZW9mIG10JiZuLmxlZnQuZGVmaW5pdGlvbigpPT09bi5yaWdodC5kZWZpbml0aW9uKCkmJmZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaXR8fGUgaW5zdGFuY2VvZiBPZXx8ZSBpbnN0YW5jZW9mIG90fShuLmxlZnQuZml4ZWRfdmFsdWUoKSkpcmV0dXJuIFEoIj0iPT1uLm9wZXJhdG9yWzBdP1N0Ok90LG4pO2JyZWFrO2Nhc2UiJiYiOmNhc2UifHwiOnZhciBhPW4ubGVmdDtpZihhLm9wZXJhdG9yPT1uLm9wZXJhdG9yJiYoYT1hLnJpZ2h0KSxhIGluc3RhbmNlb2YgdHQmJmEub3BlcmF0b3I9PSgiJiYiPT1uLm9wZXJhdG9yPyIhPT0iOiI9PT0iKSYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiZhLm9wZXJhdG9yPT1uLnJpZ2h0Lm9wZXJhdG9yJiYodihhLmxlZnQsdCkmJm4ucmlnaHQubGVmdCBpbnN0YW5jZW9mIHd0fHxhLmxlZnQgaW5zdGFuY2VvZiB3dCYmdihuLnJpZ2h0LmxlZnQsdCkpJiYhYS5yaWdodC5oYXNfc2lkZV9lZmZlY3RzKHQpJiZhLnJpZ2h0LmVxdWl2YWxlbnRfdG8obi5yaWdodC5yaWdodCkpe3ZhciBzPVEodHQsbix7b3BlcmF0b3I6YS5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OlEod3QsbikscmlnaHQ6YS5yaWdodH0pO3JldHVybiBhIT09bi5sZWZ0JiYocz1RKHR0LG4se29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpuLmxlZnQubGVmdCxyaWdodDpzfSkpLHN9fWlmKHQub3B0aW9uKCJib29sZWFucyIpJiYiKyI9PW4ub3BlcmF0b3ImJnQuaW5fYm9vbGVhbl9jb250ZXh0KCkpe3ZhciB1PW4ubGVmdC5ldmFsdWF0ZSh0KSxsPW4ucmlnaHQuZXZhbHVhdGUodCk7aWYodSYmInN0cmluZyI9PXR5cGVvZiB1KXJldHVybiB0Lndhcm4oIisgaW4gYm9vbGVhbiBjb250ZXh0IGFsd2F5cyB0cnVlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksTihuLFtuLnJpZ2h0LFEoU3QsbildKS5vcHRpbWl6ZSh0KTtpZihsJiYic3RyaW5nIj09dHlwZW9mIGwpcmV0dXJuIHQud2FybigiKyBpbiBib29sZWFuIGNvbnRleHQgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxRKFN0LG4pXSkub3B0aW1pemUodCl9aWYodC5vcHRpb24oImNvbXBhcmlzb25zIikmJm4uaXNfYm9vbGVhbih0KSl7aWYoISh0LnBhcmVudCgpaW5zdGFuY2VvZiB0dCl8fHQucGFyZW50KClpbnN0YW5jZW9mIHJ0KXt2YXIgYz1RKFhlLG4se29wZXJhdG9yOiIhIixleHByZXNzaW9uOm4ubmVnYXRlKHQsRih0KSl9KTtuPUgodCxuLGMpfXN3aXRjaChuLm9wZXJhdG9yKXtjYXNlIj4iOmUoIjwiKTticmVhaztjYXNlIj49IjplKCI8PSIpfX1pZigiKyI9PW4ub3BlcmF0b3Ipe2lmKG4ucmlnaHQgaW5zdGFuY2VvZiBidCYmIiI9PW4ucmlnaHQuZ2V0VmFsdWUoKSYmbi5sZWZ0LmlzX3N0cmluZyh0KSlyZXR1cm4gbi5sZWZ0O2lmKG4ubGVmdCBpbnN0YW5jZW9mIGJ0JiYiIj09bi5sZWZ0LmdldFZhbHVlKCkmJm4ucmlnaHQuaXNfc3RyaW5nKHQpKXJldHVybiBuLnJpZ2h0O2lmKG4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LmxlZnQgaW5zdGFuY2VvZiBidCYmIiI9PW4ubGVmdC5sZWZ0LmdldFZhbHVlKCkmJm4ucmlnaHQuaXNfc3RyaW5nKHQpKXJldHVybiBuLmxlZnQ9bi5sZWZ0LnJpZ2h0LG4udHJhbnNmb3JtKHQpfWlmKHQub3B0aW9uKCJldmFsdWF0ZSIpKXtzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSImJiI6aWYoISh1PWcobi5sZWZ0KSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgJiYgYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksWih0LHQucGFyZW50KCksdC5zZWxmKCksbi5sZWZ0KS5vcHRpbWl6ZSh0KTtpZighKHUgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgJiYgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxuLnJpZ2h0XSkub3B0aW1pemUodCk7aWYobD1uLnJpZ2h0LmV2YWx1YXRlKHQpKXtpZighKGwgaW5zdGFuY2VvZiBsZSkpe2lmKCImJiI9PShmPXQucGFyZW50KCkpLm9wZXJhdG9yJiZmLmxlZnQ9PT10LnNlbGYoKXx8dC5vcHRpb24oImJvb2xlYW5zIikmJnQuaW5fYm9vbGVhbl9jb250ZXh0KCkpcmV0dXJuIHQud2FybigiRHJvcHBpbmcgc2lkZS1lZmZlY3QtZnJlZSAmJiBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLG4ubGVmdC5vcHRpbWl6ZSh0KX19ZWxzZXtpZih0Lm9wdGlvbigiYm9vbGVhbnMiKSYmdC5pbl9ib29sZWFuX2NvbnRleHQoKSlyZXR1cm4gdC53YXJuKCJCb29sZWFuICYmIGFsd2F5cyBmYWxzZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLE4obixbbi5sZWZ0LFEoT3QsbildKS5vcHRpbWl6ZSh0KTtuLmZhbHN5PSEwfWlmKCJ8fCI9PW4ubGVmdC5vcGVyYXRvcilpZighKHA9bi5sZWZ0LnJpZ2h0LmV2YWx1YXRlKHQpKSlyZXR1cm4gUShudCxuLHtjb25kaXRpb246bi5sZWZ0LmxlZnQsY29uc2VxdWVudDpuLnJpZ2h0LGFsdGVybmF0aXZlOm4ubGVmdC5yaWdodH0pLm9wdGltaXplKHQpO2JyZWFrO2Nhc2UifHwiOnZhciBmLHA7aWYoISh1PWcobi5sZWZ0KSkpcmV0dXJuIHQud2FybigiQ29uZGl0aW9uIGxlZnQgb2YgfHwgYWx3YXlzIGZhbHNlIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksTihuLFtuLmxlZnQsbi5yaWdodF0pLm9wdGltaXplKHQpO2lmKCEodSBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gdC53YXJuKCJDb25kaXRpb24gbGVmdCBvZiB8fCBhbHdheXMgdHJ1ZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLG4uc3RhcnQpLFoodCx0LnBhcmVudCgpLHQuc2VsZigpLG4ubGVmdCkub3B0aW1pemUodCk7aWYobD1uLnJpZ2h0LmV2YWx1YXRlKHQpKXtpZighKGwgaW5zdGFuY2VvZiBsZSkpe2lmKHQub3B0aW9uKCJib29sZWFucyIpJiZ0LmluX2Jvb2xlYW5fY29udGV4dCgpKXJldHVybiB0Lndhcm4oIkJvb2xlYW4gfHwgYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixuLnN0YXJ0KSxOKG4sW24ubGVmdCxRKFN0LG4pXSkub3B0aW1pemUodCk7bi50cnV0aHk9ITB9fWVsc2UgaWYoInx8Ij09KGY9dC5wYXJlbnQoKSkub3BlcmF0b3ImJmYubGVmdD09PXQuc2VsZigpfHx0Lm9wdGlvbigiYm9vbGVhbnMiKSYmdC5pbl9ib29sZWFuX2NvbnRleHQoKSlyZXR1cm4gdC53YXJuKCJEcm9wcGluZyBzaWRlLWVmZmVjdC1mcmVlIHx8IFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIsbi5zdGFydCksbi5sZWZ0Lm9wdGltaXplKHQpO2lmKCImJiI9PW4ubGVmdC5vcGVyYXRvcilpZigocD1uLmxlZnQucmlnaHQuZXZhbHVhdGUodCkpJiYhKHAgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIFEobnQsbix7Y29uZGl0aW9uOm4ubGVmdC5sZWZ0LGNvbnNlcXVlbnQ6bi5sZWZ0LnJpZ2h0LGFsdGVybmF0aXZlOm4ucmlnaHR9KS5vcHRpbWl6ZSh0KX12YXIgaD0hMDtzd2l0Y2gobi5vcGVyYXRvcil7Y2FzZSIrIjppZihuLmxlZnQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ucmlnaHQub3BlcmF0b3ImJm4ucmlnaHQubGVmdCBpbnN0YW5jZW9mIHZ0JiZuLnJpZ2h0LmlzX3N0cmluZyh0KSYmKG49USh0dCxuLHtvcGVyYXRvcjoiKyIsbGVmdDpRKGJ0LG4ubGVmdCx7dmFsdWU6IiIrbi5sZWZ0LmdldFZhbHVlKCkrbi5yaWdodC5sZWZ0LmdldFZhbHVlKCksc3RhcnQ6bi5sZWZ0LnN0YXJ0LGVuZDpuLnJpZ2h0LmxlZnQuZW5kfSkscmlnaHQ6bi5yaWdodC5yaWdodH0pKSxuLnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ubGVmdC5pc19zdHJpbmcodCkmJihuPVEodHQsbix7b3BlcmF0b3I6IisiLGxlZnQ6bi5sZWZ0LmxlZnQscmlnaHQ6UShidCxuLnJpZ2h0LHt2YWx1ZToiIituLmxlZnQucmlnaHQuZ2V0VmFsdWUoKStuLnJpZ2h0LmdldFZhbHVlKCksc3RhcnQ6bi5sZWZ0LnJpZ2h0LnN0YXJ0LGVuZDpuLnJpZ2h0LmVuZH0pfSkpLG4ubGVmdCBpbnN0YW5jZW9mIHR0JiYiKyI9PW4ubGVmdC5vcGVyYXRvciYmbi5sZWZ0LmlzX3N0cmluZyh0KSYmbi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJm4ucmlnaHQgaW5zdGFuY2VvZiB0dCYmIisiPT1uLnJpZ2h0Lm9wZXJhdG9yJiZuLnJpZ2h0LmxlZnQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodC5pc19zdHJpbmcodCkmJihuPVEodHQsbix7b3BlcmF0b3I6IisiLGxlZnQ6USh0dCxuLmxlZnQse29wZXJhdG9yOiIrIixsZWZ0Om4ubGVmdC5sZWZ0LHJpZ2h0OlEoYnQsbi5sZWZ0LnJpZ2h0LHt2YWx1ZToiIituLmxlZnQucmlnaHQuZ2V0VmFsdWUoKStuLnJpZ2h0LmxlZnQuZ2V0VmFsdWUoKSxzdGFydDpuLmxlZnQucmlnaHQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KX0pLHJpZ2h0Om4ucmlnaHQucmlnaHR9KSksbi5yaWdodCBpbnN0YW5jZW9mIFhlJiYiLSI9PW4ucmlnaHQub3BlcmF0b3ImJm4ubGVmdC5pc19udW1iZXIodCkpe249USh0dCxuLHtvcGVyYXRvcjoiLSIsbGVmdDpuLmxlZnQscmlnaHQ6bi5yaWdodC5leHByZXNzaW9ufSk7YnJlYWt9aWYobi5sZWZ0IGluc3RhbmNlb2YgWGUmJiItIj09bi5sZWZ0Lm9wZXJhdG9yJiZyKCkmJm4ucmlnaHQuaXNfbnVtYmVyKHQpKXtuPVEodHQsbix7b3BlcmF0b3I6Ii0iLGxlZnQ6bi5yaWdodCxyaWdodDpuLmxlZnQuZXhwcmVzc2lvbn0pO2JyZWFrfWNhc2UiKiI6aD10Lm9wdGlvbigidW5zYWZlX21hdGgiKTtjYXNlIiYiOmNhc2UifCI6Y2FzZSJeIjppZihuLmxlZnQuaXNfbnVtYmVyKHQpJiZuLnJpZ2h0LmlzX251bWJlcih0KSYmcigpJiYhKG4ubGVmdCBpbnN0YW5jZW9mIHR0JiZuLmxlZnQub3BlcmF0b3IhPW4ub3BlcmF0b3ImJkt0W24ubGVmdC5vcGVyYXRvcl0+PUt0W24ub3BlcmF0b3JdKSl7dmFyIGQ9USh0dCxuLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5yaWdodCxyaWdodDpuLmxlZnR9KTtuPW4ucmlnaHQgaW5zdGFuY2VvZiB2dCYmIShuLmxlZnQgaW5zdGFuY2VvZiB2dCk/SCh0LGQsbik6SCh0LG4sZCl9aCYmbi5pc19udW1iZXIodCkmJihuLnJpZ2h0IGluc3RhbmNlb2YgdHQmJm4ucmlnaHQub3BlcmF0b3I9PW4ub3BlcmF0b3ImJihuPVEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0OlEodHQsbi5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LHJpZ2h0Om4ucmlnaHQubGVmdCxzdGFydDpuLmxlZnQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KSxyaWdodDpuLnJpZ2h0LnJpZ2h0fSkpLG4ucmlnaHQgaW5zdGFuY2VvZiB2dCYmbi5sZWZ0IGluc3RhbmNlb2YgdHQmJm4ubGVmdC5vcGVyYXRvcj09bi5vcGVyYXRvciYmKG4ubGVmdC5sZWZ0IGluc3RhbmNlb2YgdnQ/bj1RKHR0LG4se29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpRKHR0LG4ubGVmdCx7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0Om4ubGVmdC5sZWZ0LHJpZ2h0Om4ucmlnaHQsc3RhcnQ6bi5sZWZ0LmxlZnQuc3RhcnQsZW5kOm4ucmlnaHQuZW5kfSkscmlnaHQ6bi5sZWZ0LnJpZ2h0fSk6bi5sZWZ0LnJpZ2h0IGluc3RhbmNlb2YgdnQmJihuPVEodHQsbix7b3BlcmF0b3I6bi5vcGVyYXRvcixsZWZ0OlEodHQsbi5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LnJpZ2h0LHJpZ2h0Om4ucmlnaHQsc3RhcnQ6bi5sZWZ0LnJpZ2h0LnN0YXJ0LGVuZDpuLnJpZ2h0LmVuZH0pLHJpZ2h0Om4ubGVmdC5sZWZ0fSkpKSxuLmxlZnQgaW5zdGFuY2VvZiB0dCYmbi5sZWZ0Lm9wZXJhdG9yPT1uLm9wZXJhdG9yJiZuLmxlZnQucmlnaHQgaW5zdGFuY2VvZiB2dCYmbi5yaWdodCBpbnN0YW5jZW9mIHR0JiZuLnJpZ2h0Lm9wZXJhdG9yPT1uLm9wZXJhdG9yJiZuLnJpZ2h0LmxlZnQgaW5zdGFuY2VvZiB2dCYmKG49USh0dCxuLHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6USh0dCxuLmxlZnQse29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpRKHR0LG4ubGVmdC5sZWZ0LHtvcGVyYXRvcjpuLm9wZXJhdG9yLGxlZnQ6bi5sZWZ0LnJpZ2h0LHJpZ2h0Om4ucmlnaHQubGVmdCxzdGFydDpuLmxlZnQucmlnaHQuc3RhcnQsZW5kOm4ucmlnaHQubGVmdC5lbmR9KSxyaWdodDpuLmxlZnQubGVmdH0pLHJpZ2h0Om4ucmlnaHQucmlnaHR9KSkpfX1pZihuLnJpZ2h0IGluc3RhbmNlb2YgdHQmJm4ucmlnaHQub3BlcmF0b3I9PW4ub3BlcmF0b3ImJihYW24ub3BlcmF0b3JdfHwiKyI9PW4ub3BlcmF0b3ImJihuLnJpZ2h0LmxlZnQuaXNfc3RyaW5nKHQpfHxuLmxlZnQuaXNfc3RyaW5nKHQpJiZuLnJpZ2h0LnJpZ2h0LmlzX3N0cmluZyh0KSkpKXJldHVybiBuLmxlZnQ9USh0dCxuLmxlZnQse29wZXJhdG9yOm4ub3BlcmF0b3IsbGVmdDpuLmxlZnQscmlnaHQ6bi5yaWdodC5sZWZ0fSksbi5yaWdodD1uLnJpZ2h0LnJpZ2h0LG4udHJhbnNmb3JtKHQpO3ZhciBtPW4uZXZhbHVhdGUodCk7cmV0dXJuIG0hPT1uPyhtPVAobSxuKS5vcHRpbWl6ZSh0KSxIKHQsbSxuKSk6bjtmdW5jdGlvbiBnKGUpe3JldHVybiEhZS50cnV0aHl8fCFlLmZhbHN5JiYoISFlLmlzX3RydXRoeSgpfHxlLmV2YWx1YXRlKHQpKX19KSxlKG10LGZ1bmN0aW9uKGUsdCl7aWYoIXQub3B0aW9uKCJpZTgiKSYmaihlKSYmKCFlLnNjb3BlLnVzZXNfd2l0aHx8IXQuZmluZF9wYXJlbnQoeGUpKSlzd2l0Y2goZS5uYW1lKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIFEoQXQsZSkub3B0aW1pemUodCk7Y2FzZSJOYU4iOnJldHVybiBRKEV0LGUpLm9wdGltaXplKHQpO2Nhc2UiSW5maW5pdHkiOnJldHVybiBRKGt0LGUpLm9wdGltaXplKHQpfXZhciBuLHI9dC5wYXJlbnQoKTtpZih0Lm9wdGlvbigicmVkdWNlX3ZhcnMiKSYmZWUoZSxyKSE9PWUpe3ZhciBpPWUuZGVmaW5pdGlvbigpLG89ZS5maXhlZF92YWx1ZSgpLGE9aS5zaW5nbGVfdXNlJiYhKHIgaW5zdGFuY2VvZiBLZSYmci5pc19leHByX3B1cmUodCkpO2lmKGEmJm8gaW5zdGFuY2VvZiBPZSlpZihpLnNjb3BlPT09ZS5zY29wZXx8dC5vcHRpb24oInJlZHVjZV9mdW5jcyIpJiYxIT1pLmVzY2FwZWQmJiFvLmlubGluZWQpe2lmKCQodCxpKSlhPSExO2Vsc2UgaWYoKGkuc2NvcGUhPT1lLnNjb3BlfHxpLm9yaWdbMF1pbnN0YW5jZW9mIGZ0KSYmImYiPT0oYT1vLmlzX2NvbnN0YW50X2V4cHJlc3Npb24oZS5zY29wZSkpKWZvcih2YXIgcz1lLnNjb3BlOyhzIGluc3RhbmNlb2YgVGV8fHMgaW5zdGFuY2VvZiBEZSkmJihzLmlubGluZWQ9ITApLHM9cy5wYXJlbnRfc2NvcGU7KTt9ZWxzZSBhPSExO2lmKGEmJm8pe2lmKGkuc2luZ2xlX3VzZT0hMSxvLl9zcXVlZXplZD0hMCxvIGluc3RhbmNlb2YgVGUmJigobz1RKERlLG8sbykpLm5hbWU9UShodCxvLm5hbWUsby5uYW1lKSksMDxpLnJlY3Vyc2l2ZV9yZWZzKXt2YXIgdT0odj1vLmNsb25lKCEwKSkubmFtZS5kZWZpbml0aW9uKCksbD12LnZhcmlhYmxlcy5nZXQodi5uYW1lLm5hbWUpLGM9bCYmbC5vcmlnWzBdO2MgaW5zdGFuY2VvZiBodHx8KCgoYz1RKGh0LHYubmFtZSx2Lm5hbWUpKS5zY29wZT12KS5uYW1lPWMsbD12LmRlZl9mdW5jdGlvbihjKSksdi53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgbXQpe3ZhciB0PWUuZGVmaW5pdGlvbigpO2lmKHQ9PT11KShlLnRoZWRlZj1sKS5yZWZlcmVuY2VzLnB1c2goZSk7ZWxzZXt0LnNpbmdsZV91c2U9ITE7dmFyIG49ZS5maXhlZF92YWx1ZSgpO2lmKCEobiBpbnN0YW5jZW9mIE9lKSlyZXR1cm47aWYoIW4ubmFtZSlyZXR1cm47aWYoby52YXJpYWJsZXMuZ2V0KG4ubmFtZS5uYW1lKSE9PW4ubmFtZS5kZWZpbml0aW9uKCkpcmV0dXJuO24ubmFtZT1uLm5hbWUuY2xvbmUoKTt2YXIgcj12LnZhcmlhYmxlcy5nZXQobi5uYW1lLm5hbWUpfHx2LmRlZl9mdW5jdGlvbihuLm5hbWUpOyhlLnRoZWRlZj1yKS5yZWZlcmVuY2VzLnB1c2goZSl9fX0pKX1lbHNlKHY9by5vcHRpbWl6ZSh0KSk9PT1vJiYodj1vLmNsb25lKCEwKSk7cmV0dXJuIGkucmVwbGFjZWQrKyx2fWlmKG8mJnZvaWQgMD09PWkuc2hvdWxkX3JlcGxhY2Upe3ZhciBmO2lmKG8gaW5zdGFuY2VvZiBndClpLm9yaWdbMF1pbnN0YW5jZW9mIGZ0fHwhc2UoaS5yZWZlcmVuY2VzLGZ1bmN0aW9uKGUpe3JldHVybiBpLnNjb3BlPT09ZS5zY29wZX0pfHwoZj1vKTtlbHNle3ZhciBwPW8uZXZhbHVhdGUodCk7cD09PW98fCF0Lm9wdGlvbigidW5zYWZlX3JlZ2V4cCIpJiZwIGluc3RhbmNlb2YgUmVnRXhwfHwoZj1QKHAsbykpfWlmKGYpe3ZhciBoLGQ9Zi5vcHRpbWl6ZSh0KS5wcmludF90b19zdHJpbmcoKS5sZW5ndGg7by53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgbXQmJihuPSEwKSxuKXJldHVybiEwfSkpLGg9bj9mdW5jdGlvbigpe3ZhciBlPWYub3B0aW1pemUodCk7cmV0dXJuIGU9PT1mP2UuY2xvbmUoITApOmV9OihkPU1hdGgubWluKGQsby5wcmludF90b19zdHJpbmcoKS5sZW5ndGgpLGZ1bmN0aW9uKCl7dmFyIGU9eShmLm9wdGltaXplKHQpLG8pO3JldHVybiBlPT09Znx8ZT09PW8/ZS5jbG9uZSghMCk6ZX0pO3ZhciBtPWkubmFtZS5sZW5ndGgsZz0wO3Qub3B0aW9uKCJ1bnVzZWQiKSYmIXQuZXhwb3NlZChpKSYmKGc9KG0rMitkKS8oaS5yZWZlcmVuY2VzLmxlbmd0aC1pLmFzc2lnbm1lbnRzKSksaS5zaG91bGRfcmVwbGFjZT1kPD1tK2cmJmh9ZWxzZSBpLnNob3VsZF9yZXBsYWNlPSExfWlmKGkuc2hvdWxkX3JlcGxhY2Upe3ZhciB2PWkuc2hvdWxkX3JlcGxhY2UoKTtyZXR1cm4gaS5yZXBsYWNlZCsrLHZ9fXJldHVybiBlfSksZShBdCxmdW5jdGlvbihlLHQpe2lmKHQub3B0aW9uKCJ1bnNhZmVfdW5kZWZpbmVkIikpe3ZhciBuPW8odCwidW5kZWZpbmVkIik7aWYobil7dmFyIHI9UShtdCxlLHtuYW1lOiJ1bmRlZmluZWQiLHNjb3BlOm4uc2NvcGUsdGhlZGVmOm59KTtyZXR1cm4gci5pc191bmRlZmluZWQ9ITAscn19dmFyIGk9ZWUodC5zZWxmKCksdC5wYXJlbnQoKSk7cmV0dXJuIGkmJnAoaSxlKT9lOlEoWGUsZSx7b3BlcmF0b3I6InZvaWQiLGV4cHJlc3Npb246USh5dCxlLHt2YWx1ZTowfSl9KX0pLGUoa3QsZnVuY3Rpb24oZSx0KXt2YXIgbj1lZSh0LnNlbGYoKSx0LnBhcmVudCgpKTtyZXR1cm4gbiYmcChuLGUpP2U6IXQub3B0aW9uKCJrZWVwX2luZmluaXR5Iil8fG4mJiFwKG4sZSl8fG8odCwiSW5maW5pdHkiKT9RKHR0LGUse29wZXJhdG9yOiIvIixsZWZ0OlEoeXQsZSx7dmFsdWU6MX0pLHJpZ2h0OlEoeXQsZSx7dmFsdWU6MH0pfSk6ZX0pLGUoRXQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lZSh0LnNlbGYoKSx0LnBhcmVudCgpKTtyZXR1cm4gbiYmIXAobixlKXx8byh0LCJOYU4iKT9RKHR0LGUse29wZXJhdG9yOiIvIixsZWZ0OlEoeXQsZSx7dmFsdWU6MH0pLHJpZ2h0OlEoeXQsZSx7dmFsdWU6MH0pfSk6ZX0pO3ZhciBDPWFlKCIrIC0gLyAqICUgPj4gPDwgPj4+IHwgXiAmIiksTz1hZSgiKiB8IF4gJiIpO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIG10JiYoZT1lLmZpeGVkX3ZhbHVlKCkpLCEhZSYmKCEoZSBpbnN0YW5jZW9mIE9lKXx8dC5wYXJlbnQoKWluc3RhbmNlb2YgR2V8fCFlLmNvbnRhaW5zX3RoaXMoKSl9ZShydCxmdW5jdGlvbihhLHMpe3ZhciBlO2lmKHMub3B0aW9uKCJkZWFkX2NvZGUiKSYmYS5sZWZ0IGluc3RhbmNlb2YgbXQmJihlPWEubGVmdC5kZWZpbml0aW9uKCkpLnNjb3BlPT09cy5maW5kX3BhcmVudChPZSkpe3ZhciB0LG49MCxyPWE7ZG97aWYodD1yLChyPXMucGFyZW50KG4rKykpaW5zdGFuY2VvZiBCZSl7aWYobyhuLHIpKWJyZWFrO2lmKEsoZS5zY29wZSxbZV0pKWJyZWFrO3JldHVybiI9Ij09YS5vcGVyYXRvcj9hLnJpZ2h0OihlLmZpeGVkPSExLFEodHQsYSx7b3BlcmF0b3I6YS5vcGVyYXRvci5zbGljZSgwLC0xKSxsZWZ0OmEubGVmdCxyaWdodDphLnJpZ2h0fSkub3B0aW1pemUocykpfX13aGlsZShyIGluc3RhbmNlb2YgdHQmJnIucmlnaHQ9PT10fHxyIGluc3RhbmNlb2YgWWUmJnIudGFpbF9ub2RlKCk9PT10KX1pZihhPWEubGlmdF9zZXF1ZW5jZXMocyksIXMub3B0aW9uKCJhc3NpZ25tZW50cyIpKXJldHVybiBhO2lmKCI9Ij09YS5vcGVyYXRvciYmYS5sZWZ0IGluc3RhbmNlb2YgbXQmJmEucmlnaHQgaW5zdGFuY2VvZiB0dCYmKGEucmlnaHQubGVmdCBpbnN0YW5jZW9mIG10JiZhLnJpZ2h0LmxlZnQubmFtZT09YS5sZWZ0Lm5hbWUmJkNbYS5yaWdodC5vcGVyYXRvcl0/KGEub3BlcmF0b3I9YS5yaWdodC5vcGVyYXRvcisiPSIsYS5yaWdodD1hLnJpZ2h0LnJpZ2h0KTphLnJpZ2h0LnJpZ2h0IGluc3RhbmNlb2YgbXQmJmEucmlnaHQucmlnaHQubmFtZT09YS5sZWZ0Lm5hbWUmJk9bYS5yaWdodC5vcGVyYXRvcl0mJiFhLnJpZ2h0LmxlZnQuaGFzX3NpZGVfZWZmZWN0cyhzKSYmKGEub3BlcmF0b3I9YS5yaWdodC5vcGVyYXRvcisiPSIsYS5yaWdodD1hLnJpZ2h0LmxlZnQpKSwoIis9Ij09YS5vcGVyYXRvcnx8Ii09Ij09YS5vcGVyYXRvcikmJmEubGVmdC5pc19udW1iZXIocykmJmEucmlnaHQgaW5zdGFuY2VvZiB5dCYmMT09PWEucmlnaHQuZ2V0VmFsdWUoKSl7dmFyIGk9YS5vcGVyYXRvci5zbGljZSgwLC0xKTtyZXR1cm4gUShYZSxhLHtvcGVyYXRvcjppK2ksZXhwcmVzc2lvbjphLmxlZnR9KX1yZXR1cm4gYTtmdW5jdGlvbiBvKGUsdCl7dmFyIG49YS5yaWdodDthLnJpZ2h0PVEod3Qsbik7dmFyIHI9dC5tYXlfdGhyb3cocyk7YS5yaWdodD1uO2Zvcih2YXIgaSxvPWEubGVmdC5kZWZpbml0aW9uKCkuc2NvcGU7KGk9cy5wYXJlbnQoZSsrKSkhPT1vOylpZihpIGluc3RhbmNlb2YgSWUpe2lmKGkuYmZpbmFsbHkpcmV0dXJuITA7aWYociYmaS5iY2F0Y2gpcmV0dXJuITB9fX0pLGUobnQsZnVuY3Rpb24oZSxpKXtpZighaS5vcHRpb24oImNvbmRpdGlvbmFscyIpKXJldHVybiBlO2lmKGUuY29uZGl0aW9uIGluc3RhbmNlb2YgWWUpe3ZhciB0PWUuY29uZGl0aW9uLmV4cHJlc3Npb25zLnNsaWNlKCk7cmV0dXJuIGUuY29uZGl0aW9uPXQucG9wKCksdC5wdXNoKGUpLE4oZSx0KX12YXIgbj1lLmNvbmRpdGlvbi5pc190cnV0aHkoKXx8ZS5jb25kaXRpb24udGFpbF9ub2RlKCkuZXZhbHVhdGUoaSk7aWYoIW4pcmV0dXJuIGkud2FybigiQ29uZGl0aW9uIGFsd2F5cyBmYWxzZSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLGUuc3RhcnQpLE4oZSxbZS5jb25kaXRpb24sZS5hbHRlcm5hdGl2ZV0pLm9wdGltaXplKGkpO2lmKCEobiBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gaS53YXJuKCJDb25kaXRpb24gYWx3YXlzIHRydWUgW3tmaWxlfTp7bGluZX0se2NvbH1dIixlLnN0YXJ0KSxOKGUsW2UuY29uZGl0aW9uLGUuY29uc2VxdWVudF0pLm9wdGltaXplKGkpO3ZhciByPW4ubmVnYXRlKGksRihpKSk7SChpLG4scik9PT1yJiYoZT1RKG50LGUse2NvbmRpdGlvbjpyLGNvbnNlcXVlbnQ6ZS5hbHRlcm5hdGl2ZSxhbHRlcm5hdGl2ZTplLmNvbnNlcXVlbnR9KSk7dmFyIG89ZS5jb25kaXRpb24sYT1lLmNvbnNlcXVlbnQscz1lLmFsdGVybmF0aXZlO2lmKG8gaW5zdGFuY2VvZiBtdCYmYSBpbnN0YW5jZW9mIG10JiZvLmRlZmluaXRpb24oKT09PWEuZGVmaW5pdGlvbigpKXJldHVybiBRKHR0LGUse29wZXJhdG9yOiJ8fCIsbGVmdDpvLHJpZ2h0OnN9KTt2YXIgdSxsPWEudGFpbF9ub2RlKCk7aWYobCBpbnN0YW5jZW9mIHJ0KXt2YXIgYz0iPSI9PWwub3BlcmF0b3IsZj1jP3MudGFpbF9ub2RlKCk6cztpZigoY3x8YT09PWwpJiZmIGluc3RhbmNlb2YgcnQmJmwub3BlcmF0b3I9PWYub3BlcmF0b3ImJmwubGVmdC5lcXVpdmFsZW50X3RvKGYubGVmdCkmJihjJiYhbC5sZWZ0Lmhhc19zaWRlX2VmZmVjdHMoaSl8fCFvLmhhc19zaWRlX2VmZmVjdHMoaSkmJnYoYSkmJnYocykpKXJldHVybiBRKHJ0LGUse29wZXJhdG9yOmwub3BlcmF0b3IsbGVmdDpsLmxlZnQscmlnaHQ6UShudCxlLHtjb25kaXRpb246byxjb25zZXF1ZW50OmIoYSksYWx0ZXJuYXRpdmU6YihzKX0pfSl9aWYoYSBpbnN0YW5jZW9mIEtlJiZzLlRZUEU9PT1hLlRZUEUmJjA8YS5hcmdzLmxlbmd0aCYmYS5hcmdzLmxlbmd0aD09cy5hcmdzLmxlbmd0aCYmYS5leHByZXNzaW9uLmVxdWl2YWxlbnRfdG8ocy5leHByZXNzaW9uKSYmIW8uaGFzX3NpZGVfZWZmZWN0cyhpKSYmIWEuZXhwcmVzc2lvbi5oYXNfc2lkZV9lZmZlY3RzKGkpJiYibnVtYmVyIj09dHlwZW9mKHU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YS5hcmdzLHQ9cy5hcmdzLG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIWVbbl0uZXF1aXZhbGVudF90byh0W25dKSl7Zm9yKHZhciBpPW4rMTtpPHI7aSsrKWlmKCFlW2ldLmVxdWl2YWxlbnRfdG8odFtpXSkpcmV0dXJuO3JldHVybiBufX0oKSkpe3ZhciBwPWEuY2xvbmUoKTtyZXR1cm4gcC5hcmdzW3VdPVEobnQsZSx7Y29uZGl0aW9uOm8sY29uc2VxdWVudDphLmFyZ3NbdV0sYWx0ZXJuYXRpdmU6cy5hcmdzW3VdfSkscH1pZihhIGluc3RhbmNlb2YgbnQmJmEuYWx0ZXJuYXRpdmUuZXF1aXZhbGVudF90byhzKSlyZXR1cm4gUShudCxlLHtjb25kaXRpb246USh0dCxlLHtsZWZ0Om8sb3BlcmF0b3I6IiYmIixyaWdodDphLmNvbmRpdGlvbn0pLGNvbnNlcXVlbnQ6YS5jb25zZXF1ZW50LGFsdGVybmF0aXZlOnN9KTtpZihhLmVxdWl2YWxlbnRfdG8ocykpcmV0dXJuIE4oZSxbbyxhXSkub3B0aW1pemUoaSk7aWYoKGEgaW5zdGFuY2VvZiBZZXx8cyBpbnN0YW5jZW9mIFllKSYmYS50YWlsX25vZGUoKS5lcXVpdmFsZW50X3RvKHMudGFpbF9ub2RlKCkpKXJldHVybiBOKGUsW1EobnQsZSx7Y29uZGl0aW9uOm8sY29uc2VxdWVudDp5KGEpLGFsdGVybmF0aXZlOnkocyl9KSxhLnRhaWxfbm9kZSgpXSkub3B0aW1pemUoaSk7aWYoYSBpbnN0YW5jZW9mIHR0JiYifHwiPT1hLm9wZXJhdG9yJiZhLnJpZ2h0LmVxdWl2YWxlbnRfdG8ocykpcmV0dXJuIFEodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0Om8scmlnaHQ6YS5sZWZ0fSkscmlnaHQ6c30pLm9wdGltaXplKGkpO3ZhciBoPWkub3B0aW9uKCJib29sZWFucyIpJiZpLmluX2Jvb2xlYW5fY29udGV4dCgpO3JldHVybiBtKGUuY29uc2VxdWVudCk/ZyhlLmFsdGVybmF0aXZlKT9kKG8pOlEodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OmQobykscmlnaHQ6ZS5hbHRlcm5hdGl2ZX0pOmcoZS5jb25zZXF1ZW50KT9tKGUuYWx0ZXJuYXRpdmUpP2Qoby5uZWdhdGUoaSkpOlEodHQsZSx7b3BlcmF0b3I6IiYmIixsZWZ0OmQoby5uZWdhdGUoaSkpLHJpZ2h0OmUuYWx0ZXJuYXRpdmV9KTptKGUuYWx0ZXJuYXRpdmUpP1EodHQsZSx7b3BlcmF0b3I6Inx8IixsZWZ0OmQoby5uZWdhdGUoaSkpLHJpZ2h0OmUuY29uc2VxdWVudH0pOmcoZS5hbHRlcm5hdGl2ZSk/USh0dCxlLHtvcGVyYXRvcjoiJiYiLGxlZnQ6ZChvKSxyaWdodDplLmNvbnNlcXVlbnR9KTplO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIGUuaXNfYm9vbGVhbihpKT9lOlEoWGUsZSx7b3BlcmF0b3I6IiEiLGV4cHJlc3Npb246ZS5uZWdhdGUoaSl9KX1mdW5jdGlvbiBtKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU3R8fGgmJmUgaW5zdGFuY2VvZiB2dCYmZS5nZXRWYWx1ZSgpfHxlIGluc3RhbmNlb2YgWGUmJiIhIj09ZS5vcGVyYXRvciYmZS5leHByZXNzaW9uIGluc3RhbmNlb2YgdnQmJiFlLmV4cHJlc3Npb24uZ2V0VmFsdWUoKX1mdW5jdGlvbiBnKGUpe3JldHVybiBlIGluc3RhbmNlb2YgT3R8fGgmJmUgaW5zdGFuY2VvZiB2dCYmIWUuZ2V0VmFsdWUoKXx8ZSBpbnN0YW5jZW9mIFhlJiYiISI9PWUub3BlcmF0b3ImJmUuZXhwcmVzc2lvbiBpbnN0YW5jZW9mIHZ0JiZlLmV4cHJlc3Npb24uZ2V0VmFsdWUoKX1mdW5jdGlvbiB2KGUpe2lmKGU9PT1lLnRhaWxfbm9kZSgpKXJldHVybiEwO2Zvcih2YXIgdD1lLmV4cHJlc3Npb25zLG49dC5sZW5ndGgtMTswPD0tLW47KXt2YXIgcj10W25dO2lmKCEociBpbnN0YW5jZW9mIHJ0KSYmci5oYXNfc2lkZV9lZmZlY3RzKGkpfHwiPSIhPXIub3BlcmF0b3J8fHIubGVmdC5oYXNfc2lkZV9lZmZlY3RzKGkpfHxyLnJpZ2h0Lmhhc19zaWRlX2VmZmVjdHMoaSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gYihlKXtpZighKGUgaW5zdGFuY2VvZiBZZSkpcmV0dXJuIGUucmlnaHQ7dmFyIHQ9ZS5leHByZXNzaW9ucy5zbGljZSgpO3JldHVybiB0LnB1c2godC5wb3AoKS5yaWdodCksTihlLHQpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBZZT9OKGUsZS5leHByZXNzaW9ucy5zbGljZSgwLC0xKSk6USh5dCxlLHt2YWx1ZTowfSl9fSksZShDdCxmdW5jdGlvbihlLHQpe2lmKCF0Lm9wdGlvbigiYm9vbGVhbnMiKSlyZXR1cm4gZTtpZih0LmluX2Jvb2xlYW5fY29udGV4dCgpKXJldHVybiBRKHl0LGUse3ZhbHVlOitlLnZhbHVlfSk7dmFyIG49dC5wYXJlbnQoKTtyZXR1cm4gbiBpbnN0YW5jZW9mIHR0JiYoIj09Ij09bi5vcGVyYXRvcnx8IiE9Ij09bi5vcGVyYXRvcik/KHQud2FybigiTm9uLXN0cmljdCBlcXVhbGl0eSBhZ2FpbnN0IGJvb2xlYW46IHtvcGVyYXRvcn0ge3ZhbHVlfSBbe2ZpbGV9OntsaW5lfSx7Y29sfV0iLHtvcGVyYXRvcjpuLm9wZXJhdG9yLHZhbHVlOmUudmFsdWUsZmlsZTpuLnN0YXJ0LmZpbGUsbGluZTpuLnN0YXJ0LmxpbmUsY29sOm4uc3RhcnQuY29sfSksUSh5dCxlLHt2YWx1ZTorZS52YWx1ZX0pKTpRKFhlLGUse29wZXJhdG9yOiIhIixleHByZXNzaW9uOlEoeXQsZSx7dmFsdWU6MS1lLnZhbHVlfSl9KX0pLGUoWmUsZnVuY3Rpb24oZSx0KXt2YXIgbixyPWUuZXhwcmVzc2lvbixpPWUucHJvcGVydHk7aWYodC5vcHRpb24oInByb3BlcnRpZXMiKSl7dmFyIG89aS5ldmFsdWF0ZSh0KTtpZihvIT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBvKWlmKCJ1bmRlZmluZWQiPT1vKW89dm9pZCAwO2Vsc2Uodj1wYXJzZUZsb2F0KG8pKS50b1N0cmluZygpPT1vJiYobz12KTtpPWUucHJvcGVydHk9eShpLFAobyxpKS50cmFuc2Zvcm0odCkpO3ZhciBhPSIiK287aWYoTXQoYSkmJmEubGVuZ3RoPD1pLnByaW50X3RvX3N0cmluZygpLmxlbmd0aCsxKXJldHVybiBRKFFlLGUse2V4cHJlc3Npb246cixwcm9wZXJ0eTphfSkub3B0aW1pemUodCl9fWlmKHQub3B0aW9uKCJhcmd1bWVudHMiKSYmciBpbnN0YW5jZW9mIG10JiYiYXJndW1lbnRzIj09ci5uYW1lJiYxPT1yLmRlZmluaXRpb24oKS5vcmlnLmxlbmd0aCYmaSBpbnN0YW5jZW9mIHl0JiYobj1yLnNjb3BlKT09PXQuZmluZF9wYXJlbnQoT2UpKXt2YXIgcz1pLmdldFZhbHVlKCksdT1uLmFyZ25hbWVzW3NdO2lmKHUmJnQuaGFzX2RpcmVjdGl2ZSgidXNlIHN0cmljdCIpKXt2YXIgbD11LmRlZmluaXRpb24oKTsoIXQub3B0aW9uKCJyZWR1Y2VfdmFycyIpfHxyLmRlZmluaXRpb24oKS5yZWFzc2lnbmVkfHxsLmFzc2lnbm1lbnRzfHwxPGwub3JpZy5sZW5ndGgpJiYodT1udWxsKX1lbHNlIGlmKCF1JiYhdC5vcHRpb24oImtlZXBfZmFyZ3MiKSYmczxuLmFyZ25hbWVzLmxlbmd0aCs1KWZvcig7cz49bi5hcmduYW1lcy5sZW5ndGg7KXU9UShmdCxuLHtuYW1lOm4ubWFrZV92YXJfbmFtZSgiYXJndW1lbnRfIituLmFyZ25hbWVzLmxlbmd0aCksc2NvcGU6bn0pLG4uYXJnbmFtZXMucHVzaCh1KSxuLmVuY2xvc2VkLnB1c2gobi5kZWZfdmFyaWFibGUodSkpO2lmKHUmJkcoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXUubmFtZX0sbi5hcmduYW1lcyk9PT11KXt2YXIgYz1RKG10LGUsdSk7cmV0dXJuIGMucmVmZXJlbmNlKHt9KSxkZWxldGUgdS5fX3VudXNlZCxjfX1pZihlZShlLHQucGFyZW50KCkpKXJldHVybiBlO2lmKG8hPT1pKXt2YXIgZj1lLmZsYXR0ZW5fb2JqZWN0KGEsdCk7ZiYmKHI9ZS5leHByZXNzaW9uPWYuZXhwcmVzc2lvbixpPWUucHJvcGVydHk9Zi5wcm9wZXJ0eSl9aWYodC5vcHRpb24oInByb3BlcnRpZXMiKSYmdC5vcHRpb24oInNpZGVfZWZmZWN0cyIpJiZpIGluc3RhbmNlb2YgeXQmJnIgaW5zdGFuY2VvZiBpdCl7cz1pLmdldFZhbHVlKCk7dmFyIHA9ci5lbGVtZW50cyxoPXBbc107aWYoUyhoLHQpKXtmb3IodmFyIGQ9ITAsbT1bXSxnPXAubGVuZ3RoOy0tZz5zOyl7KHY9cFtnXS5kcm9wX3NpZGVfZWZmZWN0X2ZyZWUodCkpJiYobS51bnNoaWZ0KHYpLGQmJnYuaGFzX3NpZGVfZWZmZWN0cyh0KSYmKGQ9ITEpKX1mb3IoaD1oIGluc3RhbmNlb2YgeHQ/UShBdCxoKTpoLGR8fG0udW5zaGlmdChoKTswPD0tLWc7KXt2YXIgdjsodj1wW2ddLmRyb3Bfc2lkZV9lZmZlY3RfZnJlZSh0KSk/bS51bnNoaWZ0KHYpOnMtLX1yZXR1cm4gZD8obS5wdXNoKGgpLE4oZSxtKS5vcHRpbWl6ZSh0KSk6UShaZSxlLHtleHByZXNzaW9uOlEoaXQscix7ZWxlbWVudHM6bX0pLHByb3BlcnR5OlEoeXQsaSx7dmFsdWU6c30pfSl9fXZhciBiPWUuZXZhbHVhdGUodCk7cmV0dXJuIGIhPT1lP0godCxiPVAoYixlKS5vcHRpbWl6ZSh0KSxlKTplfSksa2UuREVGTUVUSE9EKCJjb250YWluc190aGlzIixmdW5jdGlvbigpe3ZhciB0LG49dGhpcztyZXR1cm4gbi53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtyZXR1cm4hIXR8fChlIGluc3RhbmNlb2YgZ3Q/dD0hMDplIT09biYmZSBpbnN0YW5jZW9mIGtlfHx2b2lkIDApfSkpLHR9KSxXZS5ERUZNRVRIT0QoImZsYXR0ZW5fb2JqZWN0IixmdW5jdGlvbihlLHQpe2lmKHQub3B0aW9uKCJwcm9wZXJ0aWVzIikpe3ZhciBuPXRoaXMuZXhwcmVzc2lvbjtpZihuIGluc3RhbmNlb2Ygb3QpZm9yKHZhciByPW4ucHJvcGVydGllcyxpPXIubGVuZ3RoOzA8PS0taTspe3ZhciBvPXJbaV07aWYoIiIrby5rZXk9PWUpe2lmKCFzZShyLGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygc3R9KSlicmVhaztpZighUyhvLnZhbHVlLHQpKWJyZWFrO3JldHVybiBRKFplLHRoaXMse2V4cHJlc3Npb246UShpdCxuLHtlbGVtZW50czpyLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pfSkscHJvcGVydHk6USh5dCx0aGlzLHt2YWx1ZTppfSl9KX19fX0pLGUoUWUsZnVuY3Rpb24oZSx0KXtpZigiYXJndW1lbnRzIiE9ZS5wcm9wZXJ0eSYmImNhbGxlciIhPWUucHJvcGVydHl8fHQud2FybigiRnVuY3Rpb24ucHJvdG90eXBlLntwcm9wfSBub3Qgc3VwcG9ydGVkIFt7ZmlsZX06e2xpbmV9LHtjb2x9XSIse3Byb3A6ZS5wcm9wZXJ0eSxmaWxlOmUuc3RhcnQuZmlsZSxsaW5lOmUuc3RhcnQubGluZSxjb2w6ZS5zdGFydC5jb2x9KSxlZShlLHQucGFyZW50KCkpKXJldHVybiBlO2lmKHQub3B0aW9uKCJ1bnNhZmVfcHJvdG8iKSYmZS5leHByZXNzaW9uIGluc3RhbmNlb2YgUWUmJiJwcm90b3R5cGUiPT1lLmV4cHJlc3Npb24ucHJvcGVydHkpe3ZhciBuPWUuZXhwcmVzc2lvbi5leHByZXNzaW9uO2lmKGoobikpc3dpdGNoKG4ubmFtZSl7Y2FzZSJBcnJheSI6ZS5leHByZXNzaW9uPVEoaXQsZS5leHByZXNzaW9uLHtlbGVtZW50czpbXX0pO2JyZWFrO2Nhc2UiRnVuY3Rpb24iOmUuZXhwcmVzc2lvbj1RKERlLGUuZXhwcmVzc2lvbix7YXJnbmFtZXM6W10sYm9keTpbXX0pO2JyZWFrO2Nhc2UiTnVtYmVyIjplLmV4cHJlc3Npb249USh5dCxlLmV4cHJlc3Npb24se3ZhbHVlOjB9KTticmVhaztjYXNlIk9iamVjdCI6ZS5leHByZXNzaW9uPVEob3QsZS5leHByZXNzaW9uLHtwcm9wZXJ0aWVzOltdfSk7YnJlYWs7Y2FzZSJSZWdFeHAiOmUuZXhwcmVzc2lvbj1RKF90LGUuZXhwcmVzc2lvbix7dmFsdWU6L3QvfSk7YnJlYWs7Y2FzZSJTdHJpbmciOmUuZXhwcmVzc2lvbj1RKGJ0LGUuZXhwcmVzc2lvbix7dmFsdWU6IiJ9KX19dmFyIHI9ZS5mbGF0dGVuX29iamVjdChlLnByb3BlcnR5LHQpO2lmKHIpcmV0dXJuIHIub3B0aW1pemUodCk7dmFyIGk9ZS5ldmFsdWF0ZSh0KTtyZXR1cm4gaSE9PWU/SCh0LGk9UChpLGUpLm9wdGltaXplKHQpLGUpOmV9KSxlKFJlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWUmJnYoZS52YWx1ZSx0KSYmKGUudmFsdWU9bnVsbCksZX0pfShmdW5jdGlvbihlLG4pe2UuREVGTUVUSE9EKCJvcHRpbWl6ZSIsZnVuY3Rpb24oZSl7aWYodGhpcy5fb3B0aW1pemVkKXJldHVybiB0aGlzO2lmKGUuaGFzX2RpcmVjdGl2ZSgidXNlIGFzbSIpKXJldHVybiB0aGlzO3ZhciB0PW4odGhpcyxlKTtyZXR1cm4gdC5fb3B0aW1pemVkPSEwLHR9KX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9ITAsbj0wO248ZS5sZW5ndGg7bisrKXQmJmVbbl1pbnN0YW5jZW9mIGNlJiZlW25dLmJvZHkgaW5zdGFuY2VvZiBidD9lW25dPW5ldyBwZSh7c3RhcnQ6ZVtuXS5zdGFydCxlbmQ6ZVtuXS5lbmQsdmFsdWU6ZVtuXS5ib2R5LnZhbHVlfSk6IXR8fGVbbl1pbnN0YW5jZW9mIGNlJiZlW25dLmJvZHkgaW5zdGFuY2VvZiBidHx8KHQ9ITEpO3JldHVybiBlfXZhciByPXtQcm9ncmFtOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQ2Uoe3N0YXJ0OnMoZSksZW5kOnUoZSksYm9keTp0KGUuYm9keS5tYXAobCkpfSl9LEZ1bmN0aW9uRGVjbGFyYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBUZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxuYW1lOmwoZS5pZCksYXJnbmFtZXM6ZS5wYXJhbXMubWFwKGwpLGJvZHk6dChsKGUuYm9keSkuYm9keSl9KX0sRnVuY3Rpb25FeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGUoe3N0YXJ0OnMoZSksZW5kOnUoZSksbmFtZTpsKGUuaWQpLGFyZ25hbWVzOmUucGFyYW1zLm1hcChsKSxib2R5OnQobChlLmJvZHkpLmJvZHkpfSl9LEV4cHJlc3Npb25TdGF0ZW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxib2R5OmwoZS5leHByZXNzaW9uKX0pfSxUcnlTdGF0ZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5oYW5kbGVyc3x8W2UuaGFuZGxlcl07aWYoMTx0Lmxlbmd0aHx8ZS5ndWFyZGVkSGFuZGxlcnMmJmUuZ3VhcmRlZEhhbmRsZXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk11bHRpcGxlIGNhdGNoIGNsYXVzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7cmV0dXJuIG5ldyBJZSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxib2R5OmwoZS5ibG9jaykuYm9keSxiY2F0Y2g6bCh0WzBdKSxiZmluYWxseTplLmZpbmFsaXplcj9uZXcgamUobChlLmZpbmFsaXplcikpOm51bGx9KX0sUHJvcGVydHk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXksbj17c3RhcnQ6cyh0KSxlbmQ6dShlLnZhbHVlKSxrZXk6IklkZW50aWZpZXIiPT10LnR5cGU/dC5uYW1lOnQudmFsdWUsdmFsdWU6bChlLnZhbHVlKX07cmV0dXJuImluaXQiPT1lLmtpbmQ/bmV3IHN0KG4pOihuLmtleT1uZXcgUSh7bmFtZTpuLmtleX0pLG4udmFsdWU9bmV3IFNlKG4udmFsdWUpLCJnZXQiPT1lLmtpbmQ/bmV3IFcobik6InNldCI9PWUua2luZD9uZXcgWShuKTp2b2lkIDApfSxBcnJheUV4cHJlc3Npb246ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpdCh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxlbGVtZW50czplLmVsZW1lbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWU/bmV3IHh0OmwoZSl9KX0pfSxPYmplY3RFeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgb3Qoe3N0YXJ0OnMoZSksZW5kOnUoZSkscHJvcGVydGllczplLnByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9IlByb3BlcnR5IixsKGUpfSl9KX0sU2VxdWVuY2VFeHByZXNzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWWUoe3N0YXJ0OnMoZSksZW5kOnUoZSksZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucy5tYXAobCl9KX0sTWVtYmVyRXhwcmVzc2lvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3KGUuY29tcHV0ZWQ/WmU6UWUpKHtzdGFydDpzKGUpLGVuZDp1KGUpLHByb3BlcnR5OmUuY29tcHV0ZWQ/bChlLnByb3BlcnR5KTplLnByb3BlcnR5Lm5hbWUsZXhwcmVzc2lvbjpsKGUub2JqZWN0KX0pfSxTd2l0Y2hDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZS50ZXN0P1BlOk5lKSh7c3RhcnQ6cyhlKSxlbmQ6dShlKSxleHByZXNzaW9uOmwoZS50ZXN0KSxib2R5OmUuY29uc2VxdWVudC5tYXAobCl9KX0sVmFyaWFibGVEZWNsYXJhdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IEhlKHtzdGFydDpzKGUpLGVuZDp1KGUpLGRlZmluaXRpb25zOmUuZGVjbGFyYXRpb25zLm1hcChsKX0pfSxMaXRlcmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUsbj17c3RhcnQ6cyhlKSxlbmQ6dShlKX07aWYobnVsbD09PXQpcmV0dXJuIG5ldyB3dChuKTt2YXIgcj1lLnJlZ2V4O2lmKHImJnIucGF0dGVybilyZXR1cm4gbi52YWx1ZT1uZXcgUmVnRXhwKHIucGF0dGVybixyLmZsYWdzKSxuLnZhbHVlLnJhd19zb3VyY2U9ci5wYXR0ZXJuLG5ldyBfdChuKTtpZihyKXJldHVybiBuLnZhbHVlPWUucmVnZXgmJmUucmF3P2UucmF3OnQsbmV3IF90KG4pO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJzdHJpbmciOnJldHVybiBuLnZhbHVlPXQsbmV3IGJ0KG4pO2Nhc2UibnVtYmVyIjpyZXR1cm4gbi52YWx1ZT10LG5ldyB5dChuKTtjYXNlImJvb2xlYW4iOnJldHVybiBuZXcodD9TdDpPdCkobil9fSxJZGVudGlmaWVyOmZ1bmN0aW9uKGUpe3ZhciB0PW9bby5sZW5ndGgtMl07cmV0dXJuIG5ldygiTGFiZWxlZFN0YXRlbWVudCI9PXQudHlwZT9aOiJWYXJpYWJsZURlY2xhcmF0b3IiPT10LnR5cGUmJnQuaWQ9PT1lP2N0OiJGdW5jdGlvbkV4cHJlc3Npb24iPT10LnR5cGU/dC5pZD09PWU/aHQ6ZnQ6IkZ1bmN0aW9uRGVjbGFyYXRpb24iPT10LnR5cGU/dC5pZD09PWU/cHQ6ZnQ6IkNhdGNoQ2xhdXNlIj09dC50eXBlP2R0OiJCcmVha1N0YXRlbWVudCI9PXQudHlwZXx8IkNvbnRpbnVlU3RhdGVtZW50Ij09dC50eXBlP0o6bXQpKHtzdGFydDpzKGUpLGVuZDp1KGUpLG5hbWU6ZS5uYW1lfSl9fTtmdW5jdGlvbiBpKGUpe2lmKCJMaXRlcmFsIj09ZS50eXBlKXJldHVybiBudWxsIT1lLnJhdz9lLnJhdzplLnZhbHVlKyIifWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5sb2Msbj10JiZ0LnN0YXJ0LHI9ZS5yYW5nZTtyZXR1cm4gbmV3IE8oe2ZpbGU6dCYmdC5zb3VyY2UsbGluZTpuJiZuLmxpbmUsY29sOm4mJm4uY29sdW1uLHBvczpyP3JbMF06ZS5zdGFydCxlbmRsaW5lOm4mJm4ubGluZSxlbmRjb2w6biYmbi5jb2x1bW4sZW5kcG9zOnI/clswXTplLnN0YXJ0LHJhdzppKGUpfSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmxvYyxuPXQmJnQuZW5kLHI9ZS5yYW5nZTtyZXR1cm4gbmV3IE8oe2ZpbGU6dCYmdC5zb3VyY2UsbGluZTpuJiZuLmxpbmUsY29sOm4mJm4uY29sdW1uLHBvczpyP3JbMV06ZS5lbmQsZW5kbGluZTpuJiZuLmxpbmUsZW5kY29sOm4mJm4uY29sdW1uLGVuZHBvczpyP3JbMV06ZS5lbmQscmF3OmkoZSl9KX1mdW5jdGlvbiBlKGUsdCxuKXt2YXIgbz0iZnVuY3Rpb24gRnJvbV9Nb3pfIitlKyIoTSl7XG4iO28rPSJyZXR1cm4gbmV3IFUyLiIrdC5uYW1lKyIoe1xuc3RhcnQ6IG15X3N0YXJ0X3Rva2VuKE0pLFxuZW5kOiBteV9lbmRfdG9rZW4oTSkiO3ZhciBhPSJmdW5jdGlvbiBUb19Nb3pfIitlKyIoTSl7XG4iO2ErPSJyZXR1cm4ge1xudHlwZTogIitKU09OLnN0cmluZ2lmeShlKSxuJiZuLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0vKFthLXowLTkkX10rKSg9fEB8PnwlKShbYS16MC05JF9dKykvaS5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdW5kZXJzdGFuZCBwcm9wZXJ0eSBtYXA6ICIrZSk7dmFyIG49dFsxXSxyPXRbMl0saT10WzNdO3N3aXRjaChvKz0iLFxuIitpKyI6ICIsYSs9IixcbiIrbisiOiAiLHIpe2Nhc2UiQCI6bys9Ik0uIituKyIubWFwKGZyb21fbW96KSIsYSs9Ik0uIitpKyIubWFwKHRvX21veikiO2JyZWFrO2Nhc2UiPiI6bys9ImZyb21fbW96KE0uIituKyIpIixhKz0idG9fbW96KE0uIitpKyIpIjticmVhaztjYXNlIj0iOm8rPSJNLiIrbixhKz0iTS4iK2k7YnJlYWs7Y2FzZSIlIjpvKz0iZnJvbV9tb3ooTS4iK24rIikuYm9keSIsYSs9InRvX21vel9ibG9jayhNKSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHVuZGVyc3RhbmQgb3BlcmF0b3IgaW4gcHJvcG1hcDogIitlKX19KSxvKz0iXG59KVxufSIsYSs9IlxufVxufSIsbz1uZXcgRnVuY3Rpb24oIlUyIiwibXlfc3RhcnRfdG9rZW4iLCJteV9lbmRfdG9rZW4iLCJmcm9tX21veiIsInJldHVybigiK28rIikiKShkLHMsdSxsKSxhPW5ldyBGdW5jdGlvbigidG9fbW96IiwidG9fbW96X2Jsb2NrIiwidG9fbW96X3Njb3BlIiwicmV0dXJuKCIrYSsiKSIpKGYscCxoKSxyW2VdPW8sYyh0LGEpfXIuVXBkYXRlRXhwcmVzc2lvbj1yLlVuYXJ5RXhwcmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KCgicHJlZml4ImluIGU/ZS5wcmVmaXg6IlVuYXJ5RXhwcmVzc2lvbiI9PWUudHlwZSk/WGU6ZXQpKHtzdGFydDpzKGUpLGVuZDp1KGUpLG9wZXJhdG9yOmUub3BlcmF0b3IsZXhwcmVzc2lvbjpsKGUuYXJndW1lbnQpfSl9LGUoIkVtcHR5U3RhdGVtZW50IixnZSksZSgiQmxvY2tTdGF0ZW1lbnQiLG1lLCJib2R5QGJvZHkiKSxlKCJJZlN0YXRlbWVudCIsVWUsInRlc3Q+Y29uZGl0aW9uLCBjb25zZXF1ZW50PmJvZHksIGFsdGVybmF0ZT5hbHRlcm5hdGl2ZSIpLGUoIkxhYmVsZWRTdGF0ZW1lbnQiLHZlLCJsYWJlbD5sYWJlbCwgYm9keT5ib2R5IiksZSgiQnJlYWtTdGF0ZW1lbnQiLEZlLCJsYWJlbD5sYWJlbCIpLGUoIkNvbnRpbnVlU3RhdGVtZW50IixxZSwibGFiZWw+bGFiZWwiKSxlKCJXaXRoU3RhdGVtZW50Iix4ZSwib2JqZWN0PmV4cHJlc3Npb24sIGJvZHk+Ym9keSIpLGUoIlN3aXRjaFN0YXRlbWVudCIsTWUsImRpc2NyaW1pbmFudD5leHByZXNzaW9uLCBjYXNlc0Bib2R5IiksZSgiUmV0dXJuU3RhdGVtZW50IixSZSwiYXJndW1lbnQ+dmFsdWUiKSxlKCJUaHJvd1N0YXRlbWVudCIsSywiYXJndW1lbnQ+dmFsdWUiKSxlKCJXaGlsZVN0YXRlbWVudCIsd2UsInRlc3Q+Y29uZGl0aW9uLCBib2R5PmJvZHkiKSxlKCJEb1doaWxlU3RhdGVtZW50IixfZSwidGVzdD5jb25kaXRpb24sIGJvZHk+Ym9keSIpLGUoIkZvclN0YXRlbWVudCIsRWUsImluaXQ+aW5pdCwgdGVzdD5jb25kaXRpb24sIHVwZGF0ZT5zdGVwLCBib2R5PmJvZHkiKSxlKCJGb3JJblN0YXRlbWVudCIsQWUsImxlZnQ+aW5pdCwgcmlnaHQ+b2JqZWN0LCBib2R5PmJvZHkiKSxlKCJEZWJ1Z2dlclN0YXRlbWVudCIsZmUpLGUoIlZhcmlhYmxlRGVjbGFyYXRvciIsJGUsImlkPm5hbWUsIGluaXQ+dmFsdWUiKSxlKCJDYXRjaENsYXVzZSIsemUsInBhcmFtPmFyZ25hbWUsIGJvZHklYm9keSIpLGUoIlRoaXNFeHByZXNzaW9uIixndCksZSgiQmluYXJ5RXhwcmVzc2lvbiIsdHQsIm9wZXJhdG9yPW9wZXJhdG9yLCBsZWZ0PmxlZnQsIHJpZ2h0PnJpZ2h0IiksZSgiTG9naWNhbEV4cHJlc3Npb24iLHR0LCJvcGVyYXRvcj1vcGVyYXRvciwgbGVmdD5sZWZ0LCByaWdodD5yaWdodCIpLGUoIkFzc2lnbm1lbnRFeHByZXNzaW9uIixydCwib3BlcmF0b3I9b3BlcmF0b3IsIGxlZnQ+bGVmdCwgcmlnaHQ+cmlnaHQiKSxlKCJDb25kaXRpb25hbEV4cHJlc3Npb24iLG50LCJ0ZXN0PmNvbmRpdGlvbiwgY29uc2VxdWVudD5jb25zZXF1ZW50LCBhbHRlcm5hdGU+YWx0ZXJuYXRpdmUiKSxlKCJOZXdFeHByZXNzaW9uIixHZSwiY2FsbGVlPmV4cHJlc3Npb24sIGFyZ3VtZW50c0BhcmdzIiksZSgiQ2FsbEV4cHJlc3Npb24iLEtlLCJjYWxsZWU+ZXhwcmVzc2lvbiwgYXJndW1lbnRzQGFyZ3MiKSxjKENlLGZ1bmN0aW9uKGUpe3JldHVybiBoKCJQcm9ncmFtIixlKX0pLGMoVGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkZ1bmN0aW9uRGVjbGFyYXRpb24iLGlkOmYoZS5uYW1lKSxwYXJhbXM6ZS5hcmduYW1lcy5tYXAoZiksYm9keTpoKCJCbG9ja1N0YXRlbWVudCIsZSl9fSksYyhEZSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiRnVuY3Rpb25FeHByZXNzaW9uIixpZDpmKGUubmFtZSkscGFyYW1zOmUuYXJnbmFtZXMubWFwKGYpLGJvZHk6aCgiQmxvY2tTdGF0ZW1lbnQiLGUpfX0pLGMocGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLGV4cHJlc3Npb246e3R5cGU6IkxpdGVyYWwiLHZhbHVlOmUudmFsdWV9fX0pLGMoaGUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IkV4cHJlc3Npb25TdGF0ZW1lbnQiLGV4cHJlc3Npb246ZihlLmJvZHkpfX0pLGMoTSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiU3dpdGNoQ2FzZSIsdGVzdDpmKGUuZXhwcmVzc2lvbiksY29uc2VxdWVudDplLmJvZHkubWFwKGYpfX0pLGMoSWUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlRyeVN0YXRlbWVudCIsYmxvY2s6cChlKSxoYW5kbGVyOmYoZS5iY2F0Y2gpLGd1YXJkZWRIYW5kbGVyczpbXSxmaW5hbGl6ZXI6ZihlLmJmaW5hbGx5KX19KSxjKHplLGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJDYXRjaENsYXVzZSIscGFyYW06ZihlLmFyZ25hbWUpLGd1YXJkOm51bGwsYm9keTpwKGUpfX0pLGMoVmUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlZhcmlhYmxlRGVjbGFyYXRpb24iLGtpbmQ6InZhciIsZGVjbGFyYXRpb25zOmUuZGVmaW5pdGlvbnMubWFwKGYpfX0pLGMoWWUsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IlNlcXVlbmNlRXhwcmVzc2lvbiIsZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucy5tYXAoZil9fSksYyhXZSxmdW5jdGlvbihlKXt2YXIgdD1lIGluc3RhbmNlb2YgWmU7cmV0dXJue3R5cGU6Ik1lbWJlckV4cHJlc3Npb24iLG9iamVjdDpmKGUuZXhwcmVzc2lvbiksY29tcHV0ZWQ6dCxwcm9wZXJ0eTp0P2YoZS5wcm9wZXJ0eSk6e3R5cGU6IklkZW50aWZpZXIiLG5hbWU6ZS5wcm9wZXJ0eX19fSksYyhKZSxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiKysiPT1lLm9wZXJhdG9yfHwiLS0iPT1lLm9wZXJhdG9yPyJVcGRhdGVFeHByZXNzaW9uIjoiVW5hcnlFeHByZXNzaW9uIixvcGVyYXRvcjplLm9wZXJhdG9yLHByZWZpeDplIGluc3RhbmNlb2YgWGUsYXJndW1lbnQ6ZihlLmV4cHJlc3Npb24pfX0pLGModHQsZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6IiYmIj09ZS5vcGVyYXRvcnx8Inx8Ij09ZS5vcGVyYXRvcj8iTG9naWNhbEV4cHJlc3Npb24iOiJCaW5hcnlFeHByZXNzaW9uIixsZWZ0OmYoZS5sZWZ0KSxvcGVyYXRvcjplLm9wZXJhdG9yLHJpZ2h0OmYoZS5yaWdodCl9fSksYyhpdCxmdW5jdGlvbihlKXtyZXR1cm57dHlwZToiQXJyYXlFeHByZXNzaW9uIixlbGVtZW50czplLmVsZW1lbnRzLm1hcChmKX19KSxjKG90LGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJPYmplY3RFeHByZXNzaW9uIixwcm9wZXJ0aWVzOmUucHJvcGVydGllcy5tYXAoZil9fSksYyhhdCxmdW5jdGlvbihlKXt2YXIgdCxuPXt0eXBlOiJMaXRlcmFsIix2YWx1ZTplLmtleSBpbnN0YW5jZW9mIFE/ZS5rZXkubmFtZTplLmtleX07cmV0dXJuIGUgaW5zdGFuY2VvZiBzdD90PSJpbml0IjplIGluc3RhbmNlb2YgVz90PSJnZXQiOmUgaW5zdGFuY2VvZiBZJiYodD0ic2V0Iikse3R5cGU6IlByb3BlcnR5IixraW5kOnQsa2V5Om4sdmFsdWU6ZihlLnZhbHVlKX19KSxjKHV0LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGVmaW5pdGlvbigpO3JldHVybnt0eXBlOiJJZGVudGlmaWVyIixuYW1lOnQ/dC5tYW5nbGVkX25hbWV8fHQubmFtZTplLm5hbWV9fSksYyhfdCxmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL1tnaW11eV0qJC8pWzBdLG49Ii8iK2UudmFsdWUucmF3X3NvdXJjZSsiLyIrdDtyZXR1cm57dHlwZToiTGl0ZXJhbCIsdmFsdWU6bixyYXc6bixyZWdleDp7cGF0dGVybjplLnZhbHVlLnJhd19zb3VyY2UsZmxhZ3M6dH19fSksYyh2dCxmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ8MHx8MD09PXQmJjEvdDwwKT97dHlwZToiVW5hcnlFeHByZXNzaW9uIixvcGVyYXRvcjoiLSIscHJlZml4OiEwLGFyZ3VtZW50Ont0eXBlOiJMaXRlcmFsIix2YWx1ZTotdCxyYXc6ZS5zdGFydC5yYXd9fTp7dHlwZToiTGl0ZXJhbCIsdmFsdWU6dCxyYXc6ZS5zdGFydC5yYXd9fSksYyhhLGZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOiJJZGVudGlmaWVyIixuYW1lOlN0cmluZyhlLnZhbHVlKX19KSxDdC5ERUZNRVRIT0QoInRvX21vemlsbGFfYXN0Iix2dC5wcm90b3R5cGUudG9fbW96aWxsYV9hc3QpLHd0LkRFRk1FVEhPRCgidG9fbW96aWxsYV9hc3QiLHZ0LnByb3RvdHlwZS50b19tb3ppbGxhX2FzdCkseHQuREVGTUVUSE9EKCJ0b19tb3ppbGxhX2FzdCIsZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLGRlLkRFRk1FVEhPRCgidG9fbW96aWxsYV9hc3QiLG1lLnByb3RvdHlwZS50b19tb3ppbGxhX2FzdCksT2UuREVGTUVUSE9EKCJ0b19tb3ppbGxhX2FzdCIsRGUucHJvdG90eXBlLnRvX21vemlsbGFfYXN0KTt2YXIgbz1udWxsO2Z1bmN0aW9uIGwoZSl7by5wdXNoKGUpO3ZhciB0PW51bGwhPWU/cltlLnR5cGVdKGUpOm51bGw7cmV0dXJuIG8ucG9wKCksdH1mdW5jdGlvbiBjKGUsdCl7ZS5ERUZNRVRIT0QoInRvX21vemlsbGFfYXN0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5zdGFydCxpPWUuZW5kO3JldHVybiBudWxsIT1yLnBvcyYmbnVsbCE9aS5lbmRwb3MmJih0LnJhbmdlPVtyLnBvcyxpLmVuZHBvc10pLHIubGluZSYmKHQubG9jPXtzdGFydDp7bGluZTpyLmxpbmUsY29sdW1uOnIuY29sfSxlbmQ6aS5lbmRsaW5lP3tsaW5lOmkuZW5kbGluZSxjb2x1bW46aS5lbmRjb2x9Om51bGx9LHIuZmlsZSYmKHQubG9jLnNvdXJjZT1yLmZpbGUpKSx0fSh0aGlzLHQodGhpcykpfSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gbnVsbCE9ZT9lLnRvX21vemlsbGFfYXN0KCk6bnVsbH1mdW5jdGlvbiBwKGUpe3JldHVybnt0eXBlOiJCbG9ja1N0YXRlbWVudCIsYm9keTplLmJvZHkubWFwKGYpfX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49dC5ib2R5Lm1hcChmKTtyZXR1cm4gdC5ib2R5WzBdaW5zdGFuY2VvZiBoZSYmdC5ib2R5WzBdLmJvZHkgaW5zdGFuY2VvZiBidCYmbi51bnNoaWZ0KGYobmV3IGdlKHQuYm9keVswXSkpKSx7dHlwZTplLGJvZHk6bn19bGUuZnJvbV9tb3ppbGxhX2FzdD1mdW5jdGlvbihlKXt2YXIgdD1vO289W107dmFyIG49bChlKTtyZXR1cm4gbz10LG4ud2FsayhuZXcgRHQoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIEope2Zvcih2YXIgdCxuPTA7KHQ9dGhpcy5wYXJlbnQobikpJiYhKHQgaW5zdGFuY2VvZiBrZSk7bisrKWlmKHQgaW5zdGFuY2VvZiB2ZSYmdC5sYWJlbC5uYW1lPT1lLm5hbWUpe2UudGhlZGVmPXQubGFiZWw7YnJlYWt9aWYoIWUudGhlZGVmKXt2YXIgcj1lLnN0YXJ0O1B0KCJVbmRlZmluZWQgbGFiZWwgIitlLm5hbWUsci5maWxlLHIubGluZSxyLmNvbCxyLnBvcyl9fX0pKSxufX0oKTt2YXIgdz0idW5kZWZpbmVkIj09dHlwZW9mIGF0b2I/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1KGUsImJhc2U2NCIpLnRvU3RyaW5nKCl9OmF0b2IsRT0idW5kZWZpbmVkIj09dHlwZW9mIGJ0b2E/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1KGUpLnRvU3RyaW5nKCJiYXNlNjQiKX06YnRvYTtmdW5jdGlvbiBBKHQpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgaW5wdXQgc291cmNlIG1hcDogIit0KX19ZnVuY3Rpb24geCh0LG4sZSl7blt0XSYmZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV0mJigib2JqZWN0IiE9dHlwZW9mIG5bZV0mJihuW2VdPXt9KSx0IGluIG5bZV18fChuW2VdW3RdPW5bdF0pKX0pfWZ1bmN0aW9uIGsoZSl7ZSYmKCJwcm9wcyJpbiBlP2UucHJvcHMgaW5zdGFuY2VvZiBMfHwoZS5wcm9wcz1MLmZyb21PYmplY3QoZS5wcm9wcykpOmUucHJvcHM9bmV3IEwpfWZ1bmN0aW9uIEMoZSl7cmV0dXJue3Byb3BzOmUucHJvcHMudG9PYmplY3QoKX19ZC5EaWN0aW9uYXJ5PUwsZC5taW5pZnk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz1sZS53YXJuX2Z1bmN0aW9uO3RyeXt2YXIgYSxzPSh0PSQodCx7Y29tcHJlc3M6e30sZW5jbG9zZTohMSxpZTg6ITEsa2VlcF9mbmFtZXM6ITEsbWFuZ2xlOnt9LG5hbWVDYWNoZTpudWxsLG91dHB1dDp7fSxwYXJzZTp7fSxyZW5hbWU6dm9pZCAwLHNvdXJjZU1hcDohMSx0aW1pbmdzOiExLHRvcGxldmVsOiExLHdhcm5pbmdzOiExLHdyYXA6ITF9LCEwKSkudGltaW5ncyYme3N0YXJ0OkRhdGUubm93KCl9O3ZvaWQgMD09PXQucmVuYW1lJiYodC5yZW5hbWU9dC5jb21wcmVzcyYmdC5tYW5nbGUpLHgoImllOCIsdCxbImNvbXByZXNzIiwibWFuZ2xlIiwib3V0cHV0Il0pLHgoImtlZXBfZm5hbWVzIix0LFsiY29tcHJlc3MiLCJtYW5nbGUiXSkseCgidG9wbGV2ZWwiLHQsWyJjb21wcmVzcyIsIm1hbmdsZSJdKSx4KCJ3YXJuaW5ncyIsdCxbImNvbXByZXNzIl0pLHQubWFuZ2xlJiYodC5tYW5nbGU9JCh0Lm1hbmdsZSx7Y2FjaGU6dC5uYW1lQ2FjaGUmJih0Lm5hbWVDYWNoZS52YXJzfHx7fSksZXZhbDohMSxpZTg6ITEsa2VlcF9mbmFtZXM6ITEscHJvcGVydGllczohMSxyZXNlcnZlZDpbXSx0b3BsZXZlbDohMX0sITApLHQubWFuZ2xlLnByb3BlcnRpZXMmJigib2JqZWN0IiE9dHlwZW9mIHQubWFuZ2xlLnByb3BlcnRpZXMmJih0Lm1hbmdsZS5wcm9wZXJ0aWVzPXt9KSx0Lm1hbmdsZS5wcm9wZXJ0aWVzLmtlZXBfcXVvdGVkJiYoYT10Lm1hbmdsZS5wcm9wZXJ0aWVzLnJlc2VydmVkLEFycmF5LmlzQXJyYXkoYSl8fChhPVtdKSx0Lm1hbmdsZS5wcm9wZXJ0aWVzLnJlc2VydmVkPWEpLCF0Lm5hbWVDYWNoZXx8ImNhY2hlImluIHQubWFuZ2xlLnByb3BlcnRpZXN8fCh0Lm1hbmdsZS5wcm9wZXJ0aWVzLmNhY2hlPXQubmFtZUNhY2hlLnByb3BzfHx7fSkpLGsodC5tYW5nbGUuY2FjaGUpLGsodC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSkpLHQuc291cmNlTWFwJiYodC5zb3VyY2VNYXA9JCh0LnNvdXJjZU1hcCx7Y29udGVudDpudWxsLGZpbGVuYW1lOm51bGwsaW5jbHVkZVNvdXJjZXM6ITEscm9vdDpudWxsLHVybDpudWxsfSwhMCkpO3ZhciB1LGwsYz1bXTtpZih0Lndhcm5pbmdzJiYhbGUud2Fybl9mdW5jdGlvbiYmKGxlLndhcm5fZnVuY3Rpb249ZnVuY3Rpb24oZSl7Yy5wdXNoKGUpfSkscyYmKHMucGFyc2U9RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIENlKWw9ZTtlbHNleyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSx0LnBhcnNlPXQucGFyc2V8fHt9LHQucGFyc2UudG9wbGV2ZWw9bnVsbDt2YXIgZj10LnNvdXJjZU1hcCYmdC5zb3VyY2VNYXAuY29udGVudDtmb3IodmFyIHAgaW4ic3RyaW5nIj09dHlwZW9mIGYmJiJpbmxpbmUiIT1mJiYoZj1BKGYpKSx1PWYmJk9iamVjdC5jcmVhdGUobnVsbCksZSlpZih1ZShlLHApJiYodC5wYXJzZS5maWxlbmFtZT1wLHQucGFyc2UudG9wbGV2ZWw9WXQoZVtwXSx0LnBhcnNlKSx1KSlpZigiaW5saW5lIj09Zil7dmFyIGg9KHI9ZVtuPXBdLChpPS9cblwvXC8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblwvanNvbig7Lio/KT87YmFzZTY0LCguKikvLmV4ZWMocikpP3coaVsyXSk6KGxlLndhcm4oImlubGluZSBzb3VyY2UgbWFwIG5vdCBmb3VuZDogIituKSxudWxsKSk7aCYmKHVbcF09QShoKSl9ZWxzZSB1W3BdPWY7bD10LnBhcnNlLnRvcGxldmVsfWEmJmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtnKHQsZSl9ZS53YWxrKG5ldyBEdChmdW5jdGlvbihlKXtlIGluc3RhbmNlb2Ygc3QmJmUucXVvdGU/bihlLmtleSk6ZSBpbnN0YW5jZW9mIFplJiZ5KGUucHJvcGVydHksbil9KSl9KGwsYSksdC53cmFwJiYobD1sLndyYXBfY29tbW9uanModC53cmFwKSksdC5lbmNsb3NlJiYobD1sLndyYXBfZW5jbG9zZSh0LmVuY2xvc2UpKSxzJiYocy5yZW5hbWU9RGF0ZS5ub3coKSksdC5yZW5hbWUmJihsLmZpZ3VyZV9vdXRfc2NvcGUodC5tYW5nbGUpLGwuZXhwYW5kX25hbWVzKHQubWFuZ2xlKSkscyYmKHMuY29tcHJlc3M9RGF0ZS5ub3coKSksdC5jb21wcmVzcyYmKGw9bmV3IFh0KHQuY29tcHJlc3MpLmNvbXByZXNzKGwpKSxzJiYocy5zY29wZT1EYXRlLm5vdygpKSx0Lm1hbmdsZSYmbC5maWd1cmVfb3V0X3Njb3BlKHQubWFuZ2xlKSxzJiYocy5tYW5nbGU9RGF0ZS5ub3coKSksdC5tYW5nbGUmJihsLmNvbXB1dGVfY2hhcl9mcmVxdWVuY3kodC5tYW5nbGUpLGwubWFuZ2xlX25hbWVzKHQubWFuZ2xlKSkscyYmKHMucHJvcGVydGllcz1EYXRlLm5vdygpKSx0Lm1hbmdsZSYmdC5tYW5nbGUucHJvcGVydGllcyYmKGw9XyhsLHQubWFuZ2xlLnByb3BlcnRpZXMpKSxzJiYocy5vdXRwdXQ9RGF0ZS5ub3coKSk7dmFyIGQ9e307aWYodC5vdXRwdXQuYXN0JiYoZC5hc3Q9bCksIXVlKHQub3V0cHV0LCJjb2RlIil8fHQub3V0cHV0LmNvZGUpe2lmKHQuc291cmNlTWFwKWlmKHQub3V0cHV0LnNvdXJjZV9tYXA9ZnVuY3Rpb24odSl7dT0kKHUse2ZpbGU6bnVsbCxyb290Om51bGwsb3JpZzpudWxsLG9yaWdfbGluZV9kaWZmOjAsZGVzdF9saW5lX2RpZmY6MH0sITApO3ZhciBsPW5ldyBNT1pfU291cmNlTWFwLlNvdXJjZU1hcEdlbmVyYXRvcih7ZmlsZTp1LmZpbGUsc291cmNlUm9vdDp1LnJvb3R9KSxjPXUub3JpZyYmT2JqZWN0LmNyZWF0ZShudWxsKTtpZihjKWZvcih2YXIgZSBpbiB1Lm9yaWcpe3ZhciBuPW5ldyBNT1pfU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHUub3JpZ1tlXSk7QXJyYXkuaXNBcnJheSh1Lm9yaWdbZV0uc291cmNlcykmJm4uX3NvdXJjZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5zb3VyY2VDb250ZW50Rm9yKGUsITApO3QmJmwuc2V0U291cmNlQ29udGVudChlLHQpfSksY1tlXT1ufXJldHVybnthZGQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciBhPWMmJmNbZV07aWYoYSl7dmFyIHM9YS5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOnIsY29sdW1uOml9KTtpZihudWxsPT09cy5zb3VyY2UpcmV0dXJuO2U9cy5zb3VyY2Uscj1zLmxpbmUsaT1zLmNvbHVtbixvPXMubmFtZXx8b31sLmFkZE1hcHBpbmcoe25hbWU6byxzb3VyY2U6ZSxnZW5lcmF0ZWQ6e2xpbmU6dCt1LmRlc3RfbGluZV9kaWZmLGNvbHVtbjpufSxvcmlnaW5hbDp7bGluZTpyK3Uub3JpZ19saW5lX2RpZmYsY29sdW1uOml9fSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBsfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeShsLnRvSlNPTigpKX19fSh7ZmlsZTp0LnNvdXJjZU1hcC5maWxlbmFtZSxvcmlnOnUscm9vdDp0LnNvdXJjZU1hcC5yb290fSksdC5zb3VyY2VNYXAuaW5jbHVkZVNvdXJjZXMpe2lmKGUgaW5zdGFuY2VvZiBDZSl0aHJvdyBuZXcgRXJyb3IoIm9yaWdpbmFsIHNvdXJjZSBjb250ZW50IHVuYXZhaWxhYmxlIik7Zm9yKHZhciBwIGluIGUpdWUoZSxwKSYmdC5vdXRwdXQuc291cmNlX21hcC5nZXQoKS5zZXRTb3VyY2VDb250ZW50KHAsZVtwXSl9ZWxzZSB0Lm91dHB1dC5zb3VyY2VfbWFwLmdldCgpLl9zb3VyY2VzQ29udGVudHM9bnVsbDtkZWxldGUgdC5vdXRwdXQuYXN0LGRlbGV0ZSB0Lm91dHB1dC5jb2RlO3ZhciBtPUp0KHQub3V0cHV0KTtsLnByaW50KG0pLGQuY29kZT1tLmdldCgpLHQuc291cmNlTWFwJiYoZC5tYXA9dC5vdXRwdXQuc291cmNlX21hcC50b1N0cmluZygpLCJpbmxpbmUiPT10LnNvdXJjZU1hcC51cmw/ZC5jb2RlKz0iXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIitFKGQubWFwKTp0LnNvdXJjZU1hcC51cmwmJihkLmNvZGUrPSJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPSIrdC5zb3VyY2VNYXAudXJsKSl9cmV0dXJuIHQubmFtZUNhY2hlJiZ0Lm1hbmdsZSYmKHQubWFuZ2xlLmNhY2hlJiYodC5uYW1lQ2FjaGUudmFycz1DKHQubWFuZ2xlLmNhY2hlKSksdC5tYW5nbGUucHJvcGVydGllcyYmdC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSYmKHQubmFtZUNhY2hlLnByb3BzPUModC5tYW5nbGUucHJvcGVydGllcy5jYWNoZSkpKSxzJiYocy5lbmQ9RGF0ZS5ub3coKSxkLnRpbWluZ3M9e3BhcnNlOi4wMDEqKHMucmVuYW1lLXMucGFyc2UpLHJlbmFtZTouMDAxKihzLmNvbXByZXNzLXMucmVuYW1lKSxjb21wcmVzczouMDAxKihzLnNjb3BlLXMuY29tcHJlc3MpLHNjb3BlOi4wMDEqKHMubWFuZ2xlLXMuc2NvcGUpLG1hbmdsZTouMDAxKihzLnByb3BlcnRpZXMtcy5tYW5nbGUpLHByb3BlcnRpZXM6LjAwMSoocy5vdXRwdXQtcy5wcm9wZXJ0aWVzKSxvdXRwdXQ6LjAwMSoocy5lbmQtcy5vdXRwdXQpLHRvdGFsOi4wMDEqKHMuZW5kLXMuc3RhcnQpfSksYy5sZW5ndGgmJihkLndhcm5pbmdzPWMpLGR9Y2F0Y2goZSl7cmV0dXJue2Vycm9yOmV9fWZpbmFsbHl7bGUud2Fybl9mdW5jdGlvbj1vfX0sZC5wYXJzZT1ZdCxkLnB1c2hfdW5pcT1nLGQuVHJlZVRyYW5zZm9ybWVyPVd0LGQuVHJlZVdhbGtlcj1EdH0odm9pZCAwPT09bj9uPXt9Om4pfSkuY2FsbCh0aGlzLGUoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6NH1dfSx7fSxbImh0bWwtbWluaWZpZXIiXSk7CgpsZXQgaHRtbG1pbmlmaWVyID0gcmVxdWlyZSgnaHRtbC1taW5pZmllcicpLm1pbmlmeQoKd2luZG93WydodG1sLW1pbmlmaWVyJ109aHRtbG1pbmlmaWVyCgo="),Z.document.getElementsByTagName("head")[0].appendChild(l),Z["html-minifier"]}();var s=Array.isArray,S="object"==typeof global&&global&&global.Object===Object&&global,J="object"==typeof self&&self&&self.Object===Object&&self,K=S||J||Function("return this")(),R=K.Symbol,a=Object.prototype,H=a.hasOwnProperty,o=a.toString,F=R?R.toStringTag:void 0;var n=Object.prototype.toString;var N="[object Null]",U="[object Undefined]",C=R?R.toStringTag:void 0;function k(Z){return null==Z?void 0===Z?U:N:C&&C in Object(Z)?function(Z){var l=H.call(Z,F),b=Z[F];try{Z[F]=void 0;var i=!0}catch(Z){}var m=o.call(Z);return i&&(l?Z[F]=b:delete Z[F]),m}(Z):function(Z){return n.call(Z)}(Z)}var T="[object Symbol]";function t(Z){return"symbol"==typeof Z||function(Z){return null!=Z&&"object"==typeof Z}(Z)&&k(Z)==T}var v=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,z=/^\w*$/;function j(Z){var l=typeof Z;return null!=Z&&("object"==l||"function"==l)}var w="[object AsyncFunction]",B="[object Function]",M="[object GeneratorFunction]",Q="[object Proxy]";var g,P=K["__core-js_shared__"],O=(g=/[^.]+$/.exec(P&&P.keys&&P.keys.IE_PROTO||""))?"Symbol(src)_1."+g:"";var E=Function.prototype.toString;var e=/^\[object .+?Constructor\]$/,f=Function.prototype,D=Object.prototype,r=f.toString,A=D.hasOwnProperty,q=RegExp("^"+r.call(A).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function _(Z){if(!j(Z)||(l=Z,O&&O in l))return!1;var l,b=function(Z){if(!j(Z))return!1;var l=k(Z);return l==B||l==M||l==w||l==Q}(Z)?q:e;return b.test(function(Z){if(null!=Z){try{return E.call(Z)}catch(Z){}try{return Z+""}catch(Z){}}return""}(Z))}function $(Z,l){var b=function(Z,l){return null==Z?void 0:Z[l]}(Z,l);return _(b)?b:void 0}var ZZ=$(Object,"create");var lZ=Object.prototype.hasOwnProperty;var bZ=Object.prototype.hasOwnProperty;function iZ(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}function mZ(Z,l){for(var b,i,m=Z.length;m--;)if((b=Z[m][0])===(i=l)||b!=b&&i!=i)return m;return-1}iZ.prototype.clear=function(){this.__data__=ZZ?ZZ(null):{},this.size=0},iZ.prototype.delete=function(Z){var l=this.has(Z)&&delete this.__data__[Z];return this.size-=l?1:0,l},iZ.prototype.get=function(Z){var l=this.__data__;if(ZZ){var b=l[Z];return"__lodash_hash_undefined__"===b?void 0:b}return lZ.call(l,Z)?l[Z]:void 0},iZ.prototype.has=function(Z){var l=this.__data__;return ZZ?void 0!==l[Z]:bZ.call(l,Z)},iZ.prototype.set=function(Z,l){var b=this.__data__;return this.size+=this.has(Z)?0:1,b[Z]=ZZ&&void 0===l?"__lodash_hash_undefined__":l,this};var dZ=Array.prototype.splice;function cZ(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}cZ.prototype.clear=function(){this.__data__=[],this.size=0},cZ.prototype.delete=function(Z){var l=this.__data__,b=mZ(l,Z);return!(b<0)&&(b==l.length-1?l.pop():dZ.call(l,b,1),--this.size,!0)},cZ.prototype.get=function(Z){var l=this.__data__,b=mZ(l,Z);return b<0?void 0:l[b][1]},cZ.prototype.has=function(Z){return mZ(this.__data__,Z)>-1},cZ.prototype.set=function(Z,l){var b=this.__data__,i=mZ(b,Z);return i<0?(++this.size,b.push([Z,l])):b[i][1]=l,this};var GZ=$(K,"Map");function XZ(Z,l){var b,i,m=Z.__data__;return("string"==(i=typeof(b=l))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==b:null===b)?m["string"==typeof l?"string":"hash"]:m.map}function WZ(Z){var l=-1,b=null==Z?0:Z.length;for(this.clear();++l<b;){var i=Z[l];this.set(i[0],i[1])}}WZ.prototype.clear=function(){this.size=0,this.__data__={hash:new iZ,map:new(GZ||cZ),string:new iZ}},WZ.prototype.delete=function(Z){var l=XZ(this,Z).delete(Z);return this.size-=l?1:0,l},WZ.prototype.get=function(Z){return XZ(this,Z).get(Z)},WZ.prototype.has=function(Z){return XZ(this,Z).has(Z)},WZ.prototype.set=function(Z,l){var b=XZ(this,Z),i=b.size;return b.set(Z,l),this.size+=b.size==i?0:1,this};var IZ="Expected a function";function VZ(Z,l){if("function"!=typeof Z||null!=l&&"function"!=typeof l)throw new TypeError(IZ);var b=function(){var i=arguments,m=l?l.apply(this,i):i[0],d=b.cache;if(d.has(m))return d.get(m);var c=Z.apply(this,i);return b.cache=d.set(m,c)||d,c};return b.cache=new(VZ.Cache||WZ),b}VZ.Cache=WZ;var uZ,LZ,YZ,pZ=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xZ=/\\(\\)?/g,yZ=(uZ=function(Z){var l=[];return 46===Z.charCodeAt(0)&&l.push(""),Z.replace(pZ,(function(Z,b,i,m){l.push(i?m.replace(xZ,"$1"):b||Z)})),l},LZ=VZ(uZ,(function(Z){return 500===YZ.size&&YZ.clear(),Z})),YZ=LZ.cache,LZ),hZ=yZ;var sZ=1/0,SZ=R?R.prototype:void 0,JZ=SZ?SZ.toString:void 0;function KZ(Z){if("string"==typeof Z)return Z;if(s(Z))return function(Z,l){for(var b=-1,i=null==Z?0:Z.length,m=Array(i);++b<i;)m[b]=l(Z[b],b,Z);return m}(Z,KZ)+"";if(t(Z))return JZ?JZ.call(Z):"";var l=Z+"";return"0"==l&&1/Z==-sZ?"-0":l}function RZ(Z,l){return s(Z)?Z:function(Z,l){if(s(Z))return!1;var b=typeof Z;return!("number"!=b&&"symbol"!=b&&"boolean"!=b&&null!=Z&&!t(Z))||z.test(Z)||!v.test(Z)||null!=l&&Z in Object(l)}(Z,l)?[Z]:hZ(function(Z){return null==Z?"":KZ(Z)}(Z))}var aZ=1/0;function HZ(Z){if("string"==typeof Z||t(Z))return Z;var l=Z+"";return"0"==l&&1/Z==-aZ?"-0":l}let oZ=function(Z,l,b){var i=null==Z?void 0:function(Z,l){for(var b=0,i=(l=RZ(l,Z)).length;null!=Z&&b<i;)Z=Z[HZ(l[b++])];return b&&b==i?Z:void 0}(Z,l);return void 0===i?b:i}(Z,"minify",null),FZ=null;FZ=m()?h:oZ;var nZ=FZ;function NZ(Z,l){var b=Object.keys(Z);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(Z);l&&(i=i.filter((function(l){return Object.getOwnPropertyDescriptor(Z,l).enumerable}))),b.push.apply(b,i)}return b}function UZ(Z){for(var l=1;l<arguments.length;l++){var i=null!=arguments[l]?arguments[l]:{};l%2?NZ(Object(i),!0).forEach((function(l){var m,d,c;m=Z,d=l,c=i[l],(d=b(d))in m?Object.defineProperty(m,d,{value:c,enumerable:!0,configurable:!0,writable:!0}):m[d]=c})):Object.getOwnPropertyDescriptors?Object.defineProperties(Z,Object.getOwnPropertyDescriptors(i)):NZ(Object(i)).forEach((function(l){Object.defineProperty(Z,l,Object.getOwnPropertyDescriptor(i,l))}))}return Z}return function(Z){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!i(Z))return"";let b=UZ(UZ({},{includeAutoGeneratedTags:!0,removeAttributeQuotes:!1,removeComments:!0,removeRedundantAttributes:!0,removeScriptTypeAttributes:!0,removeStyleLinkTypeAttributes:!0,sortClassName:!0,useShortDoctype:!0,collapseWhitespace:!0}),l),m="";try{m=nZ(Z,b)}catch(Z){m=Z.toString()}return m}}));
7
7
  //# sourceMappingURL=w-data-html-minify.umd.js.map