diff --git a/bundles/scatterjs-core.min.js b/bundles/scatterjs-core.min.js index 0355f59b..acfbcae8 100644 --- a/bundles/scatterjs-core.min.js +++ b/bundles/scatterjs-core.min.js @@ -4,14 +4,14 @@ * https://github.com/GetScatter/scatter-js/ * Released under the MIT license. * - */!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=270)}([function(t,e,n){t.exports=n(23)},function(t,e){function n(t,e,n,r,i,o,s){try{var a=t[o](s),u=a.value}catch(t){return void n(t)}a.done?e(u):Promise.resolve(u).then(r,i)}t.exports=function(t){return function(){var e=this,r=arguments;return new Promise((function(i,o){var s=t.apply(e,r);function a(t){n(s,i,o,a,u,"next",t)}function u(t){n(s,i,o,a,u,"throw",t)}a(void 0)}))}}},,function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e){function n(t,e){for(var n=0;n * @license MIT */ -var r=n(30),i=n(31),o=n(28);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function p(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return N(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return q(t).length;default:if(r)return N(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,n);case"utf8":case"utf-8":return x(this,e,n);case"ascii":return O(this,e,n);case"latin1":case"binary":return T(this,e,n);case"base64":return E(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function y(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function w(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:v(t,e,n,r,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):v(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,n,r,i){var o,s=1,a=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,n/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(o=n;oa&&(n=a-u),o=n;o>=0;o--){for(var f=!0,l=0;li&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function E(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function x(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+f<=n)switch(f){case 1:c<128&&(h=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,f=1):h>65535&&(h-=65536,r.push(h>>>10&1023|55296),h=56320|1023&h),r.push(h),i+=f}return function(t){var e=t.length;if(e<=P)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(e>>>=0),a=Math.min(o,s),c=this.slice(r,i),h=t.slice(e,n),f=0;fi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return m(this,t,e,n);case"utf8":case"utf-8":return b(this,t,e,n);case"ascii":return _(this,t,e,n);case"latin1":case"binary":return k(this,t,e,n);case"base64":return S(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function O(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function C(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function M(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function F(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function j(t,e,n,r,o){return o||F(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function W(t,e,n,r,o){return o||F(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||B(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):C(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):C(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):M(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):M(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);B(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);B(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):C(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):C(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):M(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):M(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return j(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return j(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return W(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return W(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function q(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(U,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function K(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(9))},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(e){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?t.exports=r=function(t){return n(t)}:t.exports=r=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":n(t)},r(e)}t.exports=r},,,function(t,e,n){"use strict";var r=n(29),i=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=f;var o=n(25);o.inherits=n(17);var s=n(41),a=n(35);o.inherits(f,s);for(var u=i(a.prototype),c=0;c0&&s.length>i&&!s.warned){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=s.length,a=u,console&&console.warn&&console.warn(a)}return t}function f(){for(var t=[],e=0;e0&&(s=e[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[t];if(void 0===u)return!1;if("function"==typeof u)o(u,this,e);else{var c=u.length,h=g(u,c);for(n=0;n=0;o--)if(n[o]===e||n[o].listener===e){s=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(t,e){for(;e+1=0;r--)this.removeListener(t,e[r]);return this},a.prototype.listeners=function(t){return d(this,t,!0)},a.prototype.rawListeners=function(t){return d(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},,function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}}},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],h=!1,f=-1;function l(){h&&u&&(h=!1,u.length?c=u.concat(c):f=-1,c.length&&d())}function d(){if(!h){var t=a(l);h=!0;for(var e=c.length;e;){for(u=c,c=[];++f1)for(var n=1;n=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var u=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),x(n),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:O(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){(function(t){function n(t){return Object.prototype.toString.call(t)}e.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===n(t)},e.isBoolean=function(t){return"boolean"==typeof t},e.isNull=function(t){return null===t},e.isNullOrUndefined=function(t){return null==t},e.isNumber=function(t){return"number"==typeof t},e.isString=function(t){return"string"==typeof t},e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=function(t){return void 0===t},e.isRegExp=function(t){return"[object RegExp]"===n(t)},e.isObject=function(t){return"object"==typeof t&&null!==t},e.isDate=function(t){return"[object Date]"===n(t)},e.isError=function(t){return"[object Error]"===n(t)||t instanceof Error},e.isFunction=function(t){return"function"==typeof t},e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=t.isBuffer}).call(this,n(10).Buffer)},function(t,e,n){var r=n(10),i=r.Buffer;function o(t,e){for(var n in t)e[n]=t[n]}function s(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=r:(o(r,e),e.Buffer=s),o(i,s),s.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},s.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},,function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";(function(e){void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,s,a=arguments.length;switch(a){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,n)}));case 3:return e.nextTick((function(){t.call(null,n,r)}));case 4:return e.nextTick((function(){t.call(null,n,r,i)}));default:for(o=new Array(a-1),s=0;s0?r-4:r,f=0;f>16&255,a[u++]=e>>8&255,a[u++]=255&e;2===s&&(e=i[t.charCodeAt(f)]<<2|i[t.charCodeAt(f+1)]>>4,a[u++]=255&e);1===s&&(e=i[t.charCodeAt(f)]<<10|i[t.charCodeAt(f+1)]<<4|i[t.charCodeAt(f+2)]>>2,a[u++]=e>>8&255,a[u++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=0,a=n-i;sa?a:s+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function h(t,e,n){for(var i,o,s=[],a=e;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,n,r,i){var o,s,a=8*i-r-1,u=(1<>1,h=-7,f=n?i-1:0,l=n?-1:1,d=t[e+f];for(f+=l,o=d&(1<<-h)-1,d>>=-h,h+=a;h>0;o=256*o+t[e+f],f+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=r;h>0;s=256*s+t[e+f],f+=l,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=c}return(d?-1:1)*s*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+f>=1?l/u:l*Math.pow(2,1-f))*u>=2&&(s++,u/=2),s+f>=h?(a=0,s=h):s+f>=1?(a=(e*u-1)*Math.pow(2,i),s+=f):(a=e*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;t[n+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;t[n+d]=255&s,d+=p,s/=256,c-=8);t[n+d-p]|=128*g}},function(t,e,n){t.exports=i;var r=n(15).EventEmitter;function i(){r.call(this)}n(17)(i,r),i.Readable=n(33),i.Writable=n(60),i.Duplex=n(61),i.Transform=n(62),i.PassThrough=n(63),i.Stream=i,i.prototype.pipe=function(t,e){var n=this;function i(e){t.writable&&!1===t.write(e)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",i),t.on("drain",o),t._isStdio||e&&!1===e.end||(n.on("end",a),n.on("close",u));var s=!1;function a(){s||(s=!0,t.end())}function u(){s||(s=!0,"function"==typeof t.destroy&&t.destroy())}function c(t){if(h(),0===r.listenerCount(this,"error"))throw t}function h(){n.removeListener("data",i),t.removeListener("drain",o),n.removeListener("end",a),n.removeListener("close",u),n.removeListener("error",c),t.removeListener("error",c),n.removeListener("end",h),n.removeListener("close",h),t.removeListener("close",h)}return n.on("error",c),t.on("error",c),n.on("end",h),n.on("close",h),t.on("close",h),t.emit("pipe",n),t}},function(t,e,n){(e=t.exports=n(41)).Stream=e,e.Readable=e,e.Writable=n(35),e.Duplex=n(14),e.Transform=n(44),e.PassThrough=n(59)},function(t,e,n){var r=n(10),i=r.Buffer;function o(t,e){for(var n in t)e[n]=t[n]}function s(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=r:(o(r,e),e.Buffer=s),o(i,s),s.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},s.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},function(t,e,n){"use strict";(function(e,r,i){var o=n(29);function s(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,n){var r=t.entry;t.entry=null;for(;r;){var i=r.callback;e.pendingcb--,i(n),r=r.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}(e,t)}}t.exports=v;var a,u=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?r:o.nextTick;v.WritableState=w;var c=n(25);c.inherits=n(17);var h={deprecate:n(57)},f=n(42),l=n(34).Buffer,d=i.Uint8Array||function(){};var p,g=n(43);function y(){}function w(t,e){a=a||n(14),t=t||{};var r=e instanceof a;this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var i=t.highWaterMark,c=t.writableHighWaterMark,h=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(c||0===c)?c:h,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===t.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var n=t._writableState,r=n.sync,i=n.writecb;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(n),e)!function(t,e,n,r,i){--e.pendingcb,n?(o.nextTick(i,r),o.nextTick(A,t,e),t._writableState.errorEmitted=!0,t.emit("error",r)):(i(r),t._writableState.errorEmitted=!0,t.emit("error",r),A(t,e))}(t,n,r,e,i);else{var s=k(n);s||n.corked||n.bufferProcessing||!n.bufferedRequest||_(t,n),r?u(b,t,n,s,i):b(t,n,s,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function v(t){if(a=a||n(14),!(p.call(v,this)||this instanceof a))return new v(t);this._writableState=new w(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),f.call(this)}function m(t,e,n,r,i,o,s){e.writelen=r,e.writecb=s,e.writing=!0,e.sync=!0,n?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function b(t,e,n,r){n||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,r(),A(t,e)}function _(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._writev&&n&&n.next){var r=e.bufferedRequestCount,i=new Array(r),o=e.corkedRequestsFree;o.entry=n;for(var a=0,u=!0;n;)i[a]=n,n.isBuf||(u=!1),n=n.next,a+=1;i.allBuffers=u,m(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new s(e),e.bufferedRequestCount=0}else{for(;n;){var c=n.chunk,h=n.encoding,f=n.callback;if(m(t,e,!1,e.objectMode?1:c.length,c,h,f),n=n.next,e.bufferedRequestCount--,e.writing)break}null===n&&(e.lastBufferedRequest=null)}e.bufferedRequest=n,e.bufferProcessing=!1}function k(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function S(t,e){t._final((function(n){e.pendingcb--,n&&t.emit("error",n),e.prefinished=!0,t.emit("prefinish"),A(t,e)}))}function A(t,e){var n=k(e);return n&&(!function(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,o.nextTick(S,t,e)):(e.prefinished=!0,t.emit("prefinish")))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),n}c.inherits(v,f),w.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(w.prototype,"buffer",{get:h.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(t){return!!p.call(this,t)||this===v&&(t&&t._writableState instanceof w)}})):p=function(t){return t instanceof this},v.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},v.prototype.write=function(t,e,n){var r,i=this._writableState,s=!1,a=!i.objectMode&&(r=t,l.isBuffer(r)||r instanceof d);return a&&!l.isBuffer(t)&&(t=function(t){return l.from(t)}(t)),"function"==typeof e&&(n=e,e=null),a?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof n&&(n=y),i.ended?function(t,e){var n=new Error("write after end");t.emit("error",n),o.nextTick(e,n)}(this,n):(a||function(t,e,n,r){var i=!0,s=!1;return null===n?s=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||e.objectMode||(s=new TypeError("Invalid non-string/buffer chunk")),s&&(t.emit("error",s),o.nextTick(r,s),i=!1),i}(this,i,t,n))&&(i.pendingcb++,s=function(t,e,n,r,i,o){if(!n){var s=function(t,e,n){t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=l.from(e,n));return e}(e,r,i);r!==s&&(n=!0,i="buffer",r=s)}var a=e.objectMode?1:r.length;e.length+=a;var u=e.length-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(v.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},v.prototype._writev=null,v.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!=t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(t,e,n){e.ending=!0,A(t,e),n&&(e.finished?o.nextTick(n):t.once("finish",n));e.ended=!0,t.writable=!1}(this,r,n)},Object.defineProperty(v.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),v.prototype.destroy=g.destroy,v.prototype._undestroy=g.undestroy,v.prototype._destroy=function(t,e){this.end(),e(t)}}).call(this,n(18),n(48).setImmediate,n(9))},function(t,e,n){"use strict";var r=n(58).Buffer,i=r.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(r.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=u,this.end=c,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=h,this.end=f,e=3;break;default:return this.write=l,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,n=function(t,e,n){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==n?n:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function u(t,e){if((t.length-e)%2==0){var n=t.toString("utf16le",e);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function c(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,n)}return e}function h(t,e){var n=(t.length-e)%3;return 0===n?t.toString("base64",e):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-n))}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function l(t){return t.toString(this.encoding)}function d(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,n;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return i>0&&(t.lastNeed=i-1),i;if(--r=0)return i>0&&(t.lastNeed=i-2),i;if(--r=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=n;var r=t.length-(n-this.lastNeed);return t.copy(this.lastChar,0,r),t.toString("utf8",e,r)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},,,function(t,e,n){var r=n(26).Buffer;function i(t,e){this._block=r.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}i.prototype.update=function(t,e){"string"==typeof t&&(e=e||"utf8",t=r.from(t,e));for(var n=this._block,i=this._blockSize,o=t.length,s=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,i=(n-r)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},,function(t,e,n){"use strict";(function(e,r){var i=n(29);t.exports=m;var o,s=n(28);m.ReadableState=v;n(15).EventEmitter;var a=function(t,e){return t.listeners(e).length},u=n(42),c=n(34).Buffer,h=e.Uint8Array||function(){};var f=n(25);f.inherits=n(17);var l=n(53),d=void 0;d=l&&l.debuglog?l.debuglog("stream"):function(){};var p,g=n(54),y=n(43);f.inherits(m,u);var w=["error","close","destroy","pause","resume"];function v(t,e){t=t||{};var r=e instanceof(o=o||n(14));this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var i=t.highWaterMark,s=t.readableHighWaterMark,a=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(s||0===s)?s:a,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=n(36).StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function m(t){if(o=o||n(14),!(this instanceof m))return new m(t);this._readableState=new v(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),u.call(this)}function b(t,e,n,r,i){var o,s=t._readableState;null===e?(s.reading=!1,function(t,e){if(e.ended)return;if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,A(t)}(t,s)):(i||(o=function(t,e){var n;r=e,c.isBuffer(r)||r instanceof h||"string"==typeof e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk"));var r;return n}(s,e)),o?t.emit("error",o):s.objectMode||e&&e.length>0?("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===c.prototype||(e=function(t){return c.from(t)}(e)),r?s.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):_(t,s,e,!0):s.ended?t.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!n?(e=s.decoder.write(e),s.objectMode||0!==e.length?_(t,s,e,!1):x(t,s)):_(t,s,e,!1))):r||(s.reading=!1));return function(t){return!t.ended&&(t.needReadable||t.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=k?t=k:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function A(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(d("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?i.nextTick(E,t):E(t))}function E(t){d("emit readable"),t.emit("readable"),R(t)}function x(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(P,t,e))}function P(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=function(t,e,n){var r;to.length?o.length:t;if(s===o.length?i+=o:i+=o.slice(0,t),0===(t-=s)){s===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(s));break}++r}return e.length-=r,i}(t,e):function(t,e){var n=c.allocUnsafe(t),r=e.head,i=1;r.data.copy(n),t-=r.data.length;for(;r=r.next;){var o=r.data,s=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,s),0===(t-=s)){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}(t,e);return r}(t,e.buffer,e.decoder),n);var n}function L(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,i.nextTick(B,e,t))}function B(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function C(t,e){for(var n=0,r=t.length;n=e.highWaterMark||e.ended))return d("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?L(this):A(this),null;if(0===(t=S(t,e))&&e.ended)return 0===e.length&&L(this),null;var r,i=e.needReadable;return d("need readable",i),(0===e.length||e.length-t0?I(t,e):null)?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&L(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(t,e){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=t;break;case 1:o.pipes=[o.pipes,t];break;default:o.pipes.push(t)}o.pipesCount+=1,d("pipe count=%d opts=%j",o.pipesCount,e);var u=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr?h:m;function c(e,r){d("onunpipe"),e===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d("cleanup"),t.removeListener("close",w),t.removeListener("finish",v),t.removeListener("drain",f),t.removeListener("error",y),t.removeListener("unpipe",c),n.removeListener("end",h),n.removeListener("end",m),n.removeListener("data",g),l=!0,!o.awaitDrain||t._writableState&&!t._writableState.needDrain||f())}function h(){d("onend"),t.end()}o.endEmitted?i.nextTick(u):n.once("end",u),t.on("unpipe",c);var f=function(t){return function(){var e=t._readableState;d("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&a(t,"data")&&(e.flowing=!0,R(t))}}(n);t.on("drain",f);var l=!1;var p=!1;function g(e){d("ondata"),p=!1,!1!==t.write(e)||p||((1===o.pipesCount&&o.pipes===t||o.pipesCount>1&&-1!==C(o.pipes,t))&&!l&&(d("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function y(e){d("onerror",e),m(),t.removeListener("error",y),0===a(t,"error")&&t.emit("error",e)}function w(){t.removeListener("finish",v),m()}function v(){d("onfinish"),t.removeListener("close",w),m()}function m(){d("unpipe"),n.unpipe(t)}return n.on("data",g),function(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?s(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}(t,"error",y),t.once("close",w),t.once("finish",v),t.emit("pipe",n),o.flowing||(d("pipe resume"),n.resume()),t},m.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(56),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(9))},,,,,function(t,e){},function(t,e,n){"use strict";var r=n(34).Buffer,i=n(55);t.exports=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.head=null,this.tail=null,this.length=0}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},t.prototype.concat=function(t){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var e,n,i,o=r.allocUnsafe(t>>>0),s=this.head,a=0;s;)e=s.data,n=o,i=a,e.copy(n,i),a+=s.data.length,s=s.next;return o},t}(),i&&i.inspect&&i.inspect.custom&&(t.exports.prototype[i.inspect.custom]=function(){var t=i.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i,o,s,a,u=1,c={},h=!1,f=t.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(t);l=l&&l.setTimeout?l:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},r=function(t){o.port2.postMessage(t)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(t){var e=f.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):r=function(t){setTimeout(p,0,t)}:(s="setImmediate$"+Math.random()+"$",a=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(s)&&p(+e.data.slice(s.length))},t.addEventListener?t.addEventListener("message",a,!1):t.attachEvent("onmessage",a),r=function(e){t.postMessage(s+e,"*")}),l.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n=this._blockSize;){for(var o=this._blockOffset;o0;++s)this._length[s]+=a,(a=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*a);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},function(t,e,n){var r=n(24),i=n(39),o=n(26).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function u(){this.init(),this._w=a,i.call(this,64,56)}function c(t,e,n){return n^t&(e^n)}function h(t,e,n){return t&e|n&(t|e)}function f(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function l(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function d(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}r(u,i),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,p=0|this._f,g=0|this._g,y=0|this._h,w=0;w<16;++w)n[w]=t.readInt32BE(4*w);for(;w<64;++w)n[w]=0|(((e=n[w-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+n[w-7]+d(n[w-15])+n[w-16];for(var v=0;v<64;++v){var m=y+l(u)+c(u,p,g)+s[v]+n[v]|0,b=f(r)+h(r,i,o)|0;y=g,g=p,p=u,u=a+m|0,a=o,o=i,i=r,r=m+b|0}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0,this._f=p+this._f|0,this._g=g+this._g|0,this._h=y+this._h|0},u.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=u},function(t,e,n){var r=n(24),i=n(39),o=n(26).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function u(){this.init(),this._w=a,i.call(this,128,112)}function c(t,e,n){return n^t&(e^n)}function h(t,e,n){return t&e|n&(t|e)}function f(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function l(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function d(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function g(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function y(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function w(t,e){return t>>>0>>0?1:0}r(u,i),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(t){for(var e=this._w,n=0|this._ah,r=0|this._bh,i=0|this._ch,o=0|this._dh,a=0|this._eh,u=0|this._fh,v=0|this._gh,m=0|this._hh,b=0|this._al,_=0|this._bl,k=0|this._cl,S=0|this._dl,A=0|this._el,E=0|this._fl,x=0|this._gl,P=0|this._hl,O=0;O<32;O+=2)e[O]=t.readInt32BE(4*O),e[O+1]=t.readInt32BE(4*O+4);for(;O<160;O+=2){var T=e[O-30],R=e[O-30+1],I=d(T,R),L=p(R,T),B=g(T=e[O-4],R=e[O-4+1]),C=y(R,T),M=e[O-14],F=e[O-14+1],j=e[O-32],W=e[O-32+1],U=L+F|0,D=I+M+w(U,L)|0;D=(D=D+B+w(U=U+C|0,C)|0)+j+w(U=U+W|0,W)|0,e[O]=D,e[O+1]=U}for(var N=0;N<160;N+=2){D=e[N],U=e[N+1];var q=h(n,r,i),K=h(b,_,k),H=f(n,b),Y=f(b,n),X=l(a,A),V=l(A,a),J=s[N],$=s[N+1],z=c(a,u,v),G=c(A,E,x),Q=P+V|0,Z=m+X+w(Q,P)|0;Z=(Z=(Z=Z+z+w(Q=Q+G|0,G)|0)+J+w(Q=Q+$|0,$)|0)+D+w(Q=Q+U|0,U)|0;var tt=Y+K|0,et=H+q+w(tt,Y)|0;m=v,P=x,v=u,x=E,u=a,E=A,a=o+Z+w(A=S+Q|0,S)|0,o=i,S=k,i=r,k=_,r=n,_=b,n=Z+et+w(b=Q+tt|0,Q)|0}this._al=this._al+b|0,this._bl=this._bl+_|0,this._cl=this._cl+k|0,this._dl=this._dl+S|0,this._el=this._el+A|0,this._fl=this._fl+E|0,this._gl=this._gl+x|0,this._hl=this._hl+P|0,this._ah=this._ah+n+w(this._al,b)|0,this._bh=this._bh+r+w(this._bl,_)|0,this._ch=this._ch+i+w(this._cl,k)|0,this._dh=this._dh+o+w(this._dl,S)|0,this._eh=this._eh+a+w(this._el,A)|0,this._fh=this._fh+u+w(this._fl,E)|0,this._gh=this._gh+v+w(this._gl,x)|0,this._hh=this._hh+m+w(this._hl,P)|0},u.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,n,r){t.writeInt32BE(e,r),t.writeInt32BE(n,r+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=u},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var r=n(121),i=n(122),o=n(123);t.exports=function(t){return r(t)||i(t)||o()}},function(t,e,n){var r=n(124),i=n(125),o=n(126);t.exports=function(t,e){return r(t)||i(t,e)||o()}},function(t,e,n){var r=n(127),i=n(128);t.exports=function(t){if(r.crypto&&r.crypto.getRandomValues)return r.crypto.getRandomValues(t);if("object"==typeof r.msCrypto&&"function"==typeof r.msCrypto.getRandomValues)return r.msCrypto.getRandomValues(t);if(i.randomBytes){if(!(t instanceof Uint8Array))throw new TypeError("expected Uint8Array");if(t.length>65536){var e=new Error;throw e.code=22,e.message="Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length ("+t.length+") exceeds the number of bytes of entropy available via this API (65536).",e.name="QuotaExceededError",e}var n=i.randomBytes(t.length);return t.set(n),t}throw new Error("No secure random number generator available.")}},function(t,e,n){"use strict";var r=n(24),i=n(129),o=n(130),s=n(131),a=n(136);function u(t){a.call(this,"digest"),this._hash=t}r(u,a),u.prototype._update=function(t){this._hash.update(t)},u.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new i:"rmd160"===t||"ripemd160"===t?new o:new u(s(t))}},function(t,e,n){(function(e){var n=null;"undefined"!=typeof WebSocket?n=WebSocket:"undefined"!=typeof MozWebSocket?n=MozWebSocket:void 0!==e?n=e.WebSocket||e.MozWebSocket:"undefined"!=typeof window?n=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(n=self.WebSocket||self.MozWebSocket),t.exports=n}).call(this,n(9))},,,,,function(t,e){t.exports=function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e>>32-e}function c(t,e,n,r,i,o,s){return u(t+(e&n|~e&r)+i+o|0,s)+e|0}function h(t,e,n,r,i,o,s){return u(t+(e&r|n&~r)+i+o|0,s)+e|0}function f(t,e,n,r,i,o,s){return u(t+(e^n^r)+i+o|0,s)+e|0}function l(t,e,n,r,i,o,s){return u(t+(n^(e|~r))+i+o|0,s)+e|0}r(a,i),a.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var n=this._a,r=this._b,i=this._c,o=this._d;n=c(n,r,i,o,t[0],3614090360,7),o=c(o,n,r,i,t[1],3905402710,12),i=c(i,o,n,r,t[2],606105819,17),r=c(r,i,o,n,t[3],3250441966,22),n=c(n,r,i,o,t[4],4118548399,7),o=c(o,n,r,i,t[5],1200080426,12),i=c(i,o,n,r,t[6],2821735955,17),r=c(r,i,o,n,t[7],4249261313,22),n=c(n,r,i,o,t[8],1770035416,7),o=c(o,n,r,i,t[9],2336552879,12),i=c(i,o,n,r,t[10],4294925233,17),r=c(r,i,o,n,t[11],2304563134,22),n=c(n,r,i,o,t[12],1804603682,7),o=c(o,n,r,i,t[13],4254626195,12),i=c(i,o,n,r,t[14],2792965006,17),n=h(n,r=c(r,i,o,n,t[15],1236535329,22),i,o,t[1],4129170786,5),o=h(o,n,r,i,t[6],3225465664,9),i=h(i,o,n,r,t[11],643717713,14),r=h(r,i,o,n,t[0],3921069994,20),n=h(n,r,i,o,t[5],3593408605,5),o=h(o,n,r,i,t[10],38016083,9),i=h(i,o,n,r,t[15],3634488961,14),r=h(r,i,o,n,t[4],3889429448,20),n=h(n,r,i,o,t[9],568446438,5),o=h(o,n,r,i,t[14],3275163606,9),i=h(i,o,n,r,t[3],4107603335,14),r=h(r,i,o,n,t[8],1163531501,20),n=h(n,r,i,o,t[13],2850285829,5),o=h(o,n,r,i,t[2],4243563512,9),i=h(i,o,n,r,t[7],1735328473,14),n=f(n,r=h(r,i,o,n,t[12],2368359562,20),i,o,t[5],4294588738,4),o=f(o,n,r,i,t[8],2272392833,11),i=f(i,o,n,r,t[11],1839030562,16),r=f(r,i,o,n,t[14],4259657740,23),n=f(n,r,i,o,t[1],2763975236,4),o=f(o,n,r,i,t[4],1272893353,11),i=f(i,o,n,r,t[7],4139469664,16),r=f(r,i,o,n,t[10],3200236656,23),n=f(n,r,i,o,t[13],681279174,4),o=f(o,n,r,i,t[0],3936430074,11),i=f(i,o,n,r,t[3],3572445317,16),r=f(r,i,o,n,t[6],76029189,23),n=f(n,r,i,o,t[9],3654602809,4),o=f(o,n,r,i,t[12],3873151461,11),i=f(i,o,n,r,t[15],530742520,16),n=l(n,r=f(r,i,o,n,t[2],3299628645,23),i,o,t[0],4096336452,6),o=l(o,n,r,i,t[7],1126891415,10),i=l(i,o,n,r,t[14],2878612391,15),r=l(r,i,o,n,t[5],4237533241,21),n=l(n,r,i,o,t[12],1700485571,6),o=l(o,n,r,i,t[3],2399980690,10),i=l(i,o,n,r,t[10],4293915773,15),r=l(r,i,o,n,t[1],2240044497,21),n=l(n,r,i,o,t[8],1873313359,6),o=l(o,n,r,i,t[15],4264355552,10),i=l(i,o,n,r,t[6],2734768916,15),r=l(r,i,o,n,t[13],1309151649,21),n=l(n,r,i,o,t[4],4149444226,6),o=l(o,n,r,i,t[11],3174756917,10),i=l(i,o,n,r,t[2],718787259,15),r=l(r,i,o,n,t[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+r|0,this._c=this._c+i|0,this._d=this._d+o|0},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=o.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=a},function(t,e,n){"use strict";var r=n(10).Buffer,i=n(24),o=n(77),s=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],c=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],h=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],f=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function d(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(t,e){return t<>>32-e}function g(t,e,n,r,i,o,s,a){return p(t+(e^n^r)+o+s|0,a)+i|0}function y(t,e,n,r,i,o,s,a){return p(t+(e&n|~e&r)+o+s|0,a)+i|0}function w(t,e,n,r,i,o,s,a){return p(t+((e|~n)^r)+o+s|0,a)+i|0}function v(t,e,n,r,i,o,s,a){return p(t+(e&r|n&~r)+o+s|0,a)+i|0}function m(t,e,n,r,i,o,s,a){return p(t+(e^(n|~r))+o+s|0,a)+i|0}i(d,o),d.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var n=0|this._a,r=0|this._b,i=0|this._c,o=0|this._d,d=0|this._e,b=0|this._a,_=0|this._b,k=0|this._c,S=0|this._d,A=0|this._e,E=0;E<80;E+=1){var x,P;E<16?(x=g(n,r,i,o,d,t[a[E]],f[0],c[E]),P=m(b,_,k,S,A,t[u[E]],l[0],h[E])):E<32?(x=y(n,r,i,o,d,t[a[E]],f[1],c[E]),P=v(b,_,k,S,A,t[u[E]],l[1],h[E])):E<48?(x=w(n,r,i,o,d,t[a[E]],f[2],c[E]),P=w(b,_,k,S,A,t[u[E]],l[2],h[E])):E<64?(x=v(n,r,i,o,d,t[a[E]],f[3],c[E]),P=y(b,_,k,S,A,t[u[E]],l[3],h[E])):(x=m(n,r,i,o,d,t[a[E]],f[4],c[E]),P=g(b,_,k,S,A,t[u[E]],l[4],h[E])),n=d,d=o,o=p(i,10),i=r,r=x,b=A,A=S,S=p(k,10),k=_,_=P}var O=this._b+i+S|0;this._b=this._c+o+A|0,this._c=this._d+d+b|0,this._d=this._e+n+_|0,this._e=this._a+r+k|0,this._a=O},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=r.alloc?r.alloc(20):new r(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=d},function(t,e,n){(e=t.exports=function(t){t=t.toLowerCase();var n=e[t];if(!n)throw new Error(t+" is not supported (we accept pull requests)");return new n}).sha=n(132),e.sha1=n(133),e.sha224=n(134),e.sha256=n(78),e.sha384=n(135),e.sha512=n(79)},function(t,e,n){var r=n(24),i=n(39),o=n(26).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function u(){this.init(),this._w=a,i.call(this,64,56)}function c(t){return t<<30|t>>>2}function h(t,e,n,r){return 0===t?e&n|~e&r:2===t?e&n|e&r|n&r:e^n^r}r(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,f=0;f<16;++f)n[f]=t.readInt32BE(4*f);for(;f<80;++f)n[f]=n[f-3]^n[f-8]^n[f-14]^n[f-16];for(var l=0;l<80;++l){var d=~~(l/20),p=0|((e=r)<<5|e>>>27)+h(d,i,o,a)+u+n[l]+s[d];u=a,a=o,o=c(i),i=r,r=p}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=u},function(t,e,n){var r=n(24),i=n(39),o=n(26).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function u(){this.init(),this._w=a,i.call(this,64,56)}function c(t){return t<<5|t>>>27}function h(t){return t<<30|t>>>2}function f(t,e,n,r){return 0===t?e&n|~e&r:2===t?e&n|e&r|n&r:e^n^r}r(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,l=0;l<16;++l)n[l]=t.readInt32BE(4*l);for(;l<80;++l)n[l]=(e=n[l-3]^n[l-8]^n[l-14]^n[l-16])<<1|e>>>31;for(var d=0;d<80;++d){var p=~~(d/20),g=c(r)+f(p,i,o,a)+u+n[d]+s[p]|0;u=a,a=o,o=h(i),i=r,r=g}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=u},function(t,e,n){var r=n(24),i=n(78),o=n(39),s=n(26).Buffer,a=new Array(64);function u(){this.init(),this._w=a,o.call(this,64,56)}r(u,i),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var t=s.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=u},function(t,e,n){var r=n(24),i=n(79),o=n(39),s=n(26).Buffer,a=new Array(160);function u(){this.init(),this._w=a,o.call(this,128,112)}r(u,i),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var t=s.allocUnsafe(48);function e(e,n,r){t.writeInt32BE(e,r),t.writeInt32BE(n,r+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=u},function(t,e,n){var r=n(26).Buffer,i=n(32).Transform,o=n(36).StringDecoder;function s(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(24)(s,i),s.prototype.update=function(t,e,n){"string"==typeof t&&(t=r.from(t,e));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},s.prototype.setAutoPadding=function(){},s.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},s.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},s.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},s.prototype._transform=function(t,e,n){var r;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){r=t}finally{n(r)}},s.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},s.prototype._finalOrDigest=function(t){var e=this.__final()||r.alloc(0);return t&&(e=this._toString(e,t,!0)),e},s.prototype._toString=function(t,e,n){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var r=this._decoder.write(t);return n&&(r+=this._decoder.end()),r},t.exports=s},function(t,e,n){ +var r=n(30),i=n(31),o=n(25);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function p(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return N(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return q(t).length;default:if(r)return N(t).length;e=(""+e).toLowerCase(),r=!0}}function g(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,n);case"utf8":case"utf-8":return x(this,e,n);case"ascii":return O(this,e,n);case"latin1":case"binary":return P(this,e,n);case"base64":return A(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function y(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function b(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:w(t,e,n,r,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):w(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function w(t,e,n,r,i){var o,s=1,a=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,n/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(o=n;oa&&(n=a-u),o=n;o>=0;o--){for(var f=!0,l=0;li&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function A(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function x(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+f<=n)switch(f){case 1:c<128&&(h=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,f=1):h>65535&&(h-=65536,r.push(h>>>10&1023|55296),h=56320|1023&h),r.push(h),i+=f}return function(t){var e=t.length;if(e<=R)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(e>>>=0),a=Math.min(o,s),c=this.slice(r,i),h=t.slice(e,n),f=0;fi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return v(this,t,e,n);case"utf8":case"utf-8":return _(this,t,e,n);case"ascii":return m(this,t,e,n);case"latin1":case"binary":return S(this,t,e,n);case"base64":return k(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var R=4096;function O(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function C(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function I(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function B(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function j(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function D(t,e,n,r,o){return o||j(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function F(t,e,n,r,o){return o||j(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||C(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):I(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):I(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):B(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):B(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);C(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);C(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):I(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):I(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):B(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||C(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):B(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return D(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return D(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return F(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return F(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function q(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(W,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function H(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(7))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(13),i=n(19);t.exports=function(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?i(t):e}},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},n(e)}t.exports=n},function(t,e,n){var r=n(20);t.exports=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&r(t,e)}},,function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],h=!1,f=-1;function l(){h&&u&&(h=!1,u.length?c=u.concat(c):f=-1,c.length&&d())}function d(){if(!h){var t=a(l);h=!0;for(var e=c.length;e;){for(u=c,c=[];++f1)for(var n=1;n0&&s.length>i&&!s.warned){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=s.length,a=u,console&&console.warn&&console.warn(a)}return t}function f(){for(var t=[],e=0;e0&&(s=e[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[t];if(void 0===u)return!1;if("function"==typeof u)o(u,this,e);else{var c=u.length,h=g(u,c);for(n=0;n=0;o--)if(n[o]===e||n[o].listener===e){s=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(t,e){for(;e+1=0;r--)this.removeListener(t,e[r]);return this},a.prototype.listeners=function(t){return d(this,t,!0)},a.prototype.rawListeners=function(t){return d(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},,function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}}},function(t,e,n){"use strict";var r=n(32),i=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=f;var o=n(27);o.inherits=n(22);var s=n(46),a=n(36);o.inherits(f,s);for(var u=i(a.prototype),c=0;c=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var u=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),x(n),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:O(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}}},,,function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";var r=n(61).Buffer,i=r.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(r.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=u,this.end=c,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=h,this.end=f,e=3;break;default:return this.write=l,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,n=function(t,e,n){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==n?n:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function u(t,e){if((t.length-e)%2==0){var n=t.toString("utf16le",e);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function c(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,n)}return e}function h(t,e){var n=(t.length-e)%3;return 0===n?t.toString("base64",e):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-n))}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function l(t){return t.toString(this.encoding)}function d(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,n;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0)return i>0&&(t.lastNeed=i-1),i;if(--r=0)return i>0&&(t.lastNeed=i-2),i;if(--r=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=n;var r=t.length-(n-this.lastNeed);return t.copy(this.lastChar,0,r),t.toString("utf8",e,r)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},function(t,e,n){(function(t){function n(t){return Object.prototype.toString.call(t)}e.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===n(t)},e.isBoolean=function(t){return"boolean"==typeof t},e.isNull=function(t){return null===t},e.isNullOrUndefined=function(t){return null==t},e.isNumber=function(t){return"number"==typeof t},e.isString=function(t){return"string"==typeof t},e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=function(t){return void 0===t},e.isRegExp=function(t){return"[object RegExp]"===n(t)},e.isObject=function(t){return"object"==typeof t&&null!==t},e.isDate=function(t){return"[object Date]"===n(t)},e.isError=function(t){return"[object Error]"===n(t)||t instanceof Error},e.isFunction=function(t){return"function"==typeof t},e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=t.isBuffer}).call(this,n(6).Buffer)},function(t,e,n){var r=n(6),i=r.Buffer;function o(t,e){for(var n in t)e[n]=t[n]}function s(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=r:(o(r,e),e.Buffer=s),s.prototype=Object.create(i.prototype),o(i,s),s.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},s.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},,function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){for(var e,n=c(t),r=n[0],s=n[1],a=new o(function(t,e,n){return 3*(e+n)/4-n}(0,r,s)),u=0,h=s>0?r-4:r,f=0;f>16&255,a[u++]=e>>8&255,a[u++]=255&e;2===s&&(e=i[t.charCodeAt(f)]<<2|i[t.charCodeAt(f+1)]>>4,a[u++]=255&e);1===s&&(e=i[t.charCodeAt(f)]<<10|i[t.charCodeAt(f+1)]<<4|i[t.charCodeAt(f+2)]>>2,a[u++]=e>>8&255,a[u++]=255&e);return a},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=0,a=n-i;sa?a:s+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function h(t,e,n){for(var i,o,s=[],a=e;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,n,r,i){var o,s,a=8*i-r-1,u=(1<>1,h=-7,f=n?i-1:0,l=n?-1:1,d=t[e+f];for(f+=l,o=d&(1<<-h)-1,d>>=-h,h+=a;h>0;o=256*o+t[e+f],f+=l,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=r;h>0;s=256*s+t[e+f],f+=l,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=c}return(d?-1:1)*s*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+f>=1?l/u:l*Math.pow(2,1-f))*u>=2&&(s++,u/=2),s+f>=h?(a=0,s=h):s+f>=1?(a=(e*u-1)*Math.pow(2,i),s+=f):(a=e*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;t[n+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;t[n+d]=255&s,d+=p,s/=256,c-=8);t[n+d-p]|=128*g}},function(t,e,n){"use strict";(function(e){void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,n,r,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,s,a=arguments.length;switch(a){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,n)}));case 3:return e.nextTick((function(){t.call(null,n,r)}));case 4:return e.nextTick((function(){t.call(null,n,r,i)}));default:for(o=new Array(a-1),s=0;s-1?r:o.nextTick;w.WritableState=b;var c=n(27);c.inherits=n(22);var h={deprecate:n(67)},f=n(47),l=n(35).Buffer,d=i.Uint8Array||function(){};var p,g=n(48);function y(){}function b(t,e){a=a||n(18),t=t||{};var r=e instanceof a;this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var i=t.highWaterMark,c=t.writableHighWaterMark,h=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(c||0===c)?c:h,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===t.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var n=t._writableState,r=n.sync,i=n.writecb;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(n),e)!function(t,e,n,r,i){--e.pendingcb,n?(o.nextTick(i,r),o.nextTick(E,t,e),t._writableState.errorEmitted=!0,t.emit("error",r)):(i(r),t._writableState.errorEmitted=!0,t.emit("error",r),E(t,e))}(t,n,r,e,i);else{var s=S(n);s||n.corked||n.bufferProcessing||!n.bufferedRequest||m(t,n),r?u(_,t,n,s,i):_(t,n,s,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function w(t){if(a=a||n(18),!(p.call(w,this)||this instanceof a))return new w(t);this._writableState=new b(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),f.call(this)}function v(t,e,n,r,i,o,s){e.writelen=r,e.writecb=s,e.writing=!0,e.sync=!0,n?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function _(t,e,n,r){n||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,r(),E(t,e)}function m(t,e){e.bufferProcessing=!0;var n=e.bufferedRequest;if(t._writev&&n&&n.next){var r=e.bufferedRequestCount,i=new Array(r),o=e.corkedRequestsFree;o.entry=n;for(var a=0,u=!0;n;)i[a]=n,n.isBuf||(u=!1),n=n.next,a+=1;i.allBuffers=u,v(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new s(e),e.bufferedRequestCount=0}else{for(;n;){var c=n.chunk,h=n.encoding,f=n.callback;if(v(t,e,!1,e.objectMode?1:c.length,c,h,f),n=n.next,e.bufferedRequestCount--,e.writing)break}null===n&&(e.lastBufferedRequest=null)}e.bufferedRequest=n,e.bufferProcessing=!1}function S(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function k(t,e){t._final((function(n){e.pendingcb--,n&&t.emit("error",n),e.prefinished=!0,t.emit("prefinish"),E(t,e)}))}function E(t,e){var n=S(e);return n&&(!function(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,o.nextTick(k,t,e)):(e.prefinished=!0,t.emit("prefinish")))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),n}c.inherits(w,f),b.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(b.prototype,"buffer",{get:h.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(w,Symbol.hasInstance,{value:function(t){return!!p.call(this,t)||this===w&&(t&&t._writableState instanceof b)}})):p=function(t){return t instanceof this},w.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},w.prototype.write=function(t,e,n){var r,i=this._writableState,s=!1,a=!i.objectMode&&(r=t,l.isBuffer(r)||r instanceof d);return a&&!l.isBuffer(t)&&(t=function(t){return l.from(t)}(t)),"function"==typeof e&&(n=e,e=null),a?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof n&&(n=y),i.ended?function(t,e){var n=new Error("write after end");t.emit("error",n),o.nextTick(e,n)}(this,n):(a||function(t,e,n,r){var i=!0,s=!1;return null===n?s=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||e.objectMode||(s=new TypeError("Invalid non-string/buffer chunk")),s&&(t.emit("error",s),o.nextTick(r,s),i=!1),i}(this,i,t,n))&&(i.pendingcb++,s=function(t,e,n,r,i,o){if(!n){var s=function(t,e,n){t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=l.from(e,n));return e}(e,r,i);r!==s&&(n=!0,i="buffer",r=s)}var a=e.objectMode?1:r.length;e.length+=a;var u=e.length-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(w.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),w.prototype._write=function(t,e,n){n(new Error("_write() is not implemented"))},w.prototype._writev=null,w.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!=t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(t,e,n){e.ending=!0,E(t,e),n&&(e.finished?o.nextTick(n):t.once("finish",n));e.ended=!0,t.writable=!1}(this,r,n)},Object.defineProperty(w.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),w.prototype.destroy=g.destroy,w.prototype._undestroy=g.undestroy,w.prototype._destroy=function(t,e){this.end(),e(t)}}).call(this,n(12),n(54).setImmediate,n(7))},,,,function(t,e,n){"use strict";var r={};function i(t,e,n){n||(n=Error);var i=function(t){var n,r;function i(n,r,i){return t.call(this,function(t,n,r){return"string"==typeof e?e:e(t,n,r)}(n,r,i))||this}return r=t,(n=i).prototype=Object.create(r.prototype),n.prototype.constructor=n,n.__proto__=r,i}(n);i.prototype.name=n.name,i.prototype.code=t,r[t]=i}function o(t,e){if(Array.isArray(t)){var n=t.length;return t=t.map((function(t){return String(t)})),n>2?"one of ".concat(e," ").concat(t.slice(0,n-1).join(", "),", or ")+t[n-1]:2===n?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}i("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),i("ERR_INVALID_ARG_TYPE",(function(t,e,n){var r,i,s,a;if("string"==typeof e&&(i="not ",e.substr(!s||s<0?0:+s,i.length)===i)?(r="must not be",e=e.replace(/^not /,"")):r="must be",function(t,e,n){return(void 0===n||n>t.length)&&(n=t.length),t.substring(n-e.length,n)===e}(t," argument"))a="The ".concat(t," ").concat(r," ").concat(o(e,"type"));else{var u=function(t,e,n){return"number"!=typeof n&&(n=0),!(n+e.length>t.length)&&-1!==t.indexOf(e,n)}(t,".")?"property":"argument";a='The "'.concat(t,'" ').concat(u," ").concat(r," ").concat(o(e,"type"))}return a+=". Received type ".concat(typeof n)}),TypeError),i("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),i("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),i("ERR_STREAM_PREMATURE_CLOSE","Premature close"),i("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),i("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),i("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),i("ERR_STREAM_WRITE_AFTER_END","write after end"),i("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),i("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),i("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=r},function(t,e,n){"use strict";(function(e){var r=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=c;var i=n(88),o=n(92);n(17)(c,i);for(var s=r(o.prototype),a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,i=(n-r)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},,,,function(t,e,n){"use strict";(function(e,r){var i=n(32);t.exports=v;var o,s=n(25);v.ReadableState=w;n(15).EventEmitter;var a=function(t,e){return t.listeners(e).length},u=n(47),c=n(35).Buffer,h=e.Uint8Array||function(){};var f=n(27);f.inherits=n(22);var l=n(63),d=void 0;d=l&&l.debuglog?l.debuglog("stream"):function(){};var p,g=n(64),y=n(48);f.inherits(v,u);var b=["error","close","destroy","pause","resume"];function w(t,e){t=t||{};var r=e instanceof(o=o||n(18));this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var i=t.highWaterMark,s=t.readableHighWaterMark,a=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(s||0===s)?s:a,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=n(26).StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function v(t){if(o=o||n(18),!(this instanceof v))return new v(t);this._readableState=new w(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),u.call(this)}function _(t,e,n,r,i){var o,s=t._readableState;null===e?(s.reading=!1,function(t,e){if(e.ended)return;if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,E(t)}(t,s)):(i||(o=function(t,e){var n;r=e,c.isBuffer(r)||r instanceof h||"string"==typeof e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk"));var r;return n}(s,e)),o?t.emit("error",o):s.objectMode||e&&e.length>0?("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===c.prototype||(e=function(t){return c.from(t)}(e)),r?s.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):m(t,s,e,!0):s.ended?t.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!n?(e=s.decoder.write(e),s.objectMode||0!==e.length?m(t,s,e,!1):x(t,s)):m(t,s,e,!1))):r||(s.reading=!1));return function(t){return!t.ended&&(t.needReadable||t.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=S?t=S:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function E(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(d("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?i.nextTick(A,t):A(t))}function A(t){d("emit readable"),t.emit("readable"),T(t)}function x(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(R,t,e))}function R(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=function(t,e,n){var r;to.length?o.length:t;if(s===o.length?i+=o:i+=o.slice(0,t),0===(t-=s)){s===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(s));break}++r}return e.length-=r,i}(t,e):function(t,e){var n=c.allocUnsafe(t),r=e.head,i=1;r.data.copy(n),t-=r.data.length;for(;r=r.next;){var o=r.data,s=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,s),0===(t-=s)){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}(t,e);return r}(t,e.buffer,e.decoder),n);var n}function L(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,i.nextTick(C,e,t))}function C(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function I(t,e){for(var n=0,r=t.length;n=e.highWaterMark||e.ended))return d("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?L(this):E(this),null;if(0===(t=k(t,e))&&e.ended)return 0===e.length&&L(this),null;var r,i=e.needReadable;return d("need readable",i),(0===e.length||e.length-t0?M(t,e):null)?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&L(this)),null!==r&&this.emit("data",r),r},v.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},v.prototype.pipe=function(t,e){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=t;break;case 1:o.pipes=[o.pipes,t];break;default:o.pipes.push(t)}o.pipesCount+=1,d("pipe count=%d opts=%j",o.pipesCount,e);var u=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr?h:v;function c(e,r){d("onunpipe"),e===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d("cleanup"),t.removeListener("close",b),t.removeListener("finish",w),t.removeListener("drain",f),t.removeListener("error",y),t.removeListener("unpipe",c),n.removeListener("end",h),n.removeListener("end",v),n.removeListener("data",g),l=!0,!o.awaitDrain||t._writableState&&!t._writableState.needDrain||f())}function h(){d("onend"),t.end()}o.endEmitted?i.nextTick(u):n.once("end",u),t.on("unpipe",c);var f=function(t){return function(){var e=t._readableState;d("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&a(t,"data")&&(e.flowing=!0,T(t))}}(n);t.on("drain",f);var l=!1;var p=!1;function g(e){d("ondata"),p=!1,!1!==t.write(e)||p||((1===o.pipesCount&&o.pipes===t||o.pipesCount>1&&-1!==I(o.pipes,t))&&!l&&(d("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function y(e){d("onerror",e),v(),t.removeListener("error",y),0===a(t,"error")&&t.emit("error",e)}function b(){t.removeListener("finish",w),v()}function w(){d("onfinish"),t.removeListener("close",b),v()}function v(){d("unpipe"),n.unpipe(t)}return n.on("data",g),function(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?s(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}(t,"error",y),t.once("close",b),t.once("finish",w),t.emit("pipe",n),o.flowing||(d("pipe resume"),n.resume()),t},v.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(66),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(7))},,,,,,,function(t,e,n){var r=n(6),i=r.Buffer;function o(t,e){for(var n in t)e[n]=t[n]}function s(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=r:(o(r,e),e.Buffer=s),o(i,s),s.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},s.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r.SlowBuffer(t)}},function(t,e,n){"use strict";var r=n(40).codes.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,n,o){if("function"==typeof n)return t(e,null,n);n||(n={}),o=function(t){var e=!1;return function(){if(!e){e=!0;for(var n=arguments.length,r=new Array(n),i=0;i0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},t.prototype.concat=function(t){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var e,n,i,o=r.allocUnsafe(t>>>0),s=this.head,a=0;s;)e=s.data,n=o,i=a,e.copy(n,i),a+=s.data.length,s=s.next;return o},t}(),i&&i.inspect&&i.inspect.custom&&(t.exports.prototype[i.inspect.custom]=function(){var t=i.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i,o,s,a,u=1,c={},h=!1,f=t.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(t);l=l&&l.setTimeout?l:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},r=function(t){o.port2.postMessage(t)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(t){var e=f.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):r=function(t){setTimeout(p,0,t)}:(s="setImmediate$"+Math.random()+"$",a=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(s)&&p(+e.data.slice(s.length))},t.addEventListener?t.addEventListener("message",a,!1):t.attachEvent("onmessage",a),r=function(e){t.postMessage(s+e,"*")}),l.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n=this._blockSize;){for(var o=this._blockOffset;o0;++s)this._length[s]+=a,(a=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*a);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},function(t,e,n){"use strict";(function(e,r){var i;t.exports=A,A.ReadableState=E;n(15).EventEmitter;var o=function(t,e){return t.listeners(e).length},s=n(89),a=n(6).Buffer,u=e.Uint8Array||function(){};var c,h=n(145);c=h&&h.debuglog?h.debuglog("stream"):function(){};var f,l,d,p=n(146),g=n(90),y=n(91).getHighWaterMark,b=n(40).codes,w=b.ERR_INVALID_ARG_TYPE,v=b.ERR_STREAM_PUSH_AFTER_EOF,_=b.ERR_METHOD_NOT_IMPLEMENTED,m=b.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n(17)(A,s);var S=g.errorOrDestroy,k=["error","close","destroy","pause","resume"];function E(t,e,r){i=i||n(41),t=t||{},"boolean"!=typeof r&&(r=e instanceof i),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=y(this,t,"readableHighWaterMark",r),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(f||(f=n(26).StringDecoder),this.decoder=new f(t.encoding),this.encoding=t.encoding)}function A(t){if(i=i||n(41),!(this instanceof A))return new A(t);var e=this instanceof i;this._readableState=new E(t,this,e),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),s.call(this)}function x(t,e,n,r,i){c("readableAddChunk",e);var o,s=t._readableState;if(null===e)s.reading=!1,function(t,e){if(c("onEofChunk"),e.ended)return;if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,e.sync?T(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,M(t)))}(t,s);else if(i||(o=function(t,e){var n;r=e,a.isBuffer(r)||r instanceof u||"string"==typeof e||void 0===e||t.objectMode||(n=new w("chunk",["string","Buffer","Uint8Array"],e));var r;return n}(s,e)),o)S(t,o);else if(s.objectMode||e&&e.length>0)if("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===a.prototype||(e=function(t){return a.from(t)}(e)),r)s.endEmitted?S(t,new m):R(t,s,e,!0);else if(s.ended)S(t,new v);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!n?(e=s.decoder.write(e),s.objectMode||0!==e.length?R(t,s,e,!1):L(t,s)):R(t,s,e,!1)}else r||(s.reading=!1,L(t,s));return!s.ended&&(s.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=O?t=O:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function T(t){var e=t._readableState;c("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(c("emitReadable",e.flowing),e.emittedReadable=!0,r.nextTick(M,t))}function M(t){var e=t._readableState;c("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,D(t)}function L(t,e){e.readingMore||(e.readingMore=!0,r.nextTick(C,t,e))}function C(t,e){for(;!e.reading&&!e.ended&&(e.length0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function B(t){c("readable nexttick read 0"),t.read(0)}function j(t,e){c("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),D(t),e.flowing&&!e.reading&&t.read(0)}function D(t){var e=t._readableState;for(c("flow",e.flowing);e.flowing&&null!==t.read(););}function F(t,e){return 0===e.length?null:(e.objectMode?n=e.buffer.shift():!t||t>=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):n=e.buffer.consume(t,e.decoder),n);var n}function W(t){var e=t._readableState;c("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,r.nextTick(U,e,t))}function U(t,e){if(c("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var n=e._writableState;(!n||n.autoDestroy&&n.finished)&&e.destroy()}}function N(t,e){for(var n=0,r=t.length;n=e.highWaterMark:e.length>0)||e.ended))return c("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?W(this):T(this),null;if(0===(t=P(t,e))&&e.ended)return 0===e.length&&W(this),null;var r,i=e.needReadable;return c("need readable",i),(0===e.length||e.length-t0?F(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&W(this)),null!==r&&this.emit("data",r),r},A.prototype._read=function(t){S(this,new _("_read()"))},A.prototype.pipe=function(t,e){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=t;break;case 1:i.pipes=[i.pipes,t];break;default:i.pipes.push(t)}i.pipesCount+=1,c("pipe count=%d opts=%j",i.pipesCount,e);var s=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr?u:y;function a(e,r){c("onunpipe"),e===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,c("cleanup"),t.removeListener("close",p),t.removeListener("finish",g),t.removeListener("drain",h),t.removeListener("error",d),t.removeListener("unpipe",a),n.removeListener("end",u),n.removeListener("end",y),n.removeListener("data",l),f=!0,!i.awaitDrain||t._writableState&&!t._writableState.needDrain||h())}function u(){c("onend"),t.end()}i.endEmitted?r.nextTick(s):n.once("end",s),t.on("unpipe",a);var h=function(t){return function(){var e=t._readableState;c("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,"data")&&(e.flowing=!0,D(t))}}(n);t.on("drain",h);var f=!1;function l(e){c("ondata");var r=t.write(e);c("dest.write",r),!1===r&&((1===i.pipesCount&&i.pipes===t||i.pipesCount>1&&-1!==N(i.pipes,t))&&!f&&(c("false write response, pause",i.awaitDrain),i.awaitDrain++),n.pause())}function d(e){c("onerror",e),y(),t.removeListener("error",d),0===o(t,"error")&&S(t,e)}function p(){t.removeListener("finish",g),y()}function g(){c("onfinish"),t.removeListener("close",p),y()}function y(){c("unpipe"),n.unpipe(t)}return n.on("data",l),function(t,e,n){if("function"==typeof t.prependListener)return t.prependListener(e,n);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n)}(t,"error",d),t.once("close",p),t.once("finish",g),t.emit("pipe",n),i.flowing||(c("pipe resume"),n.resume()),t},A.prototype.unpipe=function(t){var e=this._readableState,n={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,n),this);if(!t){var r=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o0,!1!==i.flowing&&this.resume()):"readable"===t&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,c("on readable",i.length,i.reading),i.length?T(this):i.reading||r.nextTick(B,this))),n},A.prototype.addListener=A.prototype.on,A.prototype.removeListener=function(t,e){var n=s.prototype.removeListener.call(this,t,e);return"readable"===t&&r.nextTick(I,this),n},A.prototype.removeAllListeners=function(t){var e=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||r.nextTick(I,this),e},A.prototype.resume=function(){var t=this._readableState;return t.flowing||(c("resume"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,r.nextTick(j,t,e))}(this,t)),t.paused=!1,this},A.prototype.pause=function(){return c("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(c("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},A.prototype.wrap=function(t){var e=this,n=this._readableState,r=!1;for(var i in t.on("end",(function(){if(c("wrapped end"),n.decoder&&!n.ended){var t=n.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on("data",(function(i){(c("wrapped data"),n.decoder&&(i=n.decoder.write(i)),n.objectMode&&null==i)||(n.objectMode||i&&i.length)&&(e.push(i)||(r=!0,t.pause()))})),t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o-1))throw new m(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(A.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(A.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),A.prototype._write=function(t,e,n){n(new g("_write()"))},A.prototype._writev=null,A.prototype.end=function(t,e,n){var i=this._writableState;return"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!=t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||function(t,e,n){e.ending=!0,M(t,e),n&&(e.finished?r.nextTick(n):t.once("finish",n));e.ended=!0,t.writable=!1}(this,i,n),this},Object.defineProperty(A.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(A.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),A.prototype.destroy=f.destroy,A.prototype._undestroy=f.undestroy,A.prototype._destroy=function(t,e){e(t)}}).call(this,n(7),n(12))},function(t,e,n){"use strict";t.exports=h;var r=n(40).codes,i=r.ERR_METHOD_NOT_IMPLEMENTED,o=r.ERR_MULTIPLE_CALLBACK,s=r.ERR_TRANSFORM_ALREADY_TRANSFORMING,a=r.ERR_TRANSFORM_WITH_LENGTH_0,u=n(41);function c(t,e){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(null===r)return this.emit("error",new o);n.writechunk=null,n.writecb=null,null!=e&&this.push(e),r(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function l(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function d(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}r(u,i),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,p=0|this._f,g=0|this._g,y=0|this._h,b=0;b<16;++b)n[b]=t.readInt32BE(4*b);for(;b<64;++b)n[b]=0|(((e=n[b-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+n[b-7]+d(n[b-15])+n[b-16];for(var w=0;w<64;++w){var v=y+l(u)+c(u,p,g)+s[w]+n[w]|0,_=f(r)+h(r,i,o)|0;y=g,g=p,p=u,u=a+v|0,a=o,o=i,i=r,r=v+_|0}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0,this._f=p+this._f|0,this._g=g+this._g|0,this._h=y+this._h|0},u.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=u},function(t,e,n){var r=n(17),i=n(42),o=n(28).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function u(){this.init(),this._w=a,i.call(this,128,112)}function c(t,e,n){return n^t&(e^n)}function h(t,e,n){return t&e|n&(t|e)}function f(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function l(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function d(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function g(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function y(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function b(t,e){return t>>>0>>0?1:0}r(u,i),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(t){for(var e=this._w,n=0|this._ah,r=0|this._bh,i=0|this._ch,o=0|this._dh,a=0|this._eh,u=0|this._fh,w=0|this._gh,v=0|this._hh,_=0|this._al,m=0|this._bl,S=0|this._cl,k=0|this._dl,E=0|this._el,A=0|this._fl,x=0|this._gl,R=0|this._hl,O=0;O<32;O+=2)e[O]=t.readInt32BE(4*O),e[O+1]=t.readInt32BE(4*O+4);for(;O<160;O+=2){var P=e[O-30],T=e[O-30+1],M=d(P,T),L=p(T,P),C=g(P=e[O-4],T=e[O-4+1]),I=y(T,P),B=e[O-14],j=e[O-14+1],D=e[O-32],F=e[O-32+1],W=L+j|0,U=M+B+b(W,L)|0;U=(U=U+C+b(W=W+I|0,I)|0)+D+b(W=W+F|0,F)|0,e[O]=U,e[O+1]=W}for(var N=0;N<160;N+=2){U=e[N],W=e[N+1];var q=h(n,r,i),H=h(_,m,S),K=f(n,_),Y=f(_,n),V=l(a,E),X=l(E,a),J=s[N],$=s[N+1],z=c(a,u,w),G=c(E,A,x),Q=R+X|0,Z=v+V+b(Q,R)|0;Z=(Z=(Z=Z+z+b(Q=Q+G|0,G)|0)+J+b(Q=Q+$|0,$)|0)+U+b(Q=Q+W|0,W)|0;var tt=Y+H|0,et=K+q+b(tt,Y)|0;v=w,R=x,w=u,x=A,u=a,A=E,a=o+Z+b(E=k+Q|0,k)|0,o=i,k=S,i=r,S=m,r=n,m=_,n=Z+et+b(_=Q+tt|0,Q)|0}this._al=this._al+_|0,this._bl=this._bl+m|0,this._cl=this._cl+S|0,this._dl=this._dl+k|0,this._el=this._el+E|0,this._fl=this._fl+A|0,this._gl=this._gl+x|0,this._hl=this._hl+R|0,this._ah=this._ah+n+b(this._al,_)|0,this._bh=this._bh+r+b(this._bl,m)|0,this._ch=this._ch+i+b(this._cl,S)|0,this._dh=this._dh+o+b(this._dl,k)|0,this._eh=this._eh+a+b(this._el,E)|0,this._fh=this._fh+u+b(this._fl,A)|0,this._gh=this._gh+w+b(this._gl,x)|0,this._hh=this._hh+v+b(this._hl,R)|0},u.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,n,r){t.writeInt32BE(e,r),t.writeInt32BE(n,r+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=u},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){var r=n(135),i=n(136),o=n(137);t.exports=function(t){return r(t)||i(t)||o()}},function(t,e,n){var r=n(138),i=n(139),o=n(140);t.exports=function(t,e){return r(t)||i(t,e)||o()}},function(t,e,n){var r=n(141),i=n(142);t.exports=function(t){if(r.crypto&&r.crypto.getRandomValues)return r.crypto.getRandomValues(t);if("object"==typeof r.msCrypto&&"function"==typeof r.msCrypto.getRandomValues)return r.msCrypto.getRandomValues(t);if(i.randomBytes){if(!(t instanceof Uint8Array))throw new TypeError("expected Uint8Array");if(t.length>65536){var e=new Error;throw e.code=22,e.message="Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length ("+t.length+") exceeds the number of bytes of entropy available via this API (65536).",e.name="QuotaExceededError",e}var n=i.randomBytes(t.length);return t.set(n),t}throw new Error("No secure random number generator available.")}},function(t,e,n){"use strict";var r=n(17),i=n(143),o=n(153),s=n(154),a=n(159);function u(t){a.call(this,"digest"),this._hash=t}r(u,a),u.prototype._update=function(t){this._hash.update(t)},u.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new i:"rmd160"===t||"ripemd160"===t?new o:new u(s(t))}},function(t,e,n){(function(e){var n=null;"undefined"!=typeof WebSocket?n=WebSocket:"undefined"!=typeof MozWebSocket?n=MozWebSocket:void 0!==e?n=e.WebSocket||e.MozWebSocket:"undefined"!=typeof window?n=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(n=self.WebSocket||self.MozWebSocket),t.exports=n}).call(this,n(7))},,,,,function(t,e){t.exports=function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e>>32-e}function c(t,e,n,r,i,o,s){return u(t+(e&n|~e&r)+i+o|0,s)+e|0}function h(t,e,n,r,i,o,s){return u(t+(e&r|n&~r)+i+o|0,s)+e|0}function f(t,e,n,r,i,o,s){return u(t+(e^n^r)+i+o|0,s)+e|0}function l(t,e,n,r,i,o,s){return u(t+(n^(e|~r))+i+o|0,s)+e|0}r(a,i),a.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var n=this._a,r=this._b,i=this._c,o=this._d;n=c(n,r,i,o,t[0],3614090360,7),o=c(o,n,r,i,t[1],3905402710,12),i=c(i,o,n,r,t[2],606105819,17),r=c(r,i,o,n,t[3],3250441966,22),n=c(n,r,i,o,t[4],4118548399,7),o=c(o,n,r,i,t[5],1200080426,12),i=c(i,o,n,r,t[6],2821735955,17),r=c(r,i,o,n,t[7],4249261313,22),n=c(n,r,i,o,t[8],1770035416,7),o=c(o,n,r,i,t[9],2336552879,12),i=c(i,o,n,r,t[10],4294925233,17),r=c(r,i,o,n,t[11],2304563134,22),n=c(n,r,i,o,t[12],1804603682,7),o=c(o,n,r,i,t[13],4254626195,12),i=c(i,o,n,r,t[14],2792965006,17),n=h(n,r=c(r,i,o,n,t[15],1236535329,22),i,o,t[1],4129170786,5),o=h(o,n,r,i,t[6],3225465664,9),i=h(i,o,n,r,t[11],643717713,14),r=h(r,i,o,n,t[0],3921069994,20),n=h(n,r,i,o,t[5],3593408605,5),o=h(o,n,r,i,t[10],38016083,9),i=h(i,o,n,r,t[15],3634488961,14),r=h(r,i,o,n,t[4],3889429448,20),n=h(n,r,i,o,t[9],568446438,5),o=h(o,n,r,i,t[14],3275163606,9),i=h(i,o,n,r,t[3],4107603335,14),r=h(r,i,o,n,t[8],1163531501,20),n=h(n,r,i,o,t[13],2850285829,5),o=h(o,n,r,i,t[2],4243563512,9),i=h(i,o,n,r,t[7],1735328473,14),n=f(n,r=h(r,i,o,n,t[12],2368359562,20),i,o,t[5],4294588738,4),o=f(o,n,r,i,t[8],2272392833,11),i=f(i,o,n,r,t[11],1839030562,16),r=f(r,i,o,n,t[14],4259657740,23),n=f(n,r,i,o,t[1],2763975236,4),o=f(o,n,r,i,t[4],1272893353,11),i=f(i,o,n,r,t[7],4139469664,16),r=f(r,i,o,n,t[10],3200236656,23),n=f(n,r,i,o,t[13],681279174,4),o=f(o,n,r,i,t[0],3936430074,11),i=f(i,o,n,r,t[3],3572445317,16),r=f(r,i,o,n,t[6],76029189,23),n=f(n,r,i,o,t[9],3654602809,4),o=f(o,n,r,i,t[12],3873151461,11),i=f(i,o,n,r,t[15],530742520,16),n=l(n,r=f(r,i,o,n,t[2],3299628645,23),i,o,t[0],4096336452,6),o=l(o,n,r,i,t[7],1126891415,10),i=l(i,o,n,r,t[14],2878612391,15),r=l(r,i,o,n,t[5],4237533241,21),n=l(n,r,i,o,t[12],1700485571,6),o=l(o,n,r,i,t[3],2399980690,10),i=l(i,o,n,r,t[10],4293915773,15),r=l(r,i,o,n,t[1],2240044497,21),n=l(n,r,i,o,t[8],1873313359,6),o=l(o,n,r,i,t[15],4264355552,10),i=l(i,o,n,r,t[6],2734768916,15),r=l(r,i,o,n,t[13],1309151649,21),n=l(n,r,i,o,t[4],4149444226,6),o=l(o,n,r,i,t[11],3174756917,10),i=l(i,o,n,r,t[2],718787259,15),r=l(r,i,o,n,t[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+r|0,this._c=this._c+i|0,this._d=this._d+o|0},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=o.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=a},function(t,e,n){(e=t.exports=n(88)).Stream=e,e.Readable=e,e.Writable=n(92),e.Duplex=n(41),e.Transform=n(93),e.PassThrough=n(151),e.finished=n(62),e.pipeline=n(152)},function(t,e){},function(t,e,n){"use strict";function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){for(var n=0;n0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:"unshift",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:"shift",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n}},{key:"concat",value:function(t){if(0===this.length)return s.alloc(0);for(var e,n,r,i=s.allocUnsafe(t>>>0),o=this.head,a=0;o;)e=o.data,n=i,r=a,s.prototype.copy.call(e,n,r),a+=o.data.length,o=o.next;return i}},{key:"consume",value:function(t,e){var n;return ti.length?i.length:t;if(o===i.length?r+=i:r+=i.slice(0,t),0==(t-=o)){o===i.length?(++n,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(o));break}++n}return this.length-=n,r}},{key:"_getBuffer",value:function(t){var e=s.allocUnsafe(t),n=this.head,r=1;for(n.data.copy(e),t-=n.data.length;n=n.next;){var i=n.data,o=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,o),0==(t-=o)){o===i.length?(++r,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=i.slice(o));break}++r}return this.length-=r,e}},{key:u,value:function(t,e){return a(this,function(t){for(var e=1;e0,(function(t){h||(h=t),t&&l.forEach(u),o||(l.forEach(u),f(h))}))}));return e.reduce(c)}},function(t,e,n){"use strict";var r=n(6).Buffer,i=n(17),o=n(87),s=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],c=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],h=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],f=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function d(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(t,e){return t<>>32-e}function g(t,e,n,r,i,o,s,a){return p(t+(e^n^r)+o+s|0,a)+i|0}function y(t,e,n,r,i,o,s,a){return p(t+(e&n|~e&r)+o+s|0,a)+i|0}function b(t,e,n,r,i,o,s,a){return p(t+((e|~n)^r)+o+s|0,a)+i|0}function w(t,e,n,r,i,o,s,a){return p(t+(e&r|n&~r)+o+s|0,a)+i|0}function v(t,e,n,r,i,o,s,a){return p(t+(e^(n|~r))+o+s|0,a)+i|0}i(d,o),d.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var n=0|this._a,r=0|this._b,i=0|this._c,o=0|this._d,d=0|this._e,_=0|this._a,m=0|this._b,S=0|this._c,k=0|this._d,E=0|this._e,A=0;A<80;A+=1){var x,R;A<16?(x=g(n,r,i,o,d,t[a[A]],f[0],c[A]),R=v(_,m,S,k,E,t[u[A]],l[0],h[A])):A<32?(x=y(n,r,i,o,d,t[a[A]],f[1],c[A]),R=w(_,m,S,k,E,t[u[A]],l[1],h[A])):A<48?(x=b(n,r,i,o,d,t[a[A]],f[2],c[A]),R=b(_,m,S,k,E,t[u[A]],l[2],h[A])):A<64?(x=w(n,r,i,o,d,t[a[A]],f[3],c[A]),R=y(_,m,S,k,E,t[u[A]],l[3],h[A])):(x=v(n,r,i,o,d,t[a[A]],f[4],c[A]),R=g(_,m,S,k,E,t[u[A]],l[4],h[A])),n=d,d=o,o=p(i,10),i=r,r=x,_=E,E=k,k=p(S,10),S=m,m=R}var O=this._b+i+k|0;this._b=this._c+o+E|0,this._c=this._d+d+_|0,this._d=this._e+n+m|0,this._e=this._a+r+S|0,this._a=O},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=r.alloc?r.alloc(20):new r(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=d},function(t,e,n){(e=t.exports=function(t){t=t.toLowerCase();var n=e[t];if(!n)throw new Error(t+" is not supported (we accept pull requests)");return new n}).sha=n(155),e.sha1=n(156),e.sha224=n(157),e.sha256=n(94),e.sha384=n(158),e.sha512=n(95)},function(t,e,n){var r=n(17),i=n(42),o=n(28).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function u(){this.init(),this._w=a,i.call(this,64,56)}function c(t){return t<<30|t>>>2}function h(t,e,n,r){return 0===t?e&n|~e&r:2===t?e&n|e&r|n&r:e^n^r}r(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,f=0;f<16;++f)n[f]=t.readInt32BE(4*f);for(;f<80;++f)n[f]=n[f-3]^n[f-8]^n[f-14]^n[f-16];for(var l=0;l<80;++l){var d=~~(l/20),p=0|((e=r)<<5|e>>>27)+h(d,i,o,a)+u+n[l]+s[d];u=a,a=o,o=c(i),i=r,r=p}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=u},function(t,e,n){var r=n(17),i=n(42),o=n(28).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function u(){this.init(),this._w=a,i.call(this,64,56)}function c(t){return t<<5|t>>>27}function h(t){return t<<30|t>>>2}function f(t,e,n,r){return 0===t?e&n|~e&r:2===t?e&n|e&r|n&r:e^n^r}r(u,i),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(t){for(var e,n=this._w,r=0|this._a,i=0|this._b,o=0|this._c,a=0|this._d,u=0|this._e,l=0;l<16;++l)n[l]=t.readInt32BE(4*l);for(;l<80;++l)n[l]=(e=n[l-3]^n[l-8]^n[l-14]^n[l-16])<<1|e>>>31;for(var d=0;d<80;++d){var p=~~(d/20),g=c(r)+f(p,i,o,a)+u+n[d]+s[p]|0;u=a,a=o,o=h(i),i=r,r=g}this._a=r+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=a+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=u},function(t,e,n){var r=n(17),i=n(94),o=n(42),s=n(28).Buffer,a=new Array(64);function u(){this.init(),this._w=a,o.call(this,64,56)}r(u,i),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var t=s.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=u},function(t,e,n){var r=n(17),i=n(95),o=n(42),s=n(28).Buffer,a=new Array(160);function u(){this.init(),this._w=a,o.call(this,128,112)}r(u,i),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var t=s.allocUnsafe(48);function e(e,n,r){t.writeInt32BE(e,r),t.writeInt32BE(n,r+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=u},function(t,e,n){var r=n(28).Buffer,i=n(33).Transform,o=n(26).StringDecoder;function s(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(17)(s,i),s.prototype.update=function(t,e,n){"string"==typeof t&&(t=r.from(t,e));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},s.prototype.setAutoPadding=function(){},s.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},s.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},s.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},s.prototype._transform=function(t,e,n){var r;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){r=t}finally{n(r)}},s.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},s.prototype._finalOrDigest=function(t){var e=this.__final()||r.alloc(0);return t&&(e=this._toString(e,t,!0)),e},s.prototype._toString=function(t,e,n){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var r=this._decoder.write(t);return n&&(r+=this._decoder.end()),r},t.exports=s},function(t,e,n){ /** * * @revision $Id: index.js 2012-03-24 16:21:10 Aleksey $ @@ -25,11 +25,11 @@ var r=n(30),i=n(31),o=n(28);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647 * @link http://www.gordejev.lv * */ -t.exports=n(138)},function(t,e){ +t.exports=n(161)},function(t,e){ /*! * device-uuid.js v1.0.4 (https://github.com/biggora/device-uuid/) * Copyright 2016-2017 Alexey Gordeyev * Licensed under MIT (https://github.com/biggora/device-uuid/blob/master/LICENSE) */ -!function(t){"use strict";var e=new RegExp("^.*("+["\\+https:\\/\\/developers.google.com\\/\\+\\/web\\/snippet\\/","googlebot","baiduspider","gurujibot","yandexbot","slurp","msnbot","bingbot","facebookexternalhit","linkedinbot","twitterbot","slackbot","telegrambot","applebot","pingdom","tumblr ","Embedly","spbot"].join("|")+").*$"),n=function(t){t=t||{};var r={version:!1,language:!1,platform:!0,os:!0,pixelDepth:!0,colorDepth:!0,resolution:!1,isAuthoritative:!0,silkAccelerated:!0,isKindleFire:!0,isDesktop:!0,isMobile:!0,isTablet:!0,isWindows:!0,isLinux:!0,isLinux64:!0,isChromeOS:!0,isMac:!0,isiPad:!0,isiPhone:!0,isiPod:!0,isAndroid:!0,isSamsung:!0,isSmartTV:!0,isRaspberry:!0,isBlackberry:!0,isTouchScreen:!0,isOpera:!1,isIE:!1,isEdge:!1,isIECompatibilityMode:!1,isSafari:!1,isFirefox:!1,isWebkit:!1,isChrome:!1,isKonqueror:!1,isOmniWeb:!1,isSeaMonkey:!1,isFlock:!1,isAmaya:!1,isPhantomJS:!1,isEpiphany:!1,source:!1,cpuCores:!1};for(var i in t)t.hasOwnProperty(i)&&void 0!==r[i]&&(r[i]=t[i]);return this.options=r,this.version="1.0.0",this._Versions={Edge:/Edge\/([\d\w\.\-]+)/i,Firefox:/firefox\/([\d\w\.\-]+)/i,IE:/msie\s([\d\.]+[\d])|trident\/\d+\.\d+;.*[rv:]+(\d+\.\d)/i,Chrome:/chrome\/([\d\w\.\-]+)/i,Chromium:/(?:chromium|crios)\/([\d\w\.\-]+)/i,Safari:/version\/([\d\w\.\-]+)/i,Opera:/version\/([\d\w\.\-]+)|OPR\/([\d\w\.\-]+)/i,Ps3:/([\d\w\.\-]+)\)\s*$/i,Psp:/([\d\w\.\-]+)\)?\s*$/i,Amaya:/amaya\/([\d\w\.\-]+)/i,SeaMonkey:/seamonkey\/([\d\w\.\-]+)/i,OmniWeb:/omniweb\/v([\d\w\.\-]+)/i,Flock:/flock\/([\d\w\.\-]+)/i,Epiphany:/epiphany\/([\d\w\.\-]+)/i,WinJs:/msapphost\/([\d\w\.\-]+)/i,PhantomJS:/phantomjs\/([\d\w\.\-]+)/i,UC:/UCBrowser\/([\d\w\.]+)/i},this._Browsers={Edge:/edge/i,Amaya:/amaya/i,Konqueror:/konqueror/i,Epiphany:/epiphany/i,SeaMonkey:/seamonkey/i,Flock:/flock/i,OmniWeb:/omniweb/i,Chromium:/chromium|crios/i,Chrome:/chrome/i,Safari:/safari/i,IE:/msie|trident/i,Opera:/opera|OPR/i,PS3:/playstation 3/i,PSP:/playstation portable/i,Firefox:/firefox/i,WinJs:/msapphost/i,PhantomJS:/phantomjs/i,UC:/UCBrowser/i},this._OS={Windows10:/windows nt 10\.0/i,Windows81:/windows nt 6\.3/i,Windows8:/windows nt 6\.2/i,Windows7:/windows nt 6\.1/i,UnknownWindows:/windows nt 6\.\d+/i,WindowsVista:/windows nt 6\.0/i,Windows2003:/windows nt 5\.2/i,WindowsXP:/windows nt 5\.1/i,Windows2000:/windows nt 5\.0/i,WindowsPhone8:/windows phone 8\./,OSXCheetah:/os x 10[._]0/i,OSXPuma:/os x 10[._]1(\D|$)/i,OSXJaguar:/os x 10[._]2/i,OSXPanther:/os x 10[._]3/i,OSXTiger:/os x 10[._]4/i,OSXLeopard:/os x 10[._]5/i,OSXSnowLeopard:/os x 10[._]6/i,OSXLion:/os x 10[._]7/i,OSXMountainLion:/os x 10[._]8/i,OSXMavericks:/os x 10[._]9/i,OSXYosemite:/os x 10[._]10/i,OSXElCapitan:/os x 10[._]11/i,OSXSierra:/os x 10[._]12/i,Mac:/os x/i,Linux:/linux/i,Linux64:/linux x86_64/i,ChromeOS:/cros/i,Wii:/wii/i,PS3:/playstation 3/i,PSP:/playstation portable/i,iPad:/\(iPad.*os (\d+)[._](\d+)/i,iPhone:/\(iPhone.*os (\d+)[._](\d+)/i,Bada:/Bada\/(\d+)\.(\d+)/i,Curl:/curl\/(\d+)\.(\d+)\.(\d+)/i},this._Platform={Windows:/windows nt/i,WindowsPhone:/windows phone/i,Mac:/macintosh/i,Linux:/linux/i,Wii:/wii/i,Playstation:/playstation/i,iPad:/ipad/i,iPod:/ipod/i,iPhone:/iphone/i,Android:/android/i,Blackberry:/blackberry/i,Samsung:/samsung/i,Curl:/curl/i},this.DefaultAgent={isAuthoritative:!0,isMobile:!1,isTablet:!1,isiPad:!1,isiPod:!1,isiPhone:!1,isAndroid:!1,isBlackberry:!1,isOpera:!1,isIE:!1,isEdge:!1,isIECompatibilityMode:!1,isSafari:!1,isFirefox:!1,isWebkit:!1,isChrome:!1,isKonqueror:!1,isOmniWeb:!1,isSeaMonkey:!1,isFlock:!1,isAmaya:!1,isPhantomJS:!1,isEpiphany:!1,isDesktop:!1,isWindows:!1,isLinux:!1,isLinux64:!1,isMac:!1,isChromeOS:!1,isBada:!1,isSamsung:!1,isRaspberry:!1,isBot:!1,isCurl:!1,isAndroidTablet:!1,isWinJs:!1,isKindleFire:!1,isSilk:!1,isCaptive:!1,isSmartTV:!1,isUC:!1,isTouchScreen:!1,silkAccelerated:!1,colorDepth:-1,pixelDepth:-1,resolution:[],cpuCores:-1,language:"unknown",browser:"unknown",version:"unknown",os:"unknown",platform:"unknown",geoIp:{},source:"",hashInt:function(t){var e,n,r=0;if(0===t.length)return r;for(e=0,n=t.length;e>>32-e}function n(t,e){var n,r,i,o,s;return i=2147483648&t,o=2147483648&e,s=(1073741823&t)+(1073741823&e),(n=1073741824&t)&(r=1073741824&e)?2147483648^s^i^o:n|r?1073741824&s?3221225472^s^i^o:1073741824^s^i^o:s^i^o}function r(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t&e|~t&n}(r,i,o),s),u)),n(e(t,a),r)}function i(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t&n|e&~n}(r,i,o),s),u)),n(e(t,a),r)}function o(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t^e^n}(r,i,o),s),u)),n(e(t,a),r)}function s(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return e^(t|~n)}(r,i,o),s),u)),n(e(t,a),r)}function a(t){var e,n="",r="";for(e=0;e<=3;e++)n+=(r="0"+(t>>>8*e&255).toString(16)).substr(r.length-2,2);return n}var u,c,h,f,l,d,p,g,y,w;for(u=function(t){for(var e,n=t.length,r=n+8,i=16*((r-r%64)/64+1),o=new Array(i-1),s=0,a=0;a>>29,o}(t=function(t){t=t.replace(/\r\n/g,"\n");for(var e="",n=0;n127&&r<2048?(e+=String.fromCharCode(r>>6|192),e+=String.fromCharCode(63&r|128)):(e+=String.fromCharCode(r>>12|224),e+=String.fromCharCode(r>>6&63|128),e+=String.fromCharCode(63&r|128))}return e}(t)),p=1732584193,g=4023233417,y=2562383102,w=271733878,c=0;c0||navigator.msMaxTouchPoints>0},this.getLaguage=function(){this.Agent.language=(navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||"").toLowerCase()},this.getColorDepth=function(){this.Agent.colorDepth=screen.colorDepth||-1},this.getScreenResolution=function(){this.Agent.resolution=[screen.availWidth,screen.availHeight]},this.getPixelDepth=function(){this.Agent.pixelDepth=screen.pixelDepth||-1},this.getCPU=function(){this.Agent.cpuCores=navigator.hardwareConcurrency||-1},this.reset=function(){var t=this;for(var e in t.DefaultAgent)t.DefaultAgent.hasOwnProperty(e)&&(t.Agent[e]=t.DefaultAgent[e]);return t},this.parse=function(t){t=t||navigator.userAgent;var e=new n;return e.Agent.source=t.replace(/^\s*/,"").replace(/\s*$/,""),e.Agent.os=e.getOS(e.Agent.source),e.Agent.platform=e.getPlatform(e.Agent.source),e.Agent.browser=e.getBrowser(e.Agent.source),e.Agent.version=e.getBrowserVersion(e.Agent.source),e.testBot(),e.testSmartTV(),e.testMobile(),e.testAndroidTablet(),e.testTablet(),e.testCompatibilityMode(),e.testSilk(),e.testKindleFire(),e.testCaptiveNetwork(),e.testTouchSupport(),e.getLaguage(),e.getColorDepth(),e.getPixelDepth(),e.getScreenResolution(),e.getCPU(),e.Agent},this.get=function(t){var e=this.parse(),n=[];for(var r in this.options)this.options.hasOwnProperty(r)&&!0===this.options[r]&&n.push(e[r]);t&&n.push(t),!this.options.resolution&&e.isMobile&&n.push(e.resolution);var i=e.hashMD5(n.join(":"));return[i.slice(0,8),i.slice(8,12),"4"+i.slice(12,15),"b"+i.slice(15,18),i.slice(20)].join("-")},this.Agent=this.DefaultAgent,this};t.DeviceUUID=n,new n(navigator.userAgent)}(this)},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"BLOCKCHAIN_SUPPORT",(function(){return g})),n.d(r,"WALLET_SUPPORT",(function(){return y}));var i,o=n(0),s=n.n(o),a=n(11),u=n.n(a),c=n(1),h=n.n(c),f=n(3),l=n.n(f),d=n(4),p=n.n(d),g="blockchain_support",y="wallet_support",w=new(function(){function t(){l()(this,t),this.plugins=[]}return p()(t,[{key:"loadPlugin",value:function(t){this.plugin(t.name)||this.plugins.push(t)}},{key:"wallets",value:function(){return this.plugins.filter((function(t){return t.type===y}))}},{key:"signatureProviders",value:function(){return this.plugins.filter((function(t){return t.type===g}))}},{key:"supportedBlockchains",value:function(){return this.signatureProviders().map((function(){return name}))}},{key:"plugin",value:function(t){return this.plugins.find((function(e){return e.name===t}))}},{key:"endorsedNetworks",value:function(){var t=h()(s.a.mark((function t(){return s.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all(this.signatureProviders().map(function(){var t=h()(s.a.mark((function t(e){return s.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.getEndorsedNetwork();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()));case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}()}]),t}()),v=n(112),m=n.n(v),b=n(113),_=n.n(b),k={},S=function(){return"undefined"==typeof window?{localStorage:{setItem:function(t,e){return k[t]=e},getItem:function(t){return k[t]||null},removeItem:function(t){return delete k[t]}}}:window},A=function(){function t(){l()(this,t)}return p()(t,null,[{key:"setAppKey",value:function(t){S().localStorage.setItem("appkey",t)}},{key:"getAppKey",value:function(){return S().localStorage.getItem("appkey")}},{key:"removeAppKey",value:function(){return S().localStorage.removeItem("appkey")}},{key:"setNonce",value:function(t){S().localStorage.setItem("nonce",t)}},{key:"getNonce",value:function(){return S().localStorage.getItem("nonce")}},{key:"removeNonce",value:function(){return S().localStorage.removeItem("nonce")}}]),t}(),E=n(114),x=n.n(E),P=n(115),O=n.n(P),T=n(116),R=n.n(T);if("undefined"==typeof navigator)i="nodejs_env";else{var I=(new(0,n(137).DeviceUUID)).parse(),L=[I.language,I.platform,I.os,I.cpuCores,I.colorDepth];i=I.hashMD5(L.join(":"))}var B,C=i,M="/socket.io/?EIO=3&transport=websocket",F=function(t){return O()("sha256").update(t).digest("hex")},j=function(){var t=new Uint8Array(24);return x()(t),t.join("")},W=function(){function t(e,n){l()(this,t),this.plugin=e,this.timeout=n,this.uuid=null,this.socket=null,this.connected=!1,this.paired=!1,this.openRequests=[],this.pairingPromise=null,this.eventHandlers={},this.appkey=A.getAppKey(),this.appkey||(this.appkey="appkey:"+j())}return p()(t,[{key:"addEventHandler",value:function(t,e){e||(e="app"),this.eventHandlers[e]=t}},{key:"removeEventHandler",value:function(t){t||(t="app"),delete this.eventHandlers[t]}},{key:"link",value:function(){var t=this,e=!(0>>32-e}function n(t,e){var n,r,i,o,s;return i=2147483648&t,o=2147483648&e,s=(1073741823&t)+(1073741823&e),(n=1073741824&t)&(r=1073741824&e)?2147483648^s^i^o:n|r?1073741824&s?3221225472^s^i^o:1073741824^s^i^o:s^i^o}function r(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t&e|~t&n}(r,i,o),s),u)),n(e(t,a),r)}function i(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t&n|e&~n}(r,i,o),s),u)),n(e(t,a),r)}function o(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return t^e^n}(r,i,o),s),u)),n(e(t,a),r)}function s(t,r,i,o,s,a,u){return t=n(t,n(n(function(t,e,n){return e^(t|~n)}(r,i,o),s),u)),n(e(t,a),r)}function a(t){var e,n="",r="";for(e=0;e<=3;e++)n+=(r="0"+(t>>>8*e&255).toString(16)).substr(r.length-2,2);return n}var u,c,h,f,l,d,p,g,y,b;for(u=function(t){for(var e,n=t.length,r=n+8,i=16*((r-r%64)/64+1),o=new Array(i-1),s=0,a=0;a>>29,o}(t=function(t){t=t.replace(/\r\n/g,"\n");for(var e="",n=0;n127&&r<2048?(e+=String.fromCharCode(r>>6|192),e+=String.fromCharCode(63&r|128)):(e+=String.fromCharCode(r>>12|224),e+=String.fromCharCode(r>>6&63|128),e+=String.fromCharCode(63&r|128))}return e}(t)),p=1732584193,g=4023233417,y=2562383102,b=271733878,c=0;c0||navigator.msMaxTouchPoints>0},this.getLaguage=function(){this.Agent.language=(navigator.language||navigator.userLanguage||navigator.browserLanguage||navigator.systemLanguage||"").toLowerCase()},this.getColorDepth=function(){this.Agent.colorDepth=screen.colorDepth||-1},this.getScreenResolution=function(){this.Agent.resolution=[screen.availWidth,screen.availHeight]},this.getPixelDepth=function(){this.Agent.pixelDepth=screen.pixelDepth||-1},this.getCPU=function(){this.Agent.cpuCores=navigator.hardwareConcurrency||-1},this.reset=function(){var t=this;for(var e in t.DefaultAgent)t.DefaultAgent.hasOwnProperty(e)&&(t.Agent[e]=t.DefaultAgent[e]);return t},this.parse=function(t){t=t||navigator.userAgent;var e=new n;return e.Agent.source=t.replace(/^\s*/,"").replace(/\s*$/,""),e.Agent.os=e.getOS(e.Agent.source),e.Agent.platform=e.getPlatform(e.Agent.source),e.Agent.browser=e.getBrowser(e.Agent.source),e.Agent.version=e.getBrowserVersion(e.Agent.source),e.testBot(),e.testSmartTV(),e.testMobile(),e.testAndroidTablet(),e.testTablet(),e.testCompatibilityMode(),e.testSilk(),e.testKindleFire(),e.testCaptiveNetwork(),e.testTouchSupport(),e.getLaguage(),e.getColorDepth(),e.getPixelDepth(),e.getScreenResolution(),e.getCPU(),e.Agent},this.get=function(t){var e=this.parse(),n=[];for(var r in this.options)this.options.hasOwnProperty(r)&&!0===this.options[r]&&n.push(e[r]);t&&n.push(t),!this.options.resolution&&e.isMobile&&n.push(e.resolution);var i=e.hashMD5(n.join(":"));return[i.slice(0,8),i.slice(8,12),"4"+i.slice(12,15),"b"+i.slice(15,18),i.slice(20)].join("-")},this.Agent=this.DefaultAgent,this};t.DeviceUUID=n,new n(navigator.userAgent)}(this)},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"BLOCKCHAIN_SUPPORT",(function(){return g})),n.d(r,"WALLET_SUPPORT",(function(){return y}));var i,o=n(0),s=n.n(o),a=n(13),u=n.n(a),c=n(1),h=n.n(c),f=n(3),l=n.n(f),d=n(4),p=n.n(d),g="blockchain_support",y="wallet_support",b=new(function(){function t(){l()(this,t),this.plugins=[]}return p()(t,[{key:"loadPlugin",value:function(t){this.plugin(t.name)||this.plugins.push(t)}},{key:"wallets",value:function(){return this.plugins.filter((function(t){return t.type===y}))}},{key:"signatureProviders",value:function(){return this.plugins.filter((function(t){return t.type===g}))}},{key:"supportedBlockchains",value:function(){return this.signatureProviders().map((function(){return name}))}},{key:"plugin",value:function(t){return this.plugins.find((function(e){return e.name===t}))}},{key:"endorsedNetworks",value:function(){var t=h()(s.a.mark((function t(){return s.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all(this.signatureProviders().map(function(){var t=h()(s.a.mark((function t(e){return s.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.getEndorsedNetwork();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()));case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})));return function(){return t.apply(this,arguments)}}()}]),t}()),w=n(126),v=n.n(w),_=n(127),m=n.n(_),S={},k=function(){return"undefined"==typeof window?{localStorage:{setItem:function(t,e){return S[t]=e},getItem:function(t){return S[t]||null},removeItem:function(t){return delete S[t]}}}:window},E=function(){function t(){l()(this,t)}return p()(t,null,[{key:"setAppKey",value:function(t){k().localStorage.setItem("appkey",t)}},{key:"getAppKey",value:function(){return k().localStorage.getItem("appkey")}},{key:"removeAppKey",value:function(){return k().localStorage.removeItem("appkey")}},{key:"setNonce",value:function(t){k().localStorage.setItem("nonce",t)}},{key:"getNonce",value:function(){return k().localStorage.getItem("nonce")}},{key:"removeNonce",value:function(){return k().localStorage.removeItem("nonce")}}]),t}(),A=n(128),x=n.n(A),R=n(129),O=n.n(R),P=n(130),T=n.n(P);if("undefined"==typeof navigator)i="nodejs_env";else{var M=(new(0,n(160).DeviceUUID)).parse(),L=[M.language,M.platform,M.os,M.cpuCores,M.colorDepth];i=M.hashMD5(L.join(":"))}var C,I=i,B="/socket.io/?EIO=3&transport=websocket",j=function(t){return O()("sha256").update(t).digest("hex")},D=function(){var t=new Uint8Array(24);return x()(t),t.join("")},F=function(){function t(e,n){l()(this,t),this.plugin=e,this.timeout=n,this.uuid=null,this.socket=null,this.connected=!1,this.paired=!1,this.openRequests=[],this.pairingPromise=null,this.eventHandlers={},this.appkey=E.getAppKey(),this.appkey||(this.appkey="appkey:"+D())}return p()(t,[{key:"addEventHandler",value:function(t,e){e||(e="app"),this.eventHandlers[e]=t}},{key:"removeEventHandler",value:function(t){t||(t="app"),delete this.eventHandlers[t]}},{key:"link",value:function(){var t=this,e=!(0=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var f=n.call(u,"catchLoc"),s=n.call(u,"finallyLoc");if(f&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),x(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;x(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:T(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},25:function(t,r){var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},296:function(t,r,e){"use strict";e.r(r),function(t){e.d(r,"default",(function(){return A}));var n=e(13),o=e.n(n),i=e(0),u=e.n(i),a=e(1),f=e.n(a),s=e(3),c=e.n(s),h=e(4),l=e.n(h),p=e(8),y=e.n(p),g=e(9),d=e.n(g),v=e(10),w=e.n(v),m=e(2),b=m.SocketService,E=function(t,r){return new Proxy(t,r)},A=function(r){function e(){return c()(this,e),y()(this,d()(e).call(this,m.Blockchains.CYBER,m.PluginTypes.BLOCKCHAIN_SUPPORT))}return w()(e,r),l()(e,[{key:"setSocketService",value:function(t){b=t}},{key:"hookProvider",value:function(r){var e,n=10?n-4:n,h=0;h>16&255,a[f++]=r>>8&255,a[f++]=255&r;2===u&&(r=o[t.charCodeAt(h)]<<2|o[t.charCodeAt(h+1)]>>4,a[f++]=255&r);1===u&&(r=o[t.charCodeAt(h)]<<10|o[t.charCodeAt(h+1)]<<4|o[t.charCodeAt(h+2)]>>2,a[f++]=r>>8&255,a[f++]=255&r);return a},r.fromByteArray=function(t){for(var r,e=t.length,o=e%3,i=[],u=0,a=e-o;ua?a:u+16383));1===o?(r=t[e-1],i.push(n[r>>2]+n[r<<4&63]+"==")):2===o&&(r=(t[e-2]<<8)+t[e-1],i.push(n[r>>10]+n[r>>4&63]+n[r<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=u.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function c(t,r,e){for(var o,i,u=[],a=r;a>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return u.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},31:function(t,r){r.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,l=e?-1:1,p=t[r+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=l,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),i-=s}return(p?-1:1)*u*Math.pow(2,i-n)},r.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,g=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?l/f:l*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=y,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=y,u/=256,s-=8);t[e+p-y]|=128*g}},4:function(t,r){function e(t,r){for(var e=0;e + * @license MIT + */ +var n=e(30),o=e(31),i=e(25);function u(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,r){if(u()=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function y(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(n)return F(t).length;r=(""+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,r,e);case"utf8":case"utf-8":return x(this,r,e);case"ascii":return T(this,r,e);case"latin1":case"binary":return B(this,r,e);case"base64":return R(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function v(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:w(t,r,e,n,o);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):w(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function w(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,l=0;lo&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function R(t,r,e){return 0===r&&e===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(r,e))}function x(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=S)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},f.prototype.compare=function(t,r,e,n,o){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),s=this.slice(n,o),c=t.slice(r,e),h=0;ho)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return m(this,t,r,e);case"utf8":case"utf-8":return b(this,t,r,e);case"ascii":return E(this,t,r,e);case"latin1":case"binary":return A(this,t,r,e);case"base64":return _(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function Y(t,r,e,n,o,i){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function k(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function I(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function C(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,e,n,i){return i||C(t,0,e,4),o.write(t,r,e,n,23,4),e+4}function M(t,r,e,n,i){return i||C(t,0,e,8),o.write(t,r,e,n,52,8),e+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},f.prototype.readUInt8=function(t,r){return r||U(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||U(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||U(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},f.prototype.readInt8=function(t,r){return r||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||U(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||U(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||Y(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):k(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):k(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):I(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):I(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Y(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Y(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):k(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):k(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):I(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||Y(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):I(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return M(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return M(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!f.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function z(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(N,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}}).call(this,e(7))},7:function(t,r){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(t){"object"==typeof window&&(e=window)}t.exports=e},8:function(t,r,e){var n=e(13),o=e(19);t.exports=function(t,r){return!r||"object"!==n(r)&&"function"!=typeof r?o(t):r}},9:function(t,r){function e(r){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},e(r)}t.exports=e}}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJTY2F0dGVySlNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi1jeWJlcndheS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlc29sdmUiLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJlcnJvciIsImRvbmUiLCJQcm9taXNlIiwidGhlbiIsImZuIiwic2VsZiIsInRoaXMiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJzZXRQcm90b3R5cGVPZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIlR5cGVFcnJvciIsImNvbnN0cnVjdG9yIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJfdHlwZW9mMiIsIm9iaiIsIml0ZXJhdG9yIiwiX3R5cGVvZiIsIlJlZmVyZW5jZUVycm9yIiwiU2NhdHRlckpTIiwiX3NldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwicnVudGltZSIsIk9wIiwiaGFzT3duIiwiJFN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJjb250ZXh0IiwiQ29udGV4dCIsIl9pbnZva2UiLCJzdGF0ZSIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJtZXRob2QiLCJHZW5TdGF0ZUV4ZWN1dGluZyIsIkVycm9yIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJDb250aW51ZVNlbnRpbmVsIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZWNvcmQiLCJ0cnlDYXRjaCIsInR5cGUiLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwibWFrZUludm9rZU1ldGhvZCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsInZhbHVlcyIsIkdwIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIkFzeW5jSXRlcmF0b3IiLCJwcmV2aW91c1Byb21pc2UiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsImludm9rZSIsInJlc3VsdCIsIl9fYXdhaXQiLCJ1bndyYXBwZWQiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJtYXJrIiwiYXdyYXAiLCJhc3luYyIsIml0ZXIiLCJ0b1N0cmluZyIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiRnVuY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJhcnIiLCJzb2NrZXRTZXJ2aWNlIiwiU29ja2V0U2VydmljZSIsInByb3h5IiwiZHVtbXkiLCJoYW5kbGVyIiwiUHJveHkiLCJTY2F0dGVyQ3liZXJXYXkiLCJCbG9ja2NoYWlucyIsIkNZQkVSIiwiUGx1Z2luVHlwZXMiLCJCTE9DS0NIQUlOX1NVUFBPUlQiLCJfcyIsIm5ldHdvcmsiLCJmaWVsZHNGZXRjaGVyIiwiTmV0d29yayIsImZyb21Kc29uIiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBdmFpbGFibGVLZXlzIiwiYSIsInNlbmRBcGlSZXF1ZXN0IiwicGF5bG9hZCIsImlkIiwiYWNjb3VudHMiLCJmaWx0ZXIiLCJ4IiwiYmxvY2tjaGFpbiIsIm1hcCIsInB1YmxpY0tleSIsInNpZ24iLCJzaWduYXJncyIsInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIkJ1ZmZlciIsImZyb20iLCJ0cmFuc2FjdGlvbiIsInNpZ25hdHVyZXMiLCJzaWduZXJzIiwic2NhdHRlclNpZ25lciIsImN5YmVySG9vayIsInNjYXR0ZXJLZXlzIiwib3RoZXJLZXlzIiwiYWxsIiwic2lnbmVyIiwiY29uY2F0IiwiaW5kaXZpZHVhbFNpZ25BcmdzIiwicHJvdmlkZXIiLCJhYmlzIiwiY2hhaW5JZCIsInJlcXVpcmVkS2V5cyIsInB1bGxPdXRTaWduYXR1cmVzIiwic2NhdHRlclNpZ3MiLCJvdGhlclNpZ3MiLCJzaWciLCJfYXBpIiwiX29wdGlvbnMiLCJzaWduYXR1cmVQcm92aWRlciIsImhvb2tQcm92aWRlciIsImFzc2lnbiIsImN3SW5zdGFuY2UiLCJycWYiLCJmaW5kIiwiUGx1Z2luIiwid2luZG93IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJsZW4iLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwiam9pbiIsIlVpbnQ4QXJyYXkiLCJjb2RlIiwiaW5kZXhPZiIsInN0YXJ0IiwiZW5kIiwibnVtIiwib3V0cHV0IiwicmVhZCIsImJ1ZmZlciIsIm9mZnNldCIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZSIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJuQml0cyIsIk5hTiIsIkluZmluaXR5IiwiTWF0aCIsInBvdyIsIndyaXRlIiwicnQiLCJhYnMiLCJmbG9vciIsImxvZyIsIkxOMiIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiYmFzZTY0IiwiaWVlZTc1NCIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiY3JlYXRlQnVmZmVyIiwidGhhdCIsIlJhbmdlRXJyb3IiLCJlbmNvZGluZ09yT2Zmc2V0IiwiYWxsb2NVbnNhZmUiLCJBcnJheUJ1ZmZlciIsImFycmF5IiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlCdWZmZXIiLCJzdHJpbmciLCJlbmNvZGluZyIsImlzRW5jb2RpbmciLCJhY3R1YWwiLCJmcm9tU3RyaW5nIiwiaXNCdWZmZXIiLCJjaGVja2VkIiwiY29weSIsInZhbCIsImRhdGEiLCJmcm9tT2JqZWN0IiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJpc1ZpZXciLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInRvTG93ZXJDYXNlIiwic2xvd1RvU3RyaW5nIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJkaXIiLCJhcnJheUluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsImJ1ZiIsInJlYWRVSW50MTZCRSIsImZvdW5kSW5kZXgiLCJmb3VuZCIsImoiLCJoZXhXcml0ZSIsIk51bWJlciIsInJlbWFpbmluZyIsInN0ckxlbiIsInBhcnNlZCIsInBhcnNlSW50Iiwic3Vic3RyIiwidXRmOFdyaXRlIiwiYmxpdEJ1ZmZlciIsImFzY2lpV3JpdGUiLCJzdHIiLCJieXRlQXJyYXkiLCJhc2NpaVRvQnl0ZXMiLCJsYXRpbjFXcml0ZSIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidW5pdHMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJtaW4iLCJyZXMiLCJzZWNvbmRCeXRlIiwidGhpcmRCeXRlIiwiZm91cnRoQnl0ZSIsInRlbXBDb2RlUG9pbnQiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZnJvbUNoYXJDb2RlIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJnbG9iYWwiLCJmb28iLCJzdWJhcnJheSIsInR5cGVkQXJyYXlTdXBwb3J0IiwicG9vbFNpemUiLCJfYXVnbWVudCIsInNwZWNpZXMiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsInkiLCJsaXN0IiwicG9zIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsIm1hdGNoIiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJ0b0pTT04iLCJfYXJyIiwicmV0Iiwib3V0IiwidG9IZXgiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiZXh0IiwiY2hlY2tJbnQiLCJvYmplY3RXcml0ZVVJbnQxNiIsImxpdHRsZUVuZGlhbiIsIm9iamVjdFdyaXRlVUludDMyIiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzbGljZUxlbiIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsInNldCIsIklOVkFMSURfQkFTRTY0X1JFIiwibGVhZFN1cnJvZ2F0ZSIsInRyaW0iLCJyZXBsYWNlIiwic3RyaW5ndHJpbSIsImJhc2U2NGNsZWFuIiwic3JjIiwiZHN0IiwiZyIsImFzc2VydFRoaXNJbml0aWFsaXplZCIsIl9nZXRQcm90b3R5cGVPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2dCQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxD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QUFJLEVBQUdBLEVBQUk0SSxLQUNiNUksRUFBSWdSLEdBQVUrTSxFQUFJblYsUUFBWTVJLEdBQUs4ZCxFQUFJbFYsVUFEaEI1SSxFQUU1QitkLEVBQUkvZCxFQUFJZ1IsR0FBVThNLEVBQUk5ZCxHQUV4QixPQUFPQSxLLGlDQ3Z2RFQsSUFBSWdlLEVBR0pBLEVBQUksV0FDSCxPQUFPbGIsS0FESixHQUlKLElBRUNrYixFQUFJQSxHQUFLLElBQUluVCxTQUFTLGNBQWIsR0FDUixNQUFPdUcsR0FFYyxpQkFBWHRDLFNBQXFCa1AsRUFBSWxQLFFBT3JDL08sRUFBT0QsUUFBVWtlLEcsa0JDbkJqQixJQUFJbGEsRUFBVSxFQUFRLElBRWxCbWEsRUFBd0IsRUFBUSxJQVVwQ2xlLEVBQU9ELFFBUlAsU0FBb0MrQyxFQUFNMUMsR0FDeEMsT0FBSUEsR0FBMkIsV0FBbEIyRCxFQUFRM0QsSUFBc0MsbUJBQVRBLEVBSTNDOGQsRUFBc0JwYixHQUhwQjFDLEksZ0JDTlgsU0FBUytkLEVBQWdCemQsR0FJdkIsT0FIQVYsRUFBT0QsUUFBVW9lLEVBQWtCeGQsT0FBTzBDLGVBQWlCMUMsT0FBT21HLGVBQWlCLFNBQXlCcEcsR0FDMUcsT0FBT0EsRUFBRXlELFdBQWF4RCxPQUFPbUcsZUFBZXBHLElBRXZDeWQsRUFBZ0J6ZCxHQUd6QlYsRUFBT0QsUUFBVW9lIiwiZmlsZSI6InNjYXR0ZXJqcy1wbHVnaW4tY3liZXJ3YXkubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI5Nik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsIm1vZHVsZS5leHBvcnRzID0gU2NhdHRlckpTOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJpbXBvcnQge1xuICAgIFBsdWdpbixcbiAgICBQbHVnaW5UeXBlcyxcbiAgICBCbG9ja2NoYWlucyxcbiAgICBOZXR3b3JrLFxuICAgIFNvY2tldFNlcnZpY2Vcbn0gZnJvbSAnQHNjYXR0ZXJqcy9jb3JlJztcblxubGV0IHNvY2tldFNlcnZpY2UgPSBTb2NrZXRTZXJ2aWNlO1xuY29uc3QgcHJveHkgPSAoZHVtbXksIGhhbmRsZXIpID0+IG5ldyBQcm94eShkdW1teSwgaGFuZGxlcik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYXR0ZXJDeWJlcldheSBleHRlbmRzIFBsdWdpbiB7XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlcihCbG9ja2NoYWlucy5DWUJFUiwgUGx1Z2luVHlwZXMuQkxPQ0tDSEFJTl9TVVBQT1JUKTtcbiAgICB9XG5cbiAgICBzZXRTb2NrZXRTZXJ2aWNlKF9zKXtcbiAgICAgICAgc29ja2V0U2VydmljZSA9IF9zO1xuICAgIH1cblxuICAgIGhvb2tQcm92aWRlcihuZXR3b3JrLCBmaWVsZHNGZXRjaGVyID0gbnVsbCl7XG4gICAgICAgIG5ldHdvcmsgPSBOZXR3b3JrLmZyb21Kc29uKG5ldHdvcmspO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXF1aXJlZEZpZWxkczp7fSxcbiAgICAgICAgICAgIGdldEF2YWlsYWJsZUtleXM6YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb2NrZXRTZXJ2aWNlLnNlbmRBcGlSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTonaWRlbnRpdHlGcm9tUGVybWlzc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOnt9XG4gICAgICAgICAgICAgICAgfSkudGhlbihpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpZCkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQuYWNjb3VudHMuZmlsdGVyKHggPT4geC5ibG9ja2NoYWluID09PSBCbG9ja2NoYWlucy5DWUJFUikubWFwKHggPT4geC5wdWJsaWNLZXkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzaWduOmFzeW5jIChzaWduYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gZmllbGRzRmV0Y2hlciA/IGZpZWxkc0ZldGNoZXIoKSA6IHt9O1xuICAgICAgICAgICAgICAgIHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IEJ1ZmZlci5mcm9tKHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0U2VydmljZS5zZW5kQXBpUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOidyZXF1ZXN0U2lnbmF0dXJlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6eyB0cmFuc2FjdGlvbjpzaWduYXJncywgYmxvY2tjaGFpbjpCbG9ja2NoYWlucy5DWUJFUiwgbmV0d29yaywgcmVxdWlyZWRGaWVsZHMgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlczp4LnNpZ25hdHVyZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZFRyYW5zYWN0aW9uOkJ1ZmZlci5mcm9tKHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgJ2hleCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG11bHRpSG9vayhuZXR3b3JrLCBzaWduZXJzKXtcbiAgICAgICAgY29uc3Qgc2NhdHRlclNpZ25lciA9IHRoaXMuY3liZXJIb29rKG5ldHdvcmspO1xuICAgICAgICBpZighQXJyYXkuaXNBcnJheShzaWduZXJzKSkgc2lnbmVycyA9IFtzaWduZXJzXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0QXZhaWxhYmxlS2V5czphc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhdHRlcktleXMgPSBhd2FpdCBzY2F0dGVyU2lnbmVyLmdldEF2YWlsYWJsZUtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG90aGVyS2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzaWduZXJzLm1hcChhc3luYyBzaWduZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2lnbmVyLmdldEF2YWlsYWJsZUtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMubWFwKGtleSA9PiBvdGhlcktleXMucHVzaChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYXR0ZXJLZXlzLmNvbmNhdChvdGhlcktleXMpXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNpZ246YXN5bmMgKHNpZ25hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gQnVmZmVyLmZyb20oc2lnbmFyZ3Muc2VyaWFsaXplZFRyYW5zYWN0aW9uLCAnaGV4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbFNpZ25BcmdzID0gYXN5bmMgcHJvdmlkZXIgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiaXM6IHNpZ25hcmdzLmFiaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFpbklkOiBuZXR3b3JrLmNoYWluSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEtleXM6IGF3YWl0IHByb3ZpZGVyLmdldEF2YWlsYWJsZUtleXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWxsT3V0U2lnbmF0dXJlcyA9IHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuaGFzT3duUHJvcGVydHkoJ3NpZ25hdHVyZXMnKSkgcmV0dXJuIHJlc3VsdC5zaWduYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2F0dGVyU2lncyA9IGF3YWl0IHNjYXR0ZXJTaWduZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zaWduKGF3YWl0IGluZGl2aWR1YWxTaWduQXJncyhzY2F0dGVyU2lnbmVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHB1bGxPdXRTaWduYXR1cmVzKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJTaWdzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHNpZ25lcnMubWFwKGFzeW5jIHNpZ25lciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaWduZXIuc2lnbihhd2FpdCBpbmRpdmlkdWFsU2lnbkFyZ3Moc2lnbmVyKSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxPdXRTaWduYXR1cmVzKHJlc3VsdCkubWFwKHNpZyA9PiBvdGhlclNpZ3MucHVzaChzaWcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlczogc2NhdHRlclNpZ3MuY29uY2F0KG90aGVyU2lncyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYXR1cmVQcm92aWRlciguLi5hcmdzKXtcbiAgICAgICAgLy8gY29uc3QgdGhyb3dJZk5vSWRlbnRpdHkgPSBhcmdzWzBdO1xuXG4gICAgICAgIC8vIFByb3RvY29sIHdpbGwgYmUgZGVwcmVjYXRlZC5cbiAgICAgICAgcmV0dXJuIChuZXR3b3JrLCBfYXBpLCBfb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgICAgICBuZXR3b3JrID0gTmV0d29yay5mcm9tSnNvbihuZXR3b3JrKTtcblxuICAgICAgICAgICAgbGV0IHJlcXVpcmVkRmllbGRzID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNGZXRjaGVyID0gKCkgPT4gcmVxdWlyZWRGaWVsZHM7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVQcm92aWRlciA9IHRoaXMuaG9va1Byb3ZpZGVyKG5ldHdvcmssIGZpZWxkc0ZldGNoZXIpO1xuXG4gICAgICAgICAgICAvLyBUaGUgcHJveHkgc3RhbmRzIGJldHdlZW4gdGhlIGN5YmVyd2F5anMgb2JqZWN0IGFuZCBzY2F0dGVyLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGFkZCBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkgbGlrZSBhZGRpbmcgYHJlcXVpcmVkRmllbGRzYCBhcnJheXMgdG8gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICByZXR1cm4gcHJveHkobmV3IF9hcGkoT2JqZWN0LmFzc2lnbihfb3B0aW9ucywge3NpZ25hdHVyZVByb3ZpZGVyfSkpLCB7XG4gICAgICAgICAgICAgICAgZ2V0KGN3SW5zdGFuY2UsIG1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjd0luc3RhbmNlW21ldGhvZF0gPT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWV0aG9kfSBkb2VzIG5vdCBleGlzdCBvbiB0aGUgY3liZXJ3YXlqcy5BcGkoKSBvYmplY3QuYClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJxZiA9IGFyZ3MuZmluZChhcmcgPT4gYXJnLmhhc093blByb3BlcnR5KCdyZXF1aXJlZEZpZWxkcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRmllbGRzID0gcnFmID8gcnFmLnJlcXVpcmVkRmllbGRzIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3dJbnN0YW5jZVttZXRob2RdKC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTsgLy8gUHJveHlcblxuICAgICAgICB9XG4gICAgfVxufVxuXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHdpbmRvdy5TY2F0dGVyQ3liZXJXYXkgPSBTY2F0dGVyQ3liZXJXYXk7XG59XG4iLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/bundles/scatterjs-plugin-eosjs.min.js b/bundles/scatterjs-plugin-eosjs.min.js index 9541b20c..4e1d7e11 100644 --- a/bundles/scatterjs-plugin-eosjs.min.js +++ b/bundles/scatterjs-plugin-eosjs.min.js @@ -4,5 +4,5 @@ * https://github.com/GetScatter/scatter-js/ * Released under the MIT license. * - */!function(t){var r={};function e(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:n})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,r){if(1&r&&(t=e(t)),8&r)return t;if(4&r&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(e.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&r&&"string"!=typeof t)for(var o in t)e.d(n,o,function(r){return t[r]}.bind(null,o));return n},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},e.p="",e(e.s=139)}({0:function(t,r,e){t.exports=e(23)},1:function(t,r){function e(t,r,e,n,o,i,u){try{var a=t[i](u),c=a.value}catch(t){return void e(t)}a.done?r(c):Promise.resolve(c).then(n,o)}t.exports=function(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var u=t.apply(r,n);function a(t){e(u,o,i,a,c,"next",t)}function c(t){e(u,o,i,a,c,"throw",t)}a(void 0)}))}}},11:function(t,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(r){return"function"==typeof Symbol&&"symbol"===e(Symbol.iterator)?t.exports=n=function(t){return e(t)}:t.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":e(t)},n(r)}t.exports=n},139:function(t,r,e){"use strict";e.r(r),e.d(r,"default",(function(){return b}));var n=e(0),o=e.n(n),i=e(1),u=e.n(i),a=e(3),c=e.n(a),f=e(4),s=e.n(f),l=e(6),h=e.n(l),p=e(7),y=e.n(p),d=e(8),v=e.n(d),g=e(2),m=g.SocketService,w=function(t,r){return new Proxy(t,r)},b=function(t){function r(){return c()(this,r),h()(this,y()(r).call(this,g.Blockchains.EOS,g.PluginTypes.BLOCKCHAIN_SUPPORT))}return v()(r,t),s()(r,[{key:"setSocketService",value:function(t){m=t}},{key:"hookProvider",value:function(t){return function(r){return new Promise((function(e,n){var o=Object.assign(r,{blockchain:g.Blockchains.EOS,network:t,requiredFields:{}});m.sendApiRequest({type:"requestSignature",payload:o}).then((function(t){return e(t.signatures)})).catch((function(t){return n(t)}))}))}}},{key:"signatureProvider",value:function(){var t=0>=arguments.length?void 0:arguments[0];return function(r,e){var n,i=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var c=n.call(u,"catchLoc"),f=n.call(u,"finallyLoc");if(c&&f){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),_(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;_(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:L(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},4:function(t,r){function e(t,r){for(var e=0;e=arguments.length?void 0:arguments[0];return function(r,e){var n,i=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var c=n.call(u,"catchLoc"),f=n.call(u,"finallyLoc");if(c&&f){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),_(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;_(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:L(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},4:function(t,r){function e(t,r){for(var e=0;e=arguments.length||arguments[0];return function(r,e){var n=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var f=n.call(u,"catchLoc"),s=n.call(u,"finallyLoc");if(f&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),R(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;R(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:T(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},25:function(t,r){var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},30:function(t,r,e){"use strict";r.byteLength=function(t){var r=s(t),e=r[0],n=r[1];return 3*(e+n)/4-n},r.toByteArray=function(t){for(var r,e=s(t),n=e[0],u=e[1],a=new i(function(t,r,e){return 3*(r+e)/4-e}(0,n,u)),f=0,c=u>0?n-4:n,h=0;h>16&255,a[f++]=r>>8&255,a[f++]=255&r;2===u&&(r=o[t.charCodeAt(h)]<<2|o[t.charCodeAt(h+1)]>>4,a[f++]=255&r);1===u&&(r=o[t.charCodeAt(h)]<<10|o[t.charCodeAt(h+1)]<<4|o[t.charCodeAt(h+2)]>>2,a[f++]=r>>8&255,a[f++]=255&r);return a},r.fromByteArray=function(t){for(var r,e=t.length,o=e%3,i=[],u=0,a=e-o;ua?a:u+16383));1===o?(r=t[e-1],i.push(n[r>>2]+n[r<<4&63]+"==")):2===o&&(r=(t[e-2]<<8)+t[e-1],i.push(n[r>>10]+n[r>>4&63]+n[r<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=u.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function c(t,r,e){for(var o,i,u=[],a=r;a>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return u.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},31:function(t,r){r.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,l=e?-1:1,p=t[r+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=l,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),i-=s}return(p?-1:1)*u*Math.pow(2,i-n)},r.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,g=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?l/f:l*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=y,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=y,u/=256,s-=8);t[e+p-y]|=128*g}},4:function(t,r){function e(t,r){for(var e=0;e * @license MIT */ -var n=e(30),o=e(31),i=e(28);function u(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,r){if(u()=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function y(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(n)return F(t).length;r=(""+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,r,e);case"utf8":case"utf-8":return R(this,r,e);case"ascii":return T(this,r,e);case"latin1":case"binary":return B(this,r,e);case"base64":return x(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function v(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:w(t,r,e,n,o);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):w(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function w(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,l=0;lo&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function x(t,r,e){return 0===r&&e===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(r,e))}function R(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=S)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},f.prototype.compare=function(t,r,e,n,o){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),s=this.slice(n,o),c=t.slice(r,e),h=0;ho)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return m(this,t,r,e);case"utf8":case"utf-8":return b(this,t,r,e);case"ascii":return E(this,t,r,e);case"latin1":case"binary":return A(this,t,r,e);case"base64":return _(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function k(t,r,e,n,o,i){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function I(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Y(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function C(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,e,n,i){return i||C(t,0,e,4),o.write(t,r,e,n,23,4),e+4}function M(t,r,e,n,i){return i||C(t,0,e,8),o.write(t,r,e,n,52,8),e+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},f.prototype.readUInt8=function(t,r){return r||U(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||U(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||U(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},f.prototype.readInt8=function(t,r){return r||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||U(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||U(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||k(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Y(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);k(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);k(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Y(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return M(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return M(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!f.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function z(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(N,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}}).call(this,e(9))},11:function(t,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(r){return"function"==typeof Symbol&&"symbol"===e(Symbol.iterator)?t.exports=n=function(t){return e(t)}:t.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":e(t)},n(r)}t.exports=n},140:function(t,r,e){"use strict";e.r(r),function(t){e.d(r,"default",(function(){return A}));var n=e(11),o=e.n(n),i=e(0),u=e.n(i),a=e(1),f=e.n(a),s=e(3),c=e.n(s),h=e(4),l=e.n(h),p=e(6),y=e.n(p),g=e(7),d=e.n(g),v=e(8),w=e.n(v),m=e(2),b=m.SocketService,E=function(t,r){return new Proxy(t,r)},A=function(r){function e(){return c()(this,e),y()(this,d()(e).call(this,m.Blockchains.EOS,m.PluginTypes.BLOCKCHAIN_SUPPORT))}return w()(e,r),l()(e,[{key:"setSocketService",value:function(t){b=t}},{key:"hookProvider",value:function(r){var e,n=1=arguments.length||arguments[0];return function(r,e){var n=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var f=n.call(u,"catchLoc"),s=n.call(u,"finallyLoc");if(f&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),R(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;R(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:T(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},28:function(t,r){var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},30:function(t,r,e){"use strict";r.byteLength=function(t){var r=s(t),e=r[0],n=r[1];return 3*(e+n)/4-n},r.toByteArray=function(t){for(var r,e=s(t),n=e[0],u=e[1],a=new i(function(t,r,e){return 3*(r+e)/4-e}(0,n,u)),f=0,c=u>0?n-4:n,h=0;h>16&255,a[f++]=r>>8&255,a[f++]=255&r;2===u&&(r=o[t.charCodeAt(h)]<<2|o[t.charCodeAt(h+1)]>>4,a[f++]=255&r);1===u&&(r=o[t.charCodeAt(h)]<<10|o[t.charCodeAt(h+1)]<<4|o[t.charCodeAt(h+2)]>>2,a[f++]=r>>8&255,a[f++]=255&r);return a},r.fromByteArray=function(t){for(var r,e=t.length,o=e%3,i=[],u=0,a=e-o;ua?a:u+16383));1===o?(r=t[e-1],i.push(n[r>>2]+n[r<<4&63]+"==")):2===o&&(r=(t[e-2]<<8)+t[e-1],i.push(n[r>>10]+n[r>>4&63]+n[r<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=u.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function c(t,r,e){for(var o,i,u=[],a=r;a>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return u.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},31:function(t,r){r.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,l=e?-1:1,p=t[r+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=l,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),i-=s}return(p?-1:1)*u*Math.pow(2,i-n)},r.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,g=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?l/f:l*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=y,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=y,u/=256,s-=8);t[e+p-y]|=128*g}},4:function(t,r){function e(t,r){for(var e=0;e=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function y(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(n)return F(t).length;r=(""+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,r,e);case"utf8":case"utf-8":return R(this,r,e);case"ascii":return T(this,r,e);case"latin1":case"binary":return B(this,r,e);case"base64":return x(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function v(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:w(t,r,e,n,o);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):w(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function w(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,l=0;lo&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function x(t,r,e){return 0===r&&e===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(r,e))}function R(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=S)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},f.prototype.compare=function(t,r,e,n,o){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),s=this.slice(n,o),c=t.slice(r,e),h=0;ho)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return m(this,t,r,e);case"utf8":case"utf-8":return b(this,t,r,e);case"ascii":return E(this,t,r,e);case"latin1":case"binary":return A(this,t,r,e);case"base64":return _(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function k(t,r,e,n,o,i){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function I(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Y(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function C(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,e,n,i){return i||C(t,0,e,4),o.write(t,r,e,n,23,4),e+4}function M(t,r,e,n,i){return i||C(t,0,e,8),o.write(t,r,e,n,52,8),e+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},f.prototype.readUInt8=function(t,r){return r||U(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||U(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||U(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||U(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||U(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||U(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},f.prototype.readInt8=function(t,r){return r||U(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||U(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||U(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||U(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||U(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||U(t,4,this.length),o.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||U(t,8,this.length),o.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||k(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Y(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);k(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);k(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Y(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return M(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return M(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!f.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function z(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(N,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}}).call(this,e(7))},7:function(t,r){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(t){"object"==typeof window&&(e=window)}t.exports=e},8:function(t,r,e){var n=e(13),o=e(19);t.exports=function(t,r){return!r||"object"!==n(r)&&"function"!=typeof r?o(t):r}},9:function(t,r){function e(r){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},e(r)}t.exports=e}}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi1lb3NqczIvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJTY2F0dGVySlNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJhcmciLCJpbmZvIiwiZXJyb3IiLCJkb25lIiwiUHJvbWlzZSIsInRoZW4iLCJmbiIsInNlbGYiLCJ0aGlzIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwic2V0UHJvdG90eXBlT2YiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJUeXBlRXJyb3IiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiX3R5cGVvZjIiLCJvYmoiLCJpdGVyYXRvciIsIl90eXBlb2YiLCJzb2NrZXRTZXJ2aWNlIiwiU29ja2V0U2VydmljZSIsInByb3h5IiwiZHVtbXkiLCJoYW5kbGVyIiwiUHJveHkiLCJTY2F0dGVyRU9TIiwiQmxvY2tjaGFpbnMiLCJFT1MiLCJQbHVnaW5UeXBlcyIsIkJMT0NLQ0hBSU5fU1VQUE9SVCIsIl9zIiwibmV0d29yayIsImZpZWxkc0ZldGNoZXIiLCJOZXR3b3JrIiwiZnJvbUpzb24iLCJyZXF1aXJlZEZpZWxkcyIsImdldEF2YWlsYWJsZUtleXMiLCJhIiwic2VuZEFwaVJlcXVlc3QiLCJ0eXBlIiwicGF5bG9hZCIsImlkIiwiYWNjb3VudHMiLCJmaWx0ZXIiLCJ4IiwiYmxvY2tjaGFpbiIsIm1hcCIsInB1YmxpY0tleSIsInNpZ24iLCJzaWduYXJncyIsInNlcmlhbGl6ZWRUcmFuc2FjdGlvbiIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsInRyYW5zYWN0aW9uIiwic2lnbmF0dXJlcyIsInNpZ25lcnMiLCJzY2F0dGVyU2lnbmVyIiwiZW9zSG9vayIsIkFycmF5IiwiaXNBcnJheSIsInNjYXR0ZXJLZXlzIiwib3RoZXJLZXlzIiwiYWxsIiwic2lnbmVyIiwia2V5cyIsInB1c2giLCJjb25jYXQiLCJFcnJvciIsImluZGl2aWR1YWxTaWduQXJncyIsInByb3ZpZGVyIiwiYWJpcyIsImNoYWluSWQiLCJyZXF1aXJlZEtleXMiLCJwdWxsT3V0U2lnbmF0dXJlcyIsInJlc3VsdCIsInNjYXR0ZXJTaWdzIiwib3RoZXJTaWdzIiwic2lnIiwiX2FwaSIsIl9vcHRpb25zIiwic2lnbmF0dXJlUHJvdmlkZXIiLCJob29rUHJvdmlkZXIiLCJhc3NpZ24iLCJlb3NJbnN0YW5jZSIsIm1ldGhvZCIsInJxZiIsImZpbmQiLCJQbHVnaW4iLCJ3aW5kb3ciLCJSZWZlcmVuY2VFcnJvciIsIlNjYXR0ZXJKUyIsIl9zZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInJ1bnRpbWUiLCJPcCIsImhhc093biIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ3cmFwIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY29udGV4dCIsIkNvbnRleHQiLCJfaW52b2tlIiwic3RhdGUiLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZSIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsIkNvbnRpbnVlU2VudGluZWwiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJlY29yZCIsInRyeUNhdGNoIiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIm1ha2VJbnZva2VNZXRob2QiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJnZXRQcm90byIsImdldFByb3RvdHlwZU9mIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJ2YWx1ZXMiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJBc3luY0l0ZXJhdG9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJpbnZva2UiLCJfX2F3YWl0IiwidW53cmFwcGVkIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsImVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJtYXJrIiwiYXdyYXAiLCJhc3luYyIsIml0ZXIiLCJyZXZlcnNlIiwicG9wIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiRnVuY3Rpb24iLCJhcnIiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInRtcCIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsImxlbiIsInJldkxvb2t1cCIsImNoYXJDb2RlQXQiLCJmcm9tQnl0ZUFycmF5IiwidWludDgiLCJleHRyYUJ5dGVzIiwicGFydHMiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJqb2luIiwiVWludDhBcnJheSIsImNvZGUiLCJpbmRleE9mIiwic3RhcnQiLCJlbmQiLCJudW0iLCJvdXRwdXQiLCJyZWFkIiwiYnVmZmVyIiwib2Zmc2V0IiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiTmFOIiwiSW5maW5pdHkiLCJNYXRoIiwicG93Iiwid3JpdGUiLCJydCIsImFicyIsImZsb29yIiwibG9nIiwiTE4yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJiYXNlNjQiLCJpZWVlNzU0Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJjcmVhdGVCdWZmZXIiLCJ0aGF0IiwiUmFuZ2VFcnJvciIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZSIsIkFycmF5QnVmZmVyIiwiYXJyYXkiLCJieXRlT2Zmc2V0IiwiZnJvbUFycmF5TGlrZSIsImZyb21BcnJheUJ1ZmZlciIsInN0cmluZyIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsImZyb21TdHJpbmciLCJpc0J1ZmZlciIsImNoZWNrZWQiLCJjb3B5IiwidmFsIiwiZGF0YSIsImZyb21PYmplY3QiLCJhc3NlcnRTaXplIiwic2l6ZSIsImlzVmlldyIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwidG9Mb3dlckNhc2UiLCJzbG93VG9TdHJpbmciLCJoZXhTbGljZSIsInV0ZjhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsImJhc2U2NFNsaWNlIiwidXRmMTZsZVNsaWNlIiwic3dhcCIsImIiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwiU3RyaW5nIiwiYnVmIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaiIsImhleFdyaXRlIiwiTnVtYmVyIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsInN0ciIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1bml0cyIsImhpIiwibG8iLCJ1dGYxNmxlVG9CeXRlcyIsIm1pbiIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJmcm9tQ2hhckNvZGUiLCJkZWNvZGVDb2RlUG9pbnRzQXJyYXkiLCJTbG93QnVmZmVyIiwiYWxsb2MiLCJJTlNQRUNUX01BWF9CWVRFUyIsImdsb2JhbCIsImZvbyIsInN1YmFycmF5IiwidHlwZWRBcnJheVN1cHBvcnQiLCJwb29sU2l6ZSIsIl9hdWdtZW50Iiwic3BlY2llcyIsImZpbGwiLCJhbGxvY1Vuc2FmZVNsb3ciLCJfaXNCdWZmZXIiLCJjb21wYXJlIiwieSIsImxpc3QiLCJwb3MiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJlcXVhbHMiLCJpbnNwZWN0IiwibWF4IiwibWF0Y2giLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJvdXQiLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJleHQiLCJjaGVja0ludCIsIm9iamVjdFdyaXRlVUludDE2IiwibGl0dGxlRW5kaWFuIiwib2JqZWN0V3JpdGVVSW50MzIiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0Iiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInNsaWNlTGVuIiwicmVhZFVJbnRMRSIsIm11bCIsInJlYWRVSW50QkUiLCJyZWFkVUludDgiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0Iiwic2V0IiwiSU5WQUxJRF9CQVNFNjRfUkUiLCJsZWFkU3Vycm9nYXRlIiwidHJpbSIsInJlcGxhY2UiLCJzdHJpbmd0cmltIiwiYmFzZTY0Y2xlYW4iLCJzcmMiLCJkc3QiLCJnIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2dldFByb3RvdHlwZU9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Z0JBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFP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T0FBT0EsRUF1SG1Cb0gsQ0FBWXBILElBR3hDLFNBQVNGLEVBQVl1SCxFQUFLQyxFQUFLL00sRUFBUWxFLEdBQ3JDLElBQUssSUFBSTlNLEVBQUksRUFBR0EsRUFBSThNLEtBQ2I5TSxFQUFJZ1IsR0FBVStNLEVBQUlqUixRQUFZOU0sR0FBSzhkLEVBQUloUixVQURoQjlNLEVBRTVCK2QsRUFBSS9kLEVBQUlnUixHQUFVOE0sRUFBSTlkLEdBRXhCLE9BQU9BLEssaUNDdnZEVCxJQUFJZ2UsRUFHSkEsRUFBSSxXQUNILE9BQU9sYixLQURKLEdBSUosSUFFQ2tiLEVBQUlBLEdBQUssSUFBSW5QLFNBQVMsY0FBYixHQUNSLE1BQU91QyxHQUVjLGlCQUFYL0ksU0FBcUIyVixFQUFJM1YsUUFPckN0SSxFQUFPRCxRQUFVa2UsRyxrQkNuQmpCLElBQUlsYSxFQUFVLEVBQVEsSUFFbEJtYSxFQUF3QixFQUFRLElBVXBDbGUsRUFBT0QsUUFSUCxTQUFvQytDLEVBQU0xQyxHQUN4QyxPQUFJQSxHQUEyQixXQUFsQjJELEVBQVEzRCxJQUFzQyxtQkFBVEEsRUFJM0M4ZCxFQUFzQnBiLEdBSHBCMUMsSSxnQkNOWCxTQUFTK2QsRUFBZ0J6ZCxHQUl2QixPQUhBVixFQUFPRCxRQUFVb2UsRUFBa0J4ZCxPQUFPMEMsZUFBaUIxQyxPQUFPdUssZUFBaUIsU0FBeUJ4SyxHQUMxRyxPQUFPQSxFQUFFZ0ksV0FBYS9ILE9BQU91SyxlQUFleEssSUFFdkN5ZCxFQUFnQnpkLEdBR3pCVixFQUFPRCxRQUFVb2UiLCJmaWxlIjoic2NhdHRlcmpzLXBsdWdpbi1lb3NqczIubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE2Myk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiaW1wb3J0IHtcblx0UGx1Z2luLFxuXHRQbHVnaW5UeXBlcyxcblx0QmxvY2tjaGFpbnMsXG5cdE5ldHdvcmssXG5cdFNvY2tldFNlcnZpY2Vcbn0gZnJvbSAnQHNjYXR0ZXJqcy9jb3JlJztcblxubGV0IHNvY2tldFNlcnZpY2UgPSBTb2NrZXRTZXJ2aWNlO1xuY29uc3QgcHJveHkgPSAoZHVtbXksIGhhbmRsZXIpID0+IG5ldyBQcm94eShkdW1teSwgaGFuZGxlcik7XG5sZXQgY2FjaGUgPSB7fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NhdHRlckVPUyBleHRlbmRzIFBsdWdpbiB7XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlcihCbG9ja2NoYWlucy5FT1MsIFBsdWdpblR5cGVzLkJMT0NLQ0hBSU5fU1VQUE9SVCk7XG4gICAgfVxuXG5cdHNldFNvY2tldFNlcnZpY2UoX3Mpe1xuXHRcdHNvY2tldFNlcnZpY2UgPSBfcztcblx0fVxuXG4gICAgaG9va1Byb3ZpZGVyKG5ldHdvcmssIGZpZWxkc0ZldGNoZXIgPSBudWxsKXtcbiAgICAgICAgbmV0d29yayA9IE5ldHdvcmsuZnJvbUpzb24obmV0d29yayk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlcXVpcmVkRmllbGRzOnt9LFxuICAgICAgICAgICAgZ2V0QXZhaWxhYmxlS2V5czphc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHNvY2tldFNlcnZpY2Uuc2VuZEFwaVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOidpZGVudGl0eUZyb21QZXJtaXNzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6e31cbiAgICAgICAgICAgICAgICB9KS50aGVuKGlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKSByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZC5hY2NvdW50cy5maWx0ZXIoeCA9PiB4LmJsb2NrY2hhaW4gPT09IEJsb2NrY2hhaW5zLkVPUykubWFwKHggPT4geC5wdWJsaWNLZXkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzaWduOmFzeW5jIChzaWduYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gZmllbGRzRmV0Y2hlciA/IGZpZWxkc0ZldGNoZXIoKSA6IHt9O1xuICAgICAgICAgICAgICAgIHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IEJ1ZmZlci5mcm9tKHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0ICAgICAgICAgICAgICAgIHNvY2tldFNlcnZpY2Uuc2VuZEFwaVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToncmVxdWVzdFNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOnsgdHJhbnNhY3Rpb246c2lnbmFyZ3MsIGJsb2NrY2hhaW46QmxvY2tjaGFpbnMuRU9TLCBuZXR3b3JrLCByZXF1aXJlZEZpZWxkcyB9XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oeCA9PiB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7c2lnbmF0dXJlczp4LnNpZ25hdHVyZXMsIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjpCdWZmZXIuZnJvbShzaWduYXJncy5zZXJpYWxpemVkVHJhbnNhY3Rpb24sICdoZXgnKX0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHggPT4gcmVqZWN0KHgpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdWx0aUhvb2sobmV0d29yaywgc2lnbmVycyl7XG4gICAgICAgIGNvbnN0IHNjYXR0ZXJTaWduZXIgPSB0aGlzLmVvc0hvb2sobmV0d29yayk7XG5cbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoc2lnbmVycykpIHNpZ25lcnMgPSBbc2lnbmVyc107XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldEF2YWlsYWJsZUtleXM6YXN5bmMgKCkgPT4ge1xuXHQgICAgICAgICAgICB0cnkge1xuXHRcdCAgICAgICAgICAgIGNvbnN0IHNjYXR0ZXJLZXlzID0gYXdhaXQgc2NhdHRlclNpZ25lci5nZXRBdmFpbGFibGVLZXlzKCk7XG5cblx0XHQgICAgICAgICAgICBsZXQgb3RoZXJLZXlzID0gW107XG5cdFx0ICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoc2lnbmVycy5tYXAoYXN5bmMgc2lnbmVyID0+IHtcblx0XHRcdCAgICAgICAgICAgIGF3YWl0IHNpZ25lci5nZXRBdmFpbGFibGVLZXlzKCkudGhlbihrZXlzID0+IHtcblx0XHRcdFx0ICAgICAgICAgICAga2V5cy5tYXAoa2V5ID0+IG90aGVyS2V5cy5wdXNoKGtleSkpO1xuXHRcdFx0ICAgICAgICAgICAgfSk7XG5cdFx0ICAgICAgICAgICAgXHRyZXR1cm4gdHJ1ZTtcblx0XHQgICAgICAgICAgICB9KSk7XG5cblx0XHQgICAgICAgICAgICByZXR1cm4gc2NhdHRlcktleXMuY29uY2F0KG90aGVyS2V5cylcblx0ICAgICAgICAgICAgfSBjYXRjaChlKXtcblx0XHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNpZ246YXN5bmMgKHNpZ25hcmdzKSA9PiB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdFx0ICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gQnVmZmVyLmZyb20oc2lnbmFyZ3Muc2VyaWFsaXplZFRyYW5zYWN0aW9uLCAnaGV4Jyk7XG5cblx0XHQgICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsU2lnbkFyZ3MgPSBhc3luYyBwcm92aWRlciA9PiAoe1xuXHRcdFx0ICAgICAgICAgICAgYWJpczpzaWduYXJncy5hYmlzLFxuXHRcdFx0ICAgICAgICAgICAgY2hhaW5JZDogbmV0d29yay5jaGFpbklkLFxuXHRcdFx0ICAgICAgICAgICAgcmVxdWlyZWRLZXlzOiBhd2FpdCBwcm92aWRlci5nZXRBdmFpbGFibGVLZXlzKCksXG5cdFx0XHQgICAgICAgICAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb25cblx0XHQgICAgICAgICAgICB9KTtcblxuXHRcdCAgICAgICAgICAgIGNvbnN0IHB1bGxPdXRTaWduYXR1cmVzID0gcmVzdWx0ID0+IHtcblx0XHRcdCAgICAgICAgICAgIGlmKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5oYXNPd25Qcm9wZXJ0eSgnc2lnbmF0dXJlcycpKSByZXR1cm4gcmVzdWx0LnNpZ25hdHVyZXM7XG5cdFx0XHQgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuXHRcdCAgICAgICAgICAgIH07XG5cblx0XHQgICAgICAgICAgICBjb25zdCBzY2F0dGVyU2lncyA9IGF3YWl0IHNjYXR0ZXJTaWduZXJcblx0XHRcdCAgICAgICAgICAgIC5zaWduKGF3YWl0IGluZGl2aWR1YWxTaWduQXJncyhzY2F0dGVyU2lnbmVyKSlcblx0XHRcdCAgICAgICAgICAgIC50aGVuKHggPT4gcHVsbE91dFNpZ25hdHVyZXMoeCkpO1xuXG5cdFx0ICAgICAgICAgICAgbGV0IG90aGVyU2lncyA9IFtdO1xuXHRcdCAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHNpZ25lcnMubWFwKGFzeW5jIHNpZ25lciA9PiB7XG5cdFx0XHQgICAgICAgICAgICBhd2FpdCBzaWduZXIuc2lnbihhd2FpdCBpbmRpdmlkdWFsU2lnbkFyZ3Moc2lnbmVyKSkudGhlbihyZXN1bHQgPT4ge1xuXHRcdFx0XHQgICAgICAgICAgICBwdWxsT3V0U2lnbmF0dXJlcyhyZXN1bHQpLm1hcChzaWcgPT4gb3RoZXJTaWdzLnB1c2goc2lnKSk7XG5cdFx0XHQgICAgICAgICAgICB9KTtcblx0XHRcdCAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXHRcdCAgICAgICAgICAgIH0pKTtcblxuXHRcdCAgICAgICAgICAgIHJldHVybiB7XG5cdFx0XHQgICAgICAgICAgICBzaWduYXR1cmVzOiBzY2F0dGVyU2lncy5jb25jYXQob3RoZXJTaWdzKSxcblx0XHRcdCAgICAgICAgICAgIHNlcmlhbGl6ZWRUcmFuc2FjdGlvblxuXHRcdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBjYXRjaChlKXtcblx0ICAgICAgICAgICAgXHR0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hdHVyZVByb3ZpZGVyKC4uLmFyZ3Mpe1xuXG4gICAgICAgIGNvbnN0IHRocm93SWZOb0lkZW50aXR5ID0gYXJnc1swXTtcblxuICAgICAgICAvLyBQcm90b2NvbCB3aWxsIGJlIGRlcHJlY2F0ZWQuXG4gICAgICAgIHJldHVybiAobmV0d29yaywgX2FwaSwgX29wdGlvbnMgPSB7fSkgPT4ge1xuXG4gICAgICAgICAgICBuZXR3b3JrID0gTmV0d29yay5mcm9tSnNvbihuZXR3b3JrKTtcblxuICAgICAgICAgICAgbGV0IHJlcXVpcmVkRmllbGRzID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWVsZHNGZXRjaGVyID0gKCkgPT4gcmVxdWlyZWRGaWVsZHM7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVQcm92aWRlciA9IHRoaXMuaG9va1Byb3ZpZGVyKG5ldHdvcmssIGZpZWxkc0ZldGNoZXIpO1xuXG4gICAgICAgICAgICAvLyBUaGUgcHJveHkgc3RhbmRzIGJldHdlZW4gdGhlIGVvc2pzIG9iamVjdCBhbmQgc2NhdHRlci5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBhZGQgc3BlY2lhbCBmdW5jdGlvbmFsaXR5IGxpa2UgYWRkaW5nIGByZXF1aXJlZEZpZWxkc2AgYXJyYXlzIHRvIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgcmV0dXJuIHByb3h5KG5ldyBfYXBpKE9iamVjdC5hc3NpZ24oX29wdGlvbnMsIHtzaWduYXR1cmVQcm92aWRlcn0pKSwge1xuICAgICAgICAgICAgICAgIGdldChlb3NJbnN0YW5jZSwgbWV0aG9kKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFx0aWYodHlwZW9mIGVvc0luc3RhbmNlW21ldGhvZF0gPT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgXHRcdHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBlb3Nqcy5BcGkoKSBvYmplY3QuYClcblx0XHRcdFx0XHRcdH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnFmID0gYXJncy5maW5kKGFyZyA9PiBhcmcuaGFzT3duUHJvcGVydHkoJ3JlcXVpcmVkRmllbGRzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRGaWVsZHMgPSBycWYgPyBycWYucmVxdWlyZWRGaWVsZHMgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlb3NJbnN0YW5jZVttZXRob2RdKC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTsgLy8gUHJveHlcblxuICAgICAgICB9XG4gICAgfVxufVxuXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuXHR3aW5kb3cuU2NhdHRlckVPUyA9IFNjYXR0ZXJFT1M7XG59XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwibW9kdWxlLmV4cG9ydHMgPSBTY2F0dGVySlM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZVxuICAvLyBvciBub3QsIHJldHVybiB0aGUgcnVudGltZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZGVjbGFyZSB0aGUgdmFyaWFibGVcbiAgLy8gcmVnZW5lcmF0b3JSdW50aW1lIGluIHRoZSBvdXRlciBzY29wZSwgd2hpY2ggYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlXG4gIC8vIGluamVjdGVkIGVhc2lseSBieSBgYmluL3JlZ2VuZXJhdG9yIC0taW5jbHVkZS1ydW50aW1lIHNjcmlwdC5qc2AuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KFxuICAvLyBJZiB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGUsIHVzZSBtb2R1bGUuZXhwb3J0c1xuICAvLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuICAvLyBvYmplY3QuIEVpdGhlciB3YXksIHRoZSByZXN1bHRpbmcgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplXG4gIC8vIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgdmFyaWFibGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuXG4gIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgPyBtb2R1bGUuZXhwb3J0cyA6IHt9XG4pKTtcblxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIC8vIFRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgcnVubmluZyBpbiBzdHJpY3QgbW9kZSwgc28gdGhlIGFib3ZlXG4gIC8vIGFzc2lnbm1lbnQgc2hvdWxkIGFsd2F5cyB3b3JrIHVubGVzcyBzb21ldGhpbmcgaXMgbWlzY29uZmlndXJlZC4gSnVzdFxuICAvLyBpbiBjYXNlIHJ1bnRpbWUuanMgYWNjaWRlbnRhbGx5IHJ1bnMgaW4gc3RyaWN0IG1vZGUsIHdlIGNhbiBlc2NhcGVcbiAgLy8gc3RyaWN0IG1vZGUgdXNpbmcgYSBnbG9iYWwgRnVuY3Rpb24gY2FsbC4gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBmYWlsXG4gIC8vIGlmIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZm9yYmlkcyB1c2luZyBGdW5jdGlvbiwgYnV0IGluIHRoYXQgY2FzZVxuICAvLyB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGUgYWNjaWRlbnRhbCBzdHJpY3QgbW9kZSBwcm9ibGVtLiBJZlxuICAvLyB5b3UndmUgbWlzY29uZmlndXJlZCB5b3VyIGJ1bmRsZXIgdG8gZm9yY2Ugc3RyaWN0IG1vZGUgYW5kIGFwcGxpZWQgYVxuICAvLyBDU1AgdG8gZm9yYmlkIEZ1bmN0aW9uLCBhbmQgeW91J3JlIG5vdCB3aWxsaW5nIHRvIGZpeCBlaXRoZXIgb2YgdGhvc2VcbiAgLy8gcHJvYmxlbXMsIHBsZWFzZSBkZXRhaWwgeW91ciB1bmlxdWUgcHJlZGljYW1lbnQgaW4gYSBHaXRIdWIgaXNzdWUuXG4gIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/bundles/scatterjs-plugin-fio.min.js b/bundles/scatterjs-plugin-fio.min.js index 14bec40f..59d1adc5 100644 --- a/bundles/scatterjs-plugin-fio.min.js +++ b/bundles/scatterjs-plugin-fio.min.js @@ -4,12 +4,12 @@ * https://github.com/GetScatter/scatter-js/ * Released under the MIT license. * - */!function(t){var r={};function e(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:n})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,r){if(1&r&&(t=e(t)),8&r)return t;if(4&r&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(e.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&r&&"string"!=typeof t)for(var o in t)e.d(n,o,function(r){return t[r]}.bind(null,o));return n},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},e.p="",e(e.s=141)}({0:function(t,r,e){t.exports=e(23)},1:function(t,r){function e(t,r,e,n,o,i,u){try{var a=t[i](u),f=a.value}catch(t){return void e(t)}a.done?r(f):Promise.resolve(f).then(n,o)}t.exports=function(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var u=t.apply(r,n);function a(t){e(u,o,i,a,f,"next",t)}function f(t){e(u,o,i,a,f,"throw",t)}a(void 0)}))}}},10:function(t,r,e){"use strict";(function(t){ + */!function(t){var r={};function e(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:n})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,r){if(1&r&&(t=e(t)),8&r)return t;if(4&r&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(e.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&r&&"string"!=typeof t)for(var o in t)e.d(n,o,function(r){return t[r]}.bind(null,o));return n},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},e.p="",e(e.s=164)}({0:function(t,r,e){t.exports=e(21)},1:function(t,r){function e(t,r,e,n,o,i,u){try{var a=t[i](u),f=a.value}catch(t){return void e(t)}a.done?r(f):Promise.resolve(f).then(n,o)}t.exports=function(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var u=t.apply(r,n);function a(t){e(u,o,i,a,f,"next",t)}function f(t){e(u,o,i,a,f,"throw",t)}a(void 0)}))}}},10:function(t,r,e){var n=e(20);t.exports=function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),r&&n(t,r)}},13:function(t,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(r){return"function"==typeof Symbol&&"symbol"===e(Symbol.iterator)?t.exports=n=function(t){return e(t)}:t.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":e(t)},n(r)}t.exports=n},164:function(t,r,e){"use strict";e.r(r),function(t){e.d(r,"default",(function(){return P}));var n=e(0),o=e.n(n),i=e(1),u=e.n(i),a=e(3),f=e.n(a),s=e(4),c=e.n(s),h=e(8),l=e.n(h),p=e(9),y=e.n(p),g=e(10),d=e.n(g),v=e(2),w=null,b=null,m=v.SocketService,_=function(t,r){return new Proxy(t,r)},E=function(t){return{method:"POST",body:JSON.stringify(t)}},A=function(t,r){var e=2=arguments.length||arguments[0];return function(r,e){var n=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var f=n.call(u,"catchLoc"),s=n.call(u,"finallyLoc");if(f&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),R(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;R(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:T(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},25:function(t,r){var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},30:function(t,r,e){"use strict";r.byteLength=function(t){var r=s(t),e=r[0],n=r[1];return 3*(e+n)/4-n},r.toByteArray=function(t){for(var r,e=s(t),n=e[0],u=e[1],a=new i(function(t,r,e){return 3*(r+e)/4-e}(0,n,u)),f=0,c=u>0?n-4:n,h=0;h>16&255,a[f++]=r>>8&255,a[f++]=255&r;2===u&&(r=o[t.charCodeAt(h)]<<2|o[t.charCodeAt(h+1)]>>4,a[f++]=255&r);1===u&&(r=o[t.charCodeAt(h)]<<10|o[t.charCodeAt(h+1)]<<4|o[t.charCodeAt(h+2)]>>2,a[f++]=r>>8&255,a[f++]=255&r);return a},r.fromByteArray=function(t){for(var r,e=t.length,o=e%3,i=[],u=0,a=e-o;ua?a:u+16383));1===o?(r=t[e-1],i.push(n[r>>2]+n[r<<4&63]+"==")):2===o&&(r=(t[e-2]<<8)+t[e-1],i.push(n[r>>10]+n[r>>4&63]+n[r<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=u.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function c(t,r,e){for(var o,i,u=[],a=r;a>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return u.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},31:function(t,r){r.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,l=e?-1:1,p=t[r+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=l,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),i-=s}return(p?-1:1)*u*Math.pow(2,i-n)},r.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,g=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?l/f:l*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=y,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=y,u/=256,s-=8);t[e+p-y]|=128*g}},4:function(t,r){function e(t,r){for(var e=0;e * @license MIT */ -var n=e(30),o=e(31),i=e(28);function u(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,r){if(u()=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function y(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(n)return F(t).length;r=(""+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,r,e);case"utf8":case"utf-8":return R(this,r,e);case"ascii":return T(this,r,e);case"latin1":case"binary":return O(this,r,e);case"base64":return x(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function v(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:w(t,r,e,n,o);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):w(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function w(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,l=0;lo&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function x(t,r,e){return 0===r&&e===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(r,e))}function R(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=S)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},f.prototype.compare=function(t,r,e,n,o){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),s=this.slice(n,o),c=t.slice(r,e),h=0;ho)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return b(this,t,r,e);case"utf8":case"utf-8":return m(this,t,r,e);case"ascii":return _(this,t,r,e);case"latin1":case"binary":return E(this,t,r,e);case"base64":return A(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function U(t,r,e,n,o,i){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function I(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Y(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function C(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,e,n,i){return i||C(t,0,e,4),o.write(t,r,e,n,23,4),e+4}function M(t,r,e,n,i){return i||C(t,0,e,8),o.write(t,r,e,n,52,8),e+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},f.prototype.readUInt8=function(t,r){return r||L(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||L(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||L(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||L(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||L(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},f.prototype.readInt8=function(t,r){return r||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||L(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||L(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||L(t,4,this.length),o.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||L(t,4,this.length),o.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||L(t,8,this.length),o.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||L(t,8,this.length),o.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||U(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Y(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);U(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);U(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Y(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return M(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return M(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!f.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function z(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}}).call(this,e(9))},11:function(t,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(r){return"function"==typeof Symbol&&"symbol"===e(Symbol.iterator)?t.exports=n=function(t){return e(t)}:t.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":e(t)},n(r)}t.exports=n},141:function(t,r,e){"use strict";e.r(r),function(t){e.d(r,"default",(function(){return P}));var n=e(0),o=e.n(n),i=e(1),u=e.n(i),a=e(3),f=e.n(a),s=e(4),c=e.n(s),h=e(6),l=e.n(h),p=e(7),y=e.n(p),g=e(8),d=e.n(g),v=e(2),w=null,b=null,m=v.SocketService,_=function(t,r){return new Proxy(t,r)},E=function(t){return{method:"POST",body:JSON.stringify(t)}},A=function(t,r){var e=2=arguments.length||arguments[0];return function(r,e){var n=2=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return o("end");if(u.tryLoc<=this.prev){var f=n.call(u,"catchLoc"),s=n.call(u,"finallyLoc");if(f&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),R(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var o=n.arg;R(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:T(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},28:function(t,r){var e={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==e.call(t)}},3:function(t,r){t.exports=function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}},30:function(t,r,e){"use strict";r.byteLength=function(t){var r=s(t),e=r[0],n=r[1];return 3*(e+n)/4-n},r.toByteArray=function(t){for(var r,e=s(t),n=e[0],u=e[1],a=new i(function(t,r,e){return 3*(r+e)/4-e}(0,n,u)),f=0,c=u>0?n-4:n,h=0;h>16&255,a[f++]=r>>8&255,a[f++]=255&r;2===u&&(r=o[t.charCodeAt(h)]<<2|o[t.charCodeAt(h+1)]>>4,a[f++]=255&r);1===u&&(r=o[t.charCodeAt(h)]<<10|o[t.charCodeAt(h+1)]<<4|o[t.charCodeAt(h+2)]>>2,a[f++]=r>>8&255,a[f++]=255&r);return a},r.fromByteArray=function(t){for(var r,e=t.length,o=e%3,i=[],u=0,a=e-o;ua?a:u+16383));1===o?(r=t[e-1],i.push(n[r>>2]+n[r<<4&63]+"==")):2===o&&(r=(t[e-2]<<8)+t[e-1],i.push(n[r>>10]+n[r>>4&63]+n[r<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,f=u.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function c(t,r,e){for(var o,i,u=[],a=r;a>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return u.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},31:function(t,r){r.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,l=e?-1:1,p=t[r+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=l,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),i-=s}return(p?-1:1)*u*Math.pow(2,i-n)},r.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,g=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?l/f:l*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+p]=255&a,p+=y,a/=256,o-=8);for(u=u<0;t[e+p]=255&u,p+=y,u/=256,s-=8);t[e+p-y]|=128*g}},4:function(t,r){function e(t,r){for(var e=0;e=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|t}function y(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(n)return F(t).length;r=(""+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,r,e);case"utf8":case"utf-8":return R(this,r,e);case"ascii":return T(this,r,e);case"latin1":case"binary":return O(this,r,e);case"base64":return x(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function v(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:w(t,r,e,n,o);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):w(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function w(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,l=0;lo&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function x(t,r,e){return 0===r&&e===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(r,e))}function R(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=S)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},f.prototype.compare=function(t,r,e,n,o){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),s=this.slice(n,o),c=t.slice(r,e),h=0;ho)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return b(this,t,r,e);case"utf8":case"utf-8":return m(this,t,r,e);case"ascii":return _(this,t,r,e);case"latin1":case"binary":return E(this,t,r,e);case"base64":return A(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function U(t,r,e,n,o,i){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function I(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Y(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function C(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,e,n,i){return i||C(t,0,e,4),o.write(t,r,e,n,23,4),e+4}function M(t,r,e,n,i){return i||C(t,0,e,8),o.write(t,r,e,n,52,8),e+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},f.prototype.readUInt8=function(t,r){return r||L(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||L(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||L(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||L(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||L(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},f.prototype.readInt8=function(t,r){return r||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||L(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||L(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||L(t,4,this.length),o.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||L(t,4,this.length),o.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||L(t,8,this.length),o.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||L(t,8,this.length),o.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||U(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Y(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);U(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);U(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):I(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):I(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Y(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||U(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Y(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return M(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return M(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!f.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function z(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}}).call(this,e(7))},7:function(t,r){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(t){"object"==typeof window&&(e=window)}t.exports=e},8:function(t,r,e){var n=e(13),o=e(19);t.exports=function(t,r){return!r||"object"!==n(r)&&"function"!=typeof r?o(t):r}},9:function(t,r){function e(r){return t.exports=e=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},e(r)}t.exports=e}}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi1maW8vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJTY2F0dGVySlNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJhcmciLCJpbmZvIiwiZXJyb3IiLCJkb25lIiwiUHJvbWlzZSIsInRoZW4iLCJmbiIsInNlbGYiLCJ0aGlzIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5IiwiZXJyIiwidW5kZWZpbmVkIiwic2V0UHJvdG90eXBlT2YiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJUeXBlRXJyb3IiLCJjb25zdHJ1Y3RvciIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiX3R5cGVvZjIiLCJvYmoiLCJpdGVyYXRvciIsIl90eXBlb2YiLCJmaW9qc1V0aWwiLCJOdW1lcmljIiwic29ja2V0U2VydmljZSIsIlNvY2tldFNlcnZpY2UiLCJwcm94eSIsImR1bW15IiwiaGFuZGxlciIsIlByb3h5IiwiZmV0Y2hQb3N0UGFyYW1zIiwicGFyYW1zIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRDaGFpbkRhdGEiLCJuZXR3b3JrIiwicm91dGUiLCJmZXRjaCIsImZ1bGxob3N0IiwieCIsImpzb24iLCJTY2F0dGVyRklPIiwiQmxvY2tjaGFpbnMiLCJGSU8iLCJQbHVnaW5UeXBlcyIsIkJMT0NLQ0hBSU5fU1VQUE9SVCIsIl9zIiwiZmllbGRzRmV0Y2hlciIsIk5ldHdvcmsiLCJmcm9tSnNvbiIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QXZhaWxhYmxlS2V5cyIsImEiLCJzZW5kQXBpUmVxdWVzdCIsInR5cGUiLCJwYXlsb2FkIiwiaWQiLCJhY2NvdW50cyIsImZpbHRlciIsImJsb2NrY2hhaW4iLCJtYXAiLCJwdWJsaWNLZXkiLCJzaWduIiwic2lnbmFyZ3MiLCJzZXJpYWxpemVkVHJhbnNhY3Rpb24iLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJ0cmFuc2FjdGlvbiIsInNpZ25hdHVyZXMiLCJjb21wcmVzc2lvbiIsInBhY2tlZF9jb250ZXh0X2ZyZWVfZGF0YSIsImFycmF5VG9IZXgiLCJzZXJpYWxpemVkQ29udGV4dEZyZWVEYXRhIiwiVWludDhBcnJheSIsInBhY2tlZF90cngiLCJjb250cmFjdHMiLCJhbGwiLCJhY2NvdW50IiwiYWNjb3VudF9uYW1lIiwiY29uc29sZSIsImFiaSIsImNoYWluQWJpIiwicmF3QWJpIiwiYmFzZTY0VG9CaW5hcnkiLCJyYXdBYmlUb0pzb24iLCJnZXRSYXdBYmkiLCJhY2NvdW50TmFtZSIsImZldGNoQWJpcyIsIl9maW9qcyIsIl9vcHRpb25zIiwic2lnbmF0dXJlUHJvdmlkZXIiLCJob29rUHJvdmlkZXIiLCJhdXRob3JpdHlQcm92aWRlciIsImdldFJlcXVpcmVkS2V5cyIsIkFwaSIsInRleHRFbmNvZGVyIiwidGV4dERlY29kZXIiLCJhYmlQcm92aWRlciIsImdldENhY2hlZEFiaSIsInByb3hpZWQiLCJhc3NpZ24iLCJjaGFpbklkIiwiZmlvanNJbnN0YW5jZSIsIkVycm9yIiwicnFmIiwiZmluZCIsImdldFRyYW5zYWN0aW9uT3B0aW9ucyIsImJsb2NrX251bV9vcl9pZCIsImxhc3RfaXJyZXZlcnNpYmxlX2Jsb2NrX251bSIsImJsb2NrSW5mbyIsImN1cnJlbnREYXRlIiwiRGF0ZSIsInRpbWVQbHVzVGVuIiwiZ2V0VGltZSIsInRpbWVJbklTT1N0cmluZyIsInRvSVNPU3RyaW5nIiwiZXhwaXJhdGlvbiIsInN1YnN0ciIsImxlbmd0aCIsInJlZl9ibG9ja19udW0iLCJibG9ja19udW0iLCJyZWZfYmxvY2tfcHJlZml4IiwiUGx1Z2luIiwid2luZG93IiwiUmVmZXJlbmNlRXJyb3IiLCJTY2F0dGVySlMiLCJfc2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJydW50aW1lIiwiT3AiLCJoYXNPd24iLCIkU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwid3JhcCIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJwcm90b0dlbmVyYXRvciIsIkdlbmVyYXRvciIsImdlbmVyYXRvciIsImNvbnRleHQiLCJDb250ZXh0IiwiX2ludm9rZSIsInN0YXRlIiwiR2VuU3RhdGVTdXNwZW5kZWRTdGFydCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJDb250aW51ZVNlbnRpbmVsIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZWNvcmQiLCJ0cnlDYXRjaCIsIkdlblN0YXRlU3VzcGVuZGVkWWllbGQiLCJtYWtlSW52b2tlTWV0aG9kIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiQXN5bmNJdGVyYXRvciIsInByZXZpb3VzUHJvbWlzZSIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiaW52b2tlIiwicmVzdWx0IiwiX19hd2FpdCIsInVud3JhcHBlZCIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJlbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImlzTmFOIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJhd3JhcCIsImFzeW5jIiwiaXRlciIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiRnVuY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJhcnIiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInRtcCIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsImxlbiIsInJldkxvb2t1cCIsImNoYXJDb2RlQXQiLCJmcm9tQnl0ZUFycmF5IiwidWludDgiLCJleHRyYUJ5dGVzIiwicGFydHMiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJqb2luIiwiY29kZSIsImluZGV4T2YiLCJzdGFydCIsImVuZCIsIm51bSIsIm91dHB1dCIsInJlYWQiLCJidWZmZXIiLCJvZmZzZXQiLCJpc0xFIiwibUxlbiIsIm5CeXRlcyIsImUiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJOYU4iLCJJbmZpbml0eSIsIk1hdGgiLCJwb3ciLCJ3cml0ZSIsInJ0IiwiYWJzIiwiZmxvb3IiLCJsb2ciLCJMTjIiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiZGVzY3JpcHRvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsImJhc2U2NCIsImllZWU3NTQiLCJrTWF4TGVuZ3RoIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsImNyZWF0ZUJ1ZmZlciIsInRoYXQiLCJSYW5nZUVycm9yIiwiZW5jb2RpbmdPck9mZnNldCIsImFsbG9jVW5zYWZlIiwiQXJyYXlCdWZmZXIiLCJhcnJheSIsImJ5dGVPZmZzZXQiLCJmcm9tQXJyYXlMaWtlIiwiZnJvbUFycmF5QnVmZmVyIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwiZnJvbVN0cmluZyIsImlzQnVmZmVyIiwiY2hlY2tlZCIsImNvcHkiLCJ2YWwiLCJkYXRhIiwiZnJvbU9iamVjdCIsImFzc2VydFNpemUiLCJzaXplIiwiaXNWaWV3IiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInNsb3dUb1N0cmluZyIsImhleFNsaWNlIiwidXRmOFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwiYmFzZTY0U2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJzd2FwIiwiYiIsImJpZGlyZWN0aW9uYWxJbmRleE9mIiwiZGlyIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJTdHJpbmciLCJidWYiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwibWluIiwicmVzIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsIlNsb3dCdWZmZXIiLCJhbGxvYyIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiZ2xvYmFsIiwiZm9vIiwic3ViYXJyYXkiLCJ0eXBlZEFycmF5U3VwcG9ydCIsInBvb2xTaXplIiwiX2F1Z21lbnQiLCJzcGVjaWVzIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJ5IiwiY29uY2F0IiwibGlzdCIsInBvcyIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsImVxdWFscyIsImluc3BlY3QiLCJtYXgiLCJtYXRjaCIsInRoaXNTdGFydCIsInRoaXNFbmQiLCJ0aGlzQ29weSIsInRhcmdldENvcHkiLCJpbmNsdWRlcyIsImlzRmluaXRlIiwidG9KU09OIiwiX2FyciIsInJldCIsIm91dCIsInRvSGV4IiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwib2JqZWN0V3JpdGVVSW50MTYiLCJsaXR0bGVFbmRpYW4iLCJvYmplY3RXcml0ZVVJbnQzMiIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic2xpY2VMZW4iLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50OCIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsImxpbWl0Iiwic3ViIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwidGFyZ2V0U3RhcnQiLCJzZXQiLCJJTlZBTElEX0JBU0U2NF9SRSIsImxlYWRTdXJyb2dhdGUiLCJ0cmltIiwicmVwbGFjZSIsInN0cmluZ3RyaW0iLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsImciLCJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfZ2V0UHJvdG90eXBlT2YiXSwibWFwcGluZ3MiOiI7Ozs7OztnQkFDRSxJQUFJQSxF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R0FBS21nQixFQUFJalcsVUFEaEJsSyxFQUU1Qm9nQixFQUFJcGdCLEVBQUlxVCxHQUFVOE0sRUFBSW5nQixHQUV4QixPQUFPQSxLLGlDQ3Z2RFQsSUFBSXFnQixFQUdKQSxFQUFJLFdBQ0gsT0FBT3ZkLEtBREosR0FJSixJQUVDdWQsRUFBSUEsR0FBSyxJQUFJcFAsU0FBUyxjQUFiLEdBQ1IsTUFBT3dDLEdBRWMsaUJBQVhsSixTQUFxQjhWLEVBQUk5VixRQU9yQ3hLLEVBQU9ELFFBQVV1Z0IsRyxrQkNuQmpCLElBQUl2YyxFQUFVLEVBQVEsSUFFbEJ3YyxFQUF3QixFQUFRLElBVXBDdmdCLEVBQU9ELFFBUlAsU0FBb0MrQyxFQUFNMUMsR0FDeEMsT0FBSUEsR0FBMkIsV0FBbEIyRCxFQUFRM0QsSUFBc0MsbUJBQVRBLEVBSTNDbWdCLEVBQXNCemQsR0FIcEIxQyxJLGdCQ05YLFNBQVNvZ0IsRUFBZ0I5ZixHQUl2QixPQUhBVixFQUFPRCxRQUFVeWdCLEVBQWtCN2YsT0FBTzBDLGVBQWlCMUMsT0FBT3lNLGVBQWlCLFNBQXlCMU0sR0FDMUcsT0FBT0EsRUFBRWtLLFdBQWFqSyxPQUFPeU0sZUFBZTFNLElBRXZDOGYsRUFBZ0I5ZixHQUd6QlYsRUFBT0QsUUFBVXlnQiIsImZpbGUiOiJzY2F0dGVyanMtcGx1Z2luLWZpby5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTY0KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJpbXBvcnQge1xuXHRQbHVnaW4sXG5cdFBsdWdpblR5cGVzLFxuXHRCbG9ja2NoYWlucyxcblx0TmV0d29yayxcblx0U29ja2V0U2VydmljZVxufSBmcm9tICdAc2NhdHRlcmpzL2NvcmUnO1xuXG5sZXQgZmlvanNVdGlsID0gbnVsbDtcbmxldCBOdW1lcmljID0gbnVsbDtcblxubGV0IHNvY2tldFNlcnZpY2UgPSBTb2NrZXRTZXJ2aWNlO1xuY29uc3QgcHJveHkgPSAoZHVtbXksIGhhbmRsZXIpID0+IG5ldyBQcm94eShkdW1teSwgaGFuZGxlcik7XG5cbmNvbnN0IGZldGNoUG9zdFBhcmFtcyA9IChwYXJhbXMpID0+ICh7IG1ldGhvZDpcIlBPU1RcIiwgYm9keTpKU09OLnN0cmluZ2lmeShwYXJhbXMpIH0pO1xuY29uc3QgZ2V0Q2hhaW5EYXRhID0gKG5ldHdvcmssIHJvdXRlLCBwYXJhbXMgPSB7fSkgPT4gZmV0Y2goYCR7bmV0d29yay5mdWxsaG9zdCgpfS92MS9jaGFpbi8ke3JvdXRlfWAsIGZldGNoUG9zdFBhcmFtcyhwYXJhbXMpKS50aGVuKHggPT4geC5qc29uKCkpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYXR0ZXJGSU8gZXh0ZW5kcyBQbHVnaW4ge1xuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoQmxvY2tjaGFpbnMuRklPIHx8ICdmaW8nLCBQbHVnaW5UeXBlcy5CTE9DS0NIQUlOX1NVUFBPUlQpO1xuICAgIH1cblxuXHRzZXRTb2NrZXRTZXJ2aWNlKF9zKXtcblx0XHRzb2NrZXRTZXJ2aWNlID0gX3M7XG5cdH1cblxuICAgIGhvb2tQcm92aWRlcihuZXR3b3JrLCBmaWVsZHNGZXRjaGVyID0gbnVsbCl7XG4gICAgICAgIG5ldHdvcmsgPSBOZXR3b3JrLmZyb21Kc29uKG5ldHdvcmspO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXF1aXJlZEZpZWxkczp7fSxcbiAgICAgICAgICAgIGdldEF2YWlsYWJsZUtleXM6YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb2NrZXRTZXJ2aWNlLnNlbmRBcGlSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTonaWRlbnRpdHlGcm9tUGVybWlzc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOnt9XG4gICAgICAgICAgICAgICAgfSkudGhlbihpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpZCkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQuYWNjb3VudHMuZmlsdGVyKHggPT4geC5ibG9ja2NoYWluID09PSBCbG9ja2NoYWlucy5GSU8pLm1hcCh4ID0+IHgucHVibGljS2V5KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2lnbjphc3luYyAoc2lnbmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGZpZWxkc0ZldGNoZXIgPyBmaWVsZHNGZXRjaGVyKCkgOiB7fTtcbiAgICAgICAgICAgICAgICBzaWduYXJncy5zZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBCdWZmZXIuZnJvbShzaWduYXJncy5zZXJpYWxpemVkVHJhbnNhY3Rpb24pLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdCAgICAgICAgICAgICAgICBzb2NrZXRTZXJ2aWNlLnNlbmRBcGlSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6J3JlcXVlc3RTaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDp7IHRyYW5zYWN0aW9uOnNpZ25hcmdzLCBibG9ja2NoYWluOidmaW8nLCBuZXR3b3JrLCByZXF1aXJlZEZpZWxkcyB9XG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oeCA9PiB7XG5cblx0XHQgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG5cdFx0XHQgICAgICAgICAgICAgICAgc2lnbmF0dXJlczp4LnNpZ25hdHVyZXMsXG5cdFx0XHQgICAgICAgICAgICAgICAgY29tcHJlc3Npb246IDAsXG5cdFx0XHQgICAgICAgICAgICAgICAgcGFja2VkX2NvbnRleHRfZnJlZV9kYXRhOiBOdW1lcmljLmFycmF5VG9IZXgoc2lnbmFyZ3Muc2VyaWFsaXplZENvbnRleHRGcmVlRGF0YSB8fCBuZXcgVWludDhBcnJheSgwKSksXG5cdFx0XHQgICAgICAgICAgICAgICAgcGFja2VkX3RyeDogTnVtZXJpYy5hcnJheVRvSGV4KEJ1ZmZlci5mcm9tKHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgJ2hleCcpKVxuXHRcdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlKHtzaWduYXR1cmVzOnguc2lnbmF0dXJlcywgc2VyaWFsaXplZFRyYW5zYWN0aW9uOkJ1ZmZlci5mcm9tKHNpZ25hcmdzLnNlcmlhbGl6ZWRUcmFuc2FjdGlvbiwgJ2hleCcpfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goeCA9PiByZWplY3QoeCkpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXHRhc3luYyBmZXRjaEFiaXMobmV0d29yaywgY29udHJhY3RzKXtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKGNvbnRyYWN0cy5tYXAoYXN5bmMgYWNjb3VudCA9PiB7XG5cdFx0XHRcdGNvbnN0IGNoYWluQWJpID0gYXdhaXQgZ2V0Q2hhaW5EYXRhKG5ldHdvcmssIGBnZXRfcmF3X2FiaWAsIHthY2NvdW50X25hbWU6YWNjb3VudH0pLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVycikpLnRoZW4oeCA9PiB4LmFiaSk7XG5cdFx0XHRcdGlmKCFjaGFpbkFiaSkgcmV0dXJuIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBmZXRjaCBBQklzIGZvciAke2FjY291bnR9YCk7XG5cdFx0XHRcdGNvbnN0IHJhd0FiaSA9IE51bWVyaWMuYmFzZTY0VG9CaW5hcnkoY2hhaW5BYmkpO1xuXHRcdFx0XHRjb25zdCBhYmkgPSBmaW9qc1V0aWwucmF3QWJpVG9Kc29uKHJhd0FiaSk7XG5cdFx0XHRcdHJldHVybiB7IGFjY291bnQsIHJhd0FiaSwgYWJpfTtcblx0XHRcdH0pKTtcblx0XHR9IGNhdGNoKGUpe1xuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXG5cdGFiaVByb3ZpZGVyKCl7XG4gICAgXHRyZXR1cm4ge1xuXHRcdCAgICBnZXRSYXdBYmk6IGFzeW5jIChhY2NvdW50TmFtZSkgPT4ge1xuXHRcdFx0ICAgIGNvbnN0IHthYml9ID0gKGF3YWl0IHRoaXMuZmV0Y2hBYmlzKG5ldHdvcmssIFthY2NvdW50TmFtZV0pKVswXTtcblx0XHRcdCAgICByZXR1cm4geyBhY2NvdW50TmFtZSwgYWJpIH07XG5cdFx0ICAgIH0sXG5cdCAgICB9XG5cdH1cblxuICAgIHNpZ25hdHVyZVByb3ZpZGVyKC4uLmFyZ3Mpe1xuXG4gICAgICAgIGNvbnN0IHRocm93SWZOb0lkZW50aXR5ID0gYXJnc1swXTtcblxuICAgICAgICAvLyBQcm90b2NvbCB3aWxsIGJlIGRlcHJlY2F0ZWQuXG4gICAgICAgIHJldHVybiAobmV0d29yaywgX2Zpb2pzLCBfb3B0aW9ucyA9IHt9KSA9PiB7XG5cblx0ICAgICAgICBOdW1lcmljID0gX2Zpb2pzLk51bWVyaWM7XG5cbiAgICAgICAgICAgIG5ldHdvcmsgPSBOZXR3b3JrLmZyb21Kc29uKG5ldHdvcmspO1xuXG4gICAgICAgICAgICBsZXQgcmVxdWlyZWRGaWVsZHMgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkc0ZldGNoZXIgPSAoKSA9PiByZXF1aXJlZEZpZWxkcztcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZVByb3ZpZGVyID0gdGhpcy5ob29rUHJvdmlkZXIobmV0d29yaywgZmllbGRzRmV0Y2hlcik7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JpdHlQcm92aWRlciA9IHsgZ2V0UmVxdWlyZWRLZXlzOiBzaWduYXR1cmVQcm92aWRlci5nZXRBdmFpbGFibGVLZXlzIH07XG5cblx0ICAgICAgICAvLyBTZXR0aW5nIHVwIGEgYmFyZSBib25lcyB1dGlsaXR5IEFwaSBmb3IgZGVzZXJpYWxpemF0aW9uXG5cdCAgICAgICAgaWYoIWZpb2pzVXRpbCkgZmlvanNVdGlsID0gbmV3IF9maW9qcy5BcGkoeyB0ZXh0RW5jb2Rlcjpfb3B0aW9ucy50ZXh0RW5jb2RlciwgdGV4dERlY29kZXI6X29wdGlvbnMudGV4dERlY29kZXIsIGFiaVByb3ZpZGVyOnRoaXMuYWJpUHJvdmlkZXIoKSB9KTtcblx0ICAgICAgICBmaW9qc1V0aWwuZ2V0Q2FjaGVkQWJpID0gYXN5bmMgYWNjb3VudE5hbWUgPT4gKGF3YWl0IHRoaXMuZmV0Y2hBYmlzKG5ldHdvcmssIFthY2NvdW50TmFtZV0pKVswXTtcblxuICAgICAgICAgICAgLy8gVGhlIHByb3h5IHN0YW5kcyBiZXR3ZWVuIHRoZSBmaW9qcyBvYmplY3QgYW5kIHNjYXR0ZXIuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gYWRkIHNwZWNpYWwgZnVuY3Rpb25hbGl0eSBsaWtlIGFkZGluZyBgcmVxdWlyZWRGaWVsZHNgIGFycmF5cyB0byB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IHByb3hpZWQgPSBwcm94eShuZXcgX2Zpb2pzLkFwaShPYmplY3QuYXNzaWduKF9vcHRpb25zLCB7XG5cdCAgICAgICAgICAgIGFiaVByb3ZpZGVyOnRoaXMuYWJpUHJvdmlkZXIoKSxcblx0ICAgICAgICAgICAgYXV0aG9yaXR5UHJvdmlkZXIsXG5cdCAgICAgICAgICAgIHNpZ25hdHVyZVByb3ZpZGVyLFxuXHQgICAgICAgICAgICBjaGFpbklkOm5ldHdvcmsuY2hhaW5JZCxcbiAgICAgICAgICAgIH0pKSwge1xuICAgICAgICAgICAgICAgIGdldChmaW9qc0luc3RhbmNlLCBtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFx0aWYodHlwZW9mIGZpb2pzSW5zdGFuY2VbbWV0aG9kXSA9PT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICAgICBcdFx0dGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpb2pzLkFwaSgpIG9iamVjdC5gKVxuXHRcdFx0XHRcdFx0fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBycWYgPSBhcmdzLmZpbmQoYXJnID0+IGFyZy5oYXNPd25Qcm9wZXJ0eSgncmVxdWlyZWRGaWVsZHMnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkcyA9IHJxZiA/IHJxZi5yZXF1aXJlZEZpZWxkcyA6IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpb2pzSW5zdGFuY2VbbWV0aG9kXSguLi5hcmdzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7IC8vIFByb3h5XG5cblx0ICAgICAgICBwcm94aWVkLmdldENhY2hlZEFiaSA9IGFzeW5jIGFjY291bnROYW1lID0+IChhd2FpdCB0aGlzLmZldGNoQWJpcyhuZXR3b3JrLCBbYWNjb3VudE5hbWVdKSlbMF07XG5cdCAgICAgICAgcHJveGllZC5nZXRUcmFuc2FjdGlvbk9wdGlvbnMgPSBhc3luYyAoKSA9PiB7XG5cdFx0ICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgZ2V0Q2hhaW5EYXRhKG5ldHdvcmssICdnZXRfaW5mbycpO1xuXHRcdCAgICAgICAgY29uc3QgYmxvY2tJbmZvID0gYXdhaXQgZ2V0Q2hhaW5EYXRhKG5ldHdvcmssICdnZXRfYmxvY2snLCB7XG5cdFx0XHQgICAgICAgIGJsb2NrX251bV9vcl9pZDppbmZvLmxhc3RfaXJyZXZlcnNpYmxlX2Jsb2NrX251bVxuXHRcdCAgICAgICAgfSk7XG5cdFx0ICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0ICAgICAgICBjb25zdCB0aW1lUGx1c1RlbiA9IGN1cnJlbnREYXRlLmdldFRpbWUoKSArIDEwMDAwO1xuXHRcdCAgICAgICAgY29uc3QgdGltZUluSVNPU3RyaW5nID0gKG5ldyBEYXRlKHRpbWVQbHVzVGVuKSkudG9JU09TdHJpbmcoKTtcblx0XHQgICAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSB0aW1lSW5JU09TdHJpbmcuc3Vic3RyKDAsIHRpbWVJbklTT1N0cmluZy5sZW5ndGggLSAxKTtcblx0XHQgICAgICAgIHJldHVybiB7XG5cdFx0XHQgICAgICAgIGV4cGlyYXRpb24sXG5cdFx0XHQgICAgICAgIHJlZl9ibG9ja19udW06IGJsb2NrSW5mby5ibG9ja19udW0gJiAweGZmZmYsXG5cdFx0XHQgICAgICAgIHJlZl9ibG9ja19wcmVmaXg6IGJsb2NrSW5mby5yZWZfYmxvY2tfcHJlZml4LFxuXHRcdCAgICAgICAgfVxuXHQgICAgICAgIH07XG5cblx0ICAgICAgICByZXR1cm4gcHJveGllZDtcblxuICAgICAgICB9XG4gICAgfVxufVxuXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuXHR3aW5kb3cuU2NhdHRlckZJTyA9IFNjYXR0ZXJGSU87XG59XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwibW9kdWxlLmV4cG9ydHMgPSBTY2F0dGVySlM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZVxuICAvLyBvciBub3QsIHJldHVybiB0aGUgcnVudGltZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZGVjbGFyZSB0aGUgdmFyaWFibGVcbiAgLy8gcmVnZW5lcmF0b3JSdW50aW1lIGluIHRoZSBvdXRlciBzY29wZSwgd2hpY2ggYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlXG4gIC8vIGluamVjdGVkIGVhc2lseSBieSBgYmluL3JlZ2VuZXJhdG9yIC0taW5jbHVkZS1ydW50aW1lIHNjcmlwdC5qc2AuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KFxuICAvLyBJZiB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGUsIHVzZSBtb2R1bGUuZXhwb3J0c1xuICAvLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuICAvLyBvYmplY3QuIEVpdGhlciB3YXksIHRoZSByZXN1bHRpbmcgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplXG4gIC8vIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgdmFyaWFibGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuXG4gIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgPyBtb2R1bGUuZXhwb3J0cyA6IHt9XG4pKTtcblxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIC8vIFRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgcnVubmluZyBpbiBzdHJpY3QgbW9kZSwgc28gdGhlIGFib3ZlXG4gIC8vIGFzc2lnbm1lbnQgc2hvdWxkIGFsd2F5cyB3b3JrIHVubGVzcyBzb21ldGhpbmcgaXMgbWlzY29uZmlndXJlZC4gSnVzdFxuICAvLyBpbiBjYXNlIHJ1bnRpbWUuanMgYWNjaWRlbnRhbGx5IHJ1bnMgaW4gc3RyaWN0IG1vZGUsIHdlIGNhbiBlc2NhcGVcbiAgLy8gc3RyaWN0IG1vZGUgdXNpbmcgYSBnbG9iYWwgRnVuY3Rpb24gY2FsbC4gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBmYWlsXG4gIC8vIGlmIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZm9yYmlkcyB1c2luZyBGdW5jdGlvbiwgYnV0IGluIHRoYXQgY2FzZVxuICAvLyB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGUgYWNjaWRlbnRhbCBzdHJpY3QgbW9kZSBwcm9ibGVtLiBJZlxuICAvLyB5b3UndmUgbWlzY29uZmlndXJlZCB5b3VyIGJ1bmRsZXIgdG8gZm9yY2Ugc3RyaWN0IG1vZGUgYW5kIGFwcGxpZWQgYVxuICAvLyBDU1AgdG8gZm9yYmlkIEZ1bmN0aW9uLCBhbmQgeW91J3JlIG5vdCB3aWxsaW5nIHRvIGZpeCBlaXRoZXIgb2YgdGhvc2VcbiAgLy8gcHJvYmxlbXMsIHBsZWFzZSBkZXRhaWwgeW91ciB1bmlxdWUgcHJlZGljYW1lbnQgaW4gYSBHaXRIdWIgaXNzdWUuXG4gIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2Y7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/bundles/scatterjs-plugin-lynx.min.js b/bundles/scatterjs-plugin-lynx.min.js index fbe445a0..b882e3f7 100644 --- a/bundles/scatterjs-plugin-lynx.min.js +++ b/bundles/scatterjs-plugin-lynx.min.js @@ -4,5 +4,5 @@ * https://github.com/GetScatter/scatter-js/ * Released under the MIT license. * - */!function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=269)}({0:function(t,n,e){t.exports=e(23)},1:function(t,n){function e(t,n,e,r,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void e(t)}u.done?n(c):Promise.resolve(c).then(r,o)}t.exports=function(t){return function(){var n=this,r=arguments;return new Promise((function(o,i){var a=t.apply(n,r);function u(t){e(a,o,i,u,c,"next",t)}function c(t){e(a,o,i,u,c,"throw",t)}u(void 0)}))}}},11:function(t,n){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(n){return"function"==typeof Symbol&&"symbol"===e(Symbol.iterator)?t.exports=r=function(t){return e(t)}:t.exports=r=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":e(t)},r(n)}t.exports=r},19:function(t,n){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}},2:function(t,n){t.exports=ScatterJS},20:function(t,n){function e(n,r){return t.exports=e=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t},e(n,r)}t.exports=e},23:function(t,n,e){var r=function(t){"use strict";var n,e=Object.prototype,r=e.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function c(t,n,e,r){var o=n&&n.prototype instanceof d?n:d,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(t,n,e){var r=f;return function(o,i){if(r===l)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return T()}for(e.method=o,e.arg=i;;){var a=e.delegate;if(a){var u=S(a,e);if(u){if(u===y)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===f)throw r=h,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=l;var c=s(t,n,e);if("normal"===c.type){if(r=e.done?h:p,c.arg===y)continue;return{value:c.arg,done:e.done}}"throw"===c.type&&(r=h,e.method="throw",e.arg=c.arg)}}}(t,e,a),i}function s(t,n,e){try{return{type:"normal",arg:t.call(n,e)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var f="suspendedStart",p="suspendedYield",l="executing",h="completed",y={};function d(){}function v(){}function m(){}var w={};w[i]=function(){return this};var b=Object.getPrototypeOf,g=b&&b(b(j([])));g&&g!==e&&r.call(g,i)&&(w=g);var x=m.prototype=d.prototype=Object.create(w);function E(t){["next","throw","return"].forEach((function(n){t[n]=function(t){return this._invoke(n,t)}}))}function L(t){var n;this._invoke=function(e,o){function i(){return new Promise((function(n,i){!function n(e,o,i,a){var u=s(t[e],t,o);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&r.call(f,"__await")?Promise.resolve(f.__await).then((function(t){n("next",t,i,a)}),(function(t){n("throw",t,i,a)})):Promise.resolve(f).then((function(t){c.value=t,i(c)}),(function(t){return n("throw",t,i,a)}))}a(u.arg)}(e,o,n,i)}))}return n=n?n.then(i,i):i()}}function S(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,S(t,e),"throw"===e.method))return y;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=s(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,y;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,y):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,y)}function O(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function k(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function _(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(O,this),this.reset(!0)}function j(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function e(){for(;++o=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),s=r.call(a,"finallyLoc");if(c&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--n){var e=this.tryEntries[n];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),k(e),y}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.tryLoc===t){var r=e.completion;if("throw"===r.type){var o=r.arg;k(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),y}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},269:function(t,n,e){"use strict";e.r(n),e.d(n,"default",(function(){return S}));var r=e(5),o=e.n(r),i=e(3),a=e.n(i),u=e(4),c=e.n(u),s=e(6),f=e.n(s),p=e(7),l=e.n(p),h=e(8),y=e.n(h),d=e(0),v=e.n(d),m=e(1),w=e.n(m),b=e(2),g=!1;"undefined"!=typeof window&&(void 0===window.lynxMobile?window.addEventListener("lynxMobileLoaded",(function(){return g=!0})):g=!0);var x=function(){var t=w()(v.a.mark((function t(){var n,e,r=arguments;return v.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=0=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),s=r.call(a,"finallyLoc");if(c&&s){if(this.prev=0;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--n){var e=this.tryEntries[n];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),k(e),y}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.tryLoc===t){var r=e.completion;if("throw"===r.type){var o=r.arg;k(e)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),y}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},295:function(t,n,e){"use strict";e.r(n),e.d(n,"default",(function(){return S}));var r=e(5),o=e.n(r),i=e(3),a=e.n(i),u=e(4),c=e.n(u),s=e(8),f=e.n(s),p=e(9),l=e.n(p),h=e(10),y=e.n(h),d=e(0),v=e.n(d),m=e(1),w=e.n(m),b=e(2),g=!1;"undefined"!=typeof window&&(void 0===window.lynxMobile?window.addEventListener("lynxMobileLoaded",(function(){return g=!0})):g=!0);var x=function(){var t=w()(v.a.mark((function t(){var n,e,r=arguments;return v.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=0=arguments.length?void 0:arguments[0],n=1>=arguments.length?void 0:arguments[1];return function(e,r){e=y.Network.fromJson(e);var o=function(){var n=0=arguments.length?void 0:arguments[0],n=1>=arguments.length?void 0:arguments[1];return function(e,r){e=y.Network.fromJson(e);var o=function(){var n=0 * @license MIT */ -var n=r(30),i=r(31),o=r(28);function a(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function p(t,e){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return F(t).length;default:if(n)return z(t).length;e=(""+e).toLowerCase(),n=!0}}function b(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,r);case"utf8":case"utf-8":return M(this,e,r);case"ascii":return k(this,e,r);case"latin1":case"binary":return T(this,e,r);case"base64":return x(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=f.from(e,n)),f.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,a=1,s=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,f/=2,r/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=r;os&&(r=s-f),o=r;o>=0;o--){for(var h=!0,d=0;di&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function M(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(f=(31&u)<<6|63&o)>127&&(c=f);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(f=(15&u)<<12|(63&o)<<6|63&a)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(f=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},f.prototype.compare=function(t,e,r,n,i){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0),s=Math.min(o,a),u=this.slice(n,i),c=t.slice(e,r),h=0;hi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return _(this,t,e,r);case"ascii":return w(this,t,e,r);case"latin1":case"binary":return E(this,t,e,r);case"base64":return A(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var I=4096;function k(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,r,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function N(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function C(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function O(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,o){return o||O(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,o){return o||O(t,0,r,8),i.write(t,e,r,n,52,8),r+8}f.prototype.slice=function(t,e){var r,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},f.prototype.readUInt8=function(t,e){return e||B(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,e){return e||B(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,e){return e||B(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,e){return e||B(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,e){return e||B(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||B(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},f.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||B(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return e||B(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){e||B(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){e||B(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return e||B(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return e||B(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,e){return e||B(t,4,this.length),i.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return e||B(t,4,this.length),i.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return e||B(t,8,this.length),i.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return e||B(t,8,this.length),i.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||R(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},f.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):N(this,t,e,!0),e+2},f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):N(this,t,e,!1),e+2},f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):C(this,t,e,!0),e+4},f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},f.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);R(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},f.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);R(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):N(this,t,e,!0),e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):N(this,t,e,!1),e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):C(this,t,e,!0),e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):C(this,t,e,!1),e+4},f.prototype.writeFloatLE=function(t,e,r){return j(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return j(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!f.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function F(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(U,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function K(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(9))},function(t,e){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n(e){return"function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?t.exports=n=function(t){return r(t)}:t.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},n(e)}t.exports=n},function(t,e,r){var n=r(10),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function a(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=a),o(i,a),a.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},a.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},a.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},a.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e,r){"use strict";var n=r(29),i=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=h;var o=r(25);o.inherits=r(17);var a=r(41),s=r(35);o.inherits(h,a);for(var f=i(s.prototype),u=0;u0&&a.length>i&&!a.warned){a.warned=!0;var f=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=t,f.type=e,f.count=a.length,s=f,console&&console.warn&&console.warn(s)}return t}function h(){for(var t=[],e=0;e0&&(a=e[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var f=i[t];if(void 0===f)return!1;if("function"==typeof f)o(f,this,e);else{var u=f.length,c=b(f,u);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){a=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1=0;n--)this.removeListener(t,e[n]);return this},s.prototype.listeners=function(t){return l(this,t,!0)},s.prototype.rawListeners=function(t){return l(this,t,!1)},s.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var a;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{a=r(163).Buffer}catch(t){}function s(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a=49?s-49+10:s>=17?s-17+10:s}return i}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r=e;r-=6)i=s(t,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==e&&(i=s(t,e,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,s=67108863&a,f=a/67108864|0;r.words[0]=s;for(var u=1;u>>26,h=67108863&f,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;c+=(a=(i=0|t.words[p])*(o=0|e.words[l])+h)/67108864|0,h=67108863&a}r.words[u]=0|h,f=0|c}return 0!==f?r.words[u]=0|f:r.length--,r.strip()}o.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,o=0,a=0;a>>24-i&16777215)||a!==this.length-1?u[6-f.length]+f+r:f+r,(i+=2)>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var d=c[t],l=h[t];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(t);r=(p=p.idivn(l)).isZero()?b+r:u[d-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n(void 0!==a),this.toArrayLike(a,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,s,f="le"===e,u=new t(o),c=this.clone();if(f){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),u[s]=a;for(;s=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;rt.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;nt.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;ot.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&e;for(;0!==o&&a>26,this.words[a]=67108863&e;if(0===o&&a>>13,l=0|a[1],p=8191&l,b=l>>>13,y=0|a[2],g=8191&y,m=y>>>13,v=0|a[3],_=8191&v,w=v>>>13,E=0|a[4],A=8191&E,S=E>>>13,x=0|a[5],M=8191&x,I=x>>>13,k=0|a[6],T=8191&k,P=k>>>13,L=0|a[7],B=8191&L,R=L>>>13,N=0|a[8],C=8191&N,O=N>>>13,j=0|a[9],D=8191&j,U=j>>>13,q=0|s[0],z=8191&q,F=q>>>13,K=0|s[1],V=8191&K,Y=K>>>13,H=0|s[2],$=8191&H,G=H>>>13,W=0|s[3],Z=8191&W,J=W>>>13,X=0|s[4],Q=8191&X,tt=X>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],ot=8191&it,at=it>>>13,st=0|s[7],ft=8191&st,ut=st>>>13,ct=0|s[8],ht=8191&ct,dt=ct>>>13,lt=0|s[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19;var yt=(u+(n=Math.imul(h,z))|0)+((8191&(i=(i=Math.imul(h,F))+Math.imul(d,z)|0))<<13)|0;u=((o=Math.imul(d,F))+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(p,z),i=(i=Math.imul(p,F))+Math.imul(b,z)|0,o=Math.imul(b,F);var gt=(u+(n=n+Math.imul(h,V)|0)|0)+((8191&(i=(i=i+Math.imul(h,Y)|0)+Math.imul(d,V)|0))<<13)|0;u=((o=o+Math.imul(d,Y)|0)+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(g,z),i=(i=Math.imul(g,F))+Math.imul(m,z)|0,o=Math.imul(m,F),n=n+Math.imul(p,V)|0,i=(i=i+Math.imul(p,Y)|0)+Math.imul(b,V)|0,o=o+Math.imul(b,Y)|0;var mt=(u+(n=n+Math.imul(h,$)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(d,$)|0))<<13)|0;u=((o=o+Math.imul(d,G)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(_,z),i=(i=Math.imul(_,F))+Math.imul(w,z)|0,o=Math.imul(w,F),n=n+Math.imul(g,V)|0,i=(i=i+Math.imul(g,Y)|0)+Math.imul(m,V)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,$)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(b,$)|0,o=o+Math.imul(b,G)|0;var vt=(u+(n=n+Math.imul(h,Z)|0)|0)+((8191&(i=(i=i+Math.imul(h,J)|0)+Math.imul(d,Z)|0))<<13)|0;u=((o=o+Math.imul(d,J)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(A,z),i=(i=Math.imul(A,F))+Math.imul(S,z)|0,o=Math.imul(S,F),n=n+Math.imul(_,V)|0,i=(i=i+Math.imul(_,Y)|0)+Math.imul(w,V)|0,o=o+Math.imul(w,Y)|0,n=n+Math.imul(g,$)|0,i=(i=i+Math.imul(g,G)|0)+Math.imul(m,$)|0,o=o+Math.imul(m,G)|0,n=n+Math.imul(p,Z)|0,i=(i=i+Math.imul(p,J)|0)+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0;var _t=(u+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(M,z),i=(i=Math.imul(M,F))+Math.imul(I,z)|0,o=Math.imul(I,F),n=n+Math.imul(A,V)|0,i=(i=i+Math.imul(A,Y)|0)+Math.imul(S,V)|0,o=o+Math.imul(S,Y)|0,n=n+Math.imul(_,$)|0,i=(i=i+Math.imul(_,G)|0)+Math.imul(w,$)|0,o=o+Math.imul(w,G)|0,n=n+Math.imul(g,Z)|0,i=(i=i+Math.imul(g,J)|0)+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0;var wt=(u+(n=n+Math.imul(h,rt)|0)|0)+((8191&(i=(i=i+Math.imul(h,nt)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,nt)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(T,z),i=(i=Math.imul(T,F))+Math.imul(P,z)|0,o=Math.imul(P,F),n=n+Math.imul(M,V)|0,i=(i=i+Math.imul(M,Y)|0)+Math.imul(I,V)|0,o=o+Math.imul(I,Y)|0,n=n+Math.imul(A,$)|0,i=(i=i+Math.imul(A,G)|0)+Math.imul(S,$)|0,o=o+Math.imul(S,G)|0,n=n+Math.imul(_,Z)|0,i=(i=i+Math.imul(_,J)|0)+Math.imul(w,Z)|0,o=o+Math.imul(w,J)|0,n=n+Math.imul(g,Q)|0,i=(i=i+Math.imul(g,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=(i=i+Math.imul(p,nt)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0;var Et=(u+(n=n+Math.imul(h,ot)|0)|0)+((8191&(i=(i=i+Math.imul(h,at)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,at)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,z),i=(i=Math.imul(B,F))+Math.imul(R,z)|0,o=Math.imul(R,F),n=n+Math.imul(T,V)|0,i=(i=i+Math.imul(T,Y)|0)+Math.imul(P,V)|0,o=o+Math.imul(P,Y)|0,n=n+Math.imul(M,$)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(I,$)|0,o=o+Math.imul(I,G)|0,n=n+Math.imul(A,Z)|0,i=(i=i+Math.imul(A,J)|0)+Math.imul(S,Z)|0,o=o+Math.imul(S,J)|0,n=n+Math.imul(_,Q)|0,i=(i=i+Math.imul(_,tt)|0)+Math.imul(w,Q)|0,o=o+Math.imul(w,tt)|0,n=n+Math.imul(g,rt)|0,i=(i=i+Math.imul(g,nt)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=(i=i+Math.imul(p,at)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0;var At=(u+(n=n+Math.imul(h,ft)|0)|0)+((8191&(i=(i=i+Math.imul(h,ut)|0)+Math.imul(d,ft)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(C,z),i=(i=Math.imul(C,F))+Math.imul(O,z)|0,o=Math.imul(O,F),n=n+Math.imul(B,V)|0,i=(i=i+Math.imul(B,Y)|0)+Math.imul(R,V)|0,o=o+Math.imul(R,Y)|0,n=n+Math.imul(T,$)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(P,$)|0,o=o+Math.imul(P,G)|0,n=n+Math.imul(M,Z)|0,i=(i=i+Math.imul(M,J)|0)+Math.imul(I,Z)|0,o=o+Math.imul(I,J)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,tt)|0)+Math.imul(S,Q)|0,o=o+Math.imul(S,tt)|0,n=n+Math.imul(_,rt)|0,i=(i=i+Math.imul(_,nt)|0)+Math.imul(w,rt)|0,o=o+Math.imul(w,nt)|0,n=n+Math.imul(g,ot)|0,i=(i=i+Math.imul(g,at)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,ft)|0,i=(i=i+Math.imul(p,ut)|0)+Math.imul(b,ft)|0,o=o+Math.imul(b,ut)|0;var St=(u+(n=n+Math.imul(h,ht)|0)|0)+((8191&(i=(i=i+Math.imul(h,dt)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(D,z),i=(i=Math.imul(D,F))+Math.imul(U,z)|0,o=Math.imul(U,F),n=n+Math.imul(C,V)|0,i=(i=i+Math.imul(C,Y)|0)+Math.imul(O,V)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(B,$)|0,i=(i=i+Math.imul(B,G)|0)+Math.imul(R,$)|0,o=o+Math.imul(R,G)|0,n=n+Math.imul(T,Z)|0,i=(i=i+Math.imul(T,J)|0)+Math.imul(P,Z)|0,o=o+Math.imul(P,J)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(I,Q)|0,o=o+Math.imul(I,tt)|0,n=n+Math.imul(A,rt)|0,i=(i=i+Math.imul(A,nt)|0)+Math.imul(S,rt)|0,o=o+Math.imul(S,nt)|0,n=n+Math.imul(_,ot)|0,i=(i=i+Math.imul(_,at)|0)+Math.imul(w,ot)|0,o=o+Math.imul(w,at)|0,n=n+Math.imul(g,ft)|0,i=(i=i+Math.imul(g,ut)|0)+Math.imul(m,ft)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ht)|0,i=(i=i+Math.imul(p,dt)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,dt)|0;var xt=(u+(n=n+Math.imul(h,pt)|0)|0)+((8191&(i=(i=i+Math.imul(h,bt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,bt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(D,V),i=(i=Math.imul(D,Y))+Math.imul(U,V)|0,o=Math.imul(U,Y),n=n+Math.imul(C,$)|0,i=(i=i+Math.imul(C,G)|0)+Math.imul(O,$)|0,o=o+Math.imul(O,G)|0,n=n+Math.imul(B,Z)|0,i=(i=i+Math.imul(B,J)|0)+Math.imul(R,Z)|0,o=o+Math.imul(R,J)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(P,Q)|0,o=o+Math.imul(P,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(I,rt)|0,o=o+Math.imul(I,nt)|0,n=n+Math.imul(A,ot)|0,i=(i=i+Math.imul(A,at)|0)+Math.imul(S,ot)|0,o=o+Math.imul(S,at)|0,n=n+Math.imul(_,ft)|0,i=(i=i+Math.imul(_,ut)|0)+Math.imul(w,ft)|0,o=o+Math.imul(w,ut)|0,n=n+Math.imul(g,ht)|0,i=(i=i+Math.imul(g,dt)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,dt)|0;var Mt=(u+(n=n+Math.imul(p,pt)|0)|0)+((8191&(i=(i=i+Math.imul(p,bt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,bt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(D,$),i=(i=Math.imul(D,G))+Math.imul(U,$)|0,o=Math.imul(U,G),n=n+Math.imul(C,Z)|0,i=(i=i+Math.imul(C,J)|0)+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(B,Q)|0,i=(i=i+Math.imul(B,tt)|0)+Math.imul(R,Q)|0,o=o+Math.imul(R,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(P,rt)|0,o=o+Math.imul(P,nt)|0,n=n+Math.imul(M,ot)|0,i=(i=i+Math.imul(M,at)|0)+Math.imul(I,ot)|0,o=o+Math.imul(I,at)|0,n=n+Math.imul(A,ft)|0,i=(i=i+Math.imul(A,ut)|0)+Math.imul(S,ft)|0,o=o+Math.imul(S,ut)|0,n=n+Math.imul(_,ht)|0,i=(i=i+Math.imul(_,dt)|0)+Math.imul(w,ht)|0,o=o+Math.imul(w,dt)|0;var It=(u+(n=n+Math.imul(g,pt)|0)|0)+((8191&(i=(i=i+Math.imul(g,bt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,bt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(D,Z),i=(i=Math.imul(D,J))+Math.imul(U,Z)|0,o=Math.imul(U,J),n=n+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,tt)|0)+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(B,rt)|0,i=(i=i+Math.imul(B,nt)|0)+Math.imul(R,rt)|0,o=o+Math.imul(R,nt)|0,n=n+Math.imul(T,ot)|0,i=(i=i+Math.imul(T,at)|0)+Math.imul(P,ot)|0,o=o+Math.imul(P,at)|0,n=n+Math.imul(M,ft)|0,i=(i=i+Math.imul(M,ut)|0)+Math.imul(I,ft)|0,o=o+Math.imul(I,ut)|0,n=n+Math.imul(A,ht)|0,i=(i=i+Math.imul(A,dt)|0)+Math.imul(S,ht)|0,o=o+Math.imul(S,dt)|0;var kt=(u+(n=n+Math.imul(_,pt)|0)|0)+((8191&(i=(i=i+Math.imul(_,bt)|0)+Math.imul(w,pt)|0))<<13)|0;u=((o=o+Math.imul(w,bt)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(D,Q),i=(i=Math.imul(D,tt))+Math.imul(U,Q)|0,o=Math.imul(U,tt),n=n+Math.imul(C,rt)|0,i=(i=i+Math.imul(C,nt)|0)+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(B,ot)|0,i=(i=i+Math.imul(B,at)|0)+Math.imul(R,ot)|0,o=o+Math.imul(R,at)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(P,ft)|0,o=o+Math.imul(P,ut)|0,n=n+Math.imul(M,ht)|0,i=(i=i+Math.imul(M,dt)|0)+Math.imul(I,ht)|0,o=o+Math.imul(I,dt)|0;var Tt=(u+(n=n+Math.imul(A,pt)|0)|0)+((8191&(i=(i=i+Math.imul(A,bt)|0)+Math.imul(S,pt)|0))<<13)|0;u=((o=o+Math.imul(S,bt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(D,rt),i=(i=Math.imul(D,nt))+Math.imul(U,rt)|0,o=Math.imul(U,nt),n=n+Math.imul(C,ot)|0,i=(i=i+Math.imul(C,at)|0)+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(B,ft)|0,i=(i=i+Math.imul(B,ut)|0)+Math.imul(R,ft)|0,o=o+Math.imul(R,ut)|0,n=n+Math.imul(T,ht)|0,i=(i=i+Math.imul(T,dt)|0)+Math.imul(P,ht)|0,o=o+Math.imul(P,dt)|0;var Pt=(u+(n=n+Math.imul(M,pt)|0)|0)+((8191&(i=(i=i+Math.imul(M,bt)|0)+Math.imul(I,pt)|0))<<13)|0;u=((o=o+Math.imul(I,bt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(D,ot),i=(i=Math.imul(D,at))+Math.imul(U,ot)|0,o=Math.imul(U,at),n=n+Math.imul(C,ft)|0,i=(i=i+Math.imul(C,ut)|0)+Math.imul(O,ft)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(B,ht)|0,i=(i=i+Math.imul(B,dt)|0)+Math.imul(R,ht)|0,o=o+Math.imul(R,dt)|0;var Lt=(u+(n=n+Math.imul(T,pt)|0)|0)+((8191&(i=(i=i+Math.imul(T,bt)|0)+Math.imul(P,pt)|0))<<13)|0;u=((o=o+Math.imul(P,bt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(D,ft),i=(i=Math.imul(D,ut))+Math.imul(U,ft)|0,o=Math.imul(U,ut),n=n+Math.imul(C,ht)|0,i=(i=i+Math.imul(C,dt)|0)+Math.imul(O,ht)|0,o=o+Math.imul(O,dt)|0;var Bt=(u+(n=n+Math.imul(B,pt)|0)|0)+((8191&(i=(i=i+Math.imul(B,bt)|0)+Math.imul(R,pt)|0))<<13)|0;u=((o=o+Math.imul(R,bt)|0)+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(D,ht),i=(i=Math.imul(D,dt))+Math.imul(U,ht)|0,o=Math.imul(U,dt);var Rt=(u+(n=n+Math.imul(C,pt)|0)|0)+((8191&(i=(i=i+Math.imul(C,bt)|0)+Math.imul(O,pt)|0))<<13)|0;u=((o=o+Math.imul(O,bt)|0)+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863;var Nt=(u+(n=Math.imul(D,pt))|0)+((8191&(i=(i=Math.imul(D,bt))+Math.imul(U,pt)|0))<<13)|0;return u=((o=Math.imul(U,bt))+(i>>>13)|0)+(Nt>>>26)|0,Nt&=67108863,f[0]=yt,f[1]=gt,f[2]=mt,f[3]=vt,f[4]=_t,f[5]=wt,f[6]=Et,f[7]=At,f[8]=St,f[9]=xt,f[10]=Mt,f[11]=It,f[12]=kt,f[13]=Tt,f[14]=Pt,f[15]=Lt,f[16]=Bt,f[17]=Rt,f[18]=Nt,0!==u&&(f[19]=u,r.length++),r};function p(t,e,r){return(new b).mulp(t,e,r)}function b(t,e){this.x=t,this.y=e}Math.imul||(l=d),o.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?l(this,t,e):r<63?d(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,t,e):p(this,t,e)},b.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n>=1;return n},b.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}(t);if(0===e.length)return new o(1);for(var r=this,n=0;n=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,u=0;u=0&&(0!==c||u>=i);u--){var h=0|this.words[u];this.words[u]=c<<26-o|h>>>o,c=h&s}return f&&0!==c&&(f.words[f.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(f/67108864|0),this.words[i+r]=67108863&o}for(;i>26,this.words[i+r]=67108863&o;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,a=0|i.words[i.length-1];0!==(r=26-this._countBits(a))&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,f=n.length-i.length;if("mod"!==e){(s=new o(null)).length=f+1,s.words=new Array(s.length);for(var u=0;u=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(a=s.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(a=s.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:s.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,a,s},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),s=new o(0),f=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),h=e.clone();!e.isZero();){for(var d=0,l=1;0==(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(h)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||f.isOdd())&&(s.iadd(c),f.isub(h)),s.iushrn(1),f.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),a.isub(f)):(r.isub(e),s.isub(i),f.isub(a))}return{a:s,b:f,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,a=new o(1),s=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(f),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),a.isub(s)):(r.isub(e),s.isub(a))}return(i=0===e.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(t),i},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){ni&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return-1===this.cmpn(t)},o.prototype.lt=function(t){return-1===this.cmp(t)},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new E(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var y={k256:null,p224:null,p192:null,p25519:null};function g(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function m(){g.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function v(){g.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){g.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){g.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function E(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){E.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}g.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},g.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e0?r.isub(this.p):r.strip(),r},g.prototype.split=function(t,e){t.iushrn(this.n,0,e)},g.prototype.imulK=function(t){return t.imul(this.k)},i(m,g),m.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n>>22,i=o}i>>>=22,t.words[n-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},m.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function(t){if(y[t])return y[t];var e;if("k256"===t)e=new m;else if("p224"===t)e=new v;else if("p192"===t)e=new _;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new w}return y[t]=e,e},E.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},E.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},E.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},E.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},E.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},E.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},E.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},E.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},E.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},E.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},E.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},E.prototype.isqr=function(t){return this.imul(t,t.clone())},E.prototype.sqr=function(t){return this.mul(t,t)},E.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var s=new o(1).toRed(this),f=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,u).cmp(f);)c.redIAdd(f);for(var h=this.pow(c,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(s);){for(var b=l,y=0;0!==b.cmp(s);y++)b=b.redSqr();n(y=0;n--){for(var u=e.words[n],c=f-1;c>=0;c--){var h=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==a?(a<<=1,a|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[a]),s=0,a=0)):s=0}f=26}return i},E.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},E.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new A(t)},i(A,E),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(66)(t))},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},function(t,e){var r,n,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(t){r=o}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(t){n=a}}();var f,u=[],c=!1,h=-1;function d(){c&&f&&(c=!1,f.length?u=f.concat(u):h=-1,u.length&&l())}function l(){if(!c){var t=s(d);c=!0;for(var e=u.length;e;){for(f=u,u=[];++h1)for(var r=1;r=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}})),f=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&e._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),c(n,t,n.depth)}function f(t,e){var r=s.styles[e];return r?"["+s.colors[r][0]+"m"+t+"["+s.colors[r][1]+"m":t}function u(t,e){return t}function c(t,r,n){if(t.customInspect&&r&&A(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return g(i)||(i=c(t,i,n)),i}var o=function(t,e){if(m(e))return t.stylize("undefined","undefined");if(g(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(y(e))return t.stylize(""+e,"number");if(p(e))return t.stylize(""+e,"boolean");if(b(e))return t.stylize("null","null")}(t,r);if(o)return o;var a=Object.keys(r),s=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(r)),E(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(r);if(0===a.length){if(A(r)){var f=r.name?": "+r.name:"";return t.stylize("[Function"+f+"]","special")}if(v(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(w(r))return t.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var u,_="",S=!1,x=["{","}"];(l(r)&&(S=!0,x=["[","]"]),A(r))&&(_=" [Function"+(r.name?": "+r.name:"")+"]");return v(r)&&(_=" "+RegExp.prototype.toString.call(r)),w(r)&&(_=" "+Date.prototype.toUTCString.call(r)),E(r)&&(_=" "+h(r)),0!==a.length||S&&0!=r.length?n<0?v(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),u=S?function(t,e,r,n,i){for(var o=[],a=0,s=e.length;a=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(u,_,x)):x[0]+_+x[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function d(t,e,r,n,i,o){var a,s,f;if((f=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=f.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):f.set&&(s=t.stylize("[Setter]","special")),k(n,i)||(a="["+i+"]"),s||(t.seen.indexOf(f.value)<0?(s=b(r)?c(t,f.value,null):c(t,f.value,r-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(t){return" "+t})).join("\n").substr(2):"\n"+s.split("\n").map((function(t){return" "+t})).join("\n")):s=t.stylize("[Circular]","special")),m(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=t.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=t.stylize(a,"string"))}return a+": "+s}function l(t){return Array.isArray(t)}function p(t){return"boolean"==typeof t}function b(t){return null===t}function y(t){return"number"==typeof t}function g(t){return"string"==typeof t}function m(t){return void 0===t}function v(t){return _(t)&&"[object RegExp]"===S(t)}function _(t){return"object"==typeof t&&null!==t}function w(t){return _(t)&&"[object Date]"===S(t)}function E(t){return _(t)&&("[object Error]"===S(t)||t instanceof Error)}function A(t){return"function"==typeof t}function S(t){return Object.prototype.toString.call(t)}function x(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(r){if(m(o)&&(o=t.env.NODE_DEBUG||""),r=r.toUpperCase(),!a[r])if(new RegExp("\\b"+r+"\\b","i").test(o)){var n=t.pid;a[r]=function(){var t=e.format.apply(e,arguments);console.error("%s %d: %s",r,n,t)}}else a[r]=function(){};return a[r]},e.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=l,e.isBoolean=p,e.isNull=b,e.isNullOrUndefined=function(t){return null==t},e.isNumber=y,e.isString=g,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=m,e.isRegExp=v,e.isObject=_,e.isDate=w,e.isError=E,e.isFunction=A,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(143);var M=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function I(){var t=new Date,e=[x(t.getHours()),x(t.getMinutes()),x(t.getSeconds())].join(":");return[t.getDate(),M[t.getMonth()],e].join(" ")}function k(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){console.log("%s - %s",I(),e.format.apply(e,arguments))},e.inherits=r(144),e._extend=function(t,e){if(!e||!_(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t};var T="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(t,e){if(!t){var r=new Error("Promise was rejected with a falsy value");r.reason=t,t=r}return e(t)}e.promisify=function(t){if("function"!=typeof t)throw new TypeError('The "original" argument must be of type Function');if(T&&t[T]){var e;if("function"!=typeof(e=t[T]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(e,T,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var e,r,n=new Promise((function(t,n){e=t,r=n})),i=[],o=0;o=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var f=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(f&&u){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),M(r),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;M(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:k(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},,function(t,e,r){(function(t){function r(t){return Object.prototype.toString.call(t)}e.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===r(t)},e.isBoolean=function(t){return"boolean"==typeof t},e.isNull=function(t){return null===t},e.isNullOrUndefined=function(t){return null==t},e.isNumber=function(t){return"number"==typeof t},e.isString=function(t){return"string"==typeof t},e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=function(t){return void 0===t},e.isRegExp=function(t){return"[object RegExp]"===r(t)},e.isObject=function(t){return"object"==typeof t&&null!==t},e.isDate=function(t){return"[object Date]"===r(t)},e.isError=function(t){return"[object Error]"===r(t)||t instanceof Error},e.isFunction=function(t){return"function"==typeof t},e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=t.isBuffer}).call(this,r(10).Buffer)},,function(t,e,r){"use strict";var n=r(37),i=r(13);function o(t,e){return 55296==(64512&t.charCodeAt(e))&&(!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1)))}function a(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function s(t){return 1===t.length?"0"+t:t}function f(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}e.inherits=i,e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i>6|192,r[n++]=63&a|128):o(t,i)?(a=65536+((1023&a)<<10)+(1023&t.charCodeAt(++i)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(i=0;i>>0}return a},e.split32=function(t,e){for(var r=new Array(4*t.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r},e.rotr32=function(t,e){return t>>>e|t<<32-e},e.rotl32=function(t,e){return t<>>32-e},e.sum32=function(t,e){return t+e>>>0},e.sum32_3=function(t,e,r){return t+e+r>>>0},e.sum32_4=function(t,e,r,n){return t+e+r+n>>>0},e.sum32_5=function(t,e,r,n,i){return t+e+r+n+i>>>0},e.sum64=function(t,e,r,n){var i=t[e],o=n+t[e+1]>>>0,a=(o>>0,t[e+1]=o},e.sum64_hi=function(t,e,r,n){return(e+n>>>0>>0},e.sum64_lo=function(t,e,r,n){return e+n>>>0},e.sum64_4_hi=function(t,e,r,n,i,o,a,s){var f=0,u=e;return f+=(u=u+n>>>0)>>0)>>0)>>0},e.sum64_4_lo=function(t,e,r,n,i,o,a,s){return e+n+o+s>>>0},e.sum64_5_hi=function(t,e,r,n,i,o,a,s,f,u){var c=0,h=e;return c+=(h=h+n>>>0)>>0)>>0)>>0)>>0},e.sum64_5_lo=function(t,e,r,n,i,o,a,s,f,u){return e+n+o+s+u>>>0},e.rotr64_hi=function(t,e,r){return(e<<32-r|t>>>r)>>>0},e.rotr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0},e.shr64_hi=function(t,e,r){return t>>>r},e.shr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";(function(e){void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,r)}));case 3:return e.nextTick((function(){t.call(null,r,n)}));case 4:return e.nextTick((function(){t.call(null,r,n,i)}));default:for(o=new Array(s-1),a=0;a0?n-4:n,h=0;h>16&255,s[f++]=e>>8&255,s[f++]=255&e;2===a&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,s[f++]=255&e);1===a&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,s[f++]=e>>8&255,s[f++]=255&e);return s},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=0,s=r-i;as?s:a+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,f=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function c(t,e,r){for(var i,o,a=[],s=e;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,s=8*i-n-1,f=(1<>1,c=-7,h=r?i-1:0,d=r?-1:1,l=t[e+h];for(h+=d,o=l&(1<<-c)-1,l>>=-c,c+=s;c>0;o=256*o+t[e+h],h+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+t[e+h],h+=d,c-=8);if(0===o)o=1-u;else{if(o===f)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=u}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,f,u=8*o-i-1,c=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-a))<1&&(a--,f*=2),(e+=a+h>=1?d/f:d*Math.pow(2,1-h))*f>=2&&(a++,f/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(e*f-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&s,l+=p,s/=256,i-=8);for(a=a<0;t[r+l]=255&a,l+=p,a/=256,u-=8);t[r+l-p]|=128*b}},function(t,e,r){t.exports=i;var n=r(15).EventEmitter;function i(){n.call(this)}r(17)(i,n),i.Readable=r(33),i.Writable=r(60),i.Duplex=r(61),i.Transform=r(62),i.PassThrough=r(63),i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function i(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on("data",i),t.on("drain",o),t._isStdio||e&&!1===e.end||(r.on("end",s),r.on("close",f));var a=!1;function s(){a||(a=!0,t.end())}function f(){a||(a=!0,"function"==typeof t.destroy&&t.destroy())}function u(t){if(c(),0===n.listenerCount(this,"error"))throw t}function c(){r.removeListener("data",i),t.removeListener("drain",o),r.removeListener("end",s),r.removeListener("close",f),r.removeListener("error",u),t.removeListener("error",u),r.removeListener("end",c),r.removeListener("close",c),t.removeListener("close",c)}return r.on("error",u),t.on("error",u),r.on("end",c),r.on("close",c),t.on("close",c),t.emit("pipe",r),t}},function(t,e,r){(e=t.exports=r(41)).Stream=e,e.Readable=e,e.Writable=r(35),e.Duplex=r(14),e.Transform=r(44),e.PassThrough=r(59)},function(t,e,r){var n=r(10),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function a(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=a),o(i,a),a.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},a.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},a.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},a.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},function(t,e,r){"use strict";(function(e,n,i){var o=r(29);function a(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var n=t.entry;t.entry=null;for(;n;){var i=n.callback;e.pendingcb--,i(r),n=n.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}(e,t)}}t.exports=m;var s,f=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?n:o.nextTick;m.WritableState=g;var u=r(25);u.inherits=r(17);var c={deprecate:r(57)},h=r(42),d=r(34).Buffer,l=i.Uint8Array||function(){};var p,b=r(43);function y(){}function g(t,e){s=s||r(14),t=t||{};var n=e instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var i=t.highWaterMark,u=t.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(u||0===u)?u:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===t.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,i){--e.pendingcb,r?(o.nextTick(i,n),o.nextTick(S,t,e),t._writableState.errorEmitted=!0,t.emit("error",n)):(i(n),t._writableState.errorEmitted=!0,t.emit("error",n),S(t,e))}(t,r,n,e,i);else{var a=E(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||w(t,r),n?f(_,t,r,a,i):_(t,r,a,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function m(t){if(s=s||r(14),!(p.call(m,this)||this instanceof s))return new m(t);this._writableState=new g(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),h.call(this)}function v(t,e,r,n,i,o,a){e.writelen=n,e.writecb=a,e.writing=!0,e.sync=!0,r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function _(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,n(),S(t,e)}function w(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var s=0,f=!0;r;)i[s]=r,r.isBuf||(f=!1),r=r.next,s+=1;i.allBuffers=f,v(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new a(e),e.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,h=r.callback;if(v(t,e,!1,e.objectMode?1:u.length,u,c,h),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function E(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function A(t,e){t._final((function(r){e.pendingcb--,r&&t.emit("error",r),e.prefinished=!0,t.emit("prefinish"),S(t,e)}))}function S(t,e){var r=E(e);return r&&(!function(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,o.nextTick(A,t,e)):(e.prefinished=!0,t.emit("prefinish")))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),r}u.inherits(m,h),g.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(g.prototype,"buffer",{get:c.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(m,Symbol.hasInstance,{value:function(t){return!!p.call(this,t)||this===m&&(t&&t._writableState instanceof g)}})):p=function(t){return t instanceof this},m.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},m.prototype.write=function(t,e,r){var n,i=this._writableState,a=!1,s=!i.objectMode&&(n=t,d.isBuffer(n)||n instanceof l);return s&&!d.isBuffer(t)&&(t=function(t){return d.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof r&&(r=y),i.ended?function(t,e){var r=new Error("write after end");t.emit("error",r),o.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var i=!0,a=!1;return null===r?a=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||e.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(t.emit("error",a),o.nextTick(n,a),i=!1),i}(this,i,t,r))&&(i.pendingcb++,a=function(t,e,r,n,i,o){if(!r){var a=function(t,e,r){t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=d.from(e,r));return e}(e,n,i);n!==a&&(r=!0,i="buffer",n=a)}var s=e.objectMode?1:n.length;e.length+=s;var f=e.length-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(m.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),m.prototype._write=function(t,e,r){r(new Error("_write() is not implemented"))},m.prototype._writev=null,m.prototype.end=function(t,e,r){var n=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(t,e,r){e.ending=!0,S(t,e),r&&(e.finished?o.nextTick(r):t.once("finish",r));e.ended=!0,t.writable=!1}(this,n,r)},Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),m.prototype.destroy=b.destroy,m.prototype._undestroy=b.undestroy,m.prototype._destroy=function(t,e){this.end(),e(t)}}).call(this,r(18),r(48).setImmediate,r(9))},function(t,e,r){"use strict";var n=r(58).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=f,this.end=u,e=4;break;case"utf8":this.fillLast=s,e=4;break;case"base64":this.text=c,this.end=h,e=3;break;default:return this.write=d,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function a(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function f(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function h(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function d(t){return t.toString(this.encoding)}function l(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(t.lastNeed=i-1),i;if(--n=0)return i>0&&(t.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isAsync=void 0;var n,i=r(218),o=(n=i)&&n.__esModule?n:{default:n};var a="function"==typeof Symbol;function s(t){return a&&"AsyncFunction"===t[Symbol.toStringTag]}e.default=function(t){return s(t)?(0,o.default)(t):t},e.isAsync=s},,function(t,e,r){var n=r(12).Buffer;function i(t,e){this._block=n.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}i.prototype.update=function(t,e){"string"==typeof t&&(e=e||"utf8",t=n.from(t,e));for(var r=this._block,i=this._blockSize,o=t.length,a=this._len,s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},function(t,e,r){"use strict";(function(e,n){var i=r(29);t.exports=v;var o,a=r(28);v.ReadableState=m;r(15).EventEmitter;var s=function(t,e){return t.listeners(e).length},f=r(42),u=r(34).Buffer,c=e.Uint8Array||function(){};var h=r(25);h.inherits=r(17);var d=r(53),l=void 0;l=d&&d.debuglog?d.debuglog("stream"):function(){};var p,b=r(54),y=r(43);h.inherits(v,f);var g=["error","close","destroy","pause","resume"];function m(t,e){t=t||{};var n=e instanceof(o=o||r(14));this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var i=t.highWaterMark,a=t.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new b,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=r(36).StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function v(t){if(o=o||r(14),!(this instanceof v))return new v(t);this._readableState=new m(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),f.call(this)}function _(t,e,r,n,i){var o,a=t._readableState;null===e?(a.reading=!1,function(t,e){if(e.ended)return;if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,S(t)}(t,a)):(i||(o=function(t,e){var r;n=e,u.isBuffer(n)||n instanceof c||"string"==typeof e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(a,e)),o?t.emit("error",o):a.objectMode||e&&e.length>0?("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===u.prototype||(e=function(t){return u.from(t)}(e)),n?a.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):w(t,a,e,!0):a.ended?t.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!r?(e=a.decoder.write(e),a.objectMode||0!==e.length?w(t,a,e,!1):M(t,a)):w(t,a,e,!1))):n||(a.reading=!1));return function(t){return!t.ended&&(t.needReadable||t.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function S(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(l("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?i.nextTick(x,t):x(t))}function x(t){l("emit readable"),t.emit("readable"),P(t)}function M(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(I,t,e))}function I(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=function(t,e,r){var n;to.length?o.length:t;if(a===o.length?i+=o:i+=o.slice(0,t),0===(t-=a)){a===o.length?(++n,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++n}return e.length-=n,i}(t,e):function(t,e){var r=u.allocUnsafe(t),n=e.head,i=1;n.data.copy(r),t-=n.data.length;for(;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,a),0===(t-=a)){a===o.length?(++i,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++i}return e.length-=i,r}(t,e);return n}(t,e.buffer,e.decoder),r);var r}function B(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,i.nextTick(R,e,t))}function R(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function N(t,e){for(var r=0,n=t.length;r=e.highWaterMark||e.ended))return l("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?B(this):S(this),null;if(0===(t=A(t,e))&&e.ended)return 0===e.length&&B(this),null;var n,i=e.needReadable;return l("need readable",i),(0===e.length||e.length-t0?L(t,e):null)?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&B(this)),null!==n&&this.emit("data",n),n},v.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},v.prototype.pipe=function(t,e){var r=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=t;break;case 1:o.pipes=[o.pipes,t];break;default:o.pipes.push(t)}o.pipesCount+=1,l("pipe count=%d opts=%j",o.pipesCount,e);var f=(!e||!1!==e.end)&&t!==n.stdout&&t!==n.stderr?c:v;function u(e,n){l("onunpipe"),e===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,l("cleanup"),t.removeListener("close",g),t.removeListener("finish",m),t.removeListener("drain",h),t.removeListener("error",y),t.removeListener("unpipe",u),r.removeListener("end",c),r.removeListener("end",v),r.removeListener("data",b),d=!0,!o.awaitDrain||t._writableState&&!t._writableState.needDrain||h())}function c(){l("onend"),t.end()}o.endEmitted?i.nextTick(f):r.once("end",f),t.on("unpipe",u);var h=function(t){return function(){var e=t._readableState;l("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&s(t,"data")&&(e.flowing=!0,P(t))}}(r);t.on("drain",h);var d=!1;var p=!1;function b(e){l("ondata"),p=!1,!1!==t.write(e)||p||((1===o.pipesCount&&o.pipes===t||o.pipesCount>1&&-1!==N(o.pipes,t))&&!d&&(l("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function y(e){l("onerror",e),v(),t.removeListener("error",y),0===s(t,"error")&&t.emit("error",e)}function g(){t.removeListener("finish",m),v()}function m(){l("onfinish"),t.removeListener("close",g),v()}function v(){l("unpipe"),r.unpipe(t)}return r.on("data",b),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?a(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",y),t.once("close",g),t.once("finish",m),t.emit("pipe",r),o.flowing||(l("pipe resume"),r.resume()),t},v.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o=this._delta8){var r=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=n.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else for(n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;o=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},r(56),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,r(9))},function(t,e,r){"use strict";var n=e;n.base=r(168),n.short=r(169),n.mont=r(170),n.edwards=r(171)},function(t,e){t.exports=function(){for(var t={},e=0;e0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},t.prototype.concat=function(t){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var e,r,i,o=n.allocUnsafe(t>>>0),a=this.head,s=0;a;)e=a.data,r=o,i=s,e.copy(r,i),s+=a.data.length,a=a.next;return o},t}(),i&&i.inspect&&i.inspect.custom&&(t.exports.prototype[i.inspect.custom]=function(){var t=i.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var n,i,o,a,s,f=1,u={},c=!1,h=t.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(t);d=d&&d.setTimeout?d:t,"[object process]"==={}.toString.call(t.process)?n=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},n=function(t){o.port2.postMessage(t)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(t){var e=h.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):n=function(t){setTimeout(p,0,t)}:(a="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(a)&&p(+e.data.slice(a.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),n=function(e){t.postMessage(a+e,"*")}),d.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;r0&&"0"===r.toString();)r=(t=t.slice(1))[0];return t},e.toBuffer=function(t){if(!c.isBuffer(t))if(Array.isArray(t))t=c.from(t);else if("string"==typeof t)t=e.isHexString(t)?c.from(e.padToEven(e.stripHexPrefix(t)),"hex"):c.from(t);else if("number"==typeof t)t=e.intToBuffer(t);else if(null==t)t=c.allocUnsafe(0);else if(f.isBN(t))t=t.toArrayLike(c);else{if(!t.toArray)throw new Error("invalid type");t=c.from(t.toArray())}return t},e.bufferToInt=function(t){return new f(e.toBuffer(t)).toNumber()},e.bufferToHex=function(t){return"0x"+(t=e.toBuffer(t)).toString("hex")},e.fromSigned=function(t){return new f(t).fromTwos(256)},e.toUnsigned=function(t){return c.from(t.toTwos(256).toArray())},e.keccak=function(t,r){return t=e.toBuffer(t),r||(r=256),i("keccak"+r).update(t).digest()},e.keccak256=function(t){return e.keccak(t)},e.sha3=e.keccak,e.sha256=function(t){return t=e.toBuffer(t),u("sha256").update(t).digest()},e.ripemd160=function(t,r){t=e.toBuffer(t);var n=u("rmd160").update(t).digest();return!0===r?e.setLength(n,32):n},e.rlphash=function(t){return e.keccak(s.encode(t))},e.isValidPrivate=function(t){return o.privateKeyVerify(t)},e.isValidPublic=function(t,e){return 64===t.length?o.publicKeyVerify(c.concat([c.from([4]),t])):!!e&&o.publicKeyVerify(t)},e.pubToAddress=e.publicToAddress=function(t,r){return t=e.toBuffer(t),r&&64!==t.length&&(t=o.publicKeyConvert(t,!1).slice(1)),a(64===t.length),e.keccak(t).slice(-20)};var h=e.privateToPublic=function(t){return t=e.toBuffer(t),o.publicKeyCreate(t,!1).slice(1)};e.importPublic=function(t){return 64!==(t=e.toBuffer(t)).length&&(t=o.publicKeyConvert(t,!1).slice(1)),t},e.ecsign=function(t,e){var r=o.sign(t,e),n={};return n.r=r.signature.slice(0,32),n.s=r.signature.slice(32,64),n.v=r.recovery+27,n},e.hashPersonalMessage=function(t){var r=e.toBuffer("Ethereum Signed Message:\n"+t.length.toString());return e.keccak(c.concat([r,t]))},e.ecrecover=function(t,r,n,i){var a=c.concat([e.setLength(n,32),e.setLength(i,32)],64),s=r-27;if(0!==s&&1!==s)throw new Error("Invalid signature v value");var f=o.recover(t,a,s);return o.publicKeyConvert(f,!1).slice(1)},e.toRpcSig=function(t,r,n){if(27!==t&&28!==t)throw new Error("Invalid recovery id");return e.bufferToHex(c.concat([e.setLengthLeft(r,32),e.setLengthLeft(n,32),e.toBuffer(t-27)]))},e.fromRpcSig=function(t){if(65!==(t=e.toBuffer(t)).length)throw new Error("Invalid signature length");var r=t[64];return r<27&&(r+=27),{v:r,r:t.slice(0,32),s:t.slice(32,64)}},e.privateToAddress=function(t){return e.publicToAddress(h(t))},e.isValidAddress=function(t){return/^0x[0-9a-fA-F]{40}$/.test(t)},e.isZeroAddress=function(t){return e.zeroAddress()===e.addHexPrefix(t)},e.toChecksumAddress=function(t){t=e.stripHexPrefix(t).toLowerCase();for(var r=e.keccak(t).toString("hex"),n="0x",i=0;i=8?n+=t[i].toUpperCase():n+=t[i];return n},e.isValidChecksumAddress=function(t){return e.isValidAddress(t)&&e.toChecksumAddress(t)===t},e.generateAddress=function(t,r){return t=e.toBuffer(t),r=(r=new f(r)).isZero()?null:c.from(r.toArray()),e.rlphash([t,r]).slice(-20)},e.isPrecompiled=function(t){var r=e.unpad(t);return 1===r.length&&r[0]>=1&&r[0]<=8},e.addHexPrefix=function(t){return"string"!=typeof t?t:e.isHexPrefixed(t)?t:"0x"+t},e.isValidSignature=function(t,e,r,n){var i=new f("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),o=new f("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);return 32===e.length&&32===r.length&&((27===t||28===t)&&(e=new f(e),r=new f(r),!(e.isZero()||e.gt(o)||r.isZero()||r.gt(o))&&(!1!==n||1!==new f(r).cmp(i))))},e.baToJSON=function(t){if(c.isBuffer(t))return"0x"+t.toString("hex");if(t instanceof Array){for(var r=[],n=0;n=i.length,"The field "+r.name+" must not have more "+r.length+" bytes")):r.allowZero&&0===i.length||!r.length||a(r.length===i.length,"The field "+r.name+" must have byte length of "+r.length),t.raw[n]=i}t._fields.push(r.name),Object.defineProperty(t,r.name,{enumerable:!0,configurable:!0,get:i,set:o}),r.default&&(t[r.name]=r.default),r.alias&&Object.defineProperty(t,r.alias,{enumerable:!1,configurable:!0,set:o,get:i})})),i)if("string"==typeof i&&(i=c.from(e.stripHexPrefix(i),"hex")),c.isBuffer(i)&&(i=s.decode(i)),Array.isArray(i)){if(i.length>t._fields.length)throw new Error("wrong number of fields in data");i.forEach((function(r,n){t[t._fields[n]]=e.toBuffer(r)}))}else{if("object"!==(void 0===i?"undefined":n(i)))throw new Error("invalid data");var o=Object.keys(i);r.forEach((function(e){-1!==o.indexOf(e.name)&&(t[e.name]=i[e.name]),-1!==o.indexOf(e.alias)&&(t[e.alias]=i[e.alias])}))}}},function(t,e,r){"use strict";var n=r(13),i=r(155),o=r(156),a=r(157),s=r(162);function f(t){s.call(this,"digest"),this._hash=t}n(f,s),f.prototype._update=function(t){this._hash.update(t)},f.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new i:"rmd160"===t||"ripemd160"===t?new o:new f(a(t))}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,r){var n=e;n.utils=r(27),n.common=r(45),n.sha=r(173),n.ripemd=r(177),n.hmac=r(178),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(t,e,r){"use strict";(function(e){var n=r(92),i=r(188);function o(t){var e=t;if("string"!=typeof e)throw new Error("[ethjs-util] while padding to even, value must be string, is currently "+typeof e+", while padToEven.");return e.length%2&&(e="0"+e),e}function a(t){return"0x"+t.toString(16)}t.exports={arrayContainsArray:function(t,e,r){if(!0!==Array.isArray(t))throw new Error("[ethjs-util] method arrayContainsArray requires input 'superset' to be an array got type '"+typeof t+"'");if(!0!==Array.isArray(e))throw new Error("[ethjs-util] method arrayContainsArray requires input 'subset' to be an array got type '"+typeof e+"'");return e[Boolean(r)?"some":"every"]((function(e){return t.indexOf(e)>=0}))},intToBuffer:function(t){var r=a(t);return new e(o(r.slice(2)),"hex")},getBinarySize:function(t){if("string"!=typeof t)throw new Error("[ethjs-util] while getting binary size, method getBinarySize requires input 'str' to be type String, got '"+typeof t+"'.");return e.byteLength(t,"utf8")},isHexPrefixed:n,stripHexPrefix:i,padToEven:o,intToHex:a,fromAscii:function(t){for(var e="",r=0;r=this._blockSize;){for(var o=this._blockOffset;o0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},function(t,e,r){var n=r(13),i=r(40),o=r(12).Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(t,e,r){return r^t&(e^r)}function c(t,e,r){return t&e|r&(t|e)}function h(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function d(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function l(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}n(f,i),f.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,p=0|this._f,b=0|this._g,y=0|this._h,g=0;g<16;++g)r[g]=t.readInt32BE(4*g);for(;g<64;++g)r[g]=0|(((e=r[g-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+r[g-7]+l(r[g-15])+r[g-16];for(var m=0;m<64;++m){var v=y+d(f)+u(f,p,b)+a[m]+r[m]|0,_=h(n)+c(n,i,o)|0;y=b,b=p,p=f,f=s+v|0,s=o,o=i,i=n,n=v+_|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=y+this._h|0},f.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=f},function(t,e,r){var n=r(13),i=r(40),o=r(12).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function f(){this.init(),this._w=s,i.call(this,128,112)}function u(t,e,r){return r^t&(e^r)}function c(t,e,r){return t&e|r&(t|e)}function h(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function d(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function l(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function b(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function y(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function g(t,e){return t>>>0>>0?1:0}n(f,i),f.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},f.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,f=0|this._fh,m=0|this._gh,v=0|this._hh,_=0|this._al,w=0|this._bl,E=0|this._cl,A=0|this._dl,S=0|this._el,x=0|this._fl,M=0|this._gl,I=0|this._hl,k=0;k<32;k+=2)e[k]=t.readInt32BE(4*k),e[k+1]=t.readInt32BE(4*k+4);for(;k<160;k+=2){var T=e[k-30],P=e[k-30+1],L=l(T,P),B=p(P,T),R=b(T=e[k-4],P=e[k-4+1]),N=y(P,T),C=e[k-14],O=e[k-14+1],j=e[k-32],D=e[k-32+1],U=B+O|0,q=L+C+g(U,B)|0;q=(q=q+R+g(U=U+N|0,N)|0)+j+g(U=U+D|0,D)|0,e[k]=q,e[k+1]=U}for(var z=0;z<160;z+=2){q=e[z],U=e[z+1];var F=c(r,n,i),K=c(_,w,E),V=h(r,_),Y=h(_,r),H=d(s,S),$=d(S,s),G=a[z],W=a[z+1],Z=u(s,f,m),J=u(S,x,M),X=I+$|0,Q=v+H+g(X,I)|0;Q=(Q=(Q=Q+Z+g(X=X+J|0,J)|0)+G+g(X=X+W|0,W)|0)+q+g(X=X+U|0,U)|0;var tt=Y+K|0,et=V+F+g(tt,Y)|0;v=m,I=M,m=f,M=x,f=s,x=S,s=o+Q+g(S=A+X|0,A)|0,o=i,A=E,i=n,E=w,n=r,w=_,r=Q+et+g(_=X+tt|0,X)|0}this._al=this._al+_|0,this._bl=this._bl+w|0,this._cl=this._cl+E|0,this._dl=this._dl+A|0,this._el=this._el+S|0,this._fl=this._fl+x|0,this._gl=this._gl+M|0,this._hl=this._hl+I|0,this._ah=this._ah+r+g(this._al,_)|0,this._bh=this._bh+n+g(this._bl,w)|0,this._ch=this._ch+i+g(this._cl,E)|0,this._dh=this._dh+o+g(this._dl,A)|0,this._eh=this._eh+s+g(this._el,S)|0,this._fh=this._fh+f+g(this._fl,x)|0,this._gh=this._gh+m+g(this._gl,M)|0,this._hh=this._hh+v+g(this._hl,I)|0},f.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=f},function(t,e,r){"use strict";var n=e;function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r>8,a=255&i;o?r.push(o,a):r.push(a)}return r},n.zero2=i,n.toHex=o,n.encode=function(t,e){return"hex"===e?o(t):t}},function(t,e,r){"use strict";var n=r(27).rotr32;function i(t,e,r){return t&e^~t&r}function o(t,e,r){return t&e^t&r^e&r}function a(t,e,r){return t^e^r}e.ft_1=function(t,e,r,n){return 0===t?i(e,r,n):1===t||3===t?a(e,r,n):2===t?o(e,r,n):void 0},e.ch32=i,e.maj32=o,e.p32=a,e.s0_256=function(t){return n(t,2)^n(t,13)^n(t,22)},e.s1_256=function(t){return n(t,6)^n(t,11)^n(t,25)},e.g0_256=function(t){return n(t,7)^n(t,18)^t>>>3},e.g1_256=function(t){return n(t,17)^n(t,19)^t>>>10}},function(t,e,r){"use strict";var n=r(27),i=r(45),o=r(87),a=r(37),s=n.sum32,f=n.sum32_4,u=n.sum32_5,c=o.ch32,h=o.maj32,d=o.s0_256,l=o.s1_256,p=o.g0_256,b=o.g1_256,y=i.BlockHash,g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function m(){if(!(this instanceof m))return new m;y.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=g,this.W=new Array(64)}n.inherits(m,y),t.exports=m,m.blockSize=512,m.outSize=256,m.hmacStrength=192,m.padLength=64,m.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function p(t,e){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return U(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return F(t).length;default:if(n)return U(t).length;e=(""+e).toLowerCase(),n=!0}}function b(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return M(this,e,r);case"ascii":return I(this,e,r);case"latin1":case"binary":return T(this,e,r);case"base64":return x(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=f.from(e,n)),f.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,a=1,s=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,f/=2,r/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=r;os&&(r=s-f),o=r;o>=0;o--){for(var h=!0,d=0;di&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function x(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function M(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(f=(31&u)<<6|63&o)>127&&(c=f);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(f=(15&u)<<12|(63&o)<<6|63&a)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(f=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=k)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},f.prototype.compare=function(t,e,r,n,i){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0),s=Math.min(o,a),u=this.slice(n,i),c=t.slice(e,r),h=0;hi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return _(this,t,e,r);case"ascii":return w(this,t,e,r);case"latin1":case"binary":return E(this,t,e,r);case"base64":return S(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,r,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function C(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function O(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function N(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,o){return o||N(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function D(t,e,r,n,o){return o||N(t,0,r,8),i.write(t,e,r,n,52,8),r+8}f.prototype.slice=function(t,e){var r,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},f.prototype.readUInt8=function(t,e){return e||P(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,e){return e||P(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,e){return e||P(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,e){return e||P(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,e){return e||P(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},f.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||P(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},f.prototype.readInt8=function(t,e){return e||P(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,e){e||P(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(t,e){e||P(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(t,e){return e||P(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,e){return e||P(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,e){return e||P(t,4,this.length),i.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,e){return e||P(t,4,this.length),i.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,e){return e||P(t,8,this.length),i.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,e){return e||P(t,8,this.length),i.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},f.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},f.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):C(this,t,e,!0),e+2},f.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):C(this,t,e,!1),e+2},f.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):O(this,t,e,!0),e+4},f.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):O(this,t,e,!1),e+4},f.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+r},f.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},f.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},f.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):C(this,t,e,!0),e+2},f.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):C(this,t,e,!1),e+2},f.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):O(this,t,e,!0),e+4},f.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):O(this,t,e,!1),e+4},f.prototype.writeFloatLE=function(t,e,r){return j(this,t,e,!0,r)},f.prototype.writeFloatBE=function(t,e,r){return j(this,t,e,!1,r)},f.prototype.writeDoubleLE=function(t,e,r){return D(this,t,e,!0,r)},f.prototype.writeDoubleBE=function(t,e,r){return D(this,t,e,!1,r)},f.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!f.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function F(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(q,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function K(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(this,r(7))},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(13),i=r(19);t.exports=function(t,e){return!e||"object"!==n(e)&&"function"!=typeof e?i(t):e}},function(t,e){function r(e){return t.exports=r=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},r(e)}t.exports=r},function(t,e,r){var n=r(20);t.exports=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&n(t,e)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},function(t,e){var r,n,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(t){r=o}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(t){n=a}}();var f,u=[],c=!1,h=-1;function d(){c&&f&&(c=!1,f.length?u=f.concat(u):h=-1,u.length&&l())}function l(){if(!c){var t=s(d);c=!0;for(var e=u.length;e;){for(f=u,u=[];++h1)for(var r=1;r0&&a.length>i&&!a.warned){a.warned=!0;var f=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=t,f.type=e,f.count=a.length,s=f,console&&console.warn&&console.warn(s)}return t}function h(){for(var t=[],e=0;e0&&(a=e[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var f=i[t];if(void 0===f)return!1;if("function"==typeof f)o(f,this,e);else{var u=f.length,c=b(f,u);for(r=0;r=0;o--)if(r[o]===e||r[o].listener===e){a=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1=0;n--)this.removeListener(t,e[n]);return this},s.prototype.listeners=function(t){return l(this,t,!0)},s.prototype.rawListeners=function(t){return l(this,t,!1)},s.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){if(o.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var a;"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;try{a=r(196).Buffer}catch(t){}function s(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a=49?s-49+10:s>=17?s-17+10:s}return i}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r=e;r-=6)i=s(t,r,r+6),this.words[n]|=i<>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==e&&(i=s(t,e,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,s=67108863&a,f=a/67108864|0;r.words[0]=s;for(var u=1;u>>26,h=67108863&f,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;c+=(a=(i=0|t.words[p])*(o=0|e.words[l])+h)/67108864|0,h=67108863&a}r.words[u]=0|h,f=0|c}return 0!==f?r.words[u]=0|f:r.length--,r.strip()}o.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,o=0,a=0;a>>24-i&16777215)||a!==this.length-1?u[6-f.length]+f+r:f+r,(i+=2)>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var d=c[t],l=h[t];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(t);r=(p=p.idivn(l)).isZero()?b+r:u[d-b.length]+b+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n(void 0!==a),this.toArrayLike(a,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,s,f="le"===e,u=new t(o),c=this.clone();if(f){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),u[s]=a;for(;s=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;rt.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;nt.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;ot.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var o=0,a=0;a>26,this.words[a]=67108863&e;for(;0!==o&&a>26,this.words[a]=67108863&e;if(0===o&&a>>13,l=0|a[1],p=8191&l,b=l>>>13,g=0|a[2],y=8191&g,m=g>>>13,v=0|a[3],_=8191&v,w=v>>>13,E=0|a[4],S=8191&E,A=E>>>13,x=0|a[5],M=8191&x,k=x>>>13,I=0|a[6],T=8191&I,R=I>>>13,L=0|a[7],P=8191&L,B=L>>>13,C=0|a[8],O=8191&C,N=C>>>13,j=0|a[9],D=8191&j,q=j>>>13,z=0|s[0],U=8191&z,F=z>>>13,K=0|s[1],H=8191&K,V=K>>>13,Y=0|s[2],W=8191&Y,G=Y>>>13,Z=0|s[3],J=8191&Z,X=Z>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],ot=8191&it,at=it>>>13,st=0|s[7],ft=8191&st,ut=st>>>13,ct=0|s[8],ht=8191&ct,dt=ct>>>13,lt=0|s[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(n=Math.imul(h,U))|0)+((8191&(i=(i=Math.imul(h,F))+Math.imul(d,U)|0))<<13)|0;u=((o=Math.imul(d,F))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(p,U),i=(i=Math.imul(p,F))+Math.imul(b,U)|0,o=Math.imul(b,F);var yt=(u+(n=n+Math.imul(h,H)|0)|0)+((8191&(i=(i=i+Math.imul(h,V)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,V)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,U),i=(i=Math.imul(y,F))+Math.imul(m,U)|0,o=Math.imul(m,F),n=n+Math.imul(p,H)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,V)|0;var mt=(u+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(d,W)|0))<<13)|0;u=((o=o+Math.imul(d,G)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(_,U),i=(i=Math.imul(_,F))+Math.imul(w,U)|0,o=Math.imul(w,F),n=n+Math.imul(y,H)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(m,H)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,W)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(b,W)|0,o=o+Math.imul(b,G)|0;var vt=(u+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,X)|0)+Math.imul(d,J)|0))<<13)|0;u=((o=o+Math.imul(d,X)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(S,U),i=(i=Math.imul(S,F))+Math.imul(A,U)|0,o=Math.imul(A,F),n=n+Math.imul(_,H)|0,i=(i=i+Math.imul(_,V)|0)+Math.imul(w,H)|0,o=o+Math.imul(w,V)|0,n=n+Math.imul(y,W)|0,i=(i=i+Math.imul(y,G)|0)+Math.imul(m,W)|0,o=o+Math.imul(m,G)|0,n=n+Math.imul(p,J)|0,i=(i=i+Math.imul(p,X)|0)+Math.imul(b,J)|0,o=o+Math.imul(b,X)|0;var _t=(u+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,tt)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,tt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(M,U),i=(i=Math.imul(M,F))+Math.imul(k,U)|0,o=Math.imul(k,F),n=n+Math.imul(S,H)|0,i=(i=i+Math.imul(S,V)|0)+Math.imul(A,H)|0,o=o+Math.imul(A,V)|0,n=n+Math.imul(_,W)|0,i=(i=i+Math.imul(_,G)|0)+Math.imul(w,W)|0,o=o+Math.imul(w,G)|0,n=n+Math.imul(y,J)|0,i=(i=i+Math.imul(y,X)|0)+Math.imul(m,J)|0,o=o+Math.imul(m,X)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,tt)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0;var wt=(u+(n=n+Math.imul(h,rt)|0)|0)+((8191&(i=(i=i+Math.imul(h,nt)|0)+Math.imul(d,rt)|0))<<13)|0;u=((o=o+Math.imul(d,nt)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(T,U),i=(i=Math.imul(T,F))+Math.imul(R,U)|0,o=Math.imul(R,F),n=n+Math.imul(M,H)|0,i=(i=i+Math.imul(M,V)|0)+Math.imul(k,H)|0,o=o+Math.imul(k,V)|0,n=n+Math.imul(S,W)|0,i=(i=i+Math.imul(S,G)|0)+Math.imul(A,W)|0,o=o+Math.imul(A,G)|0,n=n+Math.imul(_,J)|0,i=(i=i+Math.imul(_,X)|0)+Math.imul(w,J)|0,o=o+Math.imul(w,X)|0,n=n+Math.imul(y,Q)|0,i=(i=i+Math.imul(y,tt)|0)+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=(i=i+Math.imul(p,nt)|0)+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0;var Et=(u+(n=n+Math.imul(h,ot)|0)|0)+((8191&(i=(i=i+Math.imul(h,at)|0)+Math.imul(d,ot)|0))<<13)|0;u=((o=o+Math.imul(d,at)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(P,U),i=(i=Math.imul(P,F))+Math.imul(B,U)|0,o=Math.imul(B,F),n=n+Math.imul(T,H)|0,i=(i=i+Math.imul(T,V)|0)+Math.imul(R,H)|0,o=o+Math.imul(R,V)|0,n=n+Math.imul(M,W)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(k,W)|0,o=o+Math.imul(k,G)|0,n=n+Math.imul(S,J)|0,i=(i=i+Math.imul(S,X)|0)+Math.imul(A,J)|0,o=o+Math.imul(A,X)|0,n=n+Math.imul(_,Q)|0,i=(i=i+Math.imul(_,tt)|0)+Math.imul(w,Q)|0,o=o+Math.imul(w,tt)|0,n=n+Math.imul(y,rt)|0,i=(i=i+Math.imul(y,nt)|0)+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=(i=i+Math.imul(p,at)|0)+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0;var St=(u+(n=n+Math.imul(h,ft)|0)|0)+((8191&(i=(i=i+Math.imul(h,ut)|0)+Math.imul(d,ft)|0))<<13)|0;u=((o=o+Math.imul(d,ut)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(O,U),i=(i=Math.imul(O,F))+Math.imul(N,U)|0,o=Math.imul(N,F),n=n+Math.imul(P,H)|0,i=(i=i+Math.imul(P,V)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,V)|0,n=n+Math.imul(T,W)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(R,W)|0,o=o+Math.imul(R,G)|0,n=n+Math.imul(M,J)|0,i=(i=i+Math.imul(M,X)|0)+Math.imul(k,J)|0,o=o+Math.imul(k,X)|0,n=n+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,tt)|0)+Math.imul(A,Q)|0,o=o+Math.imul(A,tt)|0,n=n+Math.imul(_,rt)|0,i=(i=i+Math.imul(_,nt)|0)+Math.imul(w,rt)|0,o=o+Math.imul(w,nt)|0,n=n+Math.imul(y,ot)|0,i=(i=i+Math.imul(y,at)|0)+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,ft)|0,i=(i=i+Math.imul(p,ut)|0)+Math.imul(b,ft)|0,o=o+Math.imul(b,ut)|0;var At=(u+(n=n+Math.imul(h,ht)|0)|0)+((8191&(i=(i=i+Math.imul(h,dt)|0)+Math.imul(d,ht)|0))<<13)|0;u=((o=o+Math.imul(d,dt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(D,U),i=(i=Math.imul(D,F))+Math.imul(q,U)|0,o=Math.imul(q,F),n=n+Math.imul(O,H)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(N,H)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,W)|0,i=(i=i+Math.imul(P,G)|0)+Math.imul(B,W)|0,o=o+Math.imul(B,G)|0,n=n+Math.imul(T,J)|0,i=(i=i+Math.imul(T,X)|0)+Math.imul(R,J)|0,o=o+Math.imul(R,X)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(k,Q)|0,o=o+Math.imul(k,tt)|0,n=n+Math.imul(S,rt)|0,i=(i=i+Math.imul(S,nt)|0)+Math.imul(A,rt)|0,o=o+Math.imul(A,nt)|0,n=n+Math.imul(_,ot)|0,i=(i=i+Math.imul(_,at)|0)+Math.imul(w,ot)|0,o=o+Math.imul(w,at)|0,n=n+Math.imul(y,ft)|0,i=(i=i+Math.imul(y,ut)|0)+Math.imul(m,ft)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ht)|0,i=(i=i+Math.imul(p,dt)|0)+Math.imul(b,ht)|0,o=o+Math.imul(b,dt)|0;var xt=(u+(n=n+Math.imul(h,pt)|0)|0)+((8191&(i=(i=i+Math.imul(h,bt)|0)+Math.imul(d,pt)|0))<<13)|0;u=((o=o+Math.imul(d,bt)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(D,H),i=(i=Math.imul(D,V))+Math.imul(q,H)|0,o=Math.imul(q,V),n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,G)|0,n=n+Math.imul(P,J)|0,i=(i=i+Math.imul(P,X)|0)+Math.imul(B,J)|0,o=o+Math.imul(B,X)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(R,Q)|0,o=o+Math.imul(R,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(k,rt)|0,o=o+Math.imul(k,nt)|0,n=n+Math.imul(S,ot)|0,i=(i=i+Math.imul(S,at)|0)+Math.imul(A,ot)|0,o=o+Math.imul(A,at)|0,n=n+Math.imul(_,ft)|0,i=(i=i+Math.imul(_,ut)|0)+Math.imul(w,ft)|0,o=o+Math.imul(w,ut)|0,n=n+Math.imul(y,ht)|0,i=(i=i+Math.imul(y,dt)|0)+Math.imul(m,ht)|0,o=o+Math.imul(m,dt)|0;var Mt=(u+(n=n+Math.imul(p,pt)|0)|0)+((8191&(i=(i=i+Math.imul(p,bt)|0)+Math.imul(b,pt)|0))<<13)|0;u=((o=o+Math.imul(b,bt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(D,W),i=(i=Math.imul(D,G))+Math.imul(q,W)|0,o=Math.imul(q,G),n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,X)|0)+Math.imul(N,J)|0,o=o+Math.imul(N,X)|0,n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,tt)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(R,rt)|0,o=o+Math.imul(R,nt)|0,n=n+Math.imul(M,ot)|0,i=(i=i+Math.imul(M,at)|0)+Math.imul(k,ot)|0,o=o+Math.imul(k,at)|0,n=n+Math.imul(S,ft)|0,i=(i=i+Math.imul(S,ut)|0)+Math.imul(A,ft)|0,o=o+Math.imul(A,ut)|0,n=n+Math.imul(_,ht)|0,i=(i=i+Math.imul(_,dt)|0)+Math.imul(w,ht)|0,o=o+Math.imul(w,dt)|0;var kt=(u+(n=n+Math.imul(y,pt)|0)|0)+((8191&(i=(i=i+Math.imul(y,bt)|0)+Math.imul(m,pt)|0))<<13)|0;u=((o=o+Math.imul(m,bt)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(D,J),i=(i=Math.imul(D,X))+Math.imul(q,J)|0,o=Math.imul(q,X),n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,tt)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=(i=i+Math.imul(P,nt)|0)+Math.imul(B,rt)|0,o=o+Math.imul(B,nt)|0,n=n+Math.imul(T,ot)|0,i=(i=i+Math.imul(T,at)|0)+Math.imul(R,ot)|0,o=o+Math.imul(R,at)|0,n=n+Math.imul(M,ft)|0,i=(i=i+Math.imul(M,ut)|0)+Math.imul(k,ft)|0,o=o+Math.imul(k,ut)|0,n=n+Math.imul(S,ht)|0,i=(i=i+Math.imul(S,dt)|0)+Math.imul(A,ht)|0,o=o+Math.imul(A,dt)|0;var It=(u+(n=n+Math.imul(_,pt)|0)|0)+((8191&(i=(i=i+Math.imul(_,bt)|0)+Math.imul(w,pt)|0))<<13)|0;u=((o=o+Math.imul(w,bt)|0)+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(D,Q),i=(i=Math.imul(D,tt))+Math.imul(q,Q)|0,o=Math.imul(q,tt),n=n+Math.imul(O,rt)|0,i=(i=i+Math.imul(O,nt)|0)+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=(i=i+Math.imul(P,at)|0)+Math.imul(B,ot)|0,o=o+Math.imul(B,at)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(R,ft)|0,o=o+Math.imul(R,ut)|0,n=n+Math.imul(M,ht)|0,i=(i=i+Math.imul(M,dt)|0)+Math.imul(k,ht)|0,o=o+Math.imul(k,dt)|0;var Tt=(u+(n=n+Math.imul(S,pt)|0)|0)+((8191&(i=(i=i+Math.imul(S,bt)|0)+Math.imul(A,pt)|0))<<13)|0;u=((o=o+Math.imul(A,bt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(D,rt),i=(i=Math.imul(D,nt))+Math.imul(q,rt)|0,o=Math.imul(q,nt),n=n+Math.imul(O,ot)|0,i=(i=i+Math.imul(O,at)|0)+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,ft)|0,i=(i=i+Math.imul(P,ut)|0)+Math.imul(B,ft)|0,o=o+Math.imul(B,ut)|0,n=n+Math.imul(T,ht)|0,i=(i=i+Math.imul(T,dt)|0)+Math.imul(R,ht)|0,o=o+Math.imul(R,dt)|0;var Rt=(u+(n=n+Math.imul(M,pt)|0)|0)+((8191&(i=(i=i+Math.imul(M,bt)|0)+Math.imul(k,pt)|0))<<13)|0;u=((o=o+Math.imul(k,bt)|0)+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(D,ot),i=(i=Math.imul(D,at))+Math.imul(q,ot)|0,o=Math.imul(q,at),n=n+Math.imul(O,ft)|0,i=(i=i+Math.imul(O,ut)|0)+Math.imul(N,ft)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ht)|0,i=(i=i+Math.imul(P,dt)|0)+Math.imul(B,ht)|0,o=o+Math.imul(B,dt)|0;var Lt=(u+(n=n+Math.imul(T,pt)|0)|0)+((8191&(i=(i=i+Math.imul(T,bt)|0)+Math.imul(R,pt)|0))<<13)|0;u=((o=o+Math.imul(R,bt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(D,ft),i=(i=Math.imul(D,ut))+Math.imul(q,ft)|0,o=Math.imul(q,ut),n=n+Math.imul(O,ht)|0,i=(i=i+Math.imul(O,dt)|0)+Math.imul(N,ht)|0,o=o+Math.imul(N,dt)|0;var Pt=(u+(n=n+Math.imul(P,pt)|0)|0)+((8191&(i=(i=i+Math.imul(P,bt)|0)+Math.imul(B,pt)|0))<<13)|0;u=((o=o+Math.imul(B,bt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(D,ht),i=(i=Math.imul(D,dt))+Math.imul(q,ht)|0,o=Math.imul(q,dt);var Bt=(u+(n=n+Math.imul(O,pt)|0)|0)+((8191&(i=(i=i+Math.imul(O,bt)|0)+Math.imul(N,pt)|0))<<13)|0;u=((o=o+Math.imul(N,bt)|0)+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863;var Ct=(u+(n=Math.imul(D,pt))|0)+((8191&(i=(i=Math.imul(D,bt))+Math.imul(q,pt)|0))<<13)|0;return u=((o=Math.imul(q,bt))+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,f[0]=gt,f[1]=yt,f[2]=mt,f[3]=vt,f[4]=_t,f[5]=wt,f[6]=Et,f[7]=St,f[8]=At,f[9]=xt,f[10]=Mt,f[11]=kt,f[12]=It,f[13]=Tt,f[14]=Rt,f[15]=Lt,f[16]=Pt,f[17]=Bt,f[18]=Ct,0!==u&&(f[19]=u,r.length++),r};function p(t,e,r){return(new b).mulp(t,e,r)}function b(t,e){this.x=t,this.y=e}Math.imul||(l=d),o.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?l(this,t,e):r<63?d(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,t,e):p(this,t,e)},b.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n>=1;return n},b.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a>>=1)i++;return 1<>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}(t);if(0===e.length)return new o(1);for(var r=this,n=0;n=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,u=0;u=0&&(0!==c||u>=i);u--){var h=0|this.words[u];this.words[u]=c<<26-o|h>>>o,c=h&s}return f&&0!==c&&(f.words[f.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(f/67108864|0),this.words[i+r]=67108863&o}for(;i>26,this.words[i+r]=67108863&o;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,a=0|i.words[i.length-1];0!==(r=26-this._countBits(a))&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,f=n.length-i.length;if("mod"!==e){(s=new o(null)).length=f+1,s.words=new Array(s.length);for(var u=0;u=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(a=s.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(a=s.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:s.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,a,s},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),s=new o(0),f=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),h=e.clone();!e.isZero();){for(var d=0,l=1;0==(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(h)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||f.isOdd())&&(s.iadd(c),f.isub(h)),s.iushrn(1),f.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),a.isub(f)):(r.isub(e),s.isub(i),f.isub(a))}return{a:s,b:f,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,a=new o(1),s=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(f),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),a.isub(s)):(r.isub(e),s.isub(a))}return(i=0===e.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(t),i},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){ni&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return-1===this.cmpn(t)},o.prototype.lt=function(t){return-1===this.cmp(t)},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new E(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function y(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function m(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function v(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function E(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function S(t){E.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},y.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e0?r.isub(this.p):r.strip(),r},y.prototype.split=function(t,e){t.iushrn(this.n,0,e)},y.prototype.imulK=function(t){return t.imul(this.k)},i(m,y),m.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n>>22,i=o}i>>>=22,t.words[n-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},m.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new m;else if("p224"===t)e=new v;else if("p192"===t)e=new _;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new w}return g[t]=e,e},E.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},E.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},E.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},E.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},E.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},E.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},E.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},E.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},E.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},E.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},E.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},E.prototype.isqr=function(t){return this.imul(t,t.clone())},E.prototype.sqr=function(t){return this.mul(t,t)},E.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var s=new o(1).toRed(this),f=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,u).cmp(f);)c.redIAdd(f);for(var h=this.pow(c,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(s);){for(var b=l,g=0;0!==b.cmp(s);g++)b=b.redSqr();n(g=0;n--){for(var u=e.words[n],c=f-1;c>=0;c--){var h=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==a?(a<<=1,a|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[a]),s=0,a=0)):s=0}f=26}return i},E.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},E.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new S(t)},i(S,E),S.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},S.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},S.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(t,this)}).call(this,r(76)(t))},,function(t,e,r){"use strict";var n=r(32),i=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=h;var o=r(27);o.inherits=r(22);var a=r(46),s=r(36);o.inherits(h,a);for(var f=i(s.prototype),u=0;u=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var f=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(f&&u){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),M(r),p}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;M(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:I(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),p}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},function(t,e,r){(function(t){var n=Object.getOwnPropertyDescriptors||function(t){for(var e=Object.keys(t),r={},n=0;n=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}})),f=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&e._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),c(n,t,n.depth)}function f(t,e){var r=s.styles[e];return r?"["+s.colors[r][0]+"m"+t+"["+s.colors[r][1]+"m":t}function u(t,e){return t}function c(t,r,n){if(t.customInspect&&r&&S(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return y(i)||(i=c(t,i,n)),i}var o=function(t,e){if(m(e))return t.stylize("undefined","undefined");if(y(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(g(e))return t.stylize(""+e,"number");if(p(e))return t.stylize(""+e,"boolean");if(b(e))return t.stylize("null","null")}(t,r);if(o)return o;var a=Object.keys(r),s=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(r)),E(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(r);if(0===a.length){if(S(r)){var f=r.name?": "+r.name:"";return t.stylize("[Function"+f+"]","special")}if(v(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(w(r))return t.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var u,_="",A=!1,x=["{","}"];(l(r)&&(A=!0,x=["[","]"]),S(r))&&(_=" [Function"+(r.name?": "+r.name:"")+"]");return v(r)&&(_=" "+RegExp.prototype.toString.call(r)),w(r)&&(_=" "+Date.prototype.toUTCString.call(r)),E(r)&&(_=" "+h(r)),0!==a.length||A&&0!=r.length?n<0?v(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),u=A?function(t,e,r,n,i){for(var o=[],a=0,s=e.length;a=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(u,_,x)):x[0]+_+x[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function d(t,e,r,n,i,o){var a,s,f;if((f=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=f.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):f.set&&(s=t.stylize("[Setter]","special")),I(n,i)||(a="["+i+"]"),s||(t.seen.indexOf(f.value)<0?(s=b(r)?c(t,f.value,null):c(t,f.value,r-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(t){return" "+t})).join("\n").substr(2):"\n"+s.split("\n").map((function(t){return" "+t})).join("\n")):s=t.stylize("[Circular]","special")),m(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=t.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=t.stylize(a,"string"))}return a+": "+s}function l(t){return Array.isArray(t)}function p(t){return"boolean"==typeof t}function b(t){return null===t}function g(t){return"number"==typeof t}function y(t){return"string"==typeof t}function m(t){return void 0===t}function v(t){return _(t)&&"[object RegExp]"===A(t)}function _(t){return"object"==typeof t&&null!==t}function w(t){return _(t)&&"[object Date]"===A(t)}function E(t){return _(t)&&("[object Error]"===A(t)||t instanceof Error)}function S(t){return"function"==typeof t}function A(t){return Object.prototype.toString.call(t)}function x(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(r){if(m(o)&&(o=t.env.NODE_DEBUG||""),r=r.toUpperCase(),!a[r])if(new RegExp("\\b"+r+"\\b","i").test(o)){var n=t.pid;a[r]=function(){var t=e.format.apply(e,arguments);console.error("%s %d: %s",r,n,t)}}else a[r]=function(){};return a[r]},e.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=l,e.isBoolean=p,e.isNull=b,e.isNullOrUndefined=function(t){return null==t},e.isNumber=g,e.isString=y,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=m,e.isRegExp=v,e.isObject=_,e.isDate=w,e.isError=E,e.isFunction=S,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(166);var M=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function k(){var t=new Date,e=[x(t.getHours()),x(t.getMinutes()),x(t.getSeconds())].join(":");return[t.getDate(),M[t.getMonth()],e].join(" ")}function I(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){console.log("%s - %s",k(),e.format.apply(e,arguments))},e.inherits=r(167),e._extend=function(t,e){if(!e||!_(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t};var T="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function R(t,e){if(!t){var r=new Error("Promise was rejected with a falsy value");r.reason=t,t=r}return e(t)}e.promisify=function(t){if("function"!=typeof t)throw new TypeError('The "original" argument must be of type Function');if(T&&t[T]){var e;if("function"!=typeof(e=t[T]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(e,T,{value:e,enumerable:!1,writable:!1,configurable:!0}),e}function e(){for(var e,r,n=new Promise((function(t,n){e=t,r=n})),i=[],o=0;o(i>>1)-1?(i>>1)-f:f,o.isubn(s)):s=0,n[a]=s,o.iushrn(1)}return n},n.getJSF=function(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o,a,s,f=t.andln(3)+n&3,u=e.andln(3)+i&3;if(3===f&&(f=-1),3===u&&(u=-1),0==(1&f))o=0;else o=3!==(s=t.andln(7)+n&7)&&5!==s||2!==u?f:-f;if(r[0].push(o),0==(1&u))a=0;else a=3!==(s=e.andln(7)+i&7)&&5!==s||2!==f?u:-u;r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r},n.cachedProperty=function(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(t){return"string"==typeof t?n.toArray(t,"hex"):t},n.intFromLE=function(t){return new i(t,"hex","le")}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";var n=r(61).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=f,this.end=u,e=4;break;case"utf8":this.fillLast=s,e=4;break;case"base64":this.text=c,this.end=h,e=3;break;default:return this.write=d,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function a(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function s(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function f(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function h(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function d(t){return t.toString(this.encoding)}function l(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(t.lastNeed=i-1),i;if(--n=0)return i>0&&(t.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:t.lastNeed=i-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},function(t,e,r){(function(t){function r(t){return Object.prototype.toString.call(t)}e.isArray=function(t){return Array.isArray?Array.isArray(t):"[object Array]"===r(t)},e.isBoolean=function(t){return"boolean"==typeof t},e.isNull=function(t){return null===t},e.isNullOrUndefined=function(t){return null==t},e.isNumber=function(t){return"number"==typeof t},e.isString=function(t){return"string"==typeof t},e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=function(t){return void 0===t},e.isRegExp=function(t){return"[object RegExp]"===r(t)},e.isObject=function(t){return"object"==typeof t&&null!==t},e.isDate=function(t){return"[object Date]"===r(t)},e.isError=function(t){return"[object Error]"===r(t)||t instanceof Error},e.isFunction=function(t){return"function"==typeof t},e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=t.isBuffer}).call(this,r(6).Buffer)},,function(t,e,r){"use strict";var n=r(37),i=r(11);function o(t,e){return 55296==(64512&t.charCodeAt(e))&&(!(e<0||e+1>=t.length)&&56320==(64512&t.charCodeAt(e+1)))}function a(t){return(t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24)>>>0}function s(t){return 1===t.length?"0"+t:t}function f(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}e.inherits=i,e.toArray=function(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e)for((t=t.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(t="0"+t),i=0;i>6|192,r[n++]=63&a|128):o(t,i)?(a=65536+((1023&a)<<10)+(1023&t.charCodeAt(++i)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(i=0;i>>0}return a},e.split32=function(t,e){for(var r=new Array(4*t.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r},e.rotr32=function(t,e){return t>>>e|t<<32-e},e.rotl32=function(t,e){return t<>>32-e},e.sum32=function(t,e){return t+e>>>0},e.sum32_3=function(t,e,r){return t+e+r>>>0},e.sum32_4=function(t,e,r,n){return t+e+r+n>>>0},e.sum32_5=function(t,e,r,n,i){return t+e+r+n+i>>>0},e.sum64=function(t,e,r,n){var i=t[e],o=n+t[e+1]>>>0,a=(o>>0,t[e+1]=o},e.sum64_hi=function(t,e,r,n){return(e+n>>>0>>0},e.sum64_lo=function(t,e,r,n){return e+n>>>0},e.sum64_4_hi=function(t,e,r,n,i,o,a,s){var f=0,u=e;return f+=(u=u+n>>>0)>>0)>>0)>>0},e.sum64_4_lo=function(t,e,r,n,i,o,a,s){return e+n+o+s>>>0},e.sum64_5_hi=function(t,e,r,n,i,o,a,s,f,u){var c=0,h=e;return c+=(h=h+n>>>0)>>0)>>0)>>0)>>0},e.sum64_5_lo=function(t,e,r,n,i,o,a,s,f,u){return e+n+o+s+u>>>0},e.rotr64_hi=function(t,e,r){return(e<<32-r|t>>>r)>>>0},e.rotr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0},e.shr64_hi=function(t,e,r){return t>>>r},e.shr64_lo=function(t,e,r){return(t<<32-r|e>>>r)>>>0}},function(t,e,r){"use strict";e.byteLength=function(t){var e=u(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){for(var e,r=u(t),n=r[0],a=r[1],s=new o(function(t,e,r){return 3*(e+r)/4-r}(0,n,a)),f=0,c=a>0?n-4:n,h=0;h>16&255,s[f++]=e>>8&255,s[f++]=255&e;2===a&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,s[f++]=255&e);1===a&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,s[f++]=e>>8&255,s[f++]=255&e);return s},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=0,s=r-i;as?s:a+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,f=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function c(t,e,r){for(var i,o,a=[],s=e;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,s=8*i-n-1,f=(1<>1,c=-7,h=r?i-1:0,d=r?-1:1,l=t[e+h];for(h+=d,o=l&(1<<-c)-1,l>>=-c,c+=s;c>0;o=256*o+t[e+h],h+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+t[e+h],h+=d,c-=8);if(0===o)o=1-u;else{if(o===f)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=u}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,s,f,u=8*o-i-1,c=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-a))<1&&(a--,f*=2),(e+=a+h>=1?d/f:d*Math.pow(2,1-h))*f>=2&&(a++,f/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(e*f-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&s,l+=p,s/=256,i-=8);for(a=a<0;t[r+l]=255&a,l+=p,a/=256,u-=8);t[r+l-p]|=128*b}},function(t,e,r){"use strict";(function(e){void 0===e||!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,r)}));case 3:return e.nextTick((function(){t.call(null,r,n)}));case 4:return e.nextTick((function(){t.call(null,r,n,i)}));default:for(o=new Array(s-1),a=0;a-1?n:o.nextTick;m.WritableState=y;var u=r(27);u.inherits=r(22);var c={deprecate:r(67)},h=r(47),d=r(35).Buffer,l=i.Uint8Array||function(){};var p,b=r(48);function g(){}function y(t,e){s=s||r(18),t=t||{};var n=e instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var i=t.highWaterMark,u=t.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(u||0===u)?u:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===t.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,n,i){--e.pendingcb,r?(o.nextTick(i,n),o.nextTick(A,t,e),t._writableState.errorEmitted=!0,t.emit("error",n)):(i(n),t._writableState.errorEmitted=!0,t.emit("error",n),A(t,e))}(t,r,n,e,i);else{var a=E(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||w(t,r),n?f(_,t,r,a,i):_(t,r,a,i)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function m(t){if(s=s||r(18),!(p.call(m,this)||this instanceof s))return new m(t);this._writableState=new y(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),h.call(this)}function v(t,e,r,n,i,o,a){e.writelen=n,e.writecb=a,e.writing=!0,e.sync=!0,r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function _(t,e,r,n){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,n(),A(t,e)}function w(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var s=0,f=!0;r;)i[s]=r,r.isBuf||(f=!1),r=r.next,s+=1;i.allBuffers=f,v(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new a(e),e.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,h=r.callback;if(v(t,e,!1,e.objectMode?1:u.length,u,c,h),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function E(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function S(t,e){t._final((function(r){e.pendingcb--,r&&t.emit("error",r),e.prefinished=!0,t.emit("prefinish"),A(t,e)}))}function A(t,e){var r=E(e);return r&&(!function(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,o.nextTick(S,t,e)):(e.prefinished=!0,t.emit("prefinish")))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),r}u.inherits(m,h),y.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(y.prototype,"buffer",{get:c.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(m,Symbol.hasInstance,{value:function(t){return!!p.call(this,t)||this===m&&(t&&t._writableState instanceof y)}})):p=function(t){return t instanceof this},m.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},m.prototype.write=function(t,e,r){var n,i=this._writableState,a=!1,s=!i.objectMode&&(n=t,d.isBuffer(n)||n instanceof l);return s&&!d.isBuffer(t)&&(t=function(t){return d.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof r&&(r=g),i.ended?function(t,e){var r=new Error("write after end");t.emit("error",r),o.nextTick(e,r)}(this,r):(s||function(t,e,r,n){var i=!0,a=!1;return null===r?a=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||e.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(t.emit("error",a),o.nextTick(n,a),i=!1),i}(this,i,t,r))&&(i.pendingcb++,a=function(t,e,r,n,i,o){if(!r){var a=function(t,e,r){t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=d.from(e,r));return e}(e,n,i);n!==a&&(r=!0,i="buffer",n=a)}var s=e.objectMode?1:n.length;e.length+=s;var f=e.length-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(m.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),m.prototype._write=function(t,e,r){r(new Error("_write() is not implemented"))},m.prototype._writev=null,m.prototype.end=function(t,e,r){var n=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(t,e,r){e.ending=!0,A(t,e),r&&(e.finished?o.nextTick(r):t.once("finish",r));e.ended=!0,t.writable=!1}(this,n,r)},Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),m.prototype.destroy=b.destroy,m.prototype._undestroy=b.undestroy,m.prototype._destroy=function(t,e){this.end(),e(t)}}).call(this,r(12),r(54).setImmediate,r(7))},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){"use strict";(function(e){var n=r(112),i=r(218);function o(t){var e=t;if("string"!=typeof e)throw new Error("[ethjs-util] while padding to even, value must be string, is currently "+typeof e+", while padToEven.");return e.length%2&&(e="0"+e),e}function a(t){return"0x"+t.toString(16)}t.exports={arrayContainsArray:function(t,e,r){if(!0!==Array.isArray(t))throw new Error("[ethjs-util] method arrayContainsArray requires input 'superset' to be an array got type '"+typeof t+"'");if(!0!==Array.isArray(e))throw new Error("[ethjs-util] method arrayContainsArray requires input 'subset' to be an array got type '"+typeof e+"'");return e[Boolean(r)?"some":"every"]((function(e){return t.indexOf(e)>=0}))},intToBuffer:function(t){var r=a(t);return new e(o(r.slice(2)),"hex")},getBinarySize:function(t){if("string"!=typeof t)throw new Error("[ethjs-util] while getting binary size, method getBinarySize requires input 'str' to be type String, got '"+typeof t+"'.");return e.byteLength(t,"utf8")},isHexPrefixed:n,stripHexPrefix:i,padToEven:o,intToHex:a,fromAscii:function(t){for(var e="",r=0;r2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0])}return"of ".concat(e," ").concat(String(t))}i("ERR_INVALID_OPT_VALUE",(function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'}),TypeError),i("ERR_INVALID_ARG_TYPE",(function(t,e,r){var n,i,a,s;if("string"==typeof e&&(i="not ",e.substr(!a||a<0?0:+a,i.length)===i)?(n="must not be",e=e.replace(/^not /,"")):n="must be",function(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}(t," argument"))s="The ".concat(t," ").concat(n," ").concat(o(e,"type"));else{var f=function(t,e,r){return"number"!=typeof r&&(r=0),!(r+e.length>t.length)&&-1!==t.indexOf(e,r)}(t,".")?"property":"argument";s='The "'.concat(t,'" ').concat(f," ").concat(n," ").concat(o(e,"type"))}return s+=". Received type ".concat(typeof r)}),TypeError),i("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),i("ERR_METHOD_NOT_IMPLEMENTED",(function(t){return"The "+t+" method is not implemented"})),i("ERR_STREAM_PREMATURE_CLOSE","Premature close"),i("ERR_STREAM_DESTROYED",(function(t){return"Cannot call "+t+" after a stream was destroyed"})),i("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),i("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),i("ERR_STREAM_WRITE_AFTER_END","write after end"),i("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),i("ERR_UNKNOWN_ENCODING",(function(t){return"Unknown encoding: "+t}),TypeError),i("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=n},function(t,e,r){"use strict";(function(e){var n=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=u;var i=r(98),o=r(102);r(11)(u,i);for(var a=n(o.prototype),s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=i},function(t,e,r){"use strict";(function(e,n){var i=r(32);t.exports=v;var o,a=r(25);v.ReadableState=m;r(15).EventEmitter;var s=function(t,e){return t.listeners(e).length},f=r(47),u=r(35).Buffer,c=e.Uint8Array||function(){};var h=r(27);h.inherits=r(22);var d=r(63),l=void 0;l=d&&d.debuglog?d.debuglog("stream"):function(){};var p,b=r(64),g=r(48);h.inherits(v,f);var y=["error","close","destroy","pause","resume"];function m(t,e){t=t||{};var n=e instanceof(o=o||r(18));this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var i=t.highWaterMark,a=t.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new b,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=r(26).StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function v(t){if(o=o||r(18),!(this instanceof v))return new v(t);this._readableState=new m(t,this),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),f.call(this)}function _(t,e,r,n,i){var o,a=t._readableState;null===e?(a.reading=!1,function(t,e){if(e.ended)return;if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,A(t)}(t,a)):(i||(o=function(t,e){var r;n=e,u.isBuffer(n)||n instanceof c||"string"==typeof e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(a,e)),o?t.emit("error",o):a.objectMode||e&&e.length>0?("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===u.prototype||(e=function(t){return u.from(t)}(e)),n?a.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):w(t,a,e,!0):a.ended?t.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!r?(e=a.decoder.write(e),a.objectMode||0!==e.length?w(t,a,e,!1):M(t,a)):w(t,a,e,!1))):n||(a.reading=!1));return function(t){return!t.ended&&(t.needReadable||t.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function A(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(l("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?i.nextTick(x,t):x(t))}function x(t){l("emit readable"),t.emit("readable"),R(t)}function M(t,e){e.readingMore||(e.readingMore=!0,i.nextTick(k,t,e))}function k(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=function(t,e,r){var n;to.length?o.length:t;if(a===o.length?i+=o:i+=o.slice(0,t),0===(t-=a)){a===o.length?(++n,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++n}return e.length-=n,i}(t,e):function(t,e){var r=u.allocUnsafe(t),n=e.head,i=1;n.data.copy(r),t-=n.data.length;for(;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,a),0===(t-=a)){a===o.length?(++i,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++i}return e.length-=i,r}(t,e);return n}(t,e.buffer,e.decoder),r);var r}function P(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,i.nextTick(B,e,t))}function B(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function C(t,e){for(var r=0,n=t.length;r=e.highWaterMark||e.ended))return l("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?P(this):A(this),null;if(0===(t=S(t,e))&&e.ended)return 0===e.length&&P(this),null;var n,i=e.needReadable;return l("need readable",i),(0===e.length||e.length-t0?L(t,e):null)?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&P(this)),null!==n&&this.emit("data",n),n},v.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},v.prototype.pipe=function(t,e){var r=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=t;break;case 1:o.pipes=[o.pipes,t];break;default:o.pipes.push(t)}o.pipesCount+=1,l("pipe count=%d opts=%j",o.pipesCount,e);var f=(!e||!1!==e.end)&&t!==n.stdout&&t!==n.stderr?c:v;function u(e,n){l("onunpipe"),e===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,l("cleanup"),t.removeListener("close",y),t.removeListener("finish",m),t.removeListener("drain",h),t.removeListener("error",g),t.removeListener("unpipe",u),r.removeListener("end",c),r.removeListener("end",v),r.removeListener("data",b),d=!0,!o.awaitDrain||t._writableState&&!t._writableState.needDrain||h())}function c(){l("onend"),t.end()}o.endEmitted?i.nextTick(f):r.once("end",f),t.on("unpipe",u);var h=function(t){return function(){var e=t._readableState;l("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&s(t,"data")&&(e.flowing=!0,R(t))}}(r);t.on("drain",h);var d=!1;var p=!1;function b(e){l("ondata"),p=!1,!1!==t.write(e)||p||((1===o.pipesCount&&o.pipes===t||o.pipesCount>1&&-1!==C(o.pipes,t))&&!d&&(l("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function g(e){l("onerror",e),v(),t.removeListener("error",g),0===s(t,"error")&&t.emit("error",e)}function y(){t.removeListener("finish",m),v()}function m(){l("onfinish"),t.removeListener("close",y),v()}function v(){l("unpipe"),r.unpipe(t)}return r.on("data",b),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?a(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",g),t.once("close",y),t.once("finish",m),t.emit("pipe",r),o.flowing||(l("pipe resume"),r.resume()),t},v.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o=this._delta8){var r=(t=this.pending).length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=n.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else for(n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;o0&&"0"===e.toString();)e=(t=t.slice(1))[0];return t},e.stripZeros=e.unpad,e.toBuffer=function(e){if(!t.isBuffer(e))if(Array.isArray(e))e=t.from(e);else if("string"==typeof e){if(!n.isHexString(e))throw new Error("Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: "+e);e=t.from(n.padToEven(n.stripHexPrefix(e)),"hex")}else if("number"==typeof e)e=n.intToBuffer(e);else if(null==e)e=t.allocUnsafe(0);else if(i.isBN(e))e=e.toArrayLike(t);else{if(!e.toArray)throw new Error("invalid type");e=t.from(e.toArray())}return e},e.bufferToInt=function(t){return new i(e.toBuffer(t)).toNumber()},e.bufferToHex=function(t){return"0x"+(t=e.toBuffer(t)).toString("hex")},e.fromSigned=function(t){return new i(t).fromTwos(256)},e.toUnsigned=function(e){return t.from(e.toTwos(256).toArray())},e.addHexPrefix=function(t){return"string"!=typeof t?t:n.isHexPrefixed(t)?t:"0x"+t},e.baToJSON=function(r){if(t.isBuffer(r))return"0x"+r.toString("hex");if(r instanceof Array){for(var n=[],i=0;i=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},r(66),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,r(7))},function(t,e,r){"use strict";t.exports=r(174)(r(178))},function(t,e,r){"use strict";var n=r(16),i=r(24),o=i.getNAF,a=i.getJSF,s=i.assert;function f(t,e){this.type=t,this.p=new n(e.p,16),this.red=e.prime?n.red(e.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=e.n&&new n(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function u(t,e){this.curve=t,this.type=e,this.precomputed=null}t.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(t,e){s(t.precomputed);var r=t._getDoubles(),n=o(e,1,this._bitLength),i=(1<=f;e--)u=(u<<1)+n[e];a.push(u)}for(var c=this.jpoint(null,null,null),h=this.jpoint(null,null,null),d=i;d>0;d--){for(f=0;f=0;u--){for(e=0;u>=0&&0===a[u];u--)e++;if(u>=0&&e++,f=f.dblp(e),u<0)break;var c=a[u];s(0!==c),f="affine"===t.type?c>0?f.mixedAdd(i[c-1>>1]):f.mixedAdd(i[-c-1>>1].neg()):c>0?f.add(i[c-1>>1]):f.add(i[-c-1>>1].neg())}return"affine"===t.type?f.toP():f},f.prototype._wnafMulAdd=function(t,e,r,n,i){for(var s=this._wnafT1,f=this._wnafT2,u=this._wnafT3,c=0,h=0;h=1;h-=2){var l=h-1,p=h;if(1===s[l]&&1===s[p]){var b=[e[l],null,null,e[p]];0===e[l].y.cmp(e[p].y)?(b[1]=e[l].add(e[p]),b[2]=e[l].toJ().mixedAdd(e[p].neg())):0===e[l].y.cmp(e[p].y.redNeg())?(b[1]=e[l].toJ().mixedAdd(e[p]),b[2]=e[l].add(e[p].neg())):(b[1]=e[l].toJ().mixedAdd(e[p]),b[2]=e[l].toJ().mixedAdd(e[p].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],y=a(r[l],r[p]);c=Math.max(y[0].length,c),u[l]=new Array(c),u[p]=new Array(c);for(var m=0;m=0;h--){for(var S=0;h>=0;){var A=!0;for(m=0;m=0&&S++,w=w.dblp(S),h<0)break;for(m=0;m0?x=f[m][M-1>>1]:M<0&&(x=f[m][-M-1>>1].neg()),w="affine"===x.type?w.mixedAdd(x):w.add(x))}}for(h=0;h=Math.ceil((t.bitLength()+1)/e.step)},u.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;ir.length)throw new Error("invalid rlp: total length is larger than the data");if(0===(s=r.slice(o,h)).length)throw new Error("invalid rlp, List has a invalid length");for(;s.length;)f=e(s),u.push(f.data),s=f.remainder;return{data:u,remainder:r.slice(h)}}(f(e));if(r)return n;if(0!==n.remainder.length)throw new Error("invalid remainder");return n.data},e.getLength=function(e){if(!e||0===e.length)return t.from([]);var r=f(e),n=r[0];if(n<=127)return r.length;if(n<=183)return n-127;if(n<=191)return n-182;if(n<=247)return n-191;var o=n-246;return o+i(r.slice(1,o).toString("hex"),16)}}).call(this,r(6).Buffer)},function(t,e){t.exports=function(){for(var t={},e=0;e0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},t.prototype.concat=function(t){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var e,r,i,o=n.allocUnsafe(t>>>0),a=this.head,s=0;a;)e=a.data,r=o,i=s,e.copy(r,i),s+=a.data.length,a=a.next;return o},t}(),i&&i.inspect&&i.inspect.custom&&(t.exports.prototype[i.inspect.custom]=function(){var t=i.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var n,i,o,a,s,f=1,u={},c=!1,h=t.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(t);d=d&&d.setTimeout?d:t,"[object process]"==={}.toString.call(t.process)?n=function(t){e.nextTick((function(){p(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){p(t.data)},n=function(t){o.port2.postMessage(t)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(t){var e=h.createElement("script");e.onreadystatechange=function(){p(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):n=function(t){setTimeout(p,0,t)}:(a="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(a)&&p(+e.data.slice(a.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),n=function(e){t.postMessage(a+e,"*")}),d.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;r0&&"0"===r.toString();)r=(t=t.slice(1))[0];return t},e.toBuffer=function(t){if(!c.isBuffer(t))if(Array.isArray(t))t=c.from(t);else if("string"==typeof t)t=e.isHexString(t)?c.from(e.padToEven(e.stripHexPrefix(t)),"hex"):c.from(t);else if("number"==typeof t)t=e.intToBuffer(t);else if(null==t)t=c.allocUnsafe(0);else if(f.isBN(t))t=t.toArrayLike(c);else{if(!t.toArray)throw new Error("invalid type");t=c.from(t.toArray())}return t},e.bufferToInt=function(t){return new f(e.toBuffer(t)).toNumber()},e.bufferToHex=function(t){return"0x"+(t=e.toBuffer(t)).toString("hex")},e.fromSigned=function(t){return new f(t).fromTwos(256)},e.toUnsigned=function(t){return c.from(t.toTwos(256).toArray())},e.keccak=function(t,r){return t=e.toBuffer(t),r||(r=256),i("keccak"+r).update(t).digest()},e.keccak256=function(t){return e.keccak(t)},e.sha3=e.keccak,e.sha256=function(t){return t=e.toBuffer(t),u("sha256").update(t).digest()},e.ripemd160=function(t,r){t=e.toBuffer(t);var n=u("rmd160").update(t).digest();return!0===r?e.setLength(n,32):n},e.rlphash=function(t){return e.keccak(s.encode(t))},e.isValidPrivate=function(t){return o.privateKeyVerify(t)},e.isValidPublic=function(t,e){return 64===t.length?o.publicKeyVerify(c.concat([c.from([4]),t])):!!e&&o.publicKeyVerify(t)},e.pubToAddress=e.publicToAddress=function(t,r){return t=e.toBuffer(t),r&&64!==t.length&&(t=o.publicKeyConvert(t,!1).slice(1)),a(64===t.length),e.keccak(t).slice(-20)};var h=e.privateToPublic=function(t){return t=e.toBuffer(t),o.publicKeyCreate(t,!1).slice(1)};e.importPublic=function(t){return 64!==(t=e.toBuffer(t)).length&&(t=o.publicKeyConvert(t,!1).slice(1)),t},e.ecsign=function(t,e){var r=o.sign(t,e),n={};return n.r=r.signature.slice(0,32),n.s=r.signature.slice(32,64),n.v=r.recovery+27,n},e.hashPersonalMessage=function(t){var r=e.toBuffer("Ethereum Signed Message:\n"+t.length.toString());return e.keccak(c.concat([r,t]))},e.ecrecover=function(t,r,n,i){var a=c.concat([e.setLength(n,32),e.setLength(i,32)],64),s=r-27;if(0!==s&&1!==s)throw new Error("Invalid signature v value");var f=o.recover(t,a,s);return o.publicKeyConvert(f,!1).slice(1)},e.toRpcSig=function(t,r,n){if(27!==t&&28!==t)throw new Error("Invalid recovery id");return e.bufferToHex(c.concat([e.setLengthLeft(r,32),e.setLengthLeft(n,32),e.toBuffer(t-27)]))},e.fromRpcSig=function(t){if(65!==(t=e.toBuffer(t)).length)throw new Error("Invalid signature length");var r=t[64];return r<27&&(r+=27),{v:r,r:t.slice(0,32),s:t.slice(32,64)}},e.privateToAddress=function(t){return e.publicToAddress(h(t))},e.isValidAddress=function(t){return/^0x[0-9a-fA-F]{40}$/.test(t)},e.isZeroAddress=function(t){return e.zeroAddress()===e.addHexPrefix(t)},e.toChecksumAddress=function(t){t=e.stripHexPrefix(t).toLowerCase();for(var r=e.keccak(t).toString("hex"),n="0x",i=0;i=8?n+=t[i].toUpperCase():n+=t[i];return n},e.isValidChecksumAddress=function(t){return e.isValidAddress(t)&&e.toChecksumAddress(t)===t},e.generateAddress=function(t,r){return t=e.toBuffer(t),r=(r=new f(r)).isZero()?null:c.from(r.toArray()),e.rlphash([t,r]).slice(-20)},e.isPrecompiled=function(t){var r=e.unpad(t);return 1===r.length&&r[0]>=1&&r[0]<=8},e.addHexPrefix=function(t){return"string"!=typeof t?t:e.isHexPrefixed(t)?t:"0x"+t},e.isValidSignature=function(t,e,r,n){var i=new f("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),o=new f("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);return 32===e.length&&32===r.length&&((27===t||28===t)&&(e=new f(e),r=new f(r),!(e.isZero()||e.gt(o)||r.isZero()||r.gt(o))&&(!1!==n||1!==new f(r).cmp(i))))},e.baToJSON=function(t){if(c.isBuffer(t))return"0x"+t.toString("hex");if(t instanceof Array){for(var r=[],n=0;n=i.length,"The field "+r.name+" must not have more "+r.length+" bytes")):r.allowZero&&0===i.length||!r.length||a(r.length===i.length,"The field "+r.name+" must have byte length of "+r.length),t.raw[n]=i}t._fields.push(r.name),Object.defineProperty(t,r.name,{enumerable:!0,configurable:!0,get:i,set:o}),r.default&&(t[r.name]=r.default),r.alias&&Object.defineProperty(t,r.alias,{enumerable:!1,configurable:!0,set:o,get:i})})),i)if("string"==typeof i&&(i=c.from(e.stripHexPrefix(i),"hex")),c.isBuffer(i)&&(i=s.decode(i)),Array.isArray(i)){if(i.length>t._fields.length)throw new Error("wrong number of fields in data");i.forEach((function(r,n){t[t._fields[n]]=e.toBuffer(r)}))}else{if("object"!==(void 0===i?"undefined":n(i)))throw new Error("invalid data");var o=Object.keys(i);r.forEach((function(e){-1!==o.indexOf(e.name)&&(t[e.name]=i[e.name]),-1!==o.indexOf(e.alias)&&(t[e.alias]=i[e.alias])}))}}},function(t,e,r){"use strict";var n=r(11),i=r(179),o=r(189),a=r(190),s=r(195);function f(t){s.call(this,"digest"),this._hash=t}n(f,s),f.prototype._update=function(t){this._hash.update(t)},f.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new i:"rmd160"===t||"ripemd160"===t?new o:new f(a(t))}},function(t,e,r){"use strict";var n=r(43).codes.ERR_STREAM_PREMATURE_CLOSE;function i(){}t.exports=function t(e,r,o){if("function"==typeof r)return t(e,null,r);r||(r={}),o=function(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,n=new Array(r),i=0;i * @license MIT - */function i(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(s=c[u],!v(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function _(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function w(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function E(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&g(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!t&&i&&!r;if((!t&&a.isError(i)&&o&&w(i,r)||s)&&g(i,r,"Got unwanted exception"+n),t&&i&&r&&!w(i,r)||!t&&i)throw i}d.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=function(t){return b(y(t.actual),128)+" "+t.operator+" "+b(y(t.expected),128)}(this),this.generatedMessage=!0);var e=t.stackStartFunction||g;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=p(e),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},a.inherits(d.AssertionError,Error),d.fail=g,d.ok=m,d.equal=function(t,e,r){t!=e&&g(t,e,r,"==",d.equal)},d.notEqual=function(t,e,r){t==e&&g(t,e,r,"!=",d.notEqual)},d.deepEqual=function(t,e,r){v(t,e,!1)||g(t,e,r,"deepEqual",d.deepEqual)},d.deepStrictEqual=function(t,e,r){v(t,e,!0)||g(t,e,r,"deepStrictEqual",d.deepStrictEqual)},d.notDeepEqual=function(t,e,r){v(t,e,!1)&&g(t,e,r,"notDeepEqual",d.notDeepEqual)},d.notDeepStrictEqual=function t(e,r,n){v(e,r,!0)&&g(e,r,n,"notDeepStrictEqual",t)},d.strictEqual=function(t,e,r){t!==e&&g(t,e,r,"===",d.strictEqual)},d.notStrictEqual=function(t,e,r){t===e&&g(t,e,r,"!==",d.notStrictEqual)},d.throws=function(t,e,r){E(!0,t,e,r)},d.doesNotThrow=function(t,e,r){E(!1,t,e,r)},d.ifError=function(t){if(t)throw t},d.strict=n((function t(e,r){e||g(e,!0,r,"==",t)}),d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var A=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,r(9))},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=r(16);function i(t,e){if("00"===t.slice(0,2))throw new Error("invalid RLP: extra zeros");return parseInt(t,e)}function o(e,r){if(e<56)return t.from([e+r]);var n=s(e),i=s(r+55+n.length/2);return t.from(i+n,"hex")}function a(t){return"0x"===t.slice(0,2)}function s(t){if(t<0)throw new Error("Invalid integer as argument, must be unsigned!");var e=t.toString(16);return e.length%2?"0"+e:e}function f(e){if(!t.isBuffer(e)){if("string"==typeof e)return a(e)?t.from((i="string"!=typeof(o=e)?o:a(o)?o.slice(2):o).length%2?"0"+i:i,"hex"):t.from(e);if("number"==typeof e)return e?(r=s(e),t.from(r,"hex")):t.from([]);if(null==e)return t.from([]);if(e instanceof Uint8Array)return t.from(e);if(n.isBN(e))return t.from(e.toArray());throw new Error("invalid type")}var r,i,o;return e}e.encode=function e(r){if(Array.isArray(r)){for(var n=[],i=0;ir.length)throw new Error("invalid rlp: total length is larger than the data");if(0===(s=r.slice(o,h)).length)throw new Error("invalid rlp, List has a invalid length");for(;s.length;)f=e(s),u.push(f.data),s=f.remainder;return{data:u,remainder:r.slice(h)}}(f(e));if(r)return n;if(0!==n.remainder.length)throw new Error("invalid remainder");return n.data},e.getLength=function(e){if(!e||0===e.length)return t.from([]);var r=f(e),n=r[0];if(n<=127)return r.length;if(n<=183)return n-127;if(n<=191)return n-182;if(n<=247)return n-191;var o=n-246;return o+i(r.slice(1,o).toString("hex"),16)}}).call(this,r(10).Buffer)},function(t,e){t.exports=function(t){if("string"!=typeof t)throw new Error("[is-hex-prefixed] value must be type 'string', is currently type "+typeof t+", while checking isHexPrefixed.");return"0x"===t.slice(0,2)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,r){((0,n.default)(t)?d:l)(t,(0,c.default)(e),r)};var n=h(r(51)),i=h(r(99)),o=h(r(199)),a=h(r(102)),s=h(r(46)),f=h(r(70)),u=h(r(72)),c=h(r(38));function h(t){return t&&t.__esModule?t:{default:t}}function d(t,e,r){r=(0,f.default)(r||s.default);var n=0,o=0,a=t.length;function c(t,e){t?r(t):++o!==a&&e!==i.default||r(null)}for(0===a&&r(null);n-1&&t%1==0&&t<=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={},t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return function(e,r,f){if(f=(0,i.default)(f||n.default),t<=0||!e)return f(null);var u=(0,o.default)(e),c=!1,h=0,d=!1;function l(t,e){if(h-=1,t)c=!0,f(t);else{if(e===s.default||c&&h<=0)return c=!0,f(null);d||p()}}function p(){for(d=!0;h2?arguments[2]:{},o=n(e);i&&(o=a.call(o,Object.getOwnPropertySymbols(e)));for(var s=0;s=0&&"[object Function]"===n.call(t.callee)),r}},function(t,e,r){"use strict";var n=r(73),i=r(240),o=n.call(Function.call,String.prototype.replace),a=/^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/,s=/[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;t.exports=function(){var t=i.ToString(i.CheckObjectCoercible(this));return o(o(t,a,""),s,"")}},function(t,e,r){"use strict";var n=Object.getOwnPropertyDescriptor?function(){return Object.getOwnPropertyDescriptor(arguments,"callee").get}():function(){throw new TypeError},i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator,o=Object.getPrototypeOf||function(t){return t.__proto__},a=void 0,s="undefined"==typeof Uint8Array?void 0:o(Uint8Array),f={"$ %Array%":Array,"$ %ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"$ %ArrayBufferPrototype%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer.prototype,"$ %ArrayIteratorPrototype%":i?o([][Symbol.iterator]()):void 0,"$ %ArrayPrototype%":Array.prototype,"$ %ArrayProto_entries%":Array.prototype.entries,"$ %ArrayProto_forEach%":Array.prototype.forEach,"$ %ArrayProto_keys%":Array.prototype.keys,"$ %ArrayProto_values%":Array.prototype.values,"$ %AsyncFromSyncIteratorPrototype%":void 0,"$ %AsyncFunction%":void 0,"$ %AsyncFunctionPrototype%":void 0,"$ %AsyncGenerator%":void 0,"$ %AsyncGeneratorFunction%":void 0,"$ %AsyncGeneratorPrototype%":void 0,"$ %AsyncIteratorPrototype%":a&&i&&Symbol.asyncIterator?a[Symbol.asyncIterator]():void 0,"$ %Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"$ %Boolean%":Boolean,"$ %BooleanPrototype%":Boolean.prototype,"$ %DataView%":"undefined"==typeof DataView?void 0:DataView,"$ %DataViewPrototype%":"undefined"==typeof DataView?void 0:DataView.prototype,"$ %Date%":Date,"$ %DatePrototype%":Date.prototype,"$ %decodeURI%":decodeURI,"$ %decodeURIComponent%":decodeURIComponent,"$ %encodeURI%":encodeURI,"$ %encodeURIComponent%":encodeURIComponent,"$ %Error%":Error,"$ %ErrorPrototype%":Error.prototype,"$ %eval%":eval,"$ %EvalError%":EvalError,"$ %EvalErrorPrototype%":EvalError.prototype,"$ %Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"$ %Float32ArrayPrototype%":"undefined"==typeof Float32Array?void 0:Float32Array.prototype,"$ %Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"$ %Float64ArrayPrototype%":"undefined"==typeof Float64Array?void 0:Float64Array.prototype,"$ %Function%":Function,"$ %FunctionPrototype%":Function.prototype,"$ %Generator%":void 0,"$ %GeneratorFunction%":void 0,"$ %GeneratorPrototype%":void 0,"$ %Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"$ %Int8ArrayPrototype%":"undefined"==typeof Int8Array?void 0:Int8Array.prototype,"$ %Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"$ %Int16ArrayPrototype%":"undefined"==typeof Int16Array?void 0:Int8Array.prototype,"$ %Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"$ %Int32ArrayPrototype%":"undefined"==typeof Int32Array?void 0:Int32Array.prototype,"$ %isFinite%":isFinite,"$ %isNaN%":isNaN,"$ %IteratorPrototype%":i?o(o([][Symbol.iterator]())):void 0,"$ %JSON%":JSON,"$ %JSONParse%":JSON.parse,"$ %Map%":"undefined"==typeof Map?void 0:Map,"$ %MapIteratorPrototype%":"undefined"!=typeof Map&&i?o((new Map)[Symbol.iterator]()):void 0,"$ %MapPrototype%":"undefined"==typeof Map?void 0:Map.prototype,"$ %Math%":Math,"$ %Number%":Number,"$ %NumberPrototype%":Number.prototype,"$ %Object%":Object,"$ %ObjectPrototype%":Object.prototype,"$ %ObjProto_toString%":Object.prototype.toString,"$ %ObjProto_valueOf%":Object.prototype.valueOf,"$ %parseFloat%":parseFloat,"$ %parseInt%":parseInt,"$ %Promise%":"undefined"==typeof Promise?void 0:Promise,"$ %PromisePrototype%":"undefined"==typeof Promise?void 0:Promise.prototype,"$ %PromiseProto_then%":"undefined"==typeof Promise?void 0:Promise.prototype.then,"$ %Promise_all%":"undefined"==typeof Promise?void 0:Promise.all,"$ %Promise_reject%":"undefined"==typeof Promise?void 0:Promise.reject,"$ %Promise_resolve%":"undefined"==typeof Promise?void 0:Promise.resolve,"$ %Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"$ %RangeError%":RangeError,"$ %RangeErrorPrototype%":RangeError.prototype,"$ %ReferenceError%":ReferenceError,"$ %ReferenceErrorPrototype%":ReferenceError.prototype,"$ %Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"$ %RegExp%":RegExp,"$ %RegExpPrototype%":RegExp.prototype,"$ %Set%":"undefined"==typeof Set?void 0:Set,"$ %SetIteratorPrototype%":"undefined"!=typeof Set&&i?o((new Set)[Symbol.iterator]()):void 0,"$ %SetPrototype%":"undefined"==typeof Set?void 0:Set.prototype,"$ %SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"$ %SharedArrayBufferPrototype%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer.prototype,"$ %String%":String,"$ %StringIteratorPrototype%":i?o(""[Symbol.iterator]()):void 0,"$ %StringPrototype%":String.prototype,"$ %Symbol%":i?Symbol:void 0,"$ %SymbolPrototype%":i?Symbol.prototype:void 0,"$ %SyntaxError%":SyntaxError,"$ %SyntaxErrorPrototype%":SyntaxError.prototype,"$ %ThrowTypeError%":n,"$ %TypedArray%":s,"$ %TypedArrayPrototype%":s?s.prototype:void 0,"$ %TypeError%":TypeError,"$ %TypeErrorPrototype%":TypeError.prototype,"$ %Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"$ %Uint8ArrayPrototype%":"undefined"==typeof Uint8Array?void 0:Uint8Array.prototype,"$ %Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"$ %Uint8ClampedArrayPrototype%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray.prototype,"$ %Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"$ %Uint16ArrayPrototype%":"undefined"==typeof Uint16Array?void 0:Uint16Array.prototype,"$ %Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"$ %Uint32ArrayPrototype%":"undefined"==typeof Uint32Array?void 0:Uint32Array.prototype,"$ %URIError%":URIError,"$ %URIErrorPrototype%":URIError.prototype,"$ %WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"$ %WeakMapPrototype%":"undefined"==typeof WeakMap?void 0:WeakMap.prototype,"$ %WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet,"$ %WeakSetPrototype%":"undefined"==typeof WeakSet?void 0:WeakSet.prototype};t.exports=function(t,e){if(arguments.length>1&&"boolean"!=typeof e)throw new TypeError('"allowMissing" argument must be a boolean');var r="$ "+t;if(!(r in f))throw new SyntaxError("intrinsic "+t+" does not exist!");if(void 0===f[r]&&!e)throw new TypeError("intrinsic "+t+" exists, but is not available. Please file an issue!");return f[r]}},function(t,e,r){"use strict";var n=r(73);t.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},function(t,e,r){"use strict";var n=r(105);t.exports=function(){return String.prototype.trim&&"​"==="​".trim()?String.prototype.trim:n}},function(t,e,r){var n=r(15),i=r(76);function o(t){n.EventEmitter.call(this),this.backoffStrategy_=t,this.maxNumberOfRetry_=-1,this.backoffNumber_=0,this.backoffDelay_=0,this.timeoutID_=-1,this.handlers={backoff:this.onBackoff_.bind(this)}}r(21).inherits(o,n.EventEmitter),o.prototype.failAfter=function(t){i.checkArgument(t>0,"Expected a maximum number of retry greater than 0 but got %s.",t),this.maxNumberOfRetry_=t},o.prototype.backoff=function(t){i.checkState(-1===this.timeoutID_,"Backoff in progress."),this.backoffNumber_===this.maxNumberOfRetry_?(this.emit("fail",t),this.reset()):(this.backoffDelay_=this.backoffStrategy_.next(),this.timeoutID_=setTimeout(this.handlers.backoff,this.backoffDelay_),this.emit("backoff",this.backoffNumber_,this.backoffDelay_,t))},o.prototype.onBackoff_=function(){this.timeoutID_=-1,this.emit("ready",this.backoffNumber_,this.backoffDelay_),this.backoffNumber_++},o.prototype.reset=function(){this.backoffNumber_=0,this.backoffStrategy_.reset(),clearTimeout(this.timeoutID_),this.timeoutID_=-1},t.exports=o},function(t,e,r){r(15),r(21);function n(t){return null!=t}function i(t){if(n((t=t||{}).initialDelay)&&t.initialDelay<1)throw new Error("The initial timeout must be greater than 0.");if(n(t.maxDelay)&&t.maxDelay<1)throw new Error("The maximal timeout must be greater than 0.");if(this.initialDelay_=t.initialDelay||100,this.maxDelay_=t.maxDelay||1e4,this.maxDelay_<=this.initialDelay_)throw new Error("The maximal backoff delay must be greater than the initial backoff delay.");if(n(t.randomisationFactor)&&(t.randomisationFactor<0||t.randomisationFactor>1))throw new Error("The randomisation factor must be between 0 and 1.");this.randomisationFactor_=t.randomisationFactor||0}i.prototype.getMaxDelay=function(){return this.maxDelay_},i.prototype.getInitialDelay=function(){return this.initialDelay_},i.prototype.next=function(){var t=this.next_(),e=1+Math.random()*this.randomisationFactor_;return Math.round(t*e)},i.prototype.next_=function(){throw new Error("BackoffStrategy.next_() unimplemented.")},i.prototype.reset=function(){this.reset_()},i.prototype.reset_=function(){throw new Error("BackoffStrategy.reset_() unimplemented.")},t.exports=i},function(t,e,r){var n=r(21),i=r(110);function o(t){i.call(this,t),this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay()}n.inherits(o,i),o.prototype.next_=function(){var t=Math.min(this.nextBackoffDelay_,this.getMaxDelay());return this.nextBackoffDelay_+=this.backoffDelay_,this.backoffDelay_=t,t},o.prototype.reset_=function(){this.nextBackoffDelay_=this.getInitialDelay(),this.backoffDelay_=0},t.exports=o},,,,,,function(t,e,r){const n=r(15).EventEmitter,i=r(21).inherits,o=r(64),a=r(189),s=r(194),f=r(222),u=r(225),c=(r(226),r(47),function(){});function h(t){const e=this;n.call(e),e.setMaxListeners(30),t=t||{};const r={sendAsync:e._handleAsync.bind(e)},i=t.blockTrackerProvider||r;e._blockTracker=t.blockTracker||new a({provider:i,pollingInterval:t.pollingInterval||4e3}),e._blockTracker.on("block",t=>{const r=function(t){return{number:o.toBuffer(t.number),hash:o.toBuffer(t.hash),parentHash:o.toBuffer(t.parentHash),nonce:o.toBuffer(t.nonce),mixHash:o.toBuffer(t.mixHash),sha3Uncles:o.toBuffer(t.sha3Uncles),logsBloom:o.toBuffer(t.logsBloom),transactionsRoot:o.toBuffer(t.transactionsRoot),stateRoot:o.toBuffer(t.stateRoot),receiptsRoot:o.toBuffer(t.receiptRoot||t.receiptsRoot),miner:o.toBuffer(t.miner),difficulty:o.toBuffer(t.difficulty),totalDifficulty:o.toBuffer(t.totalDifficulty),size:o.toBuffer(t.size),extraData:o.toBuffer(t.extraData),gasLimit:o.toBuffer(t.gasLimit),gasUsed:o.toBuffer(t.gasUsed),timestamp:o.toBuffer(t.timestamp),transactions:t.transactions}}(t);e._setCurrentBlock(r)}),e._blockTracker.on("block",e.emit.bind(e,"rawBlock")),e._blockTracker.on("sync",e.emit.bind(e,"sync")),e._blockTracker.on("latest",e.emit.bind(e,"latest")),e._ready=new u,e._blockTracker.once("block",()=>{e._ready.go()}),e.currentBlock=null,e._providers=[]}t.exports=h,i(h,n),h.prototype.start=function(t=c){this._blockTracker.start().then(t).catch(t),this._running=!0,this.emit("start")},h.prototype.stop=function(){this._blockTracker.stop(),this._running=!1,this.emit("stop")},h.prototype.isRunning=function(){return this._running},h.prototype.addProvider=function(t,e){const r=this;"number"==typeof e?r._providers.splice(e,0,t):r._providers.push(t),t.setEngine(this)},h.prototype.removeProvider=function(t){const e=this._providers.indexOf(t);if(e<0)throw new Error("Provider not found.");this._providers.splice(e,1)},h.prototype.send=function(t){throw new Error("Web3ProviderEngine does not support synchronous requests.")},h.prototype.sendAsync=function(t,e){const r=this;r._ready.await((function(){Array.isArray(t)?s(t,r._handleAsync.bind(r),e):r._handleAsync(t,e)}))},h.prototype._handleAsync=function(t,e){var r=this,n=-1,i=null,o=null,a=[];function s(r,n){o=r,i=n,f(a,(function(t,e){t?t(o,i,e):e()}),(function(){var r={id:t.id,jsonrpc:t.jsonrpc,result:i};null!=o?(r.error={message:o.stack||o.message||o,code:-32e3},e(o,r)):e(null,r)}))}!function e(i){n+=1;a.unshift(i);if(n>=r._providers.length)s(new Error('Request for method "'+t.method+'" not handled by any subprovider. Please check your subprovider configuration to ensure this method is handled.'));else try{r._providers[n].handleRequest(t,e,s)}catch(t){s(t)}}()},h.prototype._setCurrentBlock=function(t){this.currentBlock=t,this.emit("block",t)}},function(t,e,r){(function(e){const n=e.browser?r(232):r(250),i=r(21).inherits,o=r(47),a=r(75),s=r(251);function f(t){this.rpcUrl=t.rpcUrl}t.exports=f,i(f,a),f.prototype.handleRequest=function(t,e,r){const i=this.rpcUrl;let a=o(t);n({uri:i,method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(a),rejectUnauthorized:!1,timeout:2e4},(function(t,e,n){if(t)return r(new s.InternalError(t));switch(e.statusCode){case 405:return r(new s.MethodNotFound);case 504:return function(){let t="Gateway timeout. The request took too long to process. ";t+="This can happen when querying logs over too wide a block range.";const e=new Error("Gateway timeout. The request took too long to process. This can happen when querying logs over too wide a block range.");return r(new s.InternalError(e))}();default:if(200!=e.statusCode)return r(new s.InternalError(e.body))}let i;try{i=JSON.parse(n)}catch(t){return console.error(t.stack),r(new s.InternalError(t))}if(i.error)return r(i.error);r(null,i.result)}))}}).call(this,r(18))},function(t,e,r){(function(e){const n=r(253),i=r(15),o=(r(21).inherits,e.WebSocket||r(258)),a=r(75),s=r(47);class f extends a{constructor({rpcUrl:t,debug:e,origin:r}){super(),i.call(this),Object.defineProperties(this,{_backoff:{value:n.exponential({randomisationFactor:.2,maxDelay:5e3})},_connectTime:{value:null,writable:!0},_log:{value:e?(...t)=>console.info.apply(console,["[WSProvider]",...t]):()=>{}},_origin:{value:r},_pendingRequests:{value:new Map},_socket:{value:null,writable:!0},_unhandledRequests:{value:[]},_url:{value:t}}),this._handleSocketClose=this._handleSocketClose.bind(this),this._handleSocketMessage=this._handleSocketMessage.bind(this),this._handleSocketOpen=this._handleSocketOpen.bind(this),this._backoff.on("ready",()=>{this._openSocket()}),this._openSocket()}handleRequest(t,e,r){if(!this._socket||this._socket.readyState!==o.OPEN)return this._unhandledRequests.push(Array.from(arguments)),void this._log("Socket not open. Request queued.");this._pendingRequests.set(t.id,[t,r]);const n=s(t);delete n.origin,this._socket.send(JSON.stringify(n)),this._log(`Sent: ${n.method} #${n.id}`)}_handleSocketClose({reason:t,code:e}){this._log(`Socket closed, code ${e} (${t||"no reason"})`),this._connectTime&&Date.now()-this._connectTime>5e3&&this._backoff.reset(),this._socket.removeEventListener("close",this._handleSocketClose),this._socket.removeEventListener("message",this._handleSocketMessage),this._socket.removeEventListener("open",this._handleSocketOpen),this._socket=null,this._backoff.backoff()}_handleSocketMessage(t){let e;try{e=JSON.parse(t.data)}catch(t){return void this._log("Received a message that is not valid JSON:",e)}if(void 0===e.id)return this.emit("data",null,e);if(!this._pendingRequests.has(e.id))return;const[r,n]=this._pendingRequests.get(e.id);if(this._pendingRequests.delete(e.id),this._log(`Received: ${r.method} #${e.id}`),e.error)return n(new Error(e.error.message));n(null,e.result)}_handleSocketOpen(){this._log("Socket open."),this._connectTime=Date.now(),this._pendingRequests.forEach(([t,e])=>{this._unhandledRequests.push([t,null,e])}),this._pendingRequests.clear(),this._unhandledRequests.splice(0,this._unhandledRequests.length).forEach(t=>{this.handleRequest.apply(this,t)})}_openSocket(){this._log("Opening socket..."),this._socket=new o(this._url,[],this._origin?{headers:{origin:this._origin}}:{}),this._socket.addEventListener("close",this._handleSocketClose),this._socket.addEventListener("message",this._handleSocketMessage),this._socket.addEventListener("open",this._handleSocketOpen)}}Object.assign(f.prototype,i.prototype),t.exports=f}).call(this,r(9))},function(t,e,r){const n=r(259),i=r(260),o=r(21).inherits,a=r(64),s=r(262),f=r(50),u=r(266),c=r(75),h=r(267),d=/^[0-9A-Fa-f]+$/g;function l(t){this.nonceLock=u(1),t.getAccounts&&(this.getAccounts=t.getAccounts),t.processTransaction&&(this.processTransaction=t.processTransaction),t.processMessage&&(this.processMessage=t.processMessage),t.processPersonalMessage&&(this.processPersonalMessage=t.processPersonalMessage),t.processTypedMessage&&(this.processTypedMessage=t.processTypedMessage),this.approveTransaction=t.approveTransaction||this.autoApprove,this.approveMessage=t.approveMessage||this.autoApprove,this.approvePersonalMessage=t.approvePersonalMessage||this.autoApprove,this.approveTypedMessage=t.approveTypedMessage||this.autoApprove,t.signTransaction&&(this.signTransaction=t.signTransaction||y("signTransaction")),t.signMessage&&(this.signMessage=t.signMessage||y("signMessage")),t.signPersonalMessage&&(this.signPersonalMessage=t.signPersonalMessage||y("signPersonalMessage")),t.signTypedMessage&&(this.signTypedMessage=t.signTypedMessage||y("signTypedMessage")),t.recoverPersonalSignature&&(this.recoverPersonalSignature=t.recoverPersonalSignature),t.publishTransaction&&(this.publishTransaction=t.publishTransaction),this.estimateGas=t.estimateGas||this.estimateGas,this.getGasPrice=t.getGasPrice||this.getGasPrice}function p(t){return t.toLowerCase()}function b(t){return"string"==typeof t&&("0x"===t.slice(0,2)&&t.slice(2).match(d))}function y(t){return function(e,r){r(new Error('ProviderEngine - HookedWalletSubprovider - Must provide "'+t+'" fn in constructor options'))}}t.exports=l,o(l,c),l.prototype.handleRequest=function(t,e,r){const i=this;let o,s,u,c,h;switch(i._parityRequests={},i._parityRequestCount=0,t.method){case"eth_coinbase":return void i.getAccounts((function(t,e){if(t)return r(t);let n=e[0]||null;r(null,n)}));case"eth_accounts":return void i.getAccounts((function(t,e){if(t)return r(t);r(null,e)}));case"eth_sendTransaction":return o=t.params[0],void n([t=>i.validateTransaction(o,t),t=>i.processTransaction(o,t)],r);case"eth_signTransaction":return o=t.params[0],void n([t=>i.validateTransaction(o,t),t=>i.processSignTransaction(o,t)],r);case"eth_sign":return h=t.params[0],c=t.params[1],u=t.params[2]||{},s=f(u,{from:h,data:c}),void n([t=>i.validateMessage(s,t),t=>i.processMessage(s,t)],r);case"personal_sign":return function(){const e=t.params[0];if(function(t){const e=a.addHexPrefix(t);return!a.isValidAddress(e)&&b(t)}(t.params[1])&&function(t){const e=a.addHexPrefix(t);return a.isValidAddress(e)}(e)){let e="The eth_personalSign method requires params ordered ";e+="[message, address]. This was previously handled incorrectly, ",e+="and has been corrected automatically. ",e+="Please switch this param order for smooth behavior in the future.",console.warn(e),h=t.params[0],c=t.params[1]}else c=t.params[0],h=t.params[1];u=t.params[2]||{},s=f(u,{from:h,data:c}),n([t=>i.validatePersonalMessage(s,t),t=>i.processPersonalMessage(s,t)],r)}();case"personal_ecRecover":return function(){c=t.params[0];let e=t.params[1];u=t.params[2]||{},s=f(u,{sig:e,data:c}),i.recoverPersonalSignature(s,r)}();case"eth_signTypedData":return c=t.params[0],h=t.params[1],u=t.params[2]||{},s=f(u,{from:h,data:c}),void n([t=>i.validateTypedMessage(s,t),t=>i.processTypedMessage(s,t)],r);case"parity_postTransaction":return o=t.params[0],void i.parityPostTransaction(o,r);case"parity_postSign":return h=t.params[0],c=t.params[1],void i.parityPostSign(h,c,r);case"parity_checkRequest":return function(){const e=t.params[0];i.parityCheckRequest(e,r)}();case"parity_defaultAccount":return void i.getAccounts((function(t,e){if(t)return r(t);const n=e[0]||null;r(null,n)}));default:return void e()}},l.prototype.getAccounts=function(t){t(null,[])},l.prototype.processTransaction=function(t,e){const r=this;n([e=>r.approveTransaction(t,e),(t,e)=>r.checkApproval("transaction",t,e),e=>r.finalizeAndSubmitTx(t,e)],e)},l.prototype.processSignTransaction=function(t,e){const r=this;n([e=>r.approveTransaction(t,e),(t,e)=>r.checkApproval("transaction",t,e),e=>r.finalizeTx(t,e)],e)},l.prototype.processMessage=function(t,e){const r=this;n([e=>r.approveMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signMessage(t,e)],e)},l.prototype.processPersonalMessage=function(t,e){const r=this;n([e=>r.approvePersonalMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signPersonalMessage(t,e)],e)},l.prototype.processTypedMessage=function(t,e){const r=this;n([e=>r.approveTypedMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signTypedMessage(t,e)],e)},l.prototype.autoApprove=function(t,e){e(null,!0)},l.prototype.checkApproval=function(t,e,r){r(e?null:new Error("User denied "+t+" signature."))},l.prototype.parityPostTransaction=function(t,e){const r=this,n=`0x${r._parityRequestCount.toString(16)}`;r._parityRequestCount++,r.emitPayload({method:"eth_sendTransaction",params:[t]},(function(t,e){if(t)return void(r._parityRequests[n]={error:t});const i=e.result;r._parityRequests[n]=i})),e(null,n)},l.prototype.parityPostSign=function(t,e,r){const n=this,i=`0x${n._parityRequestCount.toString(16)}`;n._parityRequestCount++,n.emitPayload({method:"eth_sign",params:[t,e]},(function(t,e){if(t)return void(n._parityRequests[i]={error:t});const r=e.result;n._parityRequests[i]=r})),r(null,i)},l.prototype.parityCheckRequest=function(t,e){const r=this._parityRequests[t]||null;return r?r.error?e(r.error):void e(null,r):e(null,null)},l.prototype.recoverPersonalSignature=function(t,e){let r;try{r=s.recoverPersonalSignature(t)}catch(t){return e(t)}e(null,r)},l.prototype.validateTransaction=function(t,e){if(void 0===t.from)return e(new Error("Undefined address - from address required to sign transaction."));this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign transaction for this address: "${t.from}"`))}))},l.prototype.validateMessage=function(t,e){if(void 0===t.from)return e(new Error("Undefined address - from address required to sign message."));this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))}))},l.prototype.validatePersonalMessage=function(t,e){return void 0===t.from?e(new Error("Undefined address - from address required to sign personal message.")):void 0===t.data?e(new Error("Undefined message - message required to sign personal message.")):b(t.data)?void this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))})):e(new Error("HookedWalletSubprovider - validateMessage - message was not encoded as hex."))},l.prototype.validateTypedMessage=function(t,e){return void 0===t.from?e(new Error("Undefined address - from address required to sign typed data.")):void 0===t.data?e(new Error("Undefined data - message required to sign typed data.")):void this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))}))},l.prototype.validateSender=function(t,e){if(!t)return e(null,!1);this.getAccounts((function(r,n){if(r)return e(r);const i=-1!==n.map(p).indexOf(t.toLowerCase());e(null,i)}))},l.prototype.finalizeAndSubmitTx=function(t,e){const r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,t),r.signTransaction.bind(r),r.publishTransaction.bind(r)],(function(t,n){if(r.nonceLock.leave(),t)return e(t);e(null,n)}))}))},l.prototype.finalizeTx=function(t,e){const r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,t),r.signTransaction.bind(r)],(function(n,i){if(r.nonceLock.leave(),n)return e(n);e(null,{raw:i,tx:t})}))}))},l.prototype.publishTransaction=function(t,e){this.emitPayload({method:"eth_sendRawTransaction",params:[t]},(function(t,r){if(t)return e(t);e(null,r.result)}))},l.prototype.estimateGas=function(t,e){h(this.engine,t,e)},l.prototype.getGasPrice=function(t){this.emitPayload({method:"eth_gasPrice",params:[]},(function(e,r){if(e)return t(e);t(null,r.result)}))},l.prototype.fillInTxExtras=function(t,e){const r=this,n=t.from,o={};void 0===t.gasPrice&&(o.gasPrice=r.getGasPrice.bind(r)),void 0===t.nonce&&(o.nonce=r.emitPayload.bind(r,{method:"eth_getTransactionCount",params:[n,"pending"]})),void 0===t.gas&&(o.gas=r.estimateGas.bind(r,function(t){return{from:t.from,to:t.to,value:t.value,data:t.data,gas:t.gas,gasPrice:t.gasPrice,nonce:t.nonce}}(t))),i(o,(function(r,n){if(r)return e(r);const i={};n.gasPrice&&(i.gasPrice=n.gasPrice),n.nonce&&(i.nonce=n.nonce.result),n.gas&&(i.gas=n.gas),e(null,f(t,i))}))}},,,,,,,,,,,,,,,,,,,,,,function(t,e,r){"use strict";r.r(e),r.d(e,"default",(function(){return P}));var n,i,o=r(6),a=r.n(o),s=r(7),f=r.n(s),u=r(8),c=r.n(u),h=r(0),d=r.n(h),l=r(1),p=r.n(l),b=r(3),y=r.n(b),g=r(4),m=r.n(g),v=r(2),_=r(117),w=r.n(_),E=r(118),A=r.n(E),S=r(119),x=r.n(S),M=r(120),I=r.n(M),k=v.SocketService,T=function(){function t(){y()(this,t),this.getAccounts=this.getAccounts.bind(this),this.signTransaction=this.signTransaction.bind(this)}return m()(t,[{key:"getAccounts",value:function(){var t=p()(d.a.mark((function t(e){var r;return d.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,k.sendApiRequest({type:"identityFromPermissions",payload:{}});case 2:return t.sent,r=i()?i().accounts.filter((function(t){return t.blockchain===v.Blockchains.ETH})).map((function(t){return t.address})):[],e(null,r),t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()},{key:"signTransaction",value:function(){var t=p()(d.a.mark((function t(e){var r,i,o,a,s;return d.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}throw Error.noNetwork();case 2:if(void 0!==e.gas&&(e.gasLimit=e.gas),e.value=e.value||"0x00",e.hasOwnProperty("data")&&(e.data="0x"+e.data),r=e.hasOwnProperty("requiredFields")?e.requiredFields:{},(e.hasOwnProperty("abi")?e.abi:null)||!e.hasOwnProperty("data")){t.next=9;break}throw Error.signatureError("no_abi","You must provide a JSON ABI along with your transaction so that users can read the contract");case 9:return i=Object.assign(e,{blockchain:v.Blockchains.ETH,network:n,requiredFields:r}),t.next=12,k.sendApiRequest({type:"requestSignature",payload:i});case 12:return o=t.sent,a=o.signatures,s=o.returnedFields,e.hasOwnProperty("fieldsCallback")&&e.fieldsCallback(s),t.abrupt("return",a[0]);case 17:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()}]),t}(),P=function(t){function e(){return y()(this,e),a()(this,f()(e).call(this,v.Blockchains.ETH,v.PluginTypes.BLOCKCHAIN_SUPPORT))}return c()(e,t),m()(e,[{key:"setSocketService",value:function(t){k=t}},{key:"hookProvider",value:function(){throw!(1=arguments.length?void 0:arguments[1],function(t,e){n=v.Network.fromJson(t);var r="".concat(n.fullhost()),i=new w.a,o=new e(i),a=new I.a(new T);return i.addProvider(a),-1>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0);return e},o.prototype.copy=function(t){for(var e=0;e<50;++e)t.state[e]=this.state[e];t.blockSize=this.blockSize,t.count=this.count,t.squeezing=this.squeezing},t.exports=o},function(t,e,r){"use strict";var n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];e.p1600=function(t){for(var e=0;e<24;++e){var r=t[0]^t[10]^t[20]^t[30]^t[40],i=t[1]^t[11]^t[21]^t[31]^t[41],o=t[2]^t[12]^t[22]^t[32]^t[42],a=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],f=t[5]^t[15]^t[25]^t[35]^t[45],u=t[6]^t[16]^t[26]^t[36]^t[46],c=t[7]^t[17]^t[27]^t[37]^t[47],h=t[8]^t[18]^t[28]^t[38]^t[48],d=t[9]^t[19]^t[29]^t[39]^t[49],l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31),b=t[0]^l,y=t[1]^p,g=t[10]^l,m=t[11]^p,v=t[20]^l,_=t[21]^p,w=t[30]^l,E=t[31]^p,A=t[40]^l,S=t[41]^p;l=r^(s<<1|f>>>31),p=i^(f<<1|s>>>31);var x=t[2]^l,M=t[3]^p,I=t[12]^l,k=t[13]^p,T=t[22]^l,P=t[23]^p,L=t[32]^l,B=t[33]^p,R=t[42]^l,N=t[43]^p;l=o^(u<<1|c>>>31),p=a^(c<<1|u>>>31);var C=t[4]^l,O=t[5]^p,j=t[14]^l,D=t[15]^p,U=t[24]^l,q=t[25]^p,z=t[34]^l,F=t[35]^p,K=t[44]^l,V=t[45]^p;l=s^(h<<1|d>>>31),p=f^(d<<1|h>>>31);var Y=t[6]^l,H=t[7]^p,$=t[16]^l,G=t[17]^p,W=t[26]^l,Z=t[27]^p,J=t[36]^l,X=t[37]^p,Q=t[46]^l,tt=t[47]^p;l=u^(r<<1|i>>>31),p=c^(i<<1|r>>>31);var et=t[8]^l,rt=t[9]^p,nt=t[18]^l,it=t[19]^p,ot=t[28]^l,at=t[29]^p,st=t[38]^l,ft=t[39]^p,ut=t[48]^l,ct=t[49]^p,ht=b,dt=y,lt=m<<4|g>>>28,pt=g<<4|m>>>28,bt=v<<3|_>>>29,yt=_<<3|v>>>29,gt=E<<9|w>>>23,mt=w<<9|E>>>23,vt=A<<18|S>>>14,_t=S<<18|A>>>14,wt=x<<1|M>>>31,Et=M<<1|x>>>31,At=k<<12|I>>>20,St=I<<12|k>>>20,xt=T<<10|P>>>22,Mt=P<<10|T>>>22,It=B<<13|L>>>19,kt=L<<13|B>>>19,Tt=R<<2|N>>>30,Pt=N<<2|R>>>30,Lt=O<<30|C>>>2,Bt=C<<30|O>>>2,Rt=j<<6|D>>>26,Nt=D<<6|j>>>26,Ct=q<<11|U>>>21,Ot=U<<11|q>>>21,jt=z<<15|F>>>17,Dt=F<<15|z>>>17,Ut=V<<29|K>>>3,qt=K<<29|V>>>3,zt=Y<<28|H>>>4,Ft=H<<28|Y>>>4,Kt=G<<23|$>>>9,Vt=$<<23|G>>>9,Yt=W<<25|Z>>>7,Ht=Z<<25|W>>>7,$t=J<<21|X>>>11,Gt=X<<21|J>>>11,Wt=tt<<24|Q>>>8,Zt=Q<<24|tt>>>8,Jt=et<<27|rt>>>5,Xt=rt<<27|et>>>5,Qt=nt<<20|it>>>12,te=it<<20|nt>>>12,ee=at<<7|ot>>>25,re=ot<<7|at>>>25,ne=st<<8|ft>>>24,ie=ft<<8|st>>>24,oe=ut<<14|ct>>>18,ae=ct<<14|ut>>>18;t[0]=ht^~At&Ct,t[1]=dt^~St&Ot,t[10]=zt^~Qt&bt,t[11]=Ft^~te&yt,t[20]=wt^~Rt&Yt,t[21]=Et^~Nt&Ht,t[30]=Jt^~lt&xt,t[31]=Xt^~pt&Mt,t[40]=Lt^~Kt&ee,t[41]=Bt^~Vt&re,t[2]=At^~Ct&$t,t[3]=St^~Ot&Gt,t[12]=Qt^~bt&It,t[13]=te^~yt&kt,t[22]=Rt^~Yt&ne,t[23]=Nt^~Ht&ie,t[32]=lt^~xt&jt,t[33]=pt^~Mt&Dt,t[42]=Kt^~ee>,t[43]=Vt^~re&mt,t[4]=Ct^~$t&oe,t[5]=Ot^~Gt&ae,t[14]=bt^~It&Ut,t[15]=yt^~kt&qt,t[24]=Yt^~ne&vt,t[25]=Ht^~ie&_t,t[34]=xt^~jt&Wt,t[35]=Mt^~Dt&Zt,t[44]=ee^~gt&Tt,t[45]=re^~mt&Pt,t[6]=$t^~oe&ht,t[7]=Gt^~ae&dt,t[16]=It^~Ut&zt,t[17]=kt^~qt&Ft,t[26]=ne^~vt&wt,t[27]=ie^~_t&Et,t[36]=jt^~Wt&Jt,t[37]=Dt^~Zt&Xt,t[46]=gt^~Tt&Lt,t[47]=mt^~Pt&Bt,t[8]=oe^~ht&At,t[9]=ae^~dt&St,t[18]=Ut^~zt&Qt,t[19]=qt^~Ft&te,t[28]=vt^~wt&Rt,t[29]=_t^~Et&Nt,t[38]=Wt^~Jt<,t[39]=Zt^~Xt&pt,t[48]=Tt^~Lt&Kt,t[49]=Pt^~Bt&Vt,t[0]^=n[2*e],t[1]^=n[2*e+1]}}},function(t,e,r){"use strict";var n=r(151),i=r(152),o=r(82);function a(t,e){return void 0===t?e:(n.isBoolean(t,o.COMPRESSED_TYPE_INVALID),t)}t.exports=function(t){return{privateKeyVerify:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),32===e.length&&t.privateKeyVerify(e)},privateKeyExport:function(e,r){n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0);var s=t.privateKeyExport(e,r);return i.privateKeyExport(e,s,r)},privateKeyImport:function(e){if(n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),(e=i.privateKeyImport(e))&&32===e.length&&t.privateKeyVerify(e))return e;throw new Error(o.EC_PRIVATE_KEY_IMPORT_DER_FAIL)},privateKeyNegate:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),t.privateKeyNegate(e)},privateKeyModInverse:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),t.privateKeyModInverse(e)},privateKeyTweakAdd:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),t.privateKeyTweakAdd(e,r)},privateKeyTweakMul:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),t.privateKeyTweakMul(e,r)},publicKeyCreate:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0),t.publicKeyCreate(e,r)},publicKeyConvert:function(e,r){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),r=a(r,!0),t.publicKeyConvert(e,r)},publicKeyVerify:function(e){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),t.publicKeyVerify(e)},publicKeyTweakAdd:function(e,r,i){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),t.publicKeyTweakAdd(e,r,i)},publicKeyTweakMul:function(e,r,i){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),t.publicKeyTweakMul(e,r,i)},publicKeyCombine:function(e,r){n.isArray(e,o.EC_PUBLIC_KEYS_TYPE_INVALID),n.isLengthGTZero(e,o.EC_PUBLIC_KEYS_LENGTH_INVALID);for(var i=0;i=r)throw RangeError(n)}}).call(this,r(10).Buffer)},function(t,e,r){"use strict";var n=r(12).Buffer,i=r(153),o=n.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a=n.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);e.privateKeyExport=function(t,e,r){var i=n.from(r?o:a);return t.copy(i,r?8:9),e.copy(i,r?181:214),i},e.privateKeyImport=function(t){var e=t.length,r=0;if(!(e2||e1?t[r+n-2]<<8:0);if(!(e<(r+=n)+i||e32||e1&&0===e[o]&&!(128&e[o+1]);--r,++o);for(var a=n.concat([n.from([0]),t.s]),s=33,f=0;s>1&&0===a[f]&&!(128&a[f+1]);--s,++f);return i.encode(e.slice(o),a.slice(f))},e.signatureImport=function(t){var e=n.alloc(32,0),r=n.alloc(32,0);try{var o=i.decode(t);if(33===o.r.length&&0===o.r[0]&&(o.r=o.r.slice(1)),o.r.length>32)throw new Error("R length is too long");if(33===o.s.length&&0===o.s[0]&&(o.s=o.s.slice(1)),o.s.length>32)throw new Error("S length is too long")}catch(t){return}return o.r.copy(e,32-o.r.length),o.s.copy(r,32-o.s.length),{r:e,s:r}},e.signatureImportLax=function(t){var e=n.alloc(32,0),r=n.alloc(32,0),i=t.length,o=0;if(48===t[o++]){var a=t[o++];if(!(128&a&&(o+=a-128)>i)&&2===t[o++]){var s=t[o++];if(128&s){if(o+(a=s-128)>i)return;for(;a>0&&0===t[o];o+=1,a-=1);for(s=0;a>0;o+=1,a-=1)s=(s<<8)+t[o]}if(!(s>i-o)){var f=o;if(o+=s,2===t[o++]){var u=t[o++];if(128&u){if(o+(a=u-128)>i)return;for(;a>0&&0===t[o];o+=1,a-=1);for(u=0;a>0;o+=1,a-=1)u=(u<<8)+t[o]}if(!(u>i-o)){var c=o;for(o+=u;s>0&&0===t[f];s-=1,f+=1);if(!(s>32)){var h=t.slice(f,f+s);for(h.copy(e,32-h.length);u>0&&0===t[c];u-=1,c+=1);if(!(u>32)){var d=t.slice(c,c+u);return d.copy(r,32-d.length),{r:e,s:r}}}}}}}}}},function(t,e,r){var n=r(12).Buffer;t.exports={check:function(t){if(t.length<8)return!1;if(t.length>72)return!1;if(48!==t[0])return!1;if(t[1]!==t.length-2)return!1;if(2!==t[2])return!1;var e=t[3];if(0===e)return!1;if(5+e>=t.length)return!1;if(2!==t[4+e])return!1;var r=t[5+e];return 0!==r&&(6+e+r===t.length&&(!(128&t[4])&&(!(e>1&&0===t[4]&&!(128&t[5]))&&(!(128&t[e+6])&&!(r>1&&0===t[e+6]&&!(128&t[e+7]))))))},decode:function(t){if(t.length<8)throw new Error("DER sequence length is too short");if(t.length>72)throw new Error("DER sequence length is too long");if(48!==t[0])throw new Error("Expected DER sequence");if(t[1]!==t.length-2)throw new Error("DER sequence length is invalid");if(2!==t[2])throw new Error("Expected DER integer");var e=t[3];if(0===e)throw new Error("R length is zero");if(5+e>=t.length)throw new Error("R length is too long");if(2!==t[4+e])throw new Error("Expected DER integer (2)");var r=t[5+e];if(0===r)throw new Error("S length is zero");if(6+e+r!==t.length)throw new Error("S length is invalid");if(128&t[4])throw new Error("R value is negative");if(e>1&&0===t[4]&&!(128&t[5]))throw new Error("R value excessively padded");if(128&t[e+6])throw new Error("S value is negative");if(r>1&&0===t[e+6]&&!(128&t[e+7]))throw new Error("S value excessively padded");return{r:t.slice(4,4+e),s:t.slice(6+e)}},encode:function(t,e){var r=t.length,i=e.length;if(0===r)throw new Error("R length is zero");if(0===i)throw new Error("S length is zero");if(r>33)throw new Error("R length is too long");if(i>33)throw new Error("S length is too long");if(128&t[0])throw new Error("R value is negative");if(128&e[0])throw new Error("S value is negative");if(r>1&&0===t[0]&&!(128&t[1]))throw new Error("R value excessively padded");if(i>1&&0===e[0]&&!(128&e[1]))throw new Error("S value excessively padded");var o=n.allocUnsafe(6+r+i);return o[0]=48,o[1]=o.length-2,o[2]=2,o[3]=t.length,t.copy(o,4),o[4+r]=2,o[5+r]=e.length,e.copy(o,6+r),o}}},function(t,e,r){"use strict";var n=r(12).Buffer,i=r(65),o=r(16),a=r(22).ec,s=r(82),f=new a("secp256k1"),u=f.curve;function c(t){var e=t[0];switch(e){case 2:case 3:return 33!==t.length?null:function(t,e){var r=new o(e);if(r.cmp(u.p)>=0)return null;var n=(r=r.toRed(u.red)).redSqr().redIMul(r).redIAdd(u.b).redSqrt();return 3===t!==n.isOdd()&&(n=n.redNeg()),f.keyPair({pub:{x:r,y:n}})}(e,t.slice(1,33));case 4:case 6:case 7:return 65!==t.length?null:function(t,e,r){var n=new o(e),i=new o(r);if(n.cmp(u.p)>=0||i.cmp(u.p)>=0)return null;if(n=n.toRed(u.red),i=i.toRed(u.red),(6===t||7===t)&&i.isOdd()!==(7===t))return null;var a=n.redSqr().redIMul(n);return i.redSqr().redISub(a.redIAdd(u.b)).isZero()?f.keyPair({pub:{x:n,y:i}}):null}(e,t.slice(1,33),t.slice(33,65));default:return null}}e.privateKeyVerify=function(t){var e=new o(t);return e.cmp(u.n)<0&&!e.isZero()},e.privateKeyExport=function(t,e){var r=new o(t);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return n.from(f.keyFromPrivate(t).getPublic(e,!0))},e.privateKeyNegate=function(t){var e=new o(t);return e.isZero()?n.alloc(32):u.n.sub(e).umod(u.n).toArrayLike(n,"be",32)},e.privateKeyModInverse=function(t){var e=new o(t);if(e.cmp(u.n)>=0||e.isZero())throw new Error(s.EC_PRIVATE_KEY_RANGE_INVALID);return e.invm(u.n).toArrayLike(n,"be",32)},e.privateKeyTweakAdd=function(t,e){var r=new o(e);if(r.cmp(u.n)>=0)throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(r.iadd(new o(t)),r.cmp(u.n)>=0&&r.isub(u.n),r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return r.toArrayLike(n,"be",32)},e.privateKeyTweakMul=function(t,e){var r=new o(e);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return r.imul(new o(t)),r.cmp(u.n)&&(r=r.umod(u.n)),r.toArrayLike(n,"be",32)},e.publicKeyCreate=function(t,e){var r=new o(t);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PUBLIC_KEY_CREATE_FAIL);return n.from(f.keyFromPrivate(t).getPublic(e,!0))},e.publicKeyConvert=function(t,e){var r=c(t);if(null===r)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return n.from(r.getPublic(e,!0))},e.publicKeyVerify=function(t){return null!==c(t)},e.publicKeyTweakAdd=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((e=new o(e)).cmp(u.n)>=0)throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);var a=u.g.mul(e).add(i.pub);if(a.isInfinity())throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return n.from(a.encode(!0,r))},e.publicKeyTweakMul=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((e=new o(e)).cmp(u.n)>=0||e.isZero())throw new Error(s.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return n.from(i.pub.mul(e).encode(!0,r))},e.publicKeyCombine=function(t,e){for(var r=new Array(t.length),i=0;i=0||r.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);var i=n.from(t);return 1===r.cmp(f.nh)&&u.n.sub(r).toArrayLike(n,"be",32).copy(i,32),i},e.signatureExport=function(t){var e=t.slice(0,32),r=t.slice(32,64);if(new o(e).cmp(u.n)>=0||new o(r).cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);return{r:e,s:r}},e.signatureImport=function(t){var e=new o(t.r);e.cmp(u.n)>=0&&(e=new o(0));var r=new o(t.s);return r.cmp(u.n)>=0&&(r=new o(0)),n.concat([e.toArrayLike(n,"be",32),r.toArrayLike(n,"be",32)])},e.sign=function(t,e,r,i){if("function"==typeof r){var a=r;r=function(r){var f=a(t,e,null,i,r);if(!n.isBuffer(f)||32!==f.length)throw new Error(s.ECDSA_SIGN_FAIL);return new o(f)}}var c=new o(e);if(c.cmp(u.n)>=0||c.isZero())throw new Error(s.ECDSA_SIGN_FAIL);var h=f.sign(t,e,{canonical:!0,k:r,pers:i});return{signature:n.concat([h.r.toArrayLike(n,"be",32),h.s.toArrayLike(n,"be",32)]),recovery:h.recoveryParam}},e.verify=function(t,e,r){var n={r:e.slice(0,32),s:e.slice(32,64)},i=new o(n.r),a=new o(n.s);if(i.cmp(u.n)>=0||a.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);if(1===a.cmp(f.nh)||i.isZero()||a.isZero())return!1;var h=c(r);if(null===h)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return f.verify(t,n,{x:h.pub.x,y:h.pub.y})},e.recover=function(t,e,r,i){var a={r:e.slice(0,32),s:e.slice(32,64)},c=new o(a.r),h=new o(a.s);if(c.cmp(u.n)>=0||h.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);try{if(c.isZero()||h.isZero())throw new Error;var d=f.recoverPubKey(t,a,r);return n.from(d.encode(!0,i))}catch(t){throw new Error(s.ECDSA_RECOVER_FAIL)}},e.ecdh=function(t,r){var n=e.ecdhUnsafe(t,r,!0);return i("sha256").update(n).digest()},e.ecdhUnsafe=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);var a=new o(e);if(a.cmp(u.n)>=0||a.isZero())throw new Error(s.ECDH_FAIL);return n.from(i.pub.mul(a).encode(!0,r))}},function(t,e,r){"use strict";var n=r(13),i=r(83),o=r(12).Buffer,a=new Array(16);function s(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(t,e){return t<>>32-e}function u(t,e,r,n,i,o,a){return f(t+(e&r|~e&n)+i+o|0,a)+e|0}function c(t,e,r,n,i,o,a){return f(t+(e&n|r&~n)+i+o|0,a)+e|0}function h(t,e,r,n,i,o,a){return f(t+(e^r^n)+i+o|0,a)+e|0}function d(t,e,r,n,i,o,a){return f(t+(r^(e|~n))+i+o|0,a)+e|0}n(s,i),s.prototype._update=function(){for(var t=a,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var r=this._a,n=this._b,i=this._c,o=this._d;r=u(r,n,i,o,t[0],3614090360,7),o=u(o,r,n,i,t[1],3905402710,12),i=u(i,o,r,n,t[2],606105819,17),n=u(n,i,o,r,t[3],3250441966,22),r=u(r,n,i,o,t[4],4118548399,7),o=u(o,r,n,i,t[5],1200080426,12),i=u(i,o,r,n,t[6],2821735955,17),n=u(n,i,o,r,t[7],4249261313,22),r=u(r,n,i,o,t[8],1770035416,7),o=u(o,r,n,i,t[9],2336552879,12),i=u(i,o,r,n,t[10],4294925233,17),n=u(n,i,o,r,t[11],2304563134,22),r=u(r,n,i,o,t[12],1804603682,7),o=u(o,r,n,i,t[13],4254626195,12),i=u(i,o,r,n,t[14],2792965006,17),r=c(r,n=u(n,i,o,r,t[15],1236535329,22),i,o,t[1],4129170786,5),o=c(o,r,n,i,t[6],3225465664,9),i=c(i,o,r,n,t[11],643717713,14),n=c(n,i,o,r,t[0],3921069994,20),r=c(r,n,i,o,t[5],3593408605,5),o=c(o,r,n,i,t[10],38016083,9),i=c(i,o,r,n,t[15],3634488961,14),n=c(n,i,o,r,t[4],3889429448,20),r=c(r,n,i,o,t[9],568446438,5),o=c(o,r,n,i,t[14],3275163606,9),i=c(i,o,r,n,t[3],4107603335,14),n=c(n,i,o,r,t[8],1163531501,20),r=c(r,n,i,o,t[13],2850285829,5),o=c(o,r,n,i,t[2],4243563512,9),i=c(i,o,r,n,t[7],1735328473,14),r=h(r,n=c(n,i,o,r,t[12],2368359562,20),i,o,t[5],4294588738,4),o=h(o,r,n,i,t[8],2272392833,11),i=h(i,o,r,n,t[11],1839030562,16),n=h(n,i,o,r,t[14],4259657740,23),r=h(r,n,i,o,t[1],2763975236,4),o=h(o,r,n,i,t[4],1272893353,11),i=h(i,o,r,n,t[7],4139469664,16),n=h(n,i,o,r,t[10],3200236656,23),r=h(r,n,i,o,t[13],681279174,4),o=h(o,r,n,i,t[0],3936430074,11),i=h(i,o,r,n,t[3],3572445317,16),n=h(n,i,o,r,t[6],76029189,23),r=h(r,n,i,o,t[9],3654602809,4),o=h(o,r,n,i,t[12],3873151461,11),i=h(i,o,r,n,t[15],530742520,16),r=d(r,n=h(n,i,o,r,t[2],3299628645,23),i,o,t[0],4096336452,6),o=d(o,r,n,i,t[7],1126891415,10),i=d(i,o,r,n,t[14],2878612391,15),n=d(n,i,o,r,t[5],4237533241,21),r=d(r,n,i,o,t[12],1700485571,6),o=d(o,r,n,i,t[3],2399980690,10),i=d(i,o,r,n,t[10],4293915773,15),n=d(n,i,o,r,t[1],2240044497,21),r=d(r,n,i,o,t[8],1873313359,6),o=d(o,r,n,i,t[15],4264355552,10),i=d(i,o,r,n,t[6],2734768916,15),n=d(n,i,o,r,t[13],1309151649,21),r=d(r,n,i,o,t[4],4149444226,6),o=d(o,r,n,i,t[11],3174756917,10),i=d(i,o,r,n,t[2],718787259,15),n=d(n,i,o,r,t[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=o.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=s},function(t,e,r){"use strict";var n=r(10).Buffer,i=r(13),o=r(83),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],f=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],u=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],c=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],h=[0,1518500249,1859775393,2400959708,2840853838],d=[1352829926,1548603684,1836072691,2053994217,0];function l(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(t,e){return t<>>32-e}function b(t,e,r,n,i,o,a,s){return p(t+(e^r^n)+o+a|0,s)+i|0}function y(t,e,r,n,i,o,a,s){return p(t+(e&r|~e&n)+o+a|0,s)+i|0}function g(t,e,r,n,i,o,a,s){return p(t+((e|~r)^n)+o+a|0,s)+i|0}function m(t,e,r,n,i,o,a,s){return p(t+(e&n|r&~n)+o+a|0,s)+i|0}function v(t,e,r,n,i,o,a,s){return p(t+(e^(r|~n))+o+a|0,s)+i|0}i(l,o),l.prototype._update=function(){for(var t=a,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,l=0|this._e,_=0|this._a,w=0|this._b,E=0|this._c,A=0|this._d,S=0|this._e,x=0;x<80;x+=1){var M,I;x<16?(M=b(r,n,i,o,l,t[s[x]],h[0],u[x]),I=v(_,w,E,A,S,t[f[x]],d[0],c[x])):x<32?(M=y(r,n,i,o,l,t[s[x]],h[1],u[x]),I=m(_,w,E,A,S,t[f[x]],d[1],c[x])):x<48?(M=g(r,n,i,o,l,t[s[x]],h[2],u[x]),I=g(_,w,E,A,S,t[f[x]],d[2],c[x])):x<64?(M=m(r,n,i,o,l,t[s[x]],h[3],u[x]),I=y(_,w,E,A,S,t[f[x]],d[3],c[x])):(M=v(r,n,i,o,l,t[s[x]],h[4],u[x]),I=b(_,w,E,A,S,t[f[x]],d[4],c[x])),r=l,l=o,o=p(i,10),i=n,n=M,_=S,S=A,A=p(E,10),E=w,w=I}var k=this._b+i+A|0;this._b=this._c+o+S|0,this._c=this._d+l+_|0,this._d=this._e+r+w|0,this._e=this._a+n+E|0,this._a=k},l.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=n.alloc?n.alloc(20):new n(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=l},function(t,e,r){(e=t.exports=function(t){t=t.toLowerCase();var r=e[t];if(!r)throw new Error(t+" is not supported (we accept pull requests)");return new r}).sha=r(158),e.sha1=r(159),e.sha224=r(160),e.sha256=r(84),e.sha384=r(161),e.sha512=r(85)},function(t,e,r){var n=r(13),i=r(40),o=r(12).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(t){return t<<30|t>>>2}function c(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,h=0;h<16;++h)r[h]=t.readInt32BE(4*h);for(;h<80;++h)r[h]=r[h-3]^r[h-8]^r[h-14]^r[h-16];for(var d=0;d<80;++d){var l=~~(d/20),p=0|((e=n)<<5|e>>>27)+c(l,i,o,s)+f+r[d]+a[l];f=s,s=o,o=u(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},function(t,e,r){var n=r(13),i=r(40),o=r(12).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(t){return t<<5|t>>>27}function c(t){return t<<30|t>>>2}function h(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,d=0;d<16;++d)r[d]=t.readInt32BE(4*d);for(;d<80;++d)r[d]=(e=r[d-3]^r[d-8]^r[d-14]^r[d-16])<<1|e>>>31;for(var l=0;l<80;++l){var p=~~(l/20),b=u(n)+h(p,i,o,s)+f+r[l]+a[p]|0;f=s,s=o,o=c(i),i=n,n=b}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},function(t,e,r){var n=r(13),i=r(84),o=r(40),a=r(12).Buffer,s=new Array(64);function f(){this.init(),this._w=s,o.call(this,64,56)}n(f,i),f.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},f.prototype._hash=function(){var t=a.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=f},function(t,e,r){var n=r(13),i=r(85),o=r(40),a=r(12).Buffer,s=new Array(160);function f(){this.init(),this._w=s,o.call(this,128,112)}n(f,i),f.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},f.prototype._hash=function(){var t=a.allocUnsafe(48);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=f},function(t,e,r){var n=r(12).Buffer,i=r(32).Transform,o=r(36).StringDecoder;function a(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(13)(a,i),a.prototype.update=function(t,e,r){"string"==typeof t&&(t=n.from(t,e));var i=this._update(t);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},a.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},a.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},a.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},a.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},a.prototype._finalOrDigest=function(t){var e=this.__final()||n.alloc(0);return t&&(e=this._toString(e,t,!0)),e},a.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n},t.exports=a},function(t,e){},function(t){t.exports=JSON.parse('{"_from":"elliptic@^6.4.1","_id":"elliptic@6.4.1","_inBundle":false,"_integrity":"sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==","_location":"/elliptic","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"elliptic@^6.4.1","name":"elliptic","escapedName":"elliptic","rawSpec":"^6.4.1","saveSpec":null,"fetchSpec":"^6.4.1"},"_requiredBy":["/secp256k1"],"_resolved":"https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz","_shasum":"c2d0b7776911b86722c632c3c06c60f2f819939a","_spec":"elliptic@^6.4.1","_where":"C:\\\\Work\\\\Libraries\\\\scatter-js\\\\packages\\\\plugin-web3\\\\node_modules\\\\secp256k1","author":{"name":"Fedor Indutny","email":"fedor@indutny.com"},"bugs":{"url":"https://github.com/indutny/elliptic/issues"},"bundleDependencies":false,"dependencies":{"bn.js":"^4.4.0","brorand":"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0","inherits":"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},"deprecated":false,"description":"EC cryptography","devDependencies":{"brfs":"^1.4.3","coveralls":"^2.11.3","grunt":"^0.4.5","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2","istanbul":"^0.4.2","jscs":"^2.9.0","jshint":"^2.6.0","mocha":"^2.1.0"},"files":["lib"],"homepage":"https://github.com/indutny/elliptic","keywords":["EC","Elliptic","curve","Cryptography"],"license":"MIT","main":"lib/elliptic.js","name":"elliptic","repository":{"type":"git","url":"git+ssh://git@github.com/indutny/elliptic.git"},"scripts":{"jscs":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","jshint":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","lint":"npm run jscs && npm run jshint","test":"npm run lint && npm run unit","unit":"istanbul test _mocha --reporter=spec test/index.js","version":"grunt dist && git add dist/"},"version":"6.4.1"}')},function(t,e,r){"use strict";var n=e,i=r(16),o=r(37),a=r(86);n.assert=o,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=function(t,e){for(var r=[],n=1<=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var s=0!==i.cmpn(0)&&0===i.andln(n-1)?e+1:1,f=1;f0||e.cmpn(-i)>0;){var o,a,s,f=t.andln(3)+n&3,u=e.andln(3)+i&3;if(3===f&&(f=-1),3===u&&(u=-1),0==(1&f))o=0;else o=3!==(s=t.andln(7)+n&7)&&5!==s||2!==u?f:-f;if(r[0].push(o),0==(1&u))a=0;else a=3!==(s=e.andln(7)+i&7)&&5!==s||2!==f?u:-u;r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r},n.cachedProperty=function(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(t){return"string"==typeof t?n.toArray(t,"hex"):t},n.intFromLE=function(t){return new i(t,"hex","le")}},function(t,e,r){var n;function i(t){this.rand=t}if(t.exports=function(t){return n||(n=new i(null)),n.generate(t)},t.exports.Rand=i,i.prototype.generate=function(t){return this._rand(t)},i.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function u(t,e){this.curve=t,this.type=e,this.precomputed=null}t.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(t,e){s(t.precomputed);var r=t._getDoubles(),n=o(e,1),i=(1<=f;e--)u=(u<<1)+n[e];a.push(u)}for(var c=this.jpoint(null,null,null),h=this.jpoint(null,null,null),d=i;d>0;d--){for(f=0;f=0;u--){for(e=0;u>=0&&0===a[u];u--)e++;if(u>=0&&e++,f=f.dblp(e),u<0)break;var c=a[u];s(0!==c),f="affine"===t.type?c>0?f.mixedAdd(i[c-1>>1]):f.mixedAdd(i[-c-1>>1].neg()):c>0?f.add(i[c-1>>1]):f.add(i[-c-1>>1].neg())}return"affine"===t.type?f.toP():f},f.prototype._wnafMulAdd=function(t,e,r,n,i){for(var s=this._wnafT1,f=this._wnafT2,u=this._wnafT3,c=0,h=0;h=1;h-=2){var l=h-1,p=h;if(1===s[l]&&1===s[p]){var b=[e[l],null,null,e[p]];0===e[l].y.cmp(e[p].y)?(b[1]=e[l].add(e[p]),b[2]=e[l].toJ().mixedAdd(e[p].neg())):0===e[l].y.cmp(e[p].y.redNeg())?(b[1]=e[l].toJ().mixedAdd(e[p]),b[2]=e[l].add(e[p].neg())):(b[1]=e[l].toJ().mixedAdd(e[p]),b[2]=e[l].toJ().mixedAdd(e[p].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],g=a(r[l],r[p]);c=Math.max(g[0].length,c),u[l]=new Array(c),u[p]=new Array(c);for(var m=0;m=0;h--){for(var A=0;h>=0;){var S=!0;for(m=0;m=0&&A++,w=w.dblp(A),h<0)break;for(m=0;m0?x=f[m][M-1>>1]:M<0&&(x=f[m][-M-1>>1].neg()),w="affine"===x.type?w.mixedAdd(x):w.add(x))}}for(h=0;h=Math.ceil((t.bitLength()+1)/e.step)},u.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i=0&&(a=e,s=r),n.negative&&(n=n.neg(),i=i.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:i},{a:a,b:s}]},u.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),f=i.mul(r.b),u=o.mul(n.b);return{k1:t.sub(a).sub(s),k2:f.add(u).neg()}},u.prototype.pointFromX=function(t,e){(t=new o(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},u.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},u.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},c.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(t){return t=new o(t,16),this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},c.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},c.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},c.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},c.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},c.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},a(h,s.BasePoint),u.prototype.jpoint=function(t,e,r){return new h(this,t,e,r)},h.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},h.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},h.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),s=n.redSub(i),f=o.redSub(a);if(0===s.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),c=u.redMul(s),h=n.redMul(u),d=f.redSqr().redIAdd(c).redISub(h).redISub(h),l=f.redMul(h.redISub(d)).redISub(o.redMul(c)),p=this.z.redMul(t.z).redMul(s);return this.curve.jpoint(d,l,p)},h.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),u=f.redMul(a),c=r.redMul(f),h=s.redSqr().redIAdd(u).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(h,d,l)},h.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},h.prototype.inspect=function(){return this.isInfinity()?"":""},h.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var n=r(49),i=r(16),o=r(13),a=n.base,s=r(22).utils;function f(t){a.call(this,"mont",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function u(t,e,r){a.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(e,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(f,a),t.exports=f,f.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e);return 0===n.redSqrt().redSqr().cmp(n)},o(u,a.BasePoint),f.prototype.decodePoint=function(t,e){return this.point(s.toArray(t,e),1)},f.prototype.point=function(t,e){return new u(this,t,e)},f.prototype.pointFromJSON=function(t){return u.fromJSON(this,t)},u.prototype.precompute=function(){},u.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},u.fromJSON=function(t,e){return new u(t,e[0],e[1]||t.one)},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},u.prototype.dbl=function(){var t=this.x.redAdd(this.z).redSqr(),e=this.x.redSub(this.z).redSqr(),r=t.redSub(e),n=t.redMul(e),i=r.redMul(e.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},u.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z).redMul(r),a=i.redMul(n),s=e.z.redMul(o.redAdd(a).redSqr()),f=e.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,f)},u.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=[];0!==e.cmpn(0);e.iushrn(1))i.push(e.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},u.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},u.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},u.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var n=r(49),i=r(22),o=r(16),a=r(13),s=n.base,f=i.utils.assert;function u(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,s.call(this,"edwards",t),this.a=new o(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new o(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new o(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),f(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function c(t,e,r,n,i){s.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new o(e,16),this.y=new o(r,16),this.z=n?new o(n,16):this.curve.one,this.t=i&&new o(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}a(u,s),t.exports=u,u.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},u.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},u.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},u.prototype.pointFromX=function(t,e){(t=new o(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(i.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var f=s.fromRed().isOdd();return(e&&!f||!e&&f)&&(s=s.redNeg()),this.point(t,s)},u.prototype.pointFromY=function(t,e){(t=new o(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.c2),i=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(i.redInvm());if(0===a.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==e&&(s=s.redNeg()),this.point(s,t)},u.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},a(c,s.BasePoint),u.prototype.pointFromJSON=function(t){return c.fromJSON(this,t)},u.prototype.point=function(t,e,r,n){return new c(this,t,e,r,n)},c.fromJSON=function(t,e){return new c(t,e[0],e[1],e[2])},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},c.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),s=n.redSub(e),f=i.redMul(a),u=o.redMul(s),c=i.redMul(s),h=a.redMul(o);return this.curve.point(f,u,h,c)},c.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(u=this.curve._mulA(i)).redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),e=a.redMul(u.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),f=a.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(f),e=a.redMul(u.redSub(o)),r=a.redMul(f)}}else{var u=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),f=u.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(u)).redMul(f),e=this.curve._mulC(u).redMul(i.redISub(o)),r=u.redMul(f)}return this.curve.point(t,e,r)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),s=i.redAdd(n),f=r.redAdd(e),u=o.redMul(a),c=s.redMul(f),h=o.redMul(f),d=a.redMul(s);return this.curve.point(u,c,d,h)},c.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),s=this.curve.d.redMul(o).redMul(a),f=i.redSub(s),u=i.redAdd(s),c=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),h=n.redMul(f).redMul(c);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=f.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(f).redMul(u)),this.curve.point(h,e,r)},c.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},c.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},c.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},c.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},c.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},c.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},function(t,e,r){"use strict";var n,i=e,o=r(67),a=r(22),s=a.utils.assert;function f(t){"short"===t.type?this.curve=new a.curve.short(t):"edwards"===t.type?this.curve=new a.curve.edwards(t):this.curve=new a.curve.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function u(t,e){Object.defineProperty(i,t,{configurable:!0,enumerable:!0,get:function(){var r=new f(e);return Object.defineProperty(i,t,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=f,u("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),u("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),u("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),u("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),u("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),u("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),u("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{n=r(179)}catch(t){n=void 0}u("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",n]})},function(t,e,r){"use strict";e.sha1=r(174),e.sha224=r(175),e.sha256=r(88),e.sha384=r(176),e.sha512=r(89)},function(t,e,r){"use strict";var n=r(27),i=r(45),o=r(87),a=n.rotl32,s=n.sum32,f=n.sum32_5,u=o.ft_1,c=i.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function d(){if(!(this instanceof d))return new d;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(d,c),t.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;nthis.blockSize&&(t=(new this.Hash).update(t).digest()),i(t.length<=this.blockSize);for(var e=t.length;e0))return s.iaddn(1),this.keyFromPrivate(s)}},u.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},u.prototype.sign=function(t,e,r,o){"object"==typeof r&&(o=r,r=null),o||(o={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new n(t,16));for(var a=this.n.byteLength(),s=e.getPrivate().toArray("be",a),u=t.toArray("be",a),c=new i({hash:this.hash,entropy:s,nonce:u,pers:o.pers,persEnc:o.persEnc||"utf8"}),h=this.n.sub(new n(1)),d=0;;d++){var l=o.k?o.k(d):new n(c.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(h)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),y=b.umod(this.n);if(0!==y.cmpn(0)){var g=l.invm(this.n).mul(y.mul(e.getPrivate()).iadd(t));if(0!==(g=g.umod(this.n)).cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(y)?2:0);return o.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g),m^=1),new f({r:y,s:g,recoveryParam:m})}}}}}},u.prototype.verify=function(t,e,r,i){t=this._truncateToN(new n(t,16)),r=this.keyFromPublic(r,i);var o=(e=new f(e,"hex")).r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,u=a.invm(this.n),c=u.mul(t).umod(this.n),h=u.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(c,r.getPublic(),h)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(c,r.getPublic(),h)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},u.prototype.recoverPubKey=function(t,e,r,i){a((3&r)===r,"The recovery param is more than two bits"),e=new f(e,i);var o=this.n,s=new n(t),u=e.r,c=e.s,h=1&r,d=r>>1;if(u.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");u=d?this.curve.pointFromX(u.add(this.curve.n),h):this.curve.pointFromX(u,h);var l=e.r.invm(o),p=o.sub(s).mul(l).umod(o),b=c.mul(l).umod(o);return this.g.mulAdd(p,u,b)},u.prototype.getKeyRecoveryParam=function(t,e,r,n){if(null!==(e=new f(e,n)).recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var n=r(67),i=r(86),o=r(37);function a(t){if(!(this instanceof a))return new a(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=i.toArray(t.entropy,t.entropyEnc||"hex"),r=i.toArray(t.nonce,t.nonceEnc||"hex"),n=i.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,n)}t.exports=a,a.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this._reseed=1},a.prototype.generate=function(t,e,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var o=[];o.length"}},function(t,e,r){"use strict";var n=r(16),i=r(22).utils,o=i.assert;function a(t,e){if(t instanceof a)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new n(t.r,16),this.s=new n(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function s(){this.place=0}function f(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=a,a.prototype._importDER=function(t,e){t=i.toArray(t,e);var r=new s;if(48!==t[r.place++])return!1;if(f(t,r)+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var o=f(t,r),a=t.slice(r.place,o+r.place);if(r.place+=o,2!==t[r.place++])return!1;var u=f(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new n(a),this.s=new n(c),this.recoveryParam=null,!0},a.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=u(e),r=u(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];c(n,e.length),(n=n.concat(e)).push(2),c(n,r.length);var o=n.concat(r),a=[48];return c(a,o.length),a=a.concat(o),i.encode(a,t)}},function(t,e,r){"use strict";var n=r(67),i=r(22),o=i.utils,a=o.assert,s=o.parseBytes,f=r(185),u=r(186);function c(t){if(a("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof c))return new c(t);t=i.curves[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=n.sha512}t.exports=c,c.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},c.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S());return e.R().add(n.pub().mul(i)).eq(o)},c.prototype.hashInt=function(){for(var t=this.hash(),e=0;e=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(s=c[u],!v(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function _(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function w(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function E(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&y(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!t&&i&&!r;if((!t&&a.isError(i)&&o&&w(i,r)||s)&&y(i,r,"Got unwanted exception"+n),t&&i&&r&&!w(i,r)||!t&&i)throw i}d.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=function(t){return b(g(t.actual),128)+" "+t.operator+" "+b(g(t.expected),128)}(this),this.generatedMessage=!0);var e=t.stackStartFunction||y;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=p(e),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},a.inherits(d.AssertionError,Error),d.fail=y,d.ok=m,d.equal=function(t,e,r){t!=e&&y(t,e,r,"==",d.equal)},d.notEqual=function(t,e,r){t==e&&y(t,e,r,"!=",d.notEqual)},d.deepEqual=function(t,e,r){v(t,e,!1)||y(t,e,r,"deepEqual",d.deepEqual)},d.deepStrictEqual=function(t,e,r){v(t,e,!0)||y(t,e,r,"deepStrictEqual",d.deepStrictEqual)},d.notDeepEqual=function(t,e,r){v(t,e,!1)&&y(t,e,r,"notDeepEqual",d.notDeepEqual)},d.notDeepStrictEqual=function t(e,r,n){v(e,r,!0)&&y(e,r,n,"notDeepStrictEqual",t)},d.strictEqual=function(t,e,r){t!==e&&y(t,e,r,"===",d.strictEqual)},d.notStrictEqual=function(t,e,r){t===e&&y(t,e,r,"!==",d.notStrictEqual)},d.throws=function(t,e,r){E(!0,t,e,r)},d.doesNotThrow=function(t,e,r){E(!1,t,e,r)},d.ifError=function(t){if(t)throw t},d.strict=n((function t(e,r){e||y(e,!0,r,"==",t)}),d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var S=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,r(7))},function(t,e,r){var n=r(114),i=r(227),o=r(228),a="[object Null]",s="[object Undefined]",f=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:a:f&&f in Object(t)?i(t):o(t)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return function(){if(null!==t){var e=t;t=null,e.apply(this,arguments)}}},t.exports=e.default},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return function(){if(null===t)throw new Error("Callback was already called.");var e=t;t=null,e.apply(this,arguments)}},t.exports=e.default},function(t,e,r){const n=r(52);function i(){}t.exports=i,i.prototype.setEngine=function(t){const e=this;e.engine||(e.engine=t,t.on("block",(function(t){e.currentBlock=t})),t.on("start",(function(){e.start()})),t.on("stop",(function(){e.stop()})))},i.prototype.handleRequest=function(t,e,r){throw new Error("Subproviders should override `handleRequest`.")},i.prototype.emitPayload=function(t,e){this.engine.sendAsync(n(t),e)},i.prototype.stop=function(){},i.prototype.start=function(){}},function(t,e,r){t.exports=r(270)},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=r(284),i=r(74),o=r(38),a=r(57),s=r(53);e.keccak=function(e,r){return void 0===r&&(r=256),e="string"!=typeof e||o.isHexString(e)?s.toBuffer(e):t.from(e,"utf8"),r||(r=256),n("keccak"+r).update(e).digest()},e.keccak256=function(t){return e.keccak(t)},e.sha256=function(t){return t=s.toBuffer(t),i("sha256").update(t).digest()},e.ripemd160=function(t,e){t=s.toBuffer(t);var r=i("rmd160").update(t).digest();return!0===e?s.setLength(r,32):r},e.rlphash=function(t){return e.keccak(a.encode(t))}}).call(this,r(6).Buffer)},,,,,,,,,,function(t){t.exports=JSON.parse('{"COMPRESSED_TYPE_INVALID":"compressed should be a boolean","EC_PRIVATE_KEY_TYPE_INVALID":"private key should be a Buffer","EC_PRIVATE_KEY_LENGTH_INVALID":"private key length is invalid","EC_PRIVATE_KEY_RANGE_INVALID":"private key range is invalid","EC_PRIVATE_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting private key is invalid","EC_PRIVATE_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PRIVATE_KEY_EXPORT_DER_FAIL":"couldn\'t export to DER format","EC_PRIVATE_KEY_IMPORT_DER_FAIL":"couldn\'t import from DER format","EC_PUBLIC_KEYS_TYPE_INVALID":"public keys should be an Array","EC_PUBLIC_KEYS_LENGTH_INVALID":"public keys Array should have at least 1 element","EC_PUBLIC_KEY_TYPE_INVALID":"public key should be a Buffer","EC_PUBLIC_KEY_LENGTH_INVALID":"public key length is invalid","EC_PUBLIC_KEY_PARSE_FAIL":"the public key could not be parsed or is invalid","EC_PUBLIC_KEY_CREATE_FAIL":"private was invalid, try again","EC_PUBLIC_KEY_TWEAK_ADD_FAIL":"tweak out of range or resulting public key is invalid","EC_PUBLIC_KEY_TWEAK_MUL_FAIL":"tweak out of range","EC_PUBLIC_KEY_COMBINE_FAIL":"the sum of the public keys is not valid","ECDH_FAIL":"scalar was invalid (zero or overflow)","ECDSA_SIGNATURE_TYPE_INVALID":"signature should be a Buffer","ECDSA_SIGNATURE_LENGTH_INVALID":"signature length is invalid","ECDSA_SIGNATURE_PARSE_FAIL":"couldn\'t parse signature","ECDSA_SIGNATURE_PARSE_DER_FAIL":"couldn\'t parse DER signature","ECDSA_SIGNATURE_SERIALIZE_DER_FAIL":"couldn\'t serialize signature to DER format","ECDSA_SIGN_FAIL":"nonce generation function failed or private key is invalid","ECDSA_RECOVER_FAIL":"couldn\'t recover public key from signature","MSG32_TYPE_INVALID":"message should be a Buffer","MSG32_LENGTH_INVALID":"message length is invalid","OPTIONS_TYPE_INVALID":"options should be an Object","OPTIONS_DATA_TYPE_INVALID":"options.data should be a Buffer","OPTIONS_DATA_LENGTH_INVALID":"options.data length is invalid","OPTIONS_NONCEFN_TYPE_INVALID":"options.noncefn should be a Function","RECOVERY_ID_TYPE_INVALID":"recovery should be a Number","RECOVERY_ID_VALUE_INVALID":"recovery should have value between -1 and 4","TWEAK_TYPE_INVALID":"tweak should be a Buffer","TWEAK_LENGTH_INVALID":"tweak length is invalid"}')},function(t,e,r){"use strict";var n=r(14).Buffer,i=r(180).Transform;function o(t){i.call(this),this._block=n.allocUnsafe(t),this._blockSize=t,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}r(11)(o,i),o.prototype._transform=function(t,e,r){var n=null;try{this.update(t,e)}catch(t){n=t}r(n)},o.prototype._flush=function(t){var e=null;try{this.push(this.digest())}catch(t){e=t}t(e)},o.prototype.update=function(t,e){if(function(t,e){if(!n.isBuffer(t)&&"string"!=typeof t)throw new TypeError(e+" must be a string or a buffer")}(t,"Data"),this._finalized)throw new Error("Digest already called");n.isBuffer(t)||(t=n.from(t,e));for(var r=this._block,i=0;this._blockOffset+t.length-i>=this._blockSize;){for(var o=this._blockOffset;o0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},function(t,e,r){"use strict";(function(e,n){var i;t.exports=x,x.ReadableState=A;r(15).EventEmitter;var o=function(t,e){return t.listeners(e).length},a=r(99),s=r(6).Buffer,f=e.Uint8Array||function(){};var u,c=r(181);u=c&&c.debuglog?c.debuglog("stream"):function(){};var h,d,l,p=r(182),b=r(100),g=r(101).getHighWaterMark,y=r(43).codes,m=y.ERR_INVALID_ARG_TYPE,v=y.ERR_STREAM_PUSH_AFTER_EOF,_=y.ERR_METHOD_NOT_IMPLEMENTED,w=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(11)(x,a);var E=b.errorOrDestroy,S=["error","close","destroy","pause","resume"];function A(t,e,n){i=i||r(44),t=t||{},"boolean"!=typeof n&&(n=e instanceof i),this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=g(this,t,"readableHighWaterMark",n),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(h||(h=r(26).StringDecoder),this.decoder=new h(t.encoding),this.encoding=t.encoding)}function x(t){if(i=i||r(44),!(this instanceof x))return new x(t);var e=this instanceof i;this._readableState=new A(t,this,e),this.readable=!0,t&&("function"==typeof t.read&&(this._read=t.read),"function"==typeof t.destroy&&(this._destroy=t.destroy)),a.call(this)}function M(t,e,r,n,i){u("readableAddChunk",e);var o,a=t._readableState;if(null===e)a.reading=!1,function(t,e){if(u("onEofChunk"),e.ended)return;if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?R(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,L(t)))}(t,a);else if(i||(o=function(t,e){var r;n=e,s.isBuffer(n)||n instanceof f||"string"==typeof e||void 0===e||t.objectMode||(r=new m("chunk",["string","Buffer","Uint8Array"],e));var n;return r}(a,e)),o)E(t,o);else if(a.objectMode||e&&e.length>0)if("string"==typeof e||a.objectMode||Object.getPrototypeOf(e)===s.prototype||(e=function(t){return s.from(t)}(e)),n)a.endEmitted?E(t,new w):k(t,a,e,!0);else if(a.ended)E(t,new v);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!r?(e=a.decoder.write(e),a.objectMode||0!==e.length?k(t,a,e,!1):P(t,a)):k(t,a,e,!1)}else n||(a.reading=!1,P(t,a));return!a.ended&&(a.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=I?t=I:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function R(t){var e=t._readableState;u("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(u("emitReadable",e.flowing),e.emittedReadable=!0,n.nextTick(L,t))}function L(t){var e=t._readableState;u("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,j(t)}function P(t,e){e.readingMore||(e.readingMore=!0,n.nextTick(B,t,e))}function B(t,e){for(;!e.reading&&!e.ended&&(e.length0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function O(t){u("readable nexttick read 0"),t.read(0)}function N(t,e){u("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),j(t),e.flowing&&!e.reading&&t.read(0)}function j(t){var e=t._readableState;for(u("flow",e.flowing);e.flowing&&null!==t.read(););}function D(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r}function q(t){var e=t._readableState;u("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,n.nextTick(z,e,t))}function z(t,e){if(u("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&0===t.length&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}function U(t,e){for(var r=0,n=t.length;r=e.highWaterMark:e.length>0)||e.ended))return u("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?q(this):R(this),null;if(0===(t=T(t,e))&&e.ended)return 0===e.length&&q(this),null;var n,i=e.needReadable;return u("need readable",i),(0===e.length||e.length-t0?D(t,e):null)?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&q(this)),null!==n&&this.emit("data",n),n},x.prototype._read=function(t){E(this,new _("_read()"))},x.prototype.pipe=function(t,e){var r=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=t;break;case 1:i.pipes=[i.pipes,t];break;default:i.pipes.push(t)}i.pipesCount+=1,u("pipe count=%d opts=%j",i.pipesCount,e);var a=(!e||!1!==e.end)&&t!==n.stdout&&t!==n.stderr?f:g;function s(e,n){u("onunpipe"),e===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,u("cleanup"),t.removeListener("close",p),t.removeListener("finish",b),t.removeListener("drain",c),t.removeListener("error",l),t.removeListener("unpipe",s),r.removeListener("end",f),r.removeListener("end",g),r.removeListener("data",d),h=!0,!i.awaitDrain||t._writableState&&!t._writableState.needDrain||c())}function f(){u("onend"),t.end()}i.endEmitted?n.nextTick(a):r.once("end",a),t.on("unpipe",s);var c=function(t){return function(){var e=t._readableState;u("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&o(t,"data")&&(e.flowing=!0,j(t))}}(r);t.on("drain",c);var h=!1;function d(e){u("ondata");var n=t.write(e);u("dest.write",n),!1===n&&((1===i.pipesCount&&i.pipes===t||i.pipesCount>1&&-1!==U(i.pipes,t))&&!h&&(u("false write response, pause",i.awaitDrain),i.awaitDrain++),r.pause())}function l(e){u("onerror",e),g(),t.removeListener("error",l),0===o(t,"error")&&E(t,e)}function p(){t.removeListener("finish",b),g()}function b(){u("onfinish"),t.removeListener("close",p),g()}function g(){u("unpipe"),r.unpipe(t)}return r.on("data",d),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",l),t.once("close",p),t.once("finish",b),t.emit("pipe",r),i.flowing||(u("pipe resume"),r.resume()),t},x.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var n=e.pipes,i=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o0,!1!==i.flowing&&this.resume()):"readable"===t&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,u("on readable",i.length,i.reading),i.length?R(this):i.reading||n.nextTick(O,this))),r},x.prototype.addListener=x.prototype.on,x.prototype.removeListener=function(t,e){var r=a.prototype.removeListener.call(this,t,e);return"readable"===t&&n.nextTick(C,this),r},x.prototype.removeAllListeners=function(t){var e=a.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||n.nextTick(C,this),e},x.prototype.resume=function(){var t=this._readableState;return t.flowing||(u("resume"),t.flowing=!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled=!0,n.nextTick(N,t,e))}(this,t)),t.paused=!1,this},x.prototype.pause=function(){return u("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(u("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},x.prototype.wrap=function(t){var e=this,r=this._readableState,n=!1;for(var i in t.on("end",(function(){if(u("wrapped end"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t)}e.push(null)})),t.on("data",(function(i){(u("wrapped data"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i)||(r.objectMode||i&&i.length)&&(e.push(i)||(n=!0,t.pause()))})),t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));for(var o=0;o-1))throw new w(t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(x.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(x.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),x.prototype._write=function(t,e,r){r(new b("_write()"))},x.prototype._writev=null,x.prototype.end=function(t,e,r){var i=this._writableState;return"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||function(t,e,r){e.ending=!0,L(t,e),r&&(e.finished?n.nextTick(r):t.once("finish",r));e.ended=!0,t.writable=!1}(this,i,r),this},Object.defineProperty(x.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(x.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),x.prototype.destroy=h.destroy,x.prototype._undestroy=h.undestroy,x.prototype._destroy=function(t,e){e(t)}}).call(this,r(7),r(12))},function(t,e,r){"use strict";t.exports=c;var n=r(43).codes,i=n.ERR_METHOD_NOT_IMPLEMENTED,o=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,f=r(44);function u(t,e){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit("error",new o);r.writechunk=null,r.writecb=null,null!=e&&this.push(e),n(t);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function d(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function l(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}n(f,i),f.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,p=0|this._f,b=0|this._g,g=0|this._h,y=0;y<16;++y)r[y]=t.readInt32BE(4*y);for(;y<64;++y)r[y]=0|(((e=r[y-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+r[y-7]+l(r[y-15])+r[y-16];for(var m=0;m<64;++m){var v=g+d(f)+u(f,p,b)+a[m]+r[m]|0,_=h(n)+c(n,i,o)|0;g=b,b=p,p=f,f=s+v|0,s=o,o=i,i=n,n=v+_|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=g+this._h|0},f.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=f},function(t,e,r){var n=r(11),i=r(45),o=r(14).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function f(){this.init(),this._w=s,i.call(this,128,112)}function u(t,e,r){return r^t&(e^r)}function c(t,e,r){return t&e|r&(t|e)}function h(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function d(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function l(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function b(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function g(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function y(t,e){return t>>>0>>0?1:0}n(f,i),f.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},f.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,f=0|this._fh,m=0|this._gh,v=0|this._hh,_=0|this._al,w=0|this._bl,E=0|this._cl,S=0|this._dl,A=0|this._el,x=0|this._fl,M=0|this._gl,k=0|this._hl,I=0;I<32;I+=2)e[I]=t.readInt32BE(4*I),e[I+1]=t.readInt32BE(4*I+4);for(;I<160;I+=2){var T=e[I-30],R=e[I-30+1],L=l(T,R),P=p(R,T),B=b(T=e[I-4],R=e[I-4+1]),C=g(R,T),O=e[I-14],N=e[I-14+1],j=e[I-32],D=e[I-32+1],q=P+N|0,z=L+O+y(q,P)|0;z=(z=z+B+y(q=q+C|0,C)|0)+j+y(q=q+D|0,D)|0,e[I]=z,e[I+1]=q}for(var U=0;U<160;U+=2){z=e[U],q=e[U+1];var F=c(r,n,i),K=c(_,w,E),H=h(r,_),V=h(_,r),Y=d(s,A),W=d(A,s),G=a[U],Z=a[U+1],J=u(s,f,m),X=u(A,x,M),$=k+W|0,Q=v+Y+y($,k)|0;Q=(Q=(Q=Q+J+y($=$+X|0,X)|0)+G+y($=$+Z|0,Z)|0)+z+y($=$+q|0,q)|0;var tt=V+K|0,et=H+F+y(tt,V)|0;v=m,k=M,m=f,M=x,f=s,x=A,s=o+Q+y(A=S+$|0,S)|0,o=i,S=E,i=n,E=w,n=r,w=_,r=Q+et+y(_=$+tt|0,$)|0}this._al=this._al+_|0,this._bl=this._bl+w|0,this._cl=this._cl+E|0,this._dl=this._dl+S|0,this._el=this._el+A|0,this._fl=this._fl+x|0,this._gl=this._gl+M|0,this._hl=this._hl+k|0,this._ah=this._ah+r+y(this._al,_)|0,this._bh=this._bh+n+y(this._bl,w)|0,this._ch=this._ch+i+y(this._cl,E)|0,this._dh=this._dh+o+y(this._dl,S)|0,this._eh=this._eh+s+y(this._el,A)|0,this._fh=this._fh+f+y(this._fl,x)|0,this._gh=this._gh+m+y(this._gl,M)|0,this._hh=this._hh+v+y(this._hl,k)|0},f.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=f},function(t,e,r){"use strict";var n=e;function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r>8,a=255&i;o?r.push(o,a):r.push(a)}return r},n.zero2=i,n.toHex=o,n.encode=function(t,e){return"hex"===e?o(t):t}},function(t,e,r){var n;function i(t){this.rand=t}if(t.exports=function(t){return n||(n=new i(null)),n.generate(t)},t.exports.Rand=i,i.prototype.generate=function(t){return this._rand(t)},i.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var e=new Uint8Array(t),r=0;r>>3},e.g1_256=function(t){return n(t,17)^n(t,19)^t>>>10}},function(t,e,r){"use strict";var n=r(29),i=r(50),o=r(109),a=r(37),s=n.sum32,f=n.sum32_4,u=n.sum32_5,c=o.ch32,h=o.maj32,d=o.s0_256,l=o.s1_256,p=o.g0_256,b=o.g1_256,g=i.BlockHash,y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function m(){if(!(this instanceof m))return new m;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=y,this.W=new Array(64)}n.inherits(m,g),t.exports=m,m.blockSize=512,m.outSize=256,m.hmacStrength=192,m.padLength=64,m.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n-1&&t%1==0&&t<=r}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={},t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return function(e,r,f){if(f=(0,i.default)(f||n.default),t<=0||!e)return f(null);var u=(0,o.default)(e),c=!1,h=0,d=!1;function l(t,e){if(h-=1,t)c=!0,f(t);else{if(e===s.default||c&&h<=0)return c=!0,f(null);d||p()}}function p(){for(d=!0;h0,"Expected a maximum number of retry greater than 0 but got %s.",t),this.maxNumberOfRetry_=t},o.prototype.backoff=function(t){i.checkState(-1===this.timeoutID_,"Backoff in progress."),this.backoffNumber_===this.maxNumberOfRetry_?(this.emit("fail",t),this.reset()):(this.backoffDelay_=this.backoffStrategy_.next(),this.timeoutID_=setTimeout(this.handlers.backoff,this.backoffDelay_),this.emit("backoff",this.backoffNumber_,this.backoffDelay_,t))},o.prototype.onBackoff_=function(){this.timeoutID_=-1,this.emit("ready",this.backoffNumber_,this.backoffDelay_),this.backoffNumber_++},o.prototype.reset=function(){this.backoffNumber_=0,this.backoffStrategy_.reset(),clearTimeout(this.timeoutID_),this.timeoutID_=-1},t.exports=o},function(t,e,r){r(15),r(23);function n(t){return null!=t}function i(t){if(n((t=t||{}).initialDelay)&&t.initialDelay<1)throw new Error("The initial timeout must be greater than 0.");if(n(t.maxDelay)&&t.maxDelay<1)throw new Error("The maximal timeout must be greater than 0.");if(this.initialDelay_=t.initialDelay||100,this.maxDelay_=t.maxDelay||1e4,this.maxDelay_<=this.initialDelay_)throw new Error("The maximal backoff delay must be greater than the initial backoff delay.");if(n(t.randomisationFactor)&&(t.randomisationFactor<0||t.randomisationFactor>1))throw new Error("The randomisation factor must be between 0 and 1.");this.randomisationFactor_=t.randomisationFactor||0}i.prototype.getMaxDelay=function(){return this.maxDelay_},i.prototype.getInitialDelay=function(){return this.initialDelay_},i.prototype.next=function(){var t=this.next_(),e=1+Math.random()*this.randomisationFactor_;return Math.round(t*e)},i.prototype.next_=function(){throw new Error("BackoffStrategy.next_() unimplemented.")},i.prototype.reset=function(){this.reset_()},i.prototype.reset_=function(){throw new Error("BackoffStrategy.reset_() unimplemented.")},t.exports=i},function(t,e,r){var n=r(23),i=r(124);function o(t){i.call(this,t),this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay()}n.inherits(o,i),o.prototype.next_=function(){var t=Math.min(this.nextBackoffDelay_,this.getMaxDelay());return this.nextBackoffDelay_+=this.backoffDelay_,this.backoffDelay_=t,t},o.prototype.reset_=function(){this.nextBackoffDelay_=this.getInitialDelay(),this.backoffDelay_=0},t.exports=o},,,,,,function(t,e,r){const n=r(15).EventEmitter,i=r(23).inherits,o=r(73),a=r(219),s=r(224),f=r(252),u=r(255),c=(r(256),r(52),function(){});function h(t){const e=this;n.call(e),e.setMaxListeners(30),t=t||{};const r={sendAsync:e._handleAsync.bind(e)},i=t.blockTrackerProvider||r;e._blockTracker=t.blockTracker||new a({provider:i,pollingInterval:t.pollingInterval||4e3}),e._blockTracker.on("block",t=>{const r=function(t){return{number:o.toBuffer(t.number),hash:o.toBuffer(t.hash),parentHash:o.toBuffer(t.parentHash),nonce:o.toBuffer(t.nonce),mixHash:o.toBuffer(t.mixHash),sha3Uncles:o.toBuffer(t.sha3Uncles),logsBloom:o.toBuffer(t.logsBloom),transactionsRoot:o.toBuffer(t.transactionsRoot),stateRoot:o.toBuffer(t.stateRoot),receiptsRoot:o.toBuffer(t.receiptRoot||t.receiptsRoot),miner:o.toBuffer(t.miner),difficulty:o.toBuffer(t.difficulty),totalDifficulty:o.toBuffer(t.totalDifficulty),size:o.toBuffer(t.size),extraData:o.toBuffer(t.extraData),gasLimit:o.toBuffer(t.gasLimit),gasUsed:o.toBuffer(t.gasUsed),timestamp:o.toBuffer(t.timestamp),transactions:t.transactions}}(t);e._setCurrentBlock(r)}),e._blockTracker.on("block",e.emit.bind(e,"rawBlock")),e._blockTracker.on("sync",e.emit.bind(e,"sync")),e._blockTracker.on("latest",e.emit.bind(e,"latest")),e._ready=new u,e._blockTracker.once("block",()=>{e._ready.go()}),e.currentBlock=null,e._providers=[]}t.exports=h,i(h,n),h.prototype.start=function(t=c){this._blockTracker.start().then(t).catch(t),this._running=!0,this.emit("start")},h.prototype.stop=function(){this._blockTracker.stop(),this._running=!1,this.emit("stop")},h.prototype.isRunning=function(){return this._running},h.prototype.addProvider=function(t,e){const r=this;"number"==typeof e?r._providers.splice(e,0,t):r._providers.push(t),t.setEngine(this)},h.prototype.removeProvider=function(t){const e=this._providers.indexOf(t);if(e<0)throw new Error("Provider not found.");this._providers.splice(e,1)},h.prototype.send=function(t){throw new Error("Web3ProviderEngine does not support synchronous requests.")},h.prototype.sendAsync=function(t,e){const r=this;r._ready.await((function(){Array.isArray(t)?s(t,r._handleAsync.bind(r),e):r._handleAsync(t,e)}))},h.prototype._handleAsync=function(t,e){var r=this,n=-1,i=null,o=null,a=[];function s(r,n){o=r,i=n,f(a,(function(t,e){t?t(o,i,e):e()}),(function(){var r={id:t.id,jsonrpc:t.jsonrpc,result:i};null!=o?(r.error={message:o.stack||o.message||o,code:-32e3},e(o,r)):e(null,r)}))}!function e(i){n+=1;a.unshift(i);if(n>=r._providers.length)s(new Error('Request for method "'+t.method+'" not handled by any subprovider. Please check your subprovider configuration to ensure this method is handled.'));else try{r._providers[n].handleRequest(t,e,s)}catch(t){s(t)}}()},h.prototype._setCurrentBlock=function(t){this.currentBlock=t,this.emit("block",t)}},function(t,e,r){(function(e){const n=e.browser?r(262):r(266),i=r(23).inherits,o=r(52),a=r(84),s=r(267);function f(t){this.rpcUrl=t.rpcUrl}t.exports=f,i(f,a),f.prototype.handleRequest=function(t,e,r){const i=this.rpcUrl;let a=o(t);n({uri:i,method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(a),rejectUnauthorized:!1,timeout:2e4},(function(t,e,n){if(t)return r(new s.InternalError(t));switch(e.statusCode){case 405:return r(new s.MethodNotFound);case 504:return function(){let t="Gateway timeout. The request took too long to process. ";t+="This can happen when querying logs over too wide a block range.";const e=new Error("Gateway timeout. The request took too long to process. This can happen when querying logs over too wide a block range.");return r(new s.InternalError(e))}();default:if(200!=e.statusCode)return r(new s.InternalError(e.body))}let i;try{i=JSON.parse(n)}catch(t){return console.error(t.stack),r(new s.InternalError(t))}if(i.error)return r(i.error);r(null,i.result)}))}}).call(this,r(12))},function(t,e,r){(function(e){const n=r(269),i=r(15),o=(r(23).inherits,e.WebSocket||r(274)),a=r(84),s=r(52);class f extends a{constructor({rpcUrl:t,debug:e,origin:r}){super(),i.call(this),Object.defineProperties(this,{_backoff:{value:n.exponential({randomisationFactor:.2,maxDelay:5e3})},_connectTime:{value:null,writable:!0},_log:{value:e?(...t)=>console.info.apply(console,["[WSProvider]",...t]):()=>{}},_origin:{value:r},_pendingRequests:{value:new Map},_socket:{value:null,writable:!0},_unhandledRequests:{value:[]},_url:{value:t}}),this._handleSocketClose=this._handleSocketClose.bind(this),this._handleSocketMessage=this._handleSocketMessage.bind(this),this._handleSocketOpen=this._handleSocketOpen.bind(this),this._backoff.on("ready",()=>{this._openSocket()}),this._openSocket()}handleRequest(t,e,r){if(!this._socket||this._socket.readyState!==o.OPEN)return this._unhandledRequests.push(Array.from(arguments)),void this._log("Socket not open. Request queued.");this._pendingRequests.set(t.id,[t,r]);const n=s(t);delete n.origin,this._socket.send(JSON.stringify(n)),this._log(`Sent: ${n.method} #${n.id}`)}_handleSocketClose({reason:t,code:e}){this._log(`Socket closed, code ${e} (${t||"no reason"})`),this._connectTime&&Date.now()-this._connectTime>5e3&&this._backoff.reset(),this._socket.removeEventListener("close",this._handleSocketClose),this._socket.removeEventListener("message",this._handleSocketMessage),this._socket.removeEventListener("open",this._handleSocketOpen),this._socket=null,this._backoff.backoff()}_handleSocketMessage(t){let e;try{e=JSON.parse(t.data)}catch(t){return void this._log("Received a message that is not valid JSON:",e)}if(void 0===e.id)return this.emit("data",null,e);if(!this._pendingRequests.has(e.id))return;const[r,n]=this._pendingRequests.get(e.id);if(this._pendingRequests.delete(e.id),this._log(`Received: ${r.method} #${e.id}`),e.error)return n(new Error(e.error.message));n(null,e.result)}_handleSocketOpen(){this._log("Socket open."),this._connectTime=Date.now(),this._pendingRequests.forEach(([t,e])=>{this._unhandledRequests.push([t,null,e])}),this._pendingRequests.clear(),this._unhandledRequests.splice(0,this._unhandledRequests.length).forEach(t=>{this.handleRequest.apply(this,t)})}_openSocket(){this._log("Opening socket..."),this._socket=new o(this._url,[],this._origin?{headers:{origin:this._origin}}:{}),this._socket.addEventListener("close",this._handleSocketClose),this._socket.addEventListener("message",this._handleSocketMessage),this._socket.addEventListener("open",this._handleSocketOpen)}}Object.assign(f.prototype,i.prototype),t.exports=f}).call(this,r(7))},function(t,e,r){const n=r(275),i=r(276),o=r(23).inherits,a=r(73),s=r(278),f=r(58),u=r(292),c=r(84),h=r(293),d=/^[0-9A-Fa-f]+$/g;function l(t){this.nonceLock=u(1),t.getAccounts&&(this.getAccounts=t.getAccounts),t.processTransaction&&(this.processTransaction=t.processTransaction),t.processMessage&&(this.processMessage=t.processMessage),t.processPersonalMessage&&(this.processPersonalMessage=t.processPersonalMessage),t.processTypedMessage&&(this.processTypedMessage=t.processTypedMessage),this.approveTransaction=t.approveTransaction||this.autoApprove,this.approveMessage=t.approveMessage||this.autoApprove,this.approvePersonalMessage=t.approvePersonalMessage||this.autoApprove,this.approveTypedMessage=t.approveTypedMessage||this.autoApprove,t.signTransaction&&(this.signTransaction=t.signTransaction||g("signTransaction")),t.signMessage&&(this.signMessage=t.signMessage||g("signMessage")),t.signPersonalMessage&&(this.signPersonalMessage=t.signPersonalMessage||g("signPersonalMessage")),t.signTypedMessage&&(this.signTypedMessage=t.signTypedMessage||g("signTypedMessage")),t.recoverPersonalSignature&&(this.recoverPersonalSignature=t.recoverPersonalSignature),t.publishTransaction&&(this.publishTransaction=t.publishTransaction),this.estimateGas=t.estimateGas||this.estimateGas,this.getGasPrice=t.getGasPrice||this.getGasPrice}function p(t){return t.toLowerCase()}function b(t){return"string"==typeof t&&("0x"===t.slice(0,2)&&t.slice(2).match(d))}function g(t){return function(e,r){r(new Error('ProviderEngine - HookedWalletSubprovider - Must provide "'+t+'" fn in constructor options'))}}t.exports=l,o(l,c),l.prototype.handleRequest=function(t,e,r){const i=this;let o,s,u,c,h;switch(i._parityRequests={},i._parityRequestCount=0,t.method){case"eth_coinbase":return void i.getAccounts((function(t,e){if(t)return r(t);let n=e[0]||null;r(null,n)}));case"eth_accounts":return void i.getAccounts((function(t,e){if(t)return r(t);r(null,e)}));case"eth_sendTransaction":return o=t.params[0],void n([t=>i.validateTransaction(o,t),t=>i.processTransaction(o,t)],r);case"eth_signTransaction":return o=t.params[0],void n([t=>i.validateTransaction(o,t),t=>i.processSignTransaction(o,t)],r);case"eth_sign":return h=t.params[0],c=t.params[1],u=t.params[2]||{},s=f(u,{from:h,data:c}),void n([t=>i.validateMessage(s,t),t=>i.processMessage(s,t)],r);case"personal_sign":return function(){const e=t.params[0];if(function(t){const e=a.addHexPrefix(t);return!a.isValidAddress(e)&&b(t)}(t.params[1])&&function(t){const e=a.addHexPrefix(t);return a.isValidAddress(e)}(e)){let e="The eth_personalSign method requires params ordered ";e+="[message, address]. This was previously handled incorrectly, ",e+="and has been corrected automatically. ",e+="Please switch this param order for smooth behavior in the future.",console.warn(e),h=t.params[0],c=t.params[1]}else c=t.params[0],h=t.params[1];u=t.params[2]||{},s=f(u,{from:h,data:c}),n([t=>i.validatePersonalMessage(s,t),t=>i.processPersonalMessage(s,t)],r)}();case"personal_ecRecover":return function(){c=t.params[0];let e=t.params[1];u=t.params[2]||{},s=f(u,{sig:e,data:c}),i.recoverPersonalSignature(s,r)}();case"eth_signTypedData":return c=t.params[0],h=t.params[1],u=t.params[2]||{},s=f(u,{from:h,data:c}),void n([t=>i.validateTypedMessage(s,t),t=>i.processTypedMessage(s,t)],r);case"parity_postTransaction":return o=t.params[0],void i.parityPostTransaction(o,r);case"parity_postSign":return h=t.params[0],c=t.params[1],void i.parityPostSign(h,c,r);case"parity_checkRequest":return function(){const e=t.params[0];i.parityCheckRequest(e,r)}();case"parity_defaultAccount":return void i.getAccounts((function(t,e){if(t)return r(t);const n=e[0]||null;r(null,n)}));default:return void e()}},l.prototype.getAccounts=function(t){t(null,[])},l.prototype.processTransaction=function(t,e){const r=this;n([e=>r.approveTransaction(t,e),(t,e)=>r.checkApproval("transaction",t,e),e=>r.finalizeAndSubmitTx(t,e)],e)},l.prototype.processSignTransaction=function(t,e){const r=this;n([e=>r.approveTransaction(t,e),(t,e)=>r.checkApproval("transaction",t,e),e=>r.finalizeTx(t,e)],e)},l.prototype.processMessage=function(t,e){const r=this;n([e=>r.approveMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signMessage(t,e)],e)},l.prototype.processPersonalMessage=function(t,e){const r=this;n([e=>r.approvePersonalMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signPersonalMessage(t,e)],e)},l.prototype.processTypedMessage=function(t,e){const r=this;n([e=>r.approveTypedMessage(t,e),(t,e)=>r.checkApproval("message",t,e),e=>r.signTypedMessage(t,e)],e)},l.prototype.autoApprove=function(t,e){e(null,!0)},l.prototype.checkApproval=function(t,e,r){r(e?null:new Error("User denied "+t+" signature."))},l.prototype.parityPostTransaction=function(t,e){const r=this,n=`0x${r._parityRequestCount.toString(16)}`;r._parityRequestCount++,r.emitPayload({method:"eth_sendTransaction",params:[t]},(function(t,e){if(t)return void(r._parityRequests[n]={error:t});const i=e.result;r._parityRequests[n]=i})),e(null,n)},l.prototype.parityPostSign=function(t,e,r){const n=this,i=`0x${n._parityRequestCount.toString(16)}`;n._parityRequestCount++,n.emitPayload({method:"eth_sign",params:[t,e]},(function(t,e){if(t)return void(n._parityRequests[i]={error:t});const r=e.result;n._parityRequests[i]=r})),r(null,i)},l.prototype.parityCheckRequest=function(t,e){const r=this._parityRequests[t]||null;return r?r.error?e(r.error):void e(null,r):e(null,null)},l.prototype.recoverPersonalSignature=function(t,e){let r;try{r=s.recoverPersonalSignature(t)}catch(t){return e(t)}e(null,r)},l.prototype.validateTransaction=function(t,e){if(void 0===t.from)return e(new Error("Undefined address - from address required to sign transaction."));this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign transaction for this address: "${t.from}"`))}))},l.prototype.validateMessage=function(t,e){if(void 0===t.from)return e(new Error("Undefined address - from address required to sign message."));this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))}))},l.prototype.validatePersonalMessage=function(t,e){return void 0===t.from?e(new Error("Undefined address - from address required to sign personal message.")):void 0===t.data?e(new Error("Undefined message - message required to sign personal message.")):b(t.data)?void this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))})):e(new Error("HookedWalletSubprovider - validateMessage - message was not encoded as hex."))},l.prototype.validateTypedMessage=function(t,e){return void 0===t.from?e(new Error("Undefined address - from address required to sign typed data.")):void 0===t.data?e(new Error("Undefined data - message required to sign typed data.")):void this.validateSender(t.from,(function(r,n){return r?e(r):n?void e():e(new Error(`Unknown address - unable to sign message for this address: "${t.from}"`))}))},l.prototype.validateSender=function(t,e){if(!t)return e(null,!1);this.getAccounts((function(r,n){if(r)return e(r);const i=-1!==n.map(p).indexOf(t.toLowerCase());e(null,i)}))},l.prototype.finalizeAndSubmitTx=function(t,e){const r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,t),r.signTransaction.bind(r),r.publishTransaction.bind(r)],(function(t,n){if(r.nonceLock.leave(),t)return e(t);e(null,n)}))}))},l.prototype.finalizeTx=function(t,e){const r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,t),r.signTransaction.bind(r)],(function(n,i){if(r.nonceLock.leave(),n)return e(n);e(null,{raw:i,tx:t})}))}))},l.prototype.publishTransaction=function(t,e){this.emitPayload({method:"eth_sendRawTransaction",params:[t]},(function(t,r){if(t)return e(t);e(null,r.result)}))},l.prototype.estimateGas=function(t,e){h(this.engine,t,e)},l.prototype.getGasPrice=function(t){this.emitPayload({method:"eth_gasPrice",params:[]},(function(e,r){if(e)return t(e);t(null,r.result)}))},l.prototype.fillInTxExtras=function(t,e){const r=this,n=t.from,o={};void 0===t.gasPrice&&(o.gasPrice=r.getGasPrice.bind(r)),void 0===t.nonce&&(o.nonce=r.emitPayload.bind(r,{method:"eth_getTransactionCount",params:[n,"pending"]})),void 0===t.gas&&(o.gas=r.estimateGas.bind(r,function(t){return{from:t.from,to:t.to,value:t.value,data:t.data,gas:t.gas,gasPrice:t.gasPrice,nonce:t.nonce}}(t))),i(o,(function(r,n){if(r)return e(r);const i={};n.gasPrice&&(i.gasPrice=n.gasPrice),n.nonce&&(i.nonce=n.nonce.result),n.gas&&(i.gas=n.gas),e(null,f(t,i))}))}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,r){"use strict";r.r(e),r.d(e,"default",(function(){return R}));var n,i,o=r(8),a=r.n(o),s=r(9),f=r.n(s),u=r(10),c=r.n(u),h=r(0),d=r.n(h),l=r(1),p=r.n(l),b=r(3),g=r.n(b),y=r(4),m=r.n(y),v=r(2),_=r(131),w=r.n(_),E=r(132),S=r.n(E),A=r(133),x=r.n(A),M=r(134),k=r.n(M),I=v.SocketService,T=function(){function t(){g()(this,t),this.getAccounts=this.getAccounts.bind(this),this.signTransaction=this.signTransaction.bind(this)}return m()(t,[{key:"getAccounts",value:function(){var t=p()(d.a.mark((function t(e){var r;return d.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,I.sendApiRequest({type:"identityFromPermissions",payload:{}});case 2:return t.sent,r=i()?i().accounts.filter((function(t){return t.blockchain===v.Blockchains.ETH})).map((function(t){return t.address})):[],e(null,r),t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()},{key:"signTransaction",value:function(){var t=p()(d.a.mark((function t(e){var r,i,o,a,s;return d.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}throw Error.noNetwork();case 2:if(void 0!==e.gas&&(e.gasLimit=e.gas),e.value=e.value||"0x00",e.hasOwnProperty("data")&&(e.data="0x"+e.data),r=e.hasOwnProperty("requiredFields")?e.requiredFields:{},(e.hasOwnProperty("abi")?e.abi:null)||!e.hasOwnProperty("data")){t.next=9;break}throw Error.signatureError("no_abi","You must provide a JSON ABI along with your transaction so that users can read the contract");case 9:return i=Object.assign(e,{blockchain:v.Blockchains.ETH,network:n,requiredFields:r}),t.next=12,I.sendApiRequest({type:"requestSignature",payload:i});case 12:return o=t.sent,a=o.signatures,s=o.returnedFields,e.hasOwnProperty("fieldsCallback")&&e.fieldsCallback(s),t.abrupt("return",a[0]);case 17:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}()}]),t}(),R=function(t){function e(){return g()(this,e),a()(this,f()(e).call(this,v.Blockchains.ETH,v.PluginTypes.BLOCKCHAIN_SUPPORT))}return c()(e,t),m()(e,[{key:"setSocketService",value:function(t){I=t}},{key:"hookProvider",value:function(){throw!(1=arguments.length?void 0:arguments[1],function(t,e){n=v.Network.fromJson(t);var r="".concat(n.fullhost()),i=new w.a,o=new e(i),a=new k.a(new T);return i.addProvider(a),-1>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0);return e},o.prototype.copy=function(t){for(var e=0;e<50;++e)t.state[e]=this.state[e];t.blockSize=this.blockSize,t.count=this.count,t.squeezing=this.squeezing},t.exports=o},function(t,e,r){"use strict";var n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];e.p1600=function(t){for(var e=0;e<24;++e){var r=t[0]^t[10]^t[20]^t[30]^t[40],i=t[1]^t[11]^t[21]^t[31]^t[41],o=t[2]^t[12]^t[22]^t[32]^t[42],a=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],f=t[5]^t[15]^t[25]^t[35]^t[45],u=t[6]^t[16]^t[26]^t[36]^t[46],c=t[7]^t[17]^t[27]^t[37]^t[47],h=t[8]^t[18]^t[28]^t[38]^t[48],d=t[9]^t[19]^t[29]^t[39]^t[49],l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31),b=t[0]^l,g=t[1]^p,y=t[10]^l,m=t[11]^p,v=t[20]^l,_=t[21]^p,w=t[30]^l,E=t[31]^p,S=t[40]^l,A=t[41]^p;l=r^(s<<1|f>>>31),p=i^(f<<1|s>>>31);var x=t[2]^l,M=t[3]^p,k=t[12]^l,I=t[13]^p,T=t[22]^l,R=t[23]^p,L=t[32]^l,P=t[33]^p,B=t[42]^l,C=t[43]^p;l=o^(u<<1|c>>>31),p=a^(c<<1|u>>>31);var O=t[4]^l,N=t[5]^p,j=t[14]^l,D=t[15]^p,q=t[24]^l,z=t[25]^p,U=t[34]^l,F=t[35]^p,K=t[44]^l,H=t[45]^p;l=s^(h<<1|d>>>31),p=f^(d<<1|h>>>31);var V=t[6]^l,Y=t[7]^p,W=t[16]^l,G=t[17]^p,Z=t[26]^l,J=t[27]^p,X=t[36]^l,$=t[37]^p,Q=t[46]^l,tt=t[47]^p;l=u^(r<<1|i>>>31),p=c^(i<<1|r>>>31);var et=t[8]^l,rt=t[9]^p,nt=t[18]^l,it=t[19]^p,ot=t[28]^l,at=t[29]^p,st=t[38]^l,ft=t[39]^p,ut=t[48]^l,ct=t[49]^p,ht=b,dt=g,lt=m<<4|y>>>28,pt=y<<4|m>>>28,bt=v<<3|_>>>29,gt=_<<3|v>>>29,yt=E<<9|w>>>23,mt=w<<9|E>>>23,vt=S<<18|A>>>14,_t=A<<18|S>>>14,wt=x<<1|M>>>31,Et=M<<1|x>>>31,St=I<<12|k>>>20,At=k<<12|I>>>20,xt=T<<10|R>>>22,Mt=R<<10|T>>>22,kt=P<<13|L>>>19,It=L<<13|P>>>19,Tt=B<<2|C>>>30,Rt=C<<2|B>>>30,Lt=N<<30|O>>>2,Pt=O<<30|N>>>2,Bt=j<<6|D>>>26,Ct=D<<6|j>>>26,Ot=z<<11|q>>>21,Nt=q<<11|z>>>21,jt=U<<15|F>>>17,Dt=F<<15|U>>>17,qt=H<<29|K>>>3,zt=K<<29|H>>>3,Ut=V<<28|Y>>>4,Ft=Y<<28|V>>>4,Kt=G<<23|W>>>9,Ht=W<<23|G>>>9,Vt=Z<<25|J>>>7,Yt=J<<25|Z>>>7,Wt=X<<21|$>>>11,Gt=$<<21|X>>>11,Zt=tt<<24|Q>>>8,Jt=Q<<24|tt>>>8,Xt=et<<27|rt>>>5,$t=rt<<27|et>>>5,Qt=nt<<20|it>>>12,te=it<<20|nt>>>12,ee=at<<7|ot>>>25,re=ot<<7|at>>>25,ne=st<<8|ft>>>24,ie=ft<<8|st>>>24,oe=ut<<14|ct>>>18,ae=ct<<14|ut>>>18;t[0]=ht^~St&Ot,t[1]=dt^~At&Nt,t[10]=Ut^~Qt&bt,t[11]=Ft^~te>,t[20]=wt^~Bt&Vt,t[21]=Et^~Ct&Yt,t[30]=Xt^~lt&xt,t[31]=$t^~pt&Mt,t[40]=Lt^~Kt&ee,t[41]=Pt^~Ht&re,t[2]=St^~Ot&Wt,t[3]=At^~Nt&Gt,t[12]=Qt^~bt&kt,t[13]=te^~gt&It,t[22]=Bt^~Vt&ne,t[23]=Ct^~Yt&ie,t[32]=lt^~xt&jt,t[33]=pt^~Mt&Dt,t[42]=Kt^~ee&yt,t[43]=Ht^~re&mt,t[4]=Ot^~Wt&oe,t[5]=Nt^~Gt&ae,t[14]=bt^~kt&qt,t[15]=gt^~It&zt,t[24]=Vt^~ne&vt,t[25]=Yt^~ie&_t,t[34]=xt^~jt&Zt,t[35]=Mt^~Dt&Jt,t[44]=ee^~yt&Tt,t[45]=re^~mt&Rt,t[6]=Wt^~oe&ht,t[7]=Gt^~ae&dt,t[16]=kt^~qt&Ut,t[17]=It^~zt&Ft,t[26]=ne^~vt&wt,t[27]=ie^~_t&Et,t[36]=jt^~Zt&Xt,t[37]=Dt^~Jt&$t,t[46]=yt^~Tt&Lt,t[47]=mt^~Rt&Pt,t[8]=oe^~ht&St,t[9]=ae^~dt&At,t[18]=qt^~Ut&Qt,t[19]=zt^~Ft&te,t[28]=vt^~wt&Bt,t[29]=_t^~Et&Ct,t[38]=Zt^~Xt<,t[39]=Jt^~$t&pt,t[48]=Tt^~Lt&Kt,t[49]=Rt^~Pt&Ht,t[0]^=n[2*e],t[1]^=n[2*e+1]}}},function(t,e,r){"use strict";var n=r(175),i=r(176),o=r(96);function a(t,e){return void 0===t?e:(n.isBoolean(t,o.COMPRESSED_TYPE_INVALID),t)}t.exports=function(t){return{privateKeyVerify:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),32===e.length&&t.privateKeyVerify(e)},privateKeyExport:function(e,r){n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0);var s=t.privateKeyExport(e,r);return i.privateKeyExport(e,s,r)},privateKeyImport:function(e){if(n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),(e=i.privateKeyImport(e))&&32===e.length&&t.privateKeyVerify(e))return e;throw new Error(o.EC_PRIVATE_KEY_IMPORT_DER_FAIL)},privateKeyNegate:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),t.privateKeyNegate(e)},privateKeyModInverse:function(e){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),t.privateKeyModInverse(e)},privateKeyTweakAdd:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),t.privateKeyTweakAdd(e,r)},privateKeyTweakMul:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),t.privateKeyTweakMul(e,r)},publicKeyCreate:function(e,r){return n.isBuffer(e,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(e,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0),t.publicKeyCreate(e,r)},publicKeyConvert:function(e,r){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),r=a(r,!0),t.publicKeyConvert(e,r)},publicKeyVerify:function(e){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),t.publicKeyVerify(e)},publicKeyTweakAdd:function(e,r,i){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),t.publicKeyTweakAdd(e,r,i)},publicKeyTweakMul:function(e,r,i){return n.isBuffer(e,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(e,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),t.publicKeyTweakMul(e,r,i)},publicKeyCombine:function(e,r){n.isArray(e,o.EC_PUBLIC_KEYS_TYPE_INVALID),n.isLengthGTZero(e,o.EC_PUBLIC_KEYS_LENGTH_INVALID);for(var i=0;i=r)throw RangeError(n)}}).call(this,r(6).Buffer)},function(t,e,r){"use strict";var n=r(14).Buffer,i=r(177),o=n.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a=n.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);e.privateKeyExport=function(t,e,r){var i=n.from(r?o:a);return t.copy(i,r?8:9),e.copy(i,r?181:214),i},e.privateKeyImport=function(t){var e=t.length,r=0;if(!(e2||e1?t[r+n-2]<<8:0);if(!(e<(r+=n)+i||e32||e1&&0===e[o]&&!(128&e[o+1]);--r,++o);for(var a=n.concat([n.from([0]),t.s]),s=33,f=0;s>1&&0===a[f]&&!(128&a[f+1]);--s,++f);return i.encode(e.slice(o),a.slice(f))},e.signatureImport=function(t){var e=n.alloc(32,0),r=n.alloc(32,0);try{var o=i.decode(t);if(33===o.r.length&&0===o.r[0]&&(o.r=o.r.slice(1)),o.r.length>32)throw new Error("R length is too long");if(33===o.s.length&&0===o.s[0]&&(o.s=o.s.slice(1)),o.s.length>32)throw new Error("S length is too long")}catch(t){return}return o.r.copy(e,32-o.r.length),o.s.copy(r,32-o.s.length),{r:e,s:r}},e.signatureImportLax=function(t){var e=n.alloc(32,0),r=n.alloc(32,0),i=t.length,o=0;if(48===t[o++]){var a=t[o++];if(!(128&a&&(o+=a-128)>i)&&2===t[o++]){var s=t[o++];if(128&s){if(o+(a=s-128)>i)return;for(;a>0&&0===t[o];o+=1,a-=1);for(s=0;a>0;o+=1,a-=1)s=(s<<8)+t[o]}if(!(s>i-o)){var f=o;if(o+=s,2===t[o++]){var u=t[o++];if(128&u){if(o+(a=u-128)>i)return;for(;a>0&&0===t[o];o+=1,a-=1);for(u=0;a>0;o+=1,a-=1)u=(u<<8)+t[o]}if(!(u>i-o)){var c=o;for(o+=u;s>0&&0===t[f];s-=1,f+=1);if(!(s>32)){var h=t.slice(f,f+s);for(h.copy(e,32-h.length);u>0&&0===t[c];u-=1,c+=1);if(!(u>32)){var d=t.slice(c,c+u);return d.copy(r,32-d.length),{r:e,s:r}}}}}}}}}},function(t,e,r){var n=r(14).Buffer;t.exports={check:function(t){if(t.length<8)return!1;if(t.length>72)return!1;if(48!==t[0])return!1;if(t[1]!==t.length-2)return!1;if(2!==t[2])return!1;var e=t[3];if(0===e)return!1;if(5+e>=t.length)return!1;if(2!==t[4+e])return!1;var r=t[5+e];return 0!==r&&(6+e+r===t.length&&(!(128&t[4])&&(!(e>1&&0===t[4]&&!(128&t[5]))&&(!(128&t[e+6])&&!(r>1&&0===t[e+6]&&!(128&t[e+7]))))))},decode:function(t){if(t.length<8)throw new Error("DER sequence length is too short");if(t.length>72)throw new Error("DER sequence length is too long");if(48!==t[0])throw new Error("Expected DER sequence");if(t[1]!==t.length-2)throw new Error("DER sequence length is invalid");if(2!==t[2])throw new Error("Expected DER integer");var e=t[3];if(0===e)throw new Error("R length is zero");if(5+e>=t.length)throw new Error("R length is too long");if(2!==t[4+e])throw new Error("Expected DER integer (2)");var r=t[5+e];if(0===r)throw new Error("S length is zero");if(6+e+r!==t.length)throw new Error("S length is invalid");if(128&t[4])throw new Error("R value is negative");if(e>1&&0===t[4]&&!(128&t[5]))throw new Error("R value excessively padded");if(128&t[e+6])throw new Error("S value is negative");if(r>1&&0===t[e+6]&&!(128&t[e+7]))throw new Error("S value excessively padded");return{r:t.slice(4,4+e),s:t.slice(6+e)}},encode:function(t,e){var r=t.length,i=e.length;if(0===r)throw new Error("R length is zero");if(0===i)throw new Error("S length is zero");if(r>33)throw new Error("R length is too long");if(i>33)throw new Error("S length is too long");if(128&t[0])throw new Error("R value is negative");if(128&e[0])throw new Error("S value is negative");if(r>1&&0===t[0]&&!(128&t[1]))throw new Error("R value excessively padded");if(i>1&&0===e[0]&&!(128&e[1]))throw new Error("S value excessively padded");var o=n.allocUnsafe(6+r+i);return o[0]=48,o[1]=o.length-2,o[2]=2,o[3]=t.length,t.copy(o,4),o[4+r]=2,o[5+r]=e.length,e.copy(o,6+r),o}}},function(t,e,r){"use strict";var n=r(14).Buffer,i=r(74),o=r(16),a=r(197).ec,s=r(96),f=new a("secp256k1"),u=f.curve;function c(t){var e=t[0];switch(e){case 2:case 3:return 33!==t.length?null:function(t,e){var r=new o(e);if(r.cmp(u.p)>=0)return null;var n=(r=r.toRed(u.red)).redSqr().redIMul(r).redIAdd(u.b).redSqrt();return 3===t!==n.isOdd()&&(n=n.redNeg()),f.keyPair({pub:{x:r,y:n}})}(e,t.slice(1,33));case 4:case 6:case 7:return 65!==t.length?null:function(t,e,r){var n=new o(e),i=new o(r);if(n.cmp(u.p)>=0||i.cmp(u.p)>=0)return null;if(n=n.toRed(u.red),i=i.toRed(u.red),(6===t||7===t)&&i.isOdd()!==(7===t))return null;var a=n.redSqr().redIMul(n);return i.redSqr().redISub(a.redIAdd(u.b)).isZero()?f.keyPair({pub:{x:n,y:i}}):null}(e,t.slice(1,33),t.slice(33,65));default:return null}}e.privateKeyVerify=function(t){var e=new o(t);return e.cmp(u.n)<0&&!e.isZero()},e.privateKeyExport=function(t,e){var r=new o(t);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return n.from(f.keyFromPrivate(t).getPublic(e,!0))},e.privateKeyNegate=function(t){var e=new o(t);return e.isZero()?n.alloc(32):u.n.sub(e).umod(u.n).toArrayLike(n,"be",32)},e.privateKeyModInverse=function(t){var e=new o(t);if(e.cmp(u.n)>=0||e.isZero())throw new Error(s.EC_PRIVATE_KEY_RANGE_INVALID);return e.invm(u.n).toArrayLike(n,"be",32)},e.privateKeyTweakAdd=function(t,e){var r=new o(e);if(r.cmp(u.n)>=0)throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(r.iadd(new o(t)),r.cmp(u.n)>=0&&r.isub(u.n),r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return r.toArrayLike(n,"be",32)},e.privateKeyTweakMul=function(t,e){var r=new o(e);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return r.imul(new o(t)),r.cmp(u.n)&&(r=r.umod(u.n)),r.toArrayLike(n,"be",32)},e.publicKeyCreate=function(t,e){var r=new o(t);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PUBLIC_KEY_CREATE_FAIL);return n.from(f.keyFromPrivate(t).getPublic(e,!0))},e.publicKeyConvert=function(t,e){var r=c(t);if(null===r)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return n.from(r.getPublic(e,!0))},e.publicKeyVerify=function(t){return null!==c(t)},e.publicKeyTweakAdd=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((e=new o(e)).cmp(u.n)>=0)throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);var a=u.g.mul(e).add(i.pub);if(a.isInfinity())throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return n.from(a.encode(!0,r))},e.publicKeyTweakMul=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((e=new o(e)).cmp(u.n)>=0||e.isZero())throw new Error(s.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return n.from(i.pub.mul(e).encode(!0,r))},e.publicKeyCombine=function(t,e){for(var r=new Array(t.length),i=0;i=0||r.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);var i=n.from(t);return 1===r.cmp(f.nh)&&u.n.sub(r).toArrayLike(n,"be",32).copy(i,32),i},e.signatureExport=function(t){var e=t.slice(0,32),r=t.slice(32,64);if(new o(e).cmp(u.n)>=0||new o(r).cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);return{r:e,s:r}},e.signatureImport=function(t){var e=new o(t.r);e.cmp(u.n)>=0&&(e=new o(0));var r=new o(t.s);return r.cmp(u.n)>=0&&(r=new o(0)),n.concat([e.toArrayLike(n,"be",32),r.toArrayLike(n,"be",32)])},e.sign=function(t,e,r,i){if("function"==typeof r){var a=r;r=function(r){var f=a(t,e,null,i,r);if(!n.isBuffer(f)||32!==f.length)throw new Error(s.ECDSA_SIGN_FAIL);return new o(f)}}var c=new o(e);if(c.cmp(u.n)>=0||c.isZero())throw new Error(s.ECDSA_SIGN_FAIL);var h=f.sign(t,e,{canonical:!0,k:r,pers:i});return{signature:n.concat([h.r.toArrayLike(n,"be",32),h.s.toArrayLike(n,"be",32)]),recovery:h.recoveryParam}},e.verify=function(t,e,r){var n={r:e.slice(0,32),s:e.slice(32,64)},i=new o(n.r),a=new o(n.s);if(i.cmp(u.n)>=0||a.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);if(1===a.cmp(f.nh)||i.isZero()||a.isZero())return!1;var h=c(r);if(null===h)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return f.verify(t,n,{x:h.pub.x,y:h.pub.y})},e.recover=function(t,e,r,i){var a={r:e.slice(0,32),s:e.slice(32,64)},c=new o(a.r),h=new o(a.s);if(c.cmp(u.n)>=0||h.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);try{if(c.isZero()||h.isZero())throw new Error;var d=f.recoverPubKey(t,a,r);return n.from(d.encode(!0,i))}catch(t){throw new Error(s.ECDSA_RECOVER_FAIL)}},e.ecdh=function(t,r){var n=e.ecdhUnsafe(t,r,!0);return i("sha256").update(n).digest()},e.ecdhUnsafe=function(t,e,r){var i=c(t);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);var a=new o(e);if(a.cmp(u.n)>=0||a.isZero())throw new Error(s.ECDH_FAIL);return n.from(i.pub.mul(a).encode(!0,r))}},function(t,e,r){"use strict";var n=r(11),i=r(97),o=r(14).Buffer,a=new Array(16);function s(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(t,e){return t<>>32-e}function u(t,e,r,n,i,o,a){return f(t+(e&r|~e&n)+i+o|0,a)+e|0}function c(t,e,r,n,i,o,a){return f(t+(e&n|r&~n)+i+o|0,a)+e|0}function h(t,e,r,n,i,o,a){return f(t+(e^r^n)+i+o|0,a)+e|0}function d(t,e,r,n,i,o,a){return f(t+(r^(e|~n))+i+o|0,a)+e|0}n(s,i),s.prototype._update=function(){for(var t=a,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var r=this._a,n=this._b,i=this._c,o=this._d;r=u(r,n,i,o,t[0],3614090360,7),o=u(o,r,n,i,t[1],3905402710,12),i=u(i,o,r,n,t[2],606105819,17),n=u(n,i,o,r,t[3],3250441966,22),r=u(r,n,i,o,t[4],4118548399,7),o=u(o,r,n,i,t[5],1200080426,12),i=u(i,o,r,n,t[6],2821735955,17),n=u(n,i,o,r,t[7],4249261313,22),r=u(r,n,i,o,t[8],1770035416,7),o=u(o,r,n,i,t[9],2336552879,12),i=u(i,o,r,n,t[10],4294925233,17),n=u(n,i,o,r,t[11],2304563134,22),r=u(r,n,i,o,t[12],1804603682,7),o=u(o,r,n,i,t[13],4254626195,12),i=u(i,o,r,n,t[14],2792965006,17),r=c(r,n=u(n,i,o,r,t[15],1236535329,22),i,o,t[1],4129170786,5),o=c(o,r,n,i,t[6],3225465664,9),i=c(i,o,r,n,t[11],643717713,14),n=c(n,i,o,r,t[0],3921069994,20),r=c(r,n,i,o,t[5],3593408605,5),o=c(o,r,n,i,t[10],38016083,9),i=c(i,o,r,n,t[15],3634488961,14),n=c(n,i,o,r,t[4],3889429448,20),r=c(r,n,i,o,t[9],568446438,5),o=c(o,r,n,i,t[14],3275163606,9),i=c(i,o,r,n,t[3],4107603335,14),n=c(n,i,o,r,t[8],1163531501,20),r=c(r,n,i,o,t[13],2850285829,5),o=c(o,r,n,i,t[2],4243563512,9),i=c(i,o,r,n,t[7],1735328473,14),r=h(r,n=c(n,i,o,r,t[12],2368359562,20),i,o,t[5],4294588738,4),o=h(o,r,n,i,t[8],2272392833,11),i=h(i,o,r,n,t[11],1839030562,16),n=h(n,i,o,r,t[14],4259657740,23),r=h(r,n,i,o,t[1],2763975236,4),o=h(o,r,n,i,t[4],1272893353,11),i=h(i,o,r,n,t[7],4139469664,16),n=h(n,i,o,r,t[10],3200236656,23),r=h(r,n,i,o,t[13],681279174,4),o=h(o,r,n,i,t[0],3936430074,11),i=h(i,o,r,n,t[3],3572445317,16),n=h(n,i,o,r,t[6],76029189,23),r=h(r,n,i,o,t[9],3654602809,4),o=h(o,r,n,i,t[12],3873151461,11),i=h(i,o,r,n,t[15],530742520,16),r=d(r,n=h(n,i,o,r,t[2],3299628645,23),i,o,t[0],4096336452,6),o=d(o,r,n,i,t[7],1126891415,10),i=d(i,o,r,n,t[14],2878612391,15),n=d(n,i,o,r,t[5],4237533241,21),r=d(r,n,i,o,t[12],1700485571,6),o=d(o,r,n,i,t[3],2399980690,10),i=d(i,o,r,n,t[10],4293915773,15),n=d(n,i,o,r,t[1],2240044497,21),r=d(r,n,i,o,t[8],1873313359,6),o=d(o,r,n,i,t[15],4264355552,10),i=d(i,o,r,n,t[6],2734768916,15),n=d(n,i,o,r,t[13],1309151649,21),r=d(r,n,i,o,t[4],4149444226,6),o=d(o,r,n,i,t[11],3174756917,10),i=d(i,o,r,n,t[2],718787259,15),n=d(n,i,o,r,t[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=o.allocUnsafe(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=s},function(t,e,r){(e=t.exports=r(98)).Stream=e,e.Readable=e,e.Writable=r(102),e.Duplex=r(44),e.Transform=r(103),e.PassThrough=r(187),e.finished=r(75),e.pipeline=r(188)},function(t,e){},function(t,e,r){"use strict";function n(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){for(var r=0;r0?this.tail.next=e:this.head=e,this.tail=e,++this.length}},{key:"unshift",value:function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length}},{key:"shift",value:function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r}},{key:"concat",value:function(t){if(0===this.length)return a.alloc(0);for(var e,r,n,i=a.allocUnsafe(t>>>0),o=this.head,s=0;o;)e=o.data,r=i,n=s,a.prototype.copy.call(e,r,n),s+=o.data.length,o=o.next;return i}},{key:"consume",value:function(t,e){var r;return ti.length?i.length:t;if(o===i.length?n+=i:n+=i.slice(0,t),0==(t-=o)){o===i.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(o));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function(t){var e=a.allocUnsafe(t),r=this.head,n=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var i=r.data,o=t>i.length?i.length:t;if(i.copy(e,e.length-t,0,o),0==(t-=o)){o===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(o));break}++n}return this.length-=n,e}},{key:f,value:function(t,e){return s(this,function(t){for(var e=1;e0,(function(t){c||(c=t),t&&d.forEach(f),o||(d.forEach(f),h(c))}))}));return e.reduce(u)}},function(t,e,r){"use strict";var n=r(6).Buffer,i=r(11),o=r(97),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],f=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],u=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],c=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],h=[0,1518500249,1859775393,2400959708,2840853838],d=[1352829926,1548603684,1836072691,2053994217,0];function l(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(t,e){return t<>>32-e}function b(t,e,r,n,i,o,a,s){return p(t+(e^r^n)+o+a|0,s)+i|0}function g(t,e,r,n,i,o,a,s){return p(t+(e&r|~e&n)+o+a|0,s)+i|0}function y(t,e,r,n,i,o,a,s){return p(t+((e|~r)^n)+o+a|0,s)+i|0}function m(t,e,r,n,i,o,a,s){return p(t+(e&n|r&~n)+o+a|0,s)+i|0}function v(t,e,r,n,i,o,a,s){return p(t+(e^(r|~n))+o+a|0,s)+i|0}i(l,o),l.prototype._update=function(){for(var t=a,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,l=0|this._e,_=0|this._a,w=0|this._b,E=0|this._c,S=0|this._d,A=0|this._e,x=0;x<80;x+=1){var M,k;x<16?(M=b(r,n,i,o,l,t[s[x]],h[0],u[x]),k=v(_,w,E,S,A,t[f[x]],d[0],c[x])):x<32?(M=g(r,n,i,o,l,t[s[x]],h[1],u[x]),k=m(_,w,E,S,A,t[f[x]],d[1],c[x])):x<48?(M=y(r,n,i,o,l,t[s[x]],h[2],u[x]),k=y(_,w,E,S,A,t[f[x]],d[2],c[x])):x<64?(M=m(r,n,i,o,l,t[s[x]],h[3],u[x]),k=g(_,w,E,S,A,t[f[x]],d[3],c[x])):(M=v(r,n,i,o,l,t[s[x]],h[4],u[x]),k=b(_,w,E,S,A,t[f[x]],d[4],c[x])),r=l,l=o,o=p(i,10),i=n,n=M,_=A,A=S,S=p(E,10),E=w,w=k}var I=this._b+i+S|0;this._b=this._c+o+A|0,this._c=this._d+l+_|0,this._d=this._e+r+w|0,this._e=this._a+n+E|0,this._a=I},l.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=n.alloc?n.alloc(20):new n(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=l},function(t,e,r){(e=t.exports=function(t){t=t.toLowerCase();var r=e[t];if(!r)throw new Error(t+" is not supported (we accept pull requests)");return new r}).sha=r(191),e.sha1=r(192),e.sha224=r(193),e.sha256=r(104),e.sha384=r(194),e.sha512=r(105)},function(t,e,r){var n=r(11),i=r(45),o=r(14).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(t){return t<<30|t>>>2}function c(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,h=0;h<16;++h)r[h]=t.readInt32BE(4*h);for(;h<80;++h)r[h]=r[h-3]^r[h-8]^r[h-14]^r[h-16];for(var d=0;d<80;++d){var l=~~(d/20),p=0|((e=n)<<5|e>>>27)+c(l,i,o,s)+f+r[d]+a[l];f=s,s=o,o=u(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},function(t,e,r){var n=r(11),i=r(45),o=r(14).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(t){return t<<5|t>>>27}function c(t){return t<<30|t>>>2}function h(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,d=0;d<16;++d)r[d]=t.readInt32BE(4*d);for(;d<80;++d)r[d]=(e=r[d-3]^r[d-8]^r[d-14]^r[d-16])<<1|e>>>31;for(var l=0;l<80;++l){var p=~~(l/20),b=u(n)+h(p,i,o,s)+f+r[l]+a[p]|0;f=s,s=o,o=c(i),i=n,n=b}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=f},function(t,e,r){var n=r(11),i=r(104),o=r(45),a=r(14).Buffer,s=new Array(64);function f(){this.init(),this._w=s,o.call(this,64,56)}n(f,i),f.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},f.prototype._hash=function(){var t=a.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=f},function(t,e,r){var n=r(11),i=r(105),o=r(45),a=r(14).Buffer,s=new Array(160);function f(){this.init(),this._w=s,o.call(this,128,112)}n(f,i),f.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},f.prototype._hash=function(){var t=a.allocUnsafe(48);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=f},function(t,e,r){var n=r(14).Buffer,i=r(33).Transform,o=r(26).StringDecoder;function a(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(11)(a,i),a.prototype.update=function(t,e,r){"string"==typeof t&&(t=n.from(t,e));var i=this._update(t);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},a.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},a.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},a.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},a.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},a.prototype._finalOrDigest=function(t){var e=this.__final()||n.alloc(0);return t&&(e=this._toString(e,t,!0)),e},a.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n},t.exports=a},function(t,e){},function(t,e,r){"use strict";var n=e;n.version=r(198).version,n.utils=r(24),n.rand=r(107),n.curve=r(108),n.curves=r(77),n.ec=r(210),n.eddsa=r(214)},function(t){t.exports=JSON.parse('{"_from":"elliptic@^6.5.2","_id":"elliptic@6.5.2","_inBundle":false,"_integrity":"sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==","_location":"/elliptic","_phantomChildren":{},"_requested":{"type":"range","registry":true,"raw":"elliptic@^6.5.2","name":"elliptic","escapedName":"elliptic","rawSpec":"^6.5.2","saveSpec":null,"fetchSpec":"^6.5.2"},"_requiredBy":["/secp256k1"],"_resolved":"https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz","_shasum":"05c5678d7173c049d8ca433552224a495d0e3762","_spec":"elliptic@^6.5.2","_where":"/Volumes/fill/Projects/eos/scatter-js/packages/plugin-web3/node_modules/secp256k1","author":{"name":"Fedor Indutny","email":"fedor@indutny.com"},"bugs":{"url":"https://github.com/indutny/elliptic/issues"},"bundleDependencies":false,"dependencies":{"bn.js":"^4.4.0","brorand":"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0","inherits":"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"},"deprecated":false,"description":"EC cryptography","devDependencies":{"brfs":"^1.4.3","coveralls":"^3.0.8","grunt":"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^9.0.1","istanbul":"^0.4.2","jscs":"^3.0.7","jshint":"^2.10.3","mocha":"^6.2.2"},"files":["lib"],"homepage":"https://github.com/indutny/elliptic","keywords":["EC","Elliptic","curve","Cryptography"],"license":"MIT","main":"lib/elliptic.js","name":"elliptic","repository":{"type":"git","url":"git+ssh://git@github.com/indutny/elliptic.git"},"scripts":{"jscs":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","jshint":"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js","lint":"npm run jscs && npm run jshint","test":"npm run lint && npm run unit","unit":"istanbul test _mocha --reporter=spec test/index.js","version":"grunt dist && git add dist/"},"version":"6.5.2"}')},function(t,e){},function(t,e,r){"use strict";var n=r(24),i=r(16),o=r(11),a=r(56),s=n.assert;function f(t){a.call(this,"short",t),this.a=new i(t.a,16).toRed(this.red),this.b=new i(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function u(t,e,r,n){a.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(e,16),this.y=new i(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function c(t,e,r,n){a.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(e,16),this.y=new i(r,16),this.z=new i(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}o(f,a),t.exports=f,f.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new i(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=(e=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(t.lambda)r=new i(t.lambda,16);else{var o=this._getEndoRoots(this.n);0===this.g.mul(o[0]).x.cmp(this.g.x.redMul(e))?r=o[0]:(r=o[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}return{beta:e,lambda:r,basis:t.basis?t.basis.map((function(t){return{a:new i(t.a,16),b:new i(t.b,16)}})):this._getEndoBasis(r)}}},f.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:i.mont(t),r=new i(2).toRed(e).redInvm(),n=r.redNeg(),o=new i(3).toRed(e).redNeg().redSqrt().redMul(r);return[n.redAdd(o).fromRed(),n.redSub(o).fromRed()]},f.prototype._getEndoBasis=function(t){for(var e,r,n,o,a,s,f,u,c,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=t,l=this.n.clone(),p=new i(1),b=new i(0),g=new i(0),y=new i(1),m=0;0!==d.cmpn(0);){var v=l.div(d);u=l.sub(v.mul(d)),c=g.sub(v.mul(p));var _=y.sub(v.mul(b));if(!n&&u.cmp(h)<0)e=f.neg(),r=p,n=u.neg(),o=c;else if(n&&2==++m)break;f=u,l=d,d=u,g=p,p=c,y=b,b=_}a=u.neg(),s=c;var w=n.sqr().add(o.sqr());return a.sqr().add(s.sqr()).cmp(w)>=0&&(a=e,s=r),n.negative&&(n=n.neg(),o=o.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:o},{a:a,b:s}]},f.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),f=i.mul(r.b),u=o.mul(n.b);return{k1:t.sub(a).sub(s),k2:f.add(u).neg()}},f.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var o=n.fromRed().isOdd();return(e&&!o||!e&&o)&&(n=n.redNeg()),this.point(t,n)},f.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},f.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o":""},u.prototype.isInfinity=function(){return this.inf},u.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},u.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},u.prototype.getX=function(){return this.x.fromRed()},u.prototype.getY=function(){return this.y.fromRed()},u.prototype.mul=function(t){return t=new i(t,16),this.isInfinity()?this:this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},u.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},u.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},u.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},u.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},u.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(c,a.BasePoint),f.prototype.jpoint=function(t,e,r){return new c(this,t,e,r)},c.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},c.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},c.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),s=n.redSub(i),f=o.redSub(a);if(0===s.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),c=u.redMul(s),h=n.redMul(u),d=f.redSqr().redIAdd(c).redISub(h).redISub(h),l=f.redMul(h.redISub(d)).redISub(o.redMul(c)),p=this.z.redMul(t.z).redMul(s);return this.curve.jpoint(d,l,p)},c.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),u=f.redMul(a),c=r.redMul(f),h=s.redSqr().redIAdd(u).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(h,d,l)},c.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";var n=r(16),i=r(11),o=r(56),a=r(24);function s(t){o.call(this,"mont",t),this.a=new n(t.a,16).toRed(this.red),this.b=new n(t.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function f(t,e,r){o.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(e,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,o),t.exports=s,s.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e);return 0===n.redSqrt().redSqr().cmp(n)},i(f,o.BasePoint),s.prototype.decodePoint=function(t,e){return this.point(a.toArray(t,e),1)},s.prototype.point=function(t,e){return new f(this,t,e)},s.prototype.pointFromJSON=function(t){return f.fromJSON(this,t)},f.prototype.precompute=function(){},f.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},f.fromJSON=function(t,e){return new f(t,e[0],e[1]||t.one)},f.prototype.inspect=function(){return this.isInfinity()?"":""},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},f.prototype.dbl=function(){var t=this.x.redAdd(this.z).redSqr(),e=this.x.redSub(this.z).redSqr(),r=t.redSub(e),n=t.redMul(e),i=r.redMul(e.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},f.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z).redMul(r),a=i.redMul(n),s=e.z.redMul(o.redAdd(a).redSqr()),f=e.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,f)},f.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=[];0!==e.cmpn(0);e.iushrn(1))i.push(e.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},f.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},f.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},f.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";var n=r(24),i=r(16),o=r(11),a=r(56),s=n.assert;function f(t){this.twisted=1!=(0|t.a),this.mOneA=this.twisted&&-1==(0|t.a),this.extended=this.mOneA,a.call(this,"edwards",t),this.a=new i(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|t.c)}function u(t,e,r,n,o){a.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(e,16),this.y=new i(r,16),this.z=n?new i(n,16):this.curve.one,this.t=o&&new i(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(f,a),t.exports=f,f.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},f.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},f.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},f.prototype.pointFromX=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),o=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(o.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");var f=s.fromRed().isOdd();return(e&&!f||!e&&f)&&(s=s.redNeg()),this.point(t,s)},f.prototype.pointFromY=function(t,e){(t=new i(t,16)).red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.c2),o=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(o.redInvm());if(0===a.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==e&&(s=s.redNeg()),this.point(s,t)},f.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},o(u,a.BasePoint),f.prototype.pointFromJSON=function(t){return u.fromJSON(this,t)},f.prototype.point=function(t,e,r,n){return new u(this,t,e,r,n)},u.fromJSON=function(t,e){return new u(t,e[0],e[1],e[2])},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),s=n.redSub(e),f=i.redMul(a),u=o.redMul(s),c=i.redMul(s),h=a.redMul(o);return this.curve.point(f,u,h,c)},u.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(u=this.curve._mulA(i)).redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),e=a.redMul(u.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),f=a.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(f),e=a.redMul(u.redSub(o)),r=a.redMul(f)}}else{var u=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),f=u.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(u)).redMul(f),e=this.curve._mulC(u).redMul(i.redISub(o)),r=u.redMul(f)}return this.curve.point(t,e,r)},u.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),s=i.redAdd(n),f=r.redAdd(e),u=o.redMul(a),c=s.redMul(f),h=o.redMul(f),d=a.redMul(s);return this.curve.point(u,c,d,h)},u.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),s=this.curve.d.redMul(o).redMul(a),f=i.redSub(s),u=i.redAdd(s),c=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),h=n.redMul(f).redMul(c);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=f.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(f).redMul(u)),this.curve.point(h,e,r)},u.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},u.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},u.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},u.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},u.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},u.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(t,e,r){"use strict";e.sha1=r(204),e.sha224=r(205),e.sha256=r(110),e.sha384=r(206),e.sha512=r(111)},function(t,e,r){"use strict";var n=r(29),i=r(50),o=r(109),a=n.rotl32,s=n.sum32,f=n.sum32_5,u=o.ft_1,c=i.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function d(){if(!(this instanceof d))return new d;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(d,c),t.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;nthis.blockSize&&(t=(new this.Hash).update(t).digest()),i(t.length<=this.blockSize);for(var e=t.length;e0))return a.iaddn(1),this.keyFromPrivate(a)}},h.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},h.prototype.sign=function(t,e,r,o){"object"==typeof r&&(o=r,r=null),o||(o={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new n(t,16));for(var a=this.n.byteLength(),s=e.getPrivate().toArray("be",a),f=t.toArray("be",a),u=new i({hash:this.hash,entropy:s,nonce:f,pers:o.pers,persEnc:o.persEnc||"utf8"}),h=this.n.sub(new n(1)),d=0;;d++){var l=o.k?o.k(d):new n(u.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(h)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),g=b.umod(this.n);if(0!==g.cmpn(0)){var y=l.invm(this.n).mul(g.mul(e.getPrivate()).iadd(t));if(0!==(y=y.umod(this.n)).cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(g)?2:0);return o.canonical&&y.cmp(this.nh)>0&&(y=this.n.sub(y),m^=1),new c({r:g,s:y,recoveryParam:m})}}}}}},h.prototype.verify=function(t,e,r,i){t=this._truncateToN(new n(t,16)),r=this.keyFromPublic(r,i);var o=(e=new c(e,"hex")).r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,f=a.invm(this.n),u=f.mul(t).umod(this.n),h=f.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(u,r.getPublic(),h)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(u,r.getPublic(),h)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},h.prototype.recoverPubKey=function(t,e,r,i){f((3&r)===r,"The recovery param is more than two bits"),e=new c(e,i);var o=this.n,a=new n(t),s=e.r,u=e.s,h=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),h):this.curve.pointFromX(s,h);var l=e.r.invm(o),p=o.sub(a).mul(l).umod(o),b=u.mul(l).umod(o);return this.g.mulAdd(p,s,b)},h.prototype.getKeyRecoveryParam=function(t,e,r,n){if(null!==(e=new c(e,n)).recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";var n=r(78),i=r(106),o=r(37);function a(t){if(!(this instanceof a))return new a(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=i.toArray(t.entropy,t.entropyEnc||"hex"),r=i.toArray(t.nonce,t.nonceEnc||"hex"),n=i.toArray(t.pers,t.persEnc||"hex");o(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,n)}t.exports=a,a.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this._reseed=1},a.prototype.generate=function(t,e,r,n){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=i.toArray(r,n||"hex"),this._update(r));for(var o=[];o.length"}},function(t,e,r){"use strict";var n=r(16),i=r(24),o=i.assert;function a(t,e){if(t instanceof a)return t;this._importDER(t,e)||(o(t.r&&t.s,"Signature without r or s"),this.r=new n(t.r,16),this.s=new n(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam)}function s(){this.place=0}function f(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}}t.exports=a,a.prototype._importDER=function(t,e){t=i.toArray(t,e);var r=new s;if(48!==t[r.place++])return!1;if(f(t,r)+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var o=f(t,r),a=t.slice(r.place,o+r.place);if(r.place+=o,2!==t[r.place++])return!1;var u=f(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new n(a),this.s=new n(c),this.recoveryParam=null,!0},a.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=u(e),r=u(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];c(n,e.length),(n=n.concat(e)).push(2),c(n,r.length);var o=n.concat(r),a=[48];return c(a,o.length),a=a.concat(o),i.encode(a,t)}},function(t,e,r){"use strict";var n=r(78),i=r(77),o=r(24),a=o.assert,s=o.parseBytes,f=r(215),u=r(216);function c(t){if(a("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof c))return new c(t);t=i[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=n.sha512}t.exports=c,c.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},c.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S());return e.R().add(n.pub().mul(i)).eq(o)},c.prototype.hashInt=function(){for(var t=this.hash(),e=0;ethis.once("latest",t)),this._currentBlock)}async start(t={}){this._isRunning||(this._isRunning=!0,t.fromBlock?await this._setTrackingBlock(await this._fetchBlockByNumber(t.fromBlock)):await this._setTrackingBlock(await this._fetchLatestBlock()),this._provider.on?await this._initSubscription():this._performSync().catch(t=>{t&&console.error(t)}))}async stop(){this._isRunning=!1,this._provider.on&&await this._removeSubscription()}async _setTrackingBlock(t){if(this._trackingBlock&&this._trackingBlock.hash===t.hash)return;const e=this._trackingBlockTimestamp,r=Date.now();e&&r-e>this._syncingTimeout?(this._trackingBlockTimestamp=null,await this._warpToLatest()):(this._trackingBlock=t,this._trackingBlockTimestamp=r,this.emit("block",t))}async _setCurrentBlock(t){if(this._currentBlock&&this._currentBlock.hash===t.hash)return;const e=this._currentBlock;this._currentBlock=t,this.emit("latest",t),this.emit("sync",{newBlock:t,oldBlock:e})}async _warpToLatest(){await this._setTrackingBlock(await this._fetchLatestBlock())}async _pollForNextBlock(){setTimeout(()=>this._performSync(),this._pollingInterval)}async _performSync(){if(!this._isRunning)return;const t=this.getTrackingBlock();if(!t)throw new Error("RpcBlockTracker - tracking block is missing");const e=s(t.number);try{const r=await this._fetchBlockByNumber(e);r?(await this._setTrackingBlock(r),this._performSync()):(await this._setCurrentBlock(t),this._pollForNextBlock())}catch(e){e.message.includes("index out of range")||e.message.includes("Couldn't find block by reference")?(await this._setCurrentBlock(t),this._pollForNextBlock()):(console.error(e),this._pollForNextBlock())}}async _handleNewBlockNotification(t,e){e.id==this._subscriptionId&&(t&&(this.emit("error",t),await this._removeSubscription()),await this._setTrackingBlock(await this._fetchBlockByNumber(e.result.number)))}async _initSubscription(){this._provider.on("data",this._handleNewBlockNotification);let t=await o(this._provider.sendAsync||this._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_subscribe",params:["newHeads"]});this._subscriptionId=t.result}async _removeSubscription(){if(!this._subscriptionId)throw new Error("Not subscribed.");this._provider.removeListener("data",this._handleNewBlockNotification),await o(this._provider.sendAsync||this._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_unsubscribe",params:[this._subscriptionId]}),delete this._subscriptionId}_fetchLatestBlock(){return o(this._query.getBlockByNumber).call(this._query,"latest",!0)}_fetchBlockByNumber(t){const e=a.formatHex(t);return o(this._query.getBlockByNumber).call(this._query,e,!0)}}},function(t,e,r){const n=r(50),i=r(191)();function o(t){this.currentProvider=t}function a(t){return function(){const e=this;var r=[].slice.call(arguments),n=r.pop();e.sendAsync({method:t,params:r},n)}}function s(t,e){return function(){const r=this;var n=[].slice.call(arguments),i=n.pop();n.length-1&&t%1==0&&t=t.params.length?t.params:"eth_getBlockByNumber"===t.method?t.params.slice(1):t.params.slice(0,e)}function a(t){switch(t.method){case"eth_getStorageAt":return 2;case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":return 1;case"eth_getBlockByNumber":return 0;default:return}}function s(t){switch(t.method){case"web3_clientVersion":case"web3_sha3":case"eth_protocolVersion":case"eth_getBlockTransactionCountByHash":case"eth_getUncleCountByBlockHash":case"eth_getCode":case"eth_getBlockByHash":case"eth_getTransactionByHash":case"eth_getTransactionByBlockHashAndIndex":case"eth_getTransactionReceipt":case"eth_getUncleByBlockHashAndIndex":case"eth_getCompilers":case"eth_compileLLL":case"eth_compileSolidity":case"eth_compileSerpent":case"shh_version":return"perma";case"eth_getBlockByNumber":case"eth_getBlockTransactionCountByNumber":case"eth_getUncleCountByBlockNumber":case"eth_getTransactionByBlockNumberAndIndex":case"eth_getUncleByBlockNumberAndIndex":return"fork";case"eth_gasPrice":case"eth_blockNumber":case"eth_getBalance":case"eth_getStorageAt":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":case"eth_getFilterLogs":case"eth_getLogs":return"block";case"net_version":case"net_peerCount":case"net_listening":case"eth_syncing":case"eth_sign":case"eth_coinbase":case"eth_mining":case"eth_hashrate":case"eth_accounts":case"eth_sendTransaction":case"eth_sendRawTransaction":case"eth_newFilter":case"eth_newBlockFilter":case"eth_newPendingTransactionFilter":case"eth_uninstallFilter":case"eth_getFilterChanges":case"eth_getWork":case"eth_submitWork":case"eth_submitHashrate":case"db_putString":case"db_getString":case"db_putHex":case"db_getHex":case"shh_post":case"shh_newIdentity":case"shh_hasIdentity":case"shh_newGroup":case"shh_addToGroup":case"shh_newFilter":case"shh_uninstallFilter":case"shh_getFilterChanges":case"shh_getMessages":return"never"}}t.exports={cacheIdentifierForPayload:function(t,e={}){if(!i(t))return null;const{includeBlockRef:r}=e,a=r?t.params:o(t);return t.method+":"+n(a)},canCache:i,blockTagForPayload:function(t){var e=a(t);if(e>=t.params.length)return null;return t.params[e]},paramsWithoutBlockTag:o,blockTagParamIndex:a,cacheTypeForPayload:s}},function(t,e,r){var n="undefined"!=typeof JSON?JSON:r(228);t.exports=function(t,e){e||(e={}),"function"==typeof e&&(e={cmp:e});var r=e.space||"";"number"==typeof r&&(r=Array(r+1).join(" "));var a,s="boolean"==typeof e.cycles&&e.cycles,f=e.replacer||function(t,e){return e},u=e.cmp&&(a=e.cmp,function(t){return function(e,r){var n={key:e,value:t[e]},i={key:r,value:t[r]};return a(n,i)}}),c=[];return function t(e,a,h,d){var l=r?"\n"+new Array(d+1).join(r):"",p=r?": ":":";if(h&&h.toJSON&&"function"==typeof h.toJSON&&(h=h.toJSON()),void 0!==(h=f.call(e,a,h))){if("object"!=typeof h||null===h)return n.stringify(h);if(i(h)){for(var b=[],y=0;y="0"&&n<="9";)e+=n,f();if("."===n)for(e+=".";f()&&n>="0"&&n<="9";)e+=n;if("e"===n||"E"===n)for(e+=n,f(),"-"!==n&&"+"!==n||(e+=n,f());n>="0"&&n<="9";)e+=n,f();if(t=+e,isFinite(t))return t;s("Bad number")},c=function(){var t,e,r,i="";if('"'===n)for(;f();){if('"'===n)return f(),i;if("\\"===n)if(f(),"u"===n){for(r=0,e=0;e<4&&(t=parseInt(f(),16),isFinite(t));e+=1)r=16*r+t;i+=String.fromCharCode(r)}else{if("string"!=typeof a[n])break;i+=a[n]}else i+=n}s("Bad string")},h=function(){for(;n&&n<=" ";)f()};o=function(){switch(h(),n){case"{":return function(){var t,e={};if("{"===n){if(f("{"),h(),"}"===n)return f("}"),e;for(;n;){if(t=c(),h(),f(":"),Object.hasOwnProperty.call(e,t)&&s('Duplicate key "'+t+'"'),e[t]=o(),h(),"}"===n)return f("}"),e;f(","),h()}}s("Bad object")}();case"[":return function(){var t=[];if("["===n){if(f("["),h(),"]"===n)return f("]"),t;for(;n;){if(t.push(o()),h(),"]"===n)return f("]"),t;f(","),h()}}s("Bad array")}();case'"':return c();case"-":return u();default:return n>="0"&&n<="9"?u():function(){switch(n){case"t":return f("t"),f("r"),f("u"),f("e"),!0;case"f":return f("f"),f("a"),f("l"),f("s"),f("e"),!1;case"n":return f("n"),f("u"),f("l"),f("l"),null}s("Unexpected '"+n+"'")}()}},t.exports=function(t,e){var a;return i=t,r=0,n=" ",a=o(),h(),n&&s("Syntax error"),"function"==typeof e?function t(r,n){var i,o,a=r[n];if(a&&"object"==typeof a)for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(void 0!==(o=t(a,i))?a[i]=o:delete a[i]);return e.call(r,n,a)}({"":a},""):a}},function(t,e){var r,n,i,o=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function s(t){return o.lastIndex=0,o.test(t)?'"'+t.replace(o,(function(t){var e=a[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+t+'"'}t.exports=function(t,e,o){var a;if(r="",n="","number"==typeof o)for(a=0;a0&&(h=setTimeout((function(){if(!u){u=!0,c.abort("timeout");var t=new Error("XMLHttpRequest timeout");t.code="ETIMEDOUT",i(t)}}),t.timeout)),c.setRequestHeader)for(s in b)b.hasOwnProperty(s)&&c.setRequestHeader(s,b[s]);else if(t.headers&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(t.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in t&&(c.responseType=t.responseType),"beforeSend"in t&&"function"==typeof t.beforeSend&&t.beforeSend(c),c.send(p||null),c}t.exports=f,t.exports.default=f,f.XMLHttpRequest=n.XMLHttpRequest||function(){},f.XDomainRequest="withCredentials"in new f.XMLHttpRequest?f.XMLHttpRequest:n.XDomainRequest,function(t,e){for(var r=0;r0&&!i.call(t,0))for(var b=0;b0)for(var y=0;y>0},ToUint32:function(t){return this.ToNumber(t)>>>0},ToUint16:function(t){var e=this.ToNumber(t);if(f(e)||0===e||!u(e))return 0;var r=c(e)*Math.floor(Math.abs(e));return h(r,65536)},ToString:function(t){return a(t)},ToObject:function(t){return this.CheckObjectCoercible(t),i(t)},CheckObjectCoercible:function(t,e){if(null==t)throw new o(e||"Cannot call method on "+t);return t},IsCallable:d,SameValue:function(t,e){return t===e?0!==t||1/t==1/e:f(t)&&f(e)},Type:function(t){return null===t?"Null":void 0===t?"Undefined":"function"==typeof t||"object"==typeof t?"Object":"number"==typeof t?"Number":"boolean"==typeof t?"Boolean":"string"==typeof t?"String":void 0},IsPropertyDescriptor:function(t){if("Object"!==this.Type(t))return!1;var e={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var r in t)if(p(t,r)&&!e[r])return!1;var n=p(t,"[[Value]]"),i=p(t,"[[Get]]")||p(t,"[[Set]]");if(n&&i)throw new o("Property Descriptors may not be both accessor and data descriptors");return!0},IsAccessorDescriptor:function(t){return void 0!==t&&(s(this,"Property Descriptor","Desc",t),!(!p(t,"[[Get]]")&&!p(t,"[[Set]]")))},IsDataDescriptor:function(t){return void 0!==t&&(s(this,"Property Descriptor","Desc",t),!(!p(t,"[[Value]]")&&!p(t,"[[Writable]]")))},IsGenericDescriptor:function(t){return void 0!==t&&(s(this,"Property Descriptor","Desc",t),!this.IsAccessorDescriptor(t)&&!this.IsDataDescriptor(t))},FromPropertyDescriptor:function(t){if(void 0===t)return t;if(s(this,"Property Descriptor","Desc",t),this.IsDataDescriptor(t))return{value:t["[[Value]]"],writable:!!t["[[Writable]]"],enumerable:!!t["[[Enumerable]]"],configurable:!!t["[[Configurable]]"]};if(this.IsAccessorDescriptor(t))return{get:t["[[Get]]"],set:t["[[Set]]"],enumerable:!!t["[[Enumerable]]"],configurable:!!t["[[Configurable]]"]};throw new o("FromPropertyDescriptor must be called with a fully populated Property Descriptor")},ToPropertyDescriptor:function(t){if("Object"!==this.Type(t))throw new o("ToPropertyDescriptor requires an object");var e={};if(p(t,"enumerable")&&(e["[[Enumerable]]"]=this.ToBoolean(t.enumerable)),p(t,"configurable")&&(e["[[Configurable]]"]=this.ToBoolean(t.configurable)),p(t,"value")&&(e["[[Value]]"]=t.value),p(t,"writable")&&(e["[[Writable]]"]=this.ToBoolean(t.writable)),p(t,"get")){var r=t.get;if(void 0!==r&&!this.IsCallable(r))throw new TypeError("getter must be a function");e["[[Get]]"]=r}if(p(t,"set")){var n=t.set;if(void 0!==n&&!this.IsCallable(n))throw new o("setter must be a function");e["[[Set]]"]=n}if((p(e,"[[Get]]")||p(e,"[[Set]]"))&&(p(e,"[[Value]]")||p(e,"[[Writable]]")))throw new o("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute");return e}};t.exports=b},function(t,e,r){"use strict";var n=r(106),i=n("%TypeError%"),o=n("%SyntaxError%"),a=r(107),s={"Property Descriptor":function(t,e){if("Object"!==t.Type(e))return!1;var r={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var n in e)if(a(e,n)&&!r[n])return!1;var o=a(e,"[[Value]]"),s=a(e,"[[Get]]")||a(e,"[[Set]]");if(o&&s)throw new i("Property Descriptors may not be both accessor and data descriptors");return!0}};t.exports=function(t,e,r,n){var a=s[e];if("function"!=typeof a)throw new o("unknown record type: "+e);if(!a(t,n))throw new i(r+" must be a "+e);console.log(a(t,n),n)}},function(t,e){t.exports=Number.isNaN||function(t){return t!=t}},function(t,e){var r=Number.isNaN||function(t){return t!=t};t.exports=Number.isFinite||function(t){return"number"==typeof t&&!r(t)&&t!==1/0&&t!==-1/0}},function(t,e){t.exports=function(t){return t>=0?1:-1}},function(t,e){t.exports=function(t,e){var r=t%e;return Math.floor(r>=0?r:r+e)}},function(t,e,r){"use strict";var n=Object.prototype.toString,i=r(247),o=r(74),a=function(t){var e;if((e=arguments.length>1?arguments[1]:"[object Date]"===n.call(t)?String:Number)===String||e===Number){var r,a,s=e===String?["toString","valueOf"]:["valueOf","toString"];for(a=0;a1?a(t,arguments[1]):a(t)}},function(t,e){t.exports=function(t){return null===t||"function"!=typeof t&&"object"!=typeof t}},function(t,e,r){"use strict";var n=r(103),i=r(108);t.exports=function(){var t=i();return n(String.prototype,{trim:t},{trim:function(){return String.prototype.trim!==t}}),t}},function(t,e,r){"use strict";var n=r(74),i=Object.prototype.toString,o=Object.prototype.hasOwnProperty,a=function(t,e,r){for(var n=0,i=t.length;n=3&&(o=r),"[object Array]"===i.call(t)?a(t,e,o):"string"==typeof t?s(t,e,o):f(t,e,o)}},function(t,e){},function(t,e,r){t.exports=r(252)},function(t,e,r){var n=r(13),i=function(t,e,r){if(!(this instanceof i))return new i(t,e,r);this.message=t,this.code=e,void 0!==r&&(this.data=r)};n(i,Error);var o=function(){if(!(this instanceof o))return new o;i.call(this,"Parse error",-32700)};n(o,i);var a=function(){if(!(this instanceof a))return new a;i.call(this,"Invalid Request",-32600)};n(a,i);var s=function(){if(!(this instanceof s))return new s;i.call(this,"Method not found",-32601)};n(s,i);var f=function(){if(!(this instanceof f))return new f;i.call(this,"Invalid params",-32602)};n(f,i);var u=function(t){var e;if(!(this instanceof u))return new u(t);e=t&&t.message?t.message:"Internal error",i.call(this,e,-32603)};n(u,i);var c=function(t){if(t<-32099||t>-32e3)throw new Error("Invalid error code");if(!(this instanceof c))return new c(t);i.call(this,"Server error",t)};n(c,i),i.ParseError=o,i.InvalidRequest=a,i.MethodNotFound=s,i.InvalidParams=f,i.InternalError=u,i.ServerError=c,t.exports=i},function(t,e,r){var n=r(109),i=r(256),o=r(111),a=r(257);t.exports.Backoff=n,t.exports.FunctionCall=a,t.exports.FibonacciStrategy=o,t.exports.ExponentialStrategy=i,t.exports.fibonacci=function(t){return new n(new o(t))},t.exports.exponential=function(t){return new n(new i(t))},t.exports.call=function(t,e,r){var n=Array.prototype.slice.call(arguments);return t=n[0],e=n.slice(1,n.length-1),r=n[n.length-1],new a(t,e,r)}},function(t,e,r){var n=r(21),i=t.exports=r(255);function o(t,e,r,i){r=r||"";var o=new t(n.format.apply(this,[r].concat(i)));throw Error.captureStackTrace(o,e),o}function a(t,e,r){o(i.IllegalArgumentError,t,e,r)}function s(t,e,r){o(i.IllegalStateError,t,e,r)}function f(t){var e=typeof t;if("object"==e){if(!t)return"null";if(t instanceof Array)return"array"}return e}function u(t){return function(e,r){var n=f(e);if(n==t)return e;a(arguments.callee,r||'Expected "'+t+'" but got "'+n+'".',Array.prototype.slice.call(arguments,2))}}t.exports.checkArgument=function(t,e){t||a(arguments.callee,e,Array.prototype.slice.call(arguments,2))},t.exports.checkState=function(t,e){t||s(arguments.callee,e,Array.prototype.slice.call(arguments,2))},t.exports.checkIsDef=function(t,e){if(void 0!==t)return t;a(arguments.callee,e||"Expected value to be defined but was undefined.",Array.prototype.slice.call(arguments,2))},t.exports.checkIsDefAndNotNull=function(t,e){if(null!=t)return t;a(arguments.callee,e||'Expected value to be defined and not null but got "'+f(t)+'".',Array.prototype.slice.call(arguments,2))},t.exports.checkIsString=u("string"),t.exports.checkIsArray=u("array"),t.exports.checkIsNumber=u("number"),t.exports.checkIsBoolean=u("boolean"),t.exports.checkIsFunction=u("function"),t.exports.checkIsObject=u("object")},function(t,e,r){var n=r(21);function i(t){Error.call(this,t),this.message=t}function o(t){Error.call(this,t),this.message=t}n.inherits(i,Error),i.prototype.name="IllegalArgumentError",n.inherits(o,Error),o.prototype.name="IllegalStateError",t.exports.IllegalStateError=o,t.exports.IllegalArgumentError=i},function(t,e,r){var n=r(21),i=r(76),o=r(110);function a(t){o.call(this,t),this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay(),this.factor_=a.DEFAULT_FACTOR,t&&void 0!==t.factor&&(i.checkArgument(t.factor>1,"Exponential factor should be greater than 1 but got %s.",t.factor),this.factor_=t.factor)}n.inherits(a,o),a.DEFAULT_FACTOR=2,a.prototype.next_=function(){return this.backoffDelay_=Math.min(this.nextBackoffDelay_,this.getMaxDelay()),this.nextBackoffDelay_=this.backoffDelay_*this.factor_,this.backoffDelay_},a.prototype.reset_=function(){this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay()},t.exports=a},function(t,e,r){var n=r(15),i=r(76),o=r(21),a=r(109),s=r(111);function f(t,e,r){n.EventEmitter.call(this),i.checkIsFunction(t,"Expected fn to be a function."),i.checkIsArray(e,"Expected args to be an array."),i.checkIsFunction(r,"Expected callback to be a function."),this.function_=t,this.arguments_=e,this.callback_=r,this.lastResult_=[],this.numRetries_=0,this.backoff_=null,this.strategy_=null,this.failAfter_=-1,this.retryPredicate_=f.DEFAULT_RETRY_PREDICATE_,this.state_=f.State_.PENDING}o.inherits(f,n.EventEmitter),f.State_={PENDING:0,RUNNING:1,COMPLETED:2,ABORTED:3},f.DEFAULT_RETRY_PREDICATE_=function(t){return!0},f.prototype.isPending=function(){return this.state_==f.State_.PENDING},f.prototype.isRunning=function(){return this.state_==f.State_.RUNNING},f.prototype.isCompleted=function(){return this.state_==f.State_.COMPLETED},f.prototype.isAborted=function(){return this.state_==f.State_.ABORTED},f.prototype.setStrategy=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.strategy_=t,this},f.prototype.retryIf=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.retryPredicate_=t,this},f.prototype.getLastResult=function(){return this.lastResult_.concat()},f.prototype.getNumRetries=function(){return this.numRetries_},f.prototype.failAfter=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.failAfter_=t,this},f.prototype.abort=function(){this.isCompleted()||this.isAborted()||(this.isRunning()&&this.backoff_.reset(),this.state_=f.State_.ABORTED,this.lastResult_=[new Error("Backoff aborted.")],this.emit("abort"),this.doCallback_())},f.prototype.start=function(t){i.checkState(!this.isAborted(),"FunctionCall is aborted."),i.checkState(this.isPending(),"FunctionCall already started.");var e=this.strategy_||new s;this.backoff_=t?t(e):new a(e),this.backoff_.on("ready",this.doCall_.bind(this,!0)),this.backoff_.on("fail",this.doCallback_.bind(this)),this.backoff_.on("backoff",this.handleBackoff_.bind(this)),this.failAfter_>0&&this.backoff_.failAfter(this.failAfter_),this.state_=f.State_.RUNNING,this.doCall_(!1)},f.prototype.doCall_=function(t){t&&this.numRetries_++;var e=["call"].concat(this.arguments_);n.EventEmitter.prototype.emit.apply(this,e);var r=this.handleFunctionCallback_.bind(this);this.function_.apply(null,this.arguments_.concat(r))},f.prototype.doCallback_=function(){this.callback_.apply(null,this.lastResult_)},f.prototype.handleFunctionCallback_=function(){if(!this.isAborted()){var t=Array.prototype.slice.call(arguments);this.lastResult_=t,n.EventEmitter.prototype.emit.apply(this,["callback"].concat(t));var e=t[0];e&&this.retryPredicate_(e)?this.backoff_.backoff(e):(this.state_=f.State_.COMPLETED,this.doCallback_())}},f.prototype.handleBackoff_=function(t,e,r){this.emit("backoff",t,e,r)},t.exports=f},function(t,e){},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){if(e=(0,o.default)(e||i.default),!(0,n.default)(t))return e(new Error("First argument to waterfall must be an array of functions"));if(!t.length)return e();var r=0;function u(e){var n=(0,f.default)(t[r++]);e.push((0,s.default)(c)),n.apply(null,e)}function c(n){if(n||r===t.length)return e.apply(null,arguments);u((0,a.default)(arguments,1))}u([])};var n=u(r(101)),i=u(r(46)),o=u(r(70)),a=u(r(52)),s=u(r(72)),f=u(r(38));function u(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){(0,i.default)(n.default,t,e)};var n=o(r(93)),i=o(r(261));function o(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,r){r=r||n.default;var s=(0,i.default)(e)?[]:{};t(e,(function(t,e,r){(0,a.default)(t)((function(t,n){arguments.length>2&&(n=(0,o.default)(arguments,1)),s[e]=n,r(t)}))}),(function(t){r(t,s)}))};var n=s(r(46)),i=s(r(51)),o=s(r(52)),a=s(r(38));function s(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){const n=r(64),i=r(263);function o(t){const e=new Error("Expect argument to be non-empty array");if("object"!=typeof t||!t.length)throw e;const r=t.map((function(t){return"bytes"===t.type?n.toBuffer(t.value):t.value})),o=t.map((function(t){return t.type})),a=t.map((function(t){if(!t.name)throw e;return t.type+" "+t.name}));return i.soliditySHA3(["bytes32","bytes32"],[i.soliditySHA3(new Array(t.length).fill("string"),a),i.soliditySHA3(o,r)])}function a(t,e){const r=n.toBuffer(e),i=n.fromRpcSig(r);return n.ecrecover(t,i.v,i.r,i.s)}function s(t){const e=n.toBuffer(t.data);return a(n.hashPersonalMessage(e),t.sig)}function f(t,e){for(var r=""+t;r.lengtho)throw new Error("Elements exceed array size: "+o);for(l in h=[],t=t.slice(0,t.lastIndexOf("[")),"string"==typeof r&&(r=JSON.parse(r)),r)h.push(d(t,r[l]));if("dynamic"===o){var p=d("uint256",r.length);h.unshift(p)}return e.concat(h)}if("bytes"===t)return r=e.from(r),h=e.concat([d("uint256",r.length),r]),r.length%32!=0&&(h=e.concat([h,n.zeros(32-r.length%32)])),h;if(t.startsWith("bytes")){if((o=s(t))<1||o>32)throw new Error("Invalid bytes width: "+o);return n.setLengthRight(r,32)}if(t.startsWith("uint")){if((o=s(t))%8||o<8||o>256)throw new Error("Invalid uint width: "+o);if((a=c(r)).bitLength()>o)throw new Error("Supplied uint exceeds width: "+o+" vs "+a.bitLength());if(a<0)throw new Error("Supplied uint is negative");return a.toArrayLike(e,"be",32)}if(t.startsWith("int")){if((o=s(t))%8||o<8||o>256)throw new Error("Invalid int width: "+o);if((a=c(r)).bitLength()>o)throw new Error("Supplied int exceeds width: "+o+" vs "+a.bitLength());return a.toTwos(256).toArrayLike(e,"be",32)}if(t.startsWith("ufixed")){if(o=f(t),(a=c(r))<0)throw new Error("Supplied ufixed is negative");return d("uint256",a.mul(new i(2).pow(new i(o[1]))))}if(t.startsWith("fixed"))return o=f(t),d("int256",c(r).mul(new i(2).pow(new i(o[1]))));throw new Error("Unsupported or invalid type: "+t)}function l(t,r,n){var o,a,s,f;if("string"==typeof t&&(t=p(t)),"address"===t.name)return l(t.rawType,r,n).toArrayLike(e,"be",20).toString("hex");if("bool"===t.name)return l(t.rawType,r,n).toString()===new i(1).toString();if("string"===t.name){var u=l(t.rawType,r,n);return e.from(u,"utf8").toString()}if(t.isArray){for(s=[],o=t.size,"dynamic"===t.size&&(n=l("uint256",r,n).toNumber(),o=l("uint256",r,n).toNumber(),n+=32),f=0;ft.size)throw new Error("Decoded int exceeds width: "+t.size+" vs "+a.bitLength());return a}if(t.name.startsWith("int")){if((a=new i(r.slice(n,n+32),16,"be").fromTwos(256)).bitLength()>t.size)throw new Error("Decoded uint exceeds width: "+t.size+" vs "+a.bitLength());return a}if(t.name.startsWith("ufixed")){if(o=new i(2).pow(new i(t.size[1])),!(a=l("uint256",r,n)).mod(o).isZero())throw new Error("Decimals not supported yet");return a.div(o)}if(t.name.startsWith("fixed")){if(o=new i(2).pow(new i(t.size[1])),!(a=l("int256",r,n)).mod(o).isZero())throw new Error("Decimals not supported yet");return a.div(o)}throw new Error("Unsupported or invalid type: "+t.name)}function p(t){var e,r,n;if(y(t)){e=u(t);var i=t.slice(0,t.lastIndexOf("["));return i=p(i),r={isArray:!0,name:t,size:e,memoryUsage:"dynamic"===e?32:i.memoryUsage*e,subArray:i}}switch(t){case"address":n="uint160";break;case"bool":n="uint8";break;case"string":n="bytes"}if(r={rawType:n,name:t,memoryUsage:32},t.startsWith("bytes")&&"bytes"!==t||t.startsWith("uint")||t.startsWith("int")?r.size=s(t):(t.startsWith("ufixed")||t.startsWith("fixed"))&&(r.size=f(t)),t.startsWith("bytes")&&"bytes"!==t&&(r.size<1||r.size>32))throw new Error("Invalid bytes width: "+r.size);if((t.startsWith("uint")||t.startsWith("int"))&&(r.size%8||r.size<8||r.size>256))throw new Error("Invalid int/uint width: "+r.size);return r}function b(t){return"string"===t||"bytes"===t||"dynamic"===u(t)}function y(t){return t.lastIndexOf("]")===t.length-1}function g(t,e){return t.startsWith("address")||t.startsWith("bytes")?"0x"+e.toString("hex"):e.toString()}o.eventID=function(t,r){var i=t+"("+r.map(a).join(",")+")";return n.keccak256(e.from(i))},o.methodID=function(t,e){return o.eventID(t,e).slice(0,4)},o.rawEncode=function(t,r){var n=[],i=[],o=0;t.forEach((function(t){if(y(t)){var e=u(t);o+="dynamic"!==e?32*e:32}else o+=32}));for(var s=0;s32)throw new Error("Invalid bytes width: "+i);f.push(n.setLengthRight(d,i))}else if(h.startsWith("uint")){if((i=s(h))%8||i<8||i>256)throw new Error("Invalid uint width: "+i);if((o=c(d)).bitLength()>i)throw new Error("Supplied uint exceeds width: "+i+" vs "+o.bitLength());f.push(o.toArrayLike(e,"be",i/8))}else{if(!h.startsWith("int"))throw new Error("Unsupported or invalid type: "+h);if((i=s(h))%8||i<8||i>256)throw new Error("Invalid int width: "+i);if((o=c(d)).bitLength()>i)throw new Error("Supplied int exceeds width: "+i+" vs "+o.bitLength());f.push(o.toTwos(i).toArrayLike(e,"be",i/8))}}return e.concat(f)},o.soliditySHA3=function(t,e){return n.keccak256(o.solidityPack(t,e))},o.soliditySHA256=function(t,e){return n.sha256(o.solidityPack(t,e))},o.solidityRIPEMD160=function(t,e){return n.ripemd160(o.solidityPack(t,e),!0)},o.fromSerpent=function(t){for(var e,r=[],n=0;n="0"&&e<="9");)o+=t[a]-"0",a++;n=a-1,r.push(o)}else if("i"===i)r.push("int256");else{if("a"!==i)throw new Error("Unsupported or invalid type: "+i);r.push("int256[]")}}return r},o.toSerpent=function(t){for(var e=[],r=0;r0&&"0"===e.toString();)e=(t=t.slice(1))[0];return t},e.stripZeros=e.unpad,e.toBuffer=function(t){if(!u.isBuffer(t))if(Array.isArray(t))t=u.from(t);else if("string"==typeof t)t=e.isHexString(t)?u.from(e.padToEven(e.stripHexPrefix(t)),"hex"):u.from(t);else if("number"==typeof t)t=e.intToBuffer(t);else if(null==t)t=u.allocUnsafe(0);else if(n.isBN(t))t=t.toArrayLike(u);else{if(!t.toArray)throw new Error("invalid type");t=u.from(t.toArray())}return t},e.bufferToInt=function(t){return new n(e.toBuffer(t)).toNumber()},e.bufferToHex=function(t){return"0x"+(t=e.toBuffer(t)).toString("hex")},e.fromSigned=function(t){return new n(t).fromTwos(256)},e.toUnsigned=function(t){return u.from(t.toTwos(256).toArray())},e.keccak=function(t,r){return void 0===r&&(r=256),t=e.toBuffer(t),r||(r=256),o("keccak"+r).update(t).digest()},e.keccak256=function(t){return e.keccak(t)},e.sha256=function(t){return t=e.toBuffer(t),f("sha256").update(t).digest()},e.ripemd160=function(t,r){t=e.toBuffer(t);var n=f("rmd160").update(t).digest();return!0===r?e.setLength(n,32):n},e.rlphash=function(t){return e.keccak(i.encode(t))},e.isValidPrivate=function(t){return a.privateKeyVerify(t)},e.isValidPublic=function(t,e){return void 0===e&&(e=!1),64===t.length?a.publicKeyVerify(u.concat([u.from([4]),t])):!!e&&a.publicKeyVerify(t)},e.pubToAddress=function(t,r){return void 0===r&&(r=!1),t=e.toBuffer(t),r&&64!==t.length&&(t=a.publicKeyConvert(t,!1).slice(1)),s(64===t.length),e.keccak(t).slice(-20)},e.publicToAddress=e.pubToAddress,e.privateToPublic=function(t){return t=e.toBuffer(t),a.publicKeyCreate(t,!1).slice(1)},e.importPublic=function(t){return 64!==(t=e.toBuffer(t)).length&&(t=a.publicKeyConvert(t,!1).slice(1)),t},e.ecsign=function(t,e,r){var n=a.sign(t,e),i=n.recovery;return{r:n.signature.slice(0,32),s:n.signature.slice(32,64),v:r?i+(2*r+35):i+27}},e.hashPersonalMessage=function(t){var r=e.toBuffer("Ethereum Signed Message:\n"+t.length.toString());return e.keccak(u.concat([r,t]))},e.ecrecover=function(t,r,n,i,o){var s=u.concat([e.setLength(n,32),e.setLength(i,32)],64),f=h(r,o);if(!d(f))throw new Error("Invalid signature v value");var c=a.recover(t,s,f);return a.publicKeyConvert(c,!1).slice(1)},e.toRpcSig=function(t,r,n,i){if(!d(h(t,i)))throw new Error("Invalid signature v value");return e.bufferToHex(u.concat([e.setLengthLeft(r,32),e.setLengthLeft(n,32),e.toBuffer(t)]))},e.fromRpcSig=function(t){var r=e.toBuffer(t);if(65!==r.length)throw new Error("Invalid signature length");var n=r[64];return n<27&&(n+=27),{v:n,r:r.slice(0,32),s:r.slice(32,64)}},e.privateToAddress=function(t){return e.publicToAddress(e.privateToPublic(t))},e.isValidAddress=function(t){return/^0x[0-9a-fA-F]{40}$/.test(t)},e.isZeroAddress=function(t){return e.zeroAddress()===e.addHexPrefix(t)},e.toChecksumAddress=function(t){t=c.stripHexPrefix(t).toLowerCase();for(var r=e.keccak(t).toString("hex"),n="0x",i=0;i=8?n+=t[i].toUpperCase():n+=t[i];return n},e.isValidChecksumAddress=function(t){return e.isValidAddress(t)&&e.toChecksumAddress(t)===t},e.generateAddress=function(t,r){t=e.toBuffer(t);var i=new n(r);return i.isZero()?e.rlphash([t,null]).slice(-20):e.rlphash([t,u.from(i.toArray())]).slice(-20)},e.generateAddress2=function(t,r,n){var i=e.toBuffer(t),o=e.toBuffer(r),a=e.toBuffer(n);return s(20===i.length),s(32===o.length),e.keccak256(u.concat([u.from("ff","hex"),i,o,e.keccak256(a)])).slice(-20)},e.isPrecompiled=function(t){var r=e.unpad(t);return 1===r.length&&r[0]>=1&&r[0]<=8},e.addHexPrefix=function(t){return"string"!=typeof t?t:c.isHexPrefixed(t)?t:"0x"+t},e.isValidSignature=function(t,e,r,i,o){void 0===i&&(i=!0);var a=new n("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),s=new n("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);if(32!==e.length||32!==r.length)return!1;if(!d(h(t,o)))return!1;var f=new n(e),u=new n(r);return!(f.isZero()||f.gt(s)||u.isZero()||u.gt(s))&&(!i||1!==u.cmp(a))},e.baToJSON=function(t){if(u.isBuffer(t))return"0x"+t.toString("hex");if(t instanceof Array){for(var r=[],n=0;n=i.length,"The field "+r.name+" must not have more "+r.length+" bytes")):r.allowZero&&0===i.length||!r.length||s(r.length===i.length,"The field "+r.name+" must have byte length of "+r.length),t.raw[n]=i}t._fields.push(r.name),Object.defineProperty(t,r.name,{enumerable:!0,configurable:!0,get:i,set:o}),r.default&&(t[r.name]=r.default),r.alias&&Object.defineProperty(t,r.alias,{enumerable:!1,configurable:!0,set:o,get:i})})),n)if("string"==typeof n&&(n=u.from(c.stripHexPrefix(n),"hex")),u.isBuffer(n)&&(n=i.decode(n)),Array.isArray(n)){if(n.length>t._fields.length)throw new Error("wrong number of fields in data");n.forEach((function(r,n){t[t._fields[n]]=e.toBuffer(r)}))}else{if("object"!=typeof n)throw new Error("invalid data");var o=Object.keys(n);r.forEach((function(e){-1!==o.indexOf(e.name)&&(t[e.name]=n[e.name]),-1!==o.indexOf(e.alias)&&(t[e.alias]=n[e.alias])}))}}},function(t,e,r){(function(e){!function(r){"use strict";var n=function(t){setTimeout(t,0)};void 0!==e&&e&&"function"==typeof e.nextTick&&(n=e.nextTick),t.exports=function(t){var e={capacity:t||1,current:0,queue:[],firstHere:!1,take:function(){if(!1===e.firstHere){e.current++,e.firstHere=!0;var t=1}else t=0;var r={n:1};"function"==typeof arguments[0]?r.task=arguments[0]:r.n=arguments[0],arguments.length>=2&&("function"==typeof arguments[1]?r.task=arguments[1]:r.n=arguments[1]);var n=r.task;if(r.task=function(){n(e.leave)},e.current+r.n-t>e.capacity)return 1===t&&(e.current--,e.firstHere=!1),e.queue.push(r);e.current+=r.n-t,r.task(e.leave),1===t&&(e.firstHere=!1)},leave:function(t){if(t=t||1,e.current-=t,e.queue.length){var r=e.queue[0];r.n+e.current>e.capacity||(e.queue.shift(),e.current+=r.n,n(r.task))}else if(e.current<0)throw new Error("leave called too many times.")},available:function(t){return t=t||1,e.current+t<=e.capacity}};return e}}()}).call(this,r(18))},function(t,e,r){const n=r(47);t.exports=function(t,e,r){t.sendAsync(n({method:"eth_estimateGas",params:[e]}),(function(t,e){if(t)return"no contract code at given address"===t.message?r(null,"0xcf08"):r(t);r(null,e.result)}))}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiU2NhdHRlckpTXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLXV0aWwtaXMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtbmV4dGljay1hcmdzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3dyYXBBc3luYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc2hhLmpzL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9ub29wLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy93ZWIzLXByb3ZpZGVyLWVuZ2luZS91dGlsL2NyZWF0ZS1wYXlsb2FkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL0J1ZmZlckxpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2R1cGxleC1icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtdXRpbC9kaXN0L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9jcmVhdGUtaGFzaC9icm93c2VyLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGpzLXV0aWwvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL29uY2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL29ubHlPbmNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvc3VicHJvdmlkZXJzL3N1YnByb3ZpZGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wcmVjb25kL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9rZWNjYWsvanMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlY3AyNTZrMS9lbGxpcHRpYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhNTEyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvY29tbW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8yNTYuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2Fzc2VydC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvcmxwL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2lzLWhleC1wcmVmaXhlZC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2VhY2hPZi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvaW50ZXJuYWwvYnJlYWtMb29wLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9lYWNoT2ZMaW1pdC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2RvTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9HZXRJbnRyaW5zaWMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmFja29mZi9saWIvYmFja29mZi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmFja29mZi9saWIvc3RyYXRlZ3kvc3RyYXRlZ3kuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2JhY2tvZmYvbGliL3N0cmF0ZWd5L2ZpYm9uYWNjaS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy9ycGMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy93ZWJzb2NrZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy9ob29rZWQtd2FsbGV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXRpbC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMva2VjY2FrL2xpYi9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIvYXBpL2tlY2Nhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMva2VjY2FrL2xpYi9hcGkvc2hha2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIva2VjY2FrLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9rZWNjYWsvbGliL2tlY2Nhay1zdGF0ZS11bnJvbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlY3AyNTZrMS9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlY3AyNTZrMS9saWIvYXNzZXJ0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zZWNwMjU2azEvbGliL2Rlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmlwNjYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlY3AyNTZrMS9saWIvZWxsaXB0aWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL21kNS5qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvcmlwZW1kMTYwL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NoYS5qcy9zaGExLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjI0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMzg0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvbW9udC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Vkd2FyZHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8xLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8yMjQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzM4NC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9yaXBlbWQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3ByZWNvbXB1dGVkL3NlY3AyNTZrMS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9obWFjLWRyYmcvbGliL2htYWMtZHJiZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2tleS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Eva2V5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Evc2lnbmF0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zdHJpcC1oZXgtcHJlZml4L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoLWJsb2NrLXRyYWNrZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGgtcXVlcnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb24tcnBjLXJhbmRvbS1pZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvcGlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoLWJsb2NrLXRyYWNrZXIvc3JjL2hleFV0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2RvUGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvZWFjaE9mTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9nZXRJdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvYXN5bmNpZnkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2luaXRpYWxQYXJhbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvaW50ZXJuYWwvbWFwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9lYWNoU2VyaWVzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9lYWNoTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3dpdGhvdXRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvdXRpbC9zdG9wbGlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3V0aWwvcnBjLWNhY2hlLXV0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb25pZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3V0aWwvcmFuZG9tLWlkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2lzLWZ1bmN0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wYXJzZS1oZWFkZXJzL3BhcnNlLWhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9lczUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvYXNzZXJ0UmVjb3JkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2lzTmFOLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL2lzRmluaXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvbW9kLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS50cmltL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2Zvci1lYWNoL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uLXJwYy1lcnJvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvanNvbi1ycGMtZXJyb3IvbGliL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmFja29mZi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvcHJlY29uZC9saWIvY2hlY2tzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wcmVjb25kL2xpYi9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2JhY2tvZmYvbGliL3N0cmF0ZWd5L2V4cG9uZW50aWFsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9iYWNrb2ZmL2xpYi9mdW5jdGlvbl9jYWxsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy93YXRlcmZhbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL3BhcmFsbGVsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9wYXJhbGxlbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoLXNpZy11dGlsL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLWFiaS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLWFiaS9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy11dGlsL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlbWFwaG9yZS9saWIvc2VtYXBob3JlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy93ZWIzLXByb3ZpZGVyLWVuZ2luZS91dGlsL2VzdGltYXRlLWdhcy5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlc29sdmUiLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJlcnJvciIsImRvbmUiLCJQcm9taXNlIiwidGhlbiIsImZuIiwic2VsZiIsInRoaXMiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTY2F0dGVySlMiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImxlbmd0aCIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl90eXBlb2YiLCJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJnIiwiRnVuY3Rpb24iLCJlIiwid2luZG93IiwiYmFzZTY0IiwiaWVlZTc1NCIsImlzQXJyYXkiLCJrTWF4TGVuZ3RoIiwiQnVmZmVyIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsImNyZWF0ZUJ1ZmZlciIsInRoYXQiLCJSYW5nZUVycm9yIiwiVWludDhBcnJheSIsImVuY29kaW5nT3JPZmZzZXQiLCJFcnJvciIsImFsbG9jVW5zYWZlIiwiZnJvbSIsIkFycmF5QnVmZmVyIiwiYXJyYXkiLCJieXRlT2Zmc2V0IiwiYnl0ZUxlbmd0aCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlCdWZmZXIiLCJzdHJpbmciLCJlbmNvZGluZyIsImlzRW5jb2RpbmciLCJhY3R1YWwiLCJ3cml0ZSIsInNsaWNlIiwiZnJvbVN0cmluZyIsIm9iaiIsImlzQnVmZmVyIiwibGVuIiwiY2hlY2tlZCIsImNvcHkiLCJidWZmZXIiLCJ2YWwiLCJ0eXBlIiwiZGF0YSIsImZyb21PYmplY3QiLCJhc3NlcnRTaXplIiwic2l6ZSIsInRvU3RyaW5nIiwiaXNWaWV3IiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJ0b0xvd2VyQ2FzZSIsInNsb3dUb1N0cmluZyIsInN0YXJ0IiwiZW5kIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJkaXIiLCJpc05hTiIsImFycmF5SW5kZXhPZiIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImFyciIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsIlN0cmluZyIsInJlYWQiLCJidWYiLCJyZWFkVUludDE2QkUiLCJmb3VuZEluZGV4IiwiZm91bmQiLCJqIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJOdW1iZXIiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJwYXJzZUludCIsInN1YnN0ciIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwic3RyIiwiYnl0ZUFycmF5IiwicHVzaCIsImNoYXJDb2RlQXQiLCJhc2NpaVRvQnl0ZXMiLCJsYXRpbjFXcml0ZSIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidW5pdHMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJmcm9tQnl0ZUFycmF5IiwiTWF0aCIsIm1pbiIsInJlcyIsInNlY29uZEJ5dGUiLCJ0aGlyZEJ5dGUiLCJmb3VydGhCeXRlIiwidGVtcENvZGVQb2ludCIsImZpcnN0Qnl0ZSIsImNvZGVQb2ludCIsImJ5dGVzUGVyU2VxdWVuY2UiLCJjb2RlUG9pbnRzIiwiTUFYX0FSR1VNRU5UU19MRU5HVEgiLCJmcm9tQ2hhckNvZGUiLCJkZWNvZGVDb2RlUG9pbnRzQXJyYXkiLCJTbG93QnVmZmVyIiwiYWxsb2MiLCJJTlNQRUNUX01BWF9CWVRFUyIsImdsb2JhbCIsImZvbyIsInN1YmFycmF5IiwidHlwZWRBcnJheVN1cHBvcnQiLCJwb29sU2l6ZSIsIl9hdWdtZW50Iiwic3BlY2llcyIsImZpbGwiLCJhbGxvY1Vuc2FmZVNsb3ciLCJfaXNCdWZmZXIiLCJjb21wYXJlIiwiYSIsIngiLCJ5IiwiY29uY2F0IiwibGlzdCIsInBvcyIsInN3YXAxNiIsInN3YXAzMiIsInN3YXA2NCIsImVxdWFscyIsImluc3BlY3QiLCJtYXgiLCJtYXRjaCIsImpvaW4iLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIkFycmF5IiwiX2FyciIsInJldCIsIm91dCIsInRvSGV4IiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwib2JqZWN0V3JpdGVVSW50MTYiLCJsaXR0bGVFbmRpYW4iLCJvYmplY3RXcml0ZVVJbnQzMiIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic2xpY2VMZW4iLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50OCIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInBvdyIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJmbG9vciIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsInNldCIsImNvZGUiLCJJTlZBTElEX0JBU0U2NF9SRSIsIkluZmluaXR5IiwibGVhZFN1cnJvZ2F0ZSIsInRvQnl0ZUFycmF5IiwidHJpbSIsInJlcGxhY2UiLCJzdHJpbmd0cmltIiwiYmFzZTY0Y2xlYW4iLCJzcmMiLCJkc3QiLCJfdHlwZW9mMiIsIml0ZXJhdG9yIiwiY29weVByb3BzIiwiU2FmZUJ1ZmZlciIsImN0b3IiLCJzdXBlckN0b3IiLCJzdXBlcl8iLCJUZW1wQ3RvciIsInBuYSIsIm9iamVjdEtleXMiLCJrZXlzIiwiRHVwbGV4IiwidXRpbCIsImluaGVyaXRzIiwiUmVhZGFibGUiLCJXcml0YWJsZSIsInYiLCJtZXRob2QiLCJvcHRpb25zIiwicmVhZGFibGUiLCJhbGxvd0hhbGZPcGVuIiwib25jZSIsIm9uZW5kIiwiX3dyaXRhYmxlU3RhdGUiLCJlbmRlZCIsIm5leHRUaWNrIiwib25FbmROVCIsImhpZ2hXYXRlck1hcmsiLCJfcmVhZGFibGVTdGF0ZSIsImRlc3Ryb3llZCIsIl9kZXN0cm95IiwiY2IiLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIk51bWJlcklzTmFOIiwiRXZlbnRFbWl0dGVyIiwiaW5pdCIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsIiRnZXRNYXhMaXN0ZW5lcnMiLCJfYWRkTGlzdGVuZXIiLCJsaXN0ZW5lciIsInByZXBlbmQiLCJldmVudHMiLCJleGlzdGluZyIsIndhcm5pbmciLCJuZXdMaXN0ZW5lciIsImVtaXQiLCJ1bnNoaWZ0Iiwid2FybmVkIiwidyIsImVtaXR0ZXIiLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsInJlbW92ZUxpc3RlbmVyIiwid3JhcEZuIiwiX29uY2VXcmFwIiwic3RhdGUiLCJ3cmFwcGVkIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlciIsIm1lc3NhZ2UiLCJjb250ZXh0IiwiaGFuZGxlciIsImxpc3RlbmVycyIsImFkZExpc3RlbmVyIiwib24iLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwicG9zaXRpb24iLCJvcmlnaW5hbExpc3RlbmVyIiwic2hpZnQiLCJpbmRleCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJhc3NlcnQiLCJtc2ciLCJCTiIsIm51bWJlciIsImJhc2UiLCJlbmRpYW4iLCJpc0JOIiwibmVnYXRpdmUiLCJ3b3JkcyIsInJlZCIsIl9pbml0Iiwid29yZFNpemUiLCJwYXJzZUhleCIsInBhcnNlQmFzZSIsIm51bSIsImxlZnQiLCJyaWdodCIsImNtcCIsIl9pbml0TnVtYmVyIiwiX2luaXRBcnJheSIsIl9wYXJzZUhleCIsIl9wYXJzZUJhc2UiLCJzdHJpcCIsInRvQXJyYXkiLCJjZWlsIiwibGltYkxlbiIsImxpbWJQb3ciLCJ0b3RhbCIsIm1vZCIsIndvcmQiLCJpbXVsbiIsIl9pYWRkbiIsImRlc3QiLCJjbG9uZSIsIl9leHBhbmQiLCJfbm9ybVNpZ24iLCJ6ZXJvcyIsImdyb3VwU2l6ZXMiLCJncm91cEJhc2VzIiwic21hbGxNdWxUbyIsImNhcnJ5IiwiayIsIm5jYXJyeSIsInJ3b3JkIiwibWF4SiIsInBhZGRpbmciLCJncm91cFNpemUiLCJncm91cEJhc2UiLCJpc1plcm8iLCJtb2RuIiwiaWRpdm4iLCJ0b051bWJlciIsInRvQnVmZmVyIiwidG9BcnJheUxpa2UiLCJBcnJheVR5cGUiLCJyZXFMZW5ndGgiLCJxIiwiYW5kbG4iLCJpdXNocm4iLCJjbHozMiIsIl9jb3VudEJpdHMiLCJfemVyb0JpdHMiLCJiaXRMZW5ndGgiLCJ6ZXJvQml0cyIsInRvVHdvcyIsIndpZHRoIiwiYWJzIiwiaW5vdG4iLCJpYWRkbiIsImZyb21Ud29zIiwidGVzdG4iLCJub3RuIiwiaW5lZyIsImlzTmVnIiwibmVnIiwiaXVvciIsImlvciIsIm9yIiwidW9yIiwiaXVhbmQiLCJpYW5kIiwiYW5kIiwidWFuZCIsIml1eG9yIiwiaXhvciIsInhvciIsInV4b3IiLCJieXRlc05lZWRlZCIsImJpdHNMZWZ0Iiwic2V0biIsImJpdCIsIndiaXQiLCJpYWRkIiwiaXN1YiIsImFkZCIsImNvbWIxME11bFRvIiwibWlkIiwiYTAiLCJhbDAiLCJhaDAiLCJhMSIsImFsMSIsImFoMSIsImEyIiwiYWwyIiwiYWgyIiwiYTMiLCJhbDMiLCJhaDMiLCJhNCIsImFsNCIsImFoNCIsImE1IiwiYWw1IiwiYWg1IiwiYTYiLCJhbDYiLCJhaDYiLCJhNyIsImFsNyIsImFoNyIsImE4IiwiYWw4IiwiYWg4IiwiYTkiLCJhbDkiLCJhaDkiLCJiMCIsImJsMCIsImJoMCIsImIxIiwiYmwxIiwiYmgxIiwiYjIiLCJibDIiLCJiaDIiLCJiMyIsImJsMyIsImJoMyIsImI0IiwiYmw0IiwiYmg0IiwiYjUiLCJibDUiLCJiaDUiLCJiNiIsImJsNiIsImJoNiIsImI3IiwiYmw3IiwiYmg3IiwiYjgiLCJibDgiLCJiaDgiLCJiOSIsImJsOSIsImJoOSIsIncwIiwiaW11bCIsIncxIiwidzIiLCJ3MyIsInc0IiwidzUiLCJ3NiIsInc3IiwidzgiLCJ3OSIsIncxMCIsIncxMSIsIncxMiIsIncxMyIsIncxNCIsIncxNSIsIncxNiIsIncxNyIsIncxOCIsImp1bWJvTXVsVG8iLCJGRlRNIiwibXVscCIsIm11bFRvIiwiaG5jYXJyeSIsImJpZ011bFRvIiwibWFrZVJCVCIsIk4iLCJyZXZCaW4iLCJyYiIsInBlcm11dGUiLCJyYnQiLCJyd3MiLCJpd3MiLCJydHdzIiwiaXR3cyIsInRyYW5zZm9ybSIsInJ0d2RmIiwiY29zIiwiUEkiLCJpdHdkZiIsInNpbiIsInJ0d2RmXyIsIml0d2RmXyIsInJlIiwiaWUiLCJybyIsImlvIiwicngiLCJndWVzc0xlbjEzYiIsIm9kZCIsImNvbmp1Z2F0ZSIsIm5vcm1hbGl6ZTEzYiIsIndzIiwicm91bmQiLCJjb252ZXJ0MTNiIiwic3R1YiIsInBoIiwiXyIsInJ3c3QiLCJpd3N0IiwibnJ3cyIsIm5yd3N0Iiwibml3c3QiLCJybXdzIiwibXVsZiIsIm11bG4iLCJzcXIiLCJpc3FyIiwidG9CaXRBcnJheSIsIml1c2hsbiIsImJpdHMiLCJjYXJyeU1hc2siLCJuZXdDYXJyeSIsImlzaGxuIiwiaGludCIsImV4dGVuZGVkIiwiaCIsIm1hc2siLCJtYXNrZWRXb3JkcyIsImlzaHJuIiwic2hsbiIsInVzaGxuIiwic2hybiIsInVzaHJuIiwiaW1hc2tuIiwibWFza24iLCJpc3VibiIsImFkZG4iLCJzdWJuIiwiaWFicyIsIl9pc2hsbnN1Ym11bCIsIl93b3JkRGl2IiwiYmhpIiwiZGlmZiIsInFqIiwiZGl2IiwiZGl2bW9kIiwicG9zaXRpdmUiLCJkaXZuIiwidW1vZCIsImRpdlJvdW5kIiwiZG0iLCJoYWxmIiwicjIiLCJhY2MiLCJlZ2NkIiwiQSIsIkIiLCJDIiwiRCIsImlzRXZlbiIsInlwIiwieHAiLCJpbSIsImlzT2RkIiwiam0iLCJnY2QiLCJfaW52bXAiLCJ4MSIsIngyIiwiZGVsdGEiLCJjbXBuIiwiaW52bSIsImJpbmNuIiwidWNtcCIsImd0biIsImd0IiwiZ3RlbiIsImd0ZSIsImx0biIsImx0IiwibHRlbiIsImx0ZSIsImVxbiIsImVxIiwiUmVkIiwidG9SZWQiLCJjdHgiLCJjb252ZXJ0VG8iLCJfZm9yY2VSZWQiLCJmcm9tUmVkIiwiY29udmVydEZyb20iLCJmb3JjZVJlZCIsInJlZEFkZCIsInJlZElBZGQiLCJyZWRTdWIiLCJyZWRJU3ViIiwicmVkU2hsIiwic2hsIiwicmVkTXVsIiwiX3ZlcmlmeTIiLCJyZWRJTXVsIiwicmVkU3FyIiwiX3ZlcmlmeTEiLCJyZWRJU3FyIiwicmVkU3FydCIsInNxcnQiLCJyZWRJbnZtIiwicmVkTmVnIiwicmVkUG93IiwicHJpbWVzIiwiazI1NiIsInAyMjQiLCJwMTkyIiwicDI1NTE5IiwiTVByaW1lIiwidG1wIiwiX3RtcCIsIksyNTYiLCJQMjI0IiwiUDE5MiIsIlAyNTUxOSIsInByaW1lIiwiX3ByaW1lIiwiTW9udCIsImltb2QiLCJyaW52IiwibWludiIsImlyZWR1Y2UiLCJybGVuIiwic3BsaXQiLCJpbXVsSyIsImlucHV0Iiwib3V0cHV0Iiwib3V0TGVuIiwicHJldiIsIm5leHQiLCJtb2QzIiwib25lIiwibk9uZSIsImxwb3ciLCJ6IiwiaW52Iiwid25kIiwiY3VycmVudCIsImN1cnJlbnRMZW4iLCJtb250IiwidSIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJwcm9jZXNzIiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsInRpbWVvdXQiLCJydW4iLCJtYXJrZXIiLCJydW5DbGVhclRpbWVvdXQiLCJJdGVtIiwibm9vcCIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIlJlZmVyZW5jZUVycm9yIiwiX3NldFByb3RvdHlwZU9mIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZm9ybWF0UmVnRXhwIiwiZm9ybWF0IiwiZiIsImlzU3RyaW5nIiwib2JqZWN0cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc051bGwiLCJpc09iamVjdCIsImRlcHJlY2F0ZSIsIm5vRGVwcmVjYXRpb24iLCJ0aHJvd0RlcHJlY2F0aW9uIiwidHJhY2VEZXByZWNhdGlvbiIsInRyYWNlIiwiZGVidWdFbnZpcm9uIiwiZGVidWdzIiwib3B0cyIsInNlZW4iLCJzdHlsaXplIiwic3R5bGl6ZU5vQ29sb3IiLCJkZXB0aCIsImNvbG9ycyIsImlzQm9vbGVhbiIsInNob3dIaWRkZW4iLCJfZXh0ZW5kIiwiaXNVbmRlZmluZWQiLCJjdXN0b21JbnNwZWN0Iiwic3R5bGl6ZVdpdGhDb2xvciIsImZvcm1hdFZhbHVlIiwic3R5bGVUeXBlIiwic3R5bGUiLCJzdHlsZXMiLCJyZWN1cnNlVGltZXMiLCJpc0Z1bmN0aW9uIiwicHJpbWl0aXZlIiwic2ltcGxlIiwiaXNOdW1iZXIiLCJmb3JtYXRQcmltaXRpdmUiLCJ2aXNpYmxlS2V5cyIsImhhc2giLCJmb3JFYWNoIiwiaWR4IiwiYXJyYXlUb0hhc2giLCJpc0Vycm9yIiwiZm9ybWF0RXJyb3IiLCJpc1JlZ0V4cCIsIlJlZ0V4cCIsImlzRGF0ZSIsIkRhdGUiLCJicmFjZXMiLCJ0b1VUQ1N0cmluZyIsImZvcm1hdFByb3BlcnR5IiwiZm9ybWF0QXJyYXkiLCJtYXAiLCJyZWR1Y2UiLCJjdXIiLCJudW1MaW5lc0VzdCIsInJlZHVjZVRvU2luZ2xlU3RyaW5nIiwiZGVzYyIsImxpbmUiLCJhciIsIm9iamVjdFRvU3RyaW5nIiwicGFkIiwiZGVidWdsb2ciLCJOT0RFX0RFQlVHIiwidG9VcHBlckNhc2UiLCJ0ZXN0IiwicGlkIiwiaXNOdWxsT3JVbmRlZmluZWQiLCJpc1N5bWJvbCIsImlzUHJpbWl0aXZlIiwibW9udGhzIiwidGltZXN0YW1wIiwidGltZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJwcm9wIiwibG9nIiwib3JpZ2luIiwia0N1c3RvbVByb21pc2lmaWVkU3ltYm9sIiwiY2FsbGJhY2tpZnlPblJlamVjdGVkIiwicmVhc29uIiwibmV3UmVhc29uIiwicHJvbWlzaWZ5Iiwib3JpZ2luYWwiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJwcm9taXNlIiwiZGVmaW5lUHJvcGVydGllcyIsImN1c3RvbSIsImNhbGxiYWNraWZ5IiwiY2FsbGJhY2tpZmllZCIsIm1heWJlQ2IiLCJyZWoiLCJlbGxpcHRpYyIsInV0aWxzIiwicmFuZCIsImN1cnZlIiwiY3VydmVzIiwiZWMiLCJlZGRzYSIsInJ1bnRpbWUiLCJPcCIsImhhc093biIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ3cmFwIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiQ29udGV4dCIsIl9pbnZva2UiLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZSIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsIkNvbnRpbnVlU2VudGluZWwiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJlY29yZCIsInRyeUNhdGNoIiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIm1ha2VJbnZva2VNZXRob2QiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJnZXRQcm90byIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJBc3luY0l0ZXJhdG9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJpbnZva2UiLCJyZXN1bHQiLCJfX2F3YWl0IiwidW53cmFwcGVkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsIm1hcmsiLCJhd3JhcCIsImFzeW5jIiwiaXRlciIsInJldmVyc2UiLCJza2lwVGVtcFJlc2V0IiwiY2hhckF0Iiwic3RvcCIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiYWNjaWRlbnRhbFN0cmljdE1vZGUiLCJpc1N1cnJvZ2F0ZVBhaXIiLCJodG9ubCIsInplcm8yIiwiemVybzgiLCJlbmMiLCJ0b0hleDMyIiwiam9pbjMyIiwic3BsaXQzMiIsInJvdHIzMiIsInJvdGwzMiIsInN1bTMyIiwic3VtMzJfMyIsInN1bTMyXzQiLCJzdW0zMl81Iiwic3VtNjQiLCJhaCIsImFsIiwiYmgiLCJzdW02NF9oaSIsImJsIiwic3VtNjRfbG8iLCJzdW02NF80X2hpIiwiY2giLCJjbCIsImRoIiwiZGwiLCJzdW02NF80X2xvIiwic3VtNjRfNV9oaSIsImVoIiwiZWwiLCJzdW02NF81X2xvIiwicm90cjY0X2hpIiwicm90cjY0X2xvIiwic2hyNjRfaGkiLCJzaHI2NF9sbyIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJyZXZMb29rdXAiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJwYXJ0cyIsImxlbjIiLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwiTmFOIiwicnQiLCJMTjIiLCJTdHJlYW0iLCJFRSIsIlRyYW5zZm9ybSIsIlBhc3NUaHJvdWdoIiwicGlwZSIsInNvdXJjZSIsIm9uZGF0YSIsImNodW5rIiwicGF1c2UiLCJvbmRyYWluIiwicmVzdW1lIiwiX2lzU3RkaW8iLCJvbmNsb3NlIiwiZGlkT25FbmQiLCJkZXN0cm95Iiwib25lcnJvciIsImNsZWFudXAiLCJDb3JrZWRSZXF1ZXN0IiwiX3RoaXMiLCJjb3JrUmVxIiwiY2FsbGJhY2siLCJwZW5kaW5nY2IiLCJjb3JrZWRSZXF1ZXN0c0ZyZWUiLCJvbkNvcmtlZEZpbmlzaCIsImFzeW5jV3JpdGUiLCJzZXRJbW1lZGlhdGUiLCJXcml0YWJsZVN0YXRlIiwiaW50ZXJuYWxVdGlsIiwiT3VyVWludDhBcnJheSIsInJlYWxIYXNJbnN0YW5jZSIsImRlc3Ryb3lJbXBsIiwibm9wIiwic3RyZWFtIiwiaXNEdXBsZXgiLCJvYmplY3RNb2RlIiwid3JpdGFibGVPYmplY3RNb2RlIiwiaHdtIiwid3JpdGFibGVId20iLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLCJkZWZhdWx0SHdtIiwiZmluYWxDYWxsZWQiLCJuZWVkRHJhaW4iLCJlbmRpbmciLCJmaW5pc2hlZCIsIm5vRGVjb2RlIiwiZGVjb2RlU3RyaW5ncyIsImRlZmF1bHRFbmNvZGluZyIsIndyaXRpbmciLCJjb3JrZWQiLCJzeW5jIiwiYnVmZmVyUHJvY2Vzc2luZyIsIm9ud3JpdGUiLCJ3cml0ZWNiIiwid3JpdGVsZW4iLCJvbndyaXRlU3RhdGVVcGRhdGUiLCJmaW5pc2hNYXliZSIsImVycm9yRW1pdHRlZCIsIm9ud3JpdGVFcnJvciIsIm5lZWRGaW5pc2giLCJidWZmZXJlZFJlcXVlc3QiLCJjbGVhckJ1ZmZlciIsImFmdGVyV3JpdGUiLCJsYXN0QnVmZmVyZWRSZXF1ZXN0IiwicHJlZmluaXNoZWQiLCJidWZmZXJlZFJlcXVlc3RDb3VudCIsIl93cml0ZSIsIndyaXRldiIsIl93cml0ZXYiLCJmaW5hbCIsIl9maW5hbCIsImRvV3JpdGUiLCJvbndyaXRlRHJhaW4iLCJob2xkZXIiLCJhbGxCdWZmZXJzIiwiaXNCdWYiLCJjYWxsRmluYWwiLCJuZWVkIiwicHJlZmluaXNoIiwiZ2V0QnVmZmVyIiwiaGFzSW5zdGFuY2UiLCJfdWludDhBcnJheVRvQnVmZmVyIiwid3JpdGVBZnRlckVuZCIsInZhbGlkIiwidmFsaWRDaHVuayIsIm5ld0NodW5rIiwiZGVjb2RlQ2h1bmsiLCJsYXN0Iiwid3JpdGVPckJ1ZmZlciIsImNvcmsiLCJ1bmNvcmsiLCJzZXREZWZhdWx0RW5jb2RpbmciLCJlbmRXcml0YWJsZSIsIl91bmRlc3Ryb3kiLCJ1bmRlc3Ryb3kiLCJTdHJpbmdEZWNvZGVyIiwibmIiLCJuZW5jIiwicmV0cmllZCIsIl9ub3JtYWxpemVFbmNvZGluZyIsIm5vcm1hbGl6ZUVuY29kaW5nIiwidGV4dCIsInV0ZjE2VGV4dCIsInV0ZjE2RW5kIiwiZmlsbExhc3QiLCJ1dGY4RmlsbExhc3QiLCJiYXNlNjRUZXh0IiwiYmFzZTY0RW5kIiwic2ltcGxlV3JpdGUiLCJzaW1wbGVFbmQiLCJsYXN0TmVlZCIsImxhc3RUb3RhbCIsImxhc3RDaGFyIiwidXRmOENoZWNrQnl0ZSIsImJ5dGUiLCJ1dGY4Q2hlY2tFeHRyYUJ5dGVzIiwidXRmOENoZWNrSW5jb21wbGV0ZSIsImVxdWFsIiwiaXNBc3luYyIsIl9hc3luY2lmeSIsIl9hc3luY2lmeTIiLCJkZWZhdWx0Iiwic3VwcG9ydHNTeW1ib2wiLCJhc3luY0ZuIiwiSGFzaCIsImJsb2NrU2l6ZSIsImZpbmFsU2l6ZSIsIl9ibG9jayIsIl9maW5hbFNpemUiLCJfYmxvY2tTaXplIiwiX2xlbiIsInVwZGF0ZSIsImJsb2NrIiwiYWNjdW0iLCJhc3NpZ25lZCIsInJlbWFpbmRlciIsIl91cGRhdGUiLCJkaWdlc3QiLCJyZW0iLCJsb3dCaXRzIiwiaGlnaEJpdHMiLCJfaGFzaCIsIlJlYWRhYmxlU3RhdGUiLCJFRWxpc3RlbmVyQ291bnQiLCJkZWJ1Z1V0aWwiLCJkZWJ1ZyIsIkJ1ZmZlckxpc3QiLCJrUHJveHlFdmVudHMiLCJyZWFkYWJsZU9iamVjdE1vZGUiLCJyZWFkYWJsZUh3bSIsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsInBpcGVzIiwicGlwZXNDb3VudCIsImZsb3dpbmciLCJlbmRFbWl0dGVkIiwicmVhZGluZyIsIm5lZWRSZWFkYWJsZSIsImVtaXR0ZWRSZWFkYWJsZSIsInJlYWRhYmxlTGlzdGVuaW5nIiwicmVzdW1lU2NoZWR1bGVkIiwiYXdhaXREcmFpbiIsInJlYWRpbmdNb3JlIiwiZGVjb2RlciIsIl9yZWFkIiwicmVhZGFibGVBZGRDaHVuayIsImFkZFRvRnJvbnQiLCJza2lwQ2h1bmtDaGVjayIsImVtaXRSZWFkYWJsZSIsIm9uRW9mQ2h1bmsiLCJjaHVua0ludmFsaWQiLCJhZGRDaHVuayIsIm1heWJlUmVhZE1vcmUiLCJuZWVkTW9yZURhdGEiLCJpc1BhdXNlZCIsInNldEVuY29kaW5nIiwiTUFYX0hXTSIsImhvd011Y2hUb1JlYWQiLCJoZWFkIiwiY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsiLCJlbWl0UmVhZGFibGVfIiwiZmxvdyIsIm1heWJlUmVhZE1vcmVfIiwiblJlYWRpbmdOZXh0VGljayIsInJlc3VtZV8iLCJmcm9tTGlzdCIsImNsZWFyIiwiaGFzU3RyaW5ncyIsInRhaWwiLCJjb3B5RnJvbUJ1ZmZlclN0cmluZyIsImNvcHlGcm9tQnVmZmVyIiwiZnJvbUxpc3RQYXJ0aWFsIiwiZW5kUmVhZGFibGUiLCJlbmRSZWFkYWJsZU5UIiwieHMiLCJuT3JpZyIsImRvUmVhZCIsInBpcGVPcHRzIiwiZW5kRm4iLCJzdGRvdXQiLCJzdGRlcnIiLCJ1bnBpcGUiLCJvbnVucGlwZSIsInVucGlwZUluZm8iLCJoYXNVbnBpcGVkIiwib25maW5pc2giLCJjbGVhbmVkVXAiLCJwaXBlT25EcmFpbiIsImluY3JlYXNlZEF3YWl0RHJhaW4iLCJldmVudCIsImRlc3RzIiwic3BsaWNlIiwiZXYiLCJwYXVzZWQiLCJfZnJvbUxpc3QiLCJlbWl0RXJyb3JOVCIsInJlYWRhYmxlRGVzdHJveWVkIiwid3JpdGFibGVEZXN0cm95ZWQiLCJhZnRlclRyYW5zZm9ybSIsInRzIiwiX3RyYW5zZm9ybVN0YXRlIiwidHJhbnNmb3JtaW5nIiwid3JpdGVjaHVuayIsInJzIiwibmVlZFRyYW5zZm9ybSIsIndyaXRlZW5jb2RpbmciLCJfdHJhbnNmb3JtIiwiZmx1c2giLCJfZmx1c2giLCJfdGhpczIiLCJlcnIyIiwiQmxvY2tIYXNoIiwicGVuZGluZyIsInBlbmRpbmdUb3RhbCIsIm91dFNpemUiLCJobWFjU3RyZW5ndGgiLCJwYWRMZW5ndGgiLCJfZGVsdGE4IiwiX2RlbHRhMzIiLCJfcGFkIiwiX2RpZ2VzdCIsImdldFJhbmRvbUlkIiwiZXh0ZW5kIiwiaWQiLCJqc29ucnBjIiwicGFyYW1zIiwiVGltZW91dCIsImNsZWFyRm4iLCJfaWQiLCJfY2xlYXJGbiIsInNjb3BlIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xvc2UiLCJ1bnJlZiIsInJlZiIsImVucm9sbCIsIml0ZW0iLCJtc2VjcyIsIl9pZGxlVGltZW91dElkIiwiX2lkbGVUaW1lb3V0IiwidW5lbnJvbGwiLCJfdW5yZWZBY3RpdmUiLCJhY3RpdmUiLCJfb25UaW1lb3V0IiwiY2xlYXJJbW1lZGlhdGUiLCJzaG9ydCIsImVkd2FyZHMiLCJpc0xlbmd0aCIsImFycmF5TGlrZSIsIm5ld0xlbiIsIm5ld0FyciIsIl9jbGFzc0NhbGxDaGVjayIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJkb2N1bWVudCIsImF0dGFjaFRvIiwicnVuSWZQcmVzZW50IiwicG9zdE1lc3NhZ2UiLCJpbXBvcnRTY3JpcHRzIiwicG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyIsIm9sZE9uTWVzc2FnZSIsIm9ubWVzc2FnZSIsImNhblVzZVBvc3RNZXNzYWdlIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsInBvcnQyIiwiY3JlYXRlRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJyYW5kb20iLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJ0YXNrIiwiY29uZmlnIiwibG9jYWxTdG9yYWdlIiwiY3JlYXRlS2VjY2FrSGFzaCIsInNlY3AyNTZrMSIsInJscCIsImNyZWF0ZUhhc2giLCJhc3NpZ24iLCJNQVhfSU5URUdFUiIsIlRXT19QT1cyNTYiLCJLRUNDQUsyNTZfTlVMTF9TIiwiU0hBM19OVUxMX1MiLCJLRUNDQUsyNTZfTlVMTCIsIlNIQTNfTlVMTCIsIktFQ0NBSzI1Nl9STFBfQVJSQVlfUyIsIlNIQTNfUkxQX0FSUkFZX1MiLCJLRUNDQUsyNTZfUkxQX0FSUkFZIiwiU0hBM19STFBfQVJSQVkiLCJLRUNDQUsyNTZfUkxQX1MiLCJTSEEzX1JMUF9TIiwiS0VDQ0FLMjU2X1JMUCIsIlNIQTNfUkxQIiwiemVyb0FkZHJlc3MiLCJidWZmZXJUb0hleCIsInNldExlbmd0aExlZnQiLCJzZXRMZW5ndGgiLCJzZXRMZW5ndGhSaWdodCIsInVucGFkIiwic3RyaXBaZXJvcyIsImZpcnN0Iiwic3RyaXBIZXhQcmVmaXgiLCJpc0hleFN0cmluZyIsInBhZFRvRXZlbiIsImludFRvQnVmZmVyIiwiYnVmZmVyVG9JbnQiLCJmcm9tU2lnbmVkIiwidG9VbnNpZ25lZCIsImtlY2NhayIsImtlY2NhazI1NiIsInNoYTMiLCJzaGEyNTYiLCJyaXBlbWQxNjAiLCJwYWRkZWQiLCJybHBoYXNoIiwiZW5jb2RlIiwiaXNWYWxpZFByaXZhdGUiLCJwcml2YXRlS2V5IiwicHJpdmF0ZUtleVZlcmlmeSIsImlzVmFsaWRQdWJsaWMiLCJwdWJsaWNLZXkiLCJzYW5pdGl6ZSIsInB1YmxpY0tleVZlcmlmeSIsInB1YlRvQWRkcmVzcyIsInB1YmxpY1RvQWRkcmVzcyIsInB1YktleSIsInB1YmxpY0tleUNvbnZlcnQiLCJwcml2YXRlVG9QdWJsaWMiLCJwdWJsaWNLZXlDcmVhdGUiLCJpbXBvcnRQdWJsaWMiLCJlY3NpZ24iLCJtc2dIYXNoIiwic2lnIiwic2lnbiIsInNpZ25hdHVyZSIsInJlY292ZXJ5IiwiaGFzaFBlcnNvbmFsTWVzc2FnZSIsInByZWZpeCIsImVjcmVjb3ZlciIsInNlbmRlclB1YktleSIsInJlY292ZXIiLCJ0b1JwY1NpZyIsImZyb21ScGNTaWciLCJwcml2YXRlVG9BZGRyZXNzIiwiaXNWYWxpZEFkZHJlc3MiLCJhZGRyZXNzIiwiaXNaZXJvQWRkcmVzcyIsImFkZEhleFByZWZpeCIsInRvQ2hlY2tzdW1BZGRyZXNzIiwiaXNWYWxpZENoZWNrc3VtQWRkcmVzcyIsImdlbmVyYXRlQWRkcmVzcyIsIm5vbmNlIiwiaXNQcmVjb21waWxlZCIsImlzSGV4UHJlZml4ZWQiLCJpc1ZhbGlkU2lnbmF0dXJlIiwiaG9tZXN0ZWFkIiwiU0VDUDI1NksxX05fRElWXzIiLCJTRUNQMjU2SzFfTiIsImJhVG9KU09OIiwiYmEiLCJmaWVsZHMiLCJyYXciLCJfZmllbGRzIiwibGFiZWwiLCJmaWVsZCIsInNlcmlhbGl6ZSIsInNldHRlciIsImFsbG93WmVybyIsImFsbG93TGVzcyIsImFsaWFzIiwiZGVjb2RlIiwiTUQ1IiwiUklQRU1EMTYwIiwic2hhIiwiQmFzZSIsImFsZyIsIndlYnBhY2tQb2x5ZmlsbCIsInBhdGhzIiwiY2hpbGRyZW4iLCJjb21tb24iLCJyaXBlbWQiLCJobWFjIiwic2hhMSIsInNoYTIyNCIsInNoYTM4NCIsInNoYTUxMiIsImludFRvSGV4IiwiYXJyYXlDb250YWluc0FycmF5Iiwic3VwZXJzZXQiLCJzdWJzZXQiLCJzb21lIiwiQm9vbGVhbiIsImhleCIsImdldEJpbmFyeVNpemUiLCJmcm9tQXNjaWkiLCJzdHJpbmdWYWx1ZSIsImZyb21VdGY4IiwidG9Bc2NpaSIsInN1YnN0cmluZyIsInRvVXRmOCIsImdldEtleXMiLCJhbGxvd0VtcHR5IiwiZ2V0UmF3VGFnIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiY2FsbEZuIiwiaW1wbGVtZW50YXRpb24iLCJmblRvU3RyIiwiY29uc3RydWN0b3JSZWdleCIsImlzRVM2Q2xhc3NGbiIsImZuU3RyIiwidG9TdHIiLCJoYXNUb1N0cmluZ1RhZyIsInRyeUZ1bmN0aW9uT2JqZWN0Iiwic3RyQ2xhc3MiLCJjcmVhdGVQYXlsb2FkIiwiU3ViUHJvdmlkZXIiLCJzZXRFbmdpbmUiLCJlbmdpbmUiLCJjdXJyZW50QmxvY2siLCJoYW5kbGVSZXF1ZXN0IiwicGF5bG9hZCIsImVtaXRQYXlsb2FkIiwic2VuZEFzeW5jIiwiSGFzaEJhc2UiLCJfYmxvY2tPZmZzZXQiLCJfbGVuZ3RoIiwiX2ZpbmFsaXplZCIsInRocm93SWZOb3RTdHJpbmdPckJ1ZmZlciIsIksiLCJXIiwiU2hhMjU2IiwiX3ciLCJtYWoiLCJzaWdtYTAiLCJzaWdtYTEiLCJnYW1tYTAiLCJfYSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiTSIsIlQxIiwiVDIiLCJIIiwiU2hhNTEyIiwiQ2giLCJ4bCIsIkdhbW1hMCIsIkdhbW1hMGwiLCJHYW1tYTEiLCJHYW1tYTFsIiwiZ2V0Q2FycnkiLCJfYWgiLCJfYmgiLCJfY2giLCJfZGgiLCJfZWgiLCJfZmgiLCJfZ2giLCJfaGgiLCJfYWwiLCJfYmwiLCJfY2wiLCJfZGwiLCJfZWwiLCJfZmwiLCJfZ2wiLCJfaGwiLCJmaCIsImdoIiwiaGgiLCJmbCIsImdsIiwiaGwiLCJ4aCIsImdhbW1hMGwiLCJnYW1tYTEiLCJnYW1tYTFsIiwiV2k3aCIsIldpN2wiLCJXaTE2aCIsIldpMTZsIiwiV2lsIiwiV2loIiwibWFqaCIsIm1hamwiLCJzaWdtYTBoIiwic2lnbWEwbCIsInNpZ21hMWgiLCJzaWdtYTFsIiwiS2loIiwiS2lsIiwiY2hoIiwiY2hsIiwidDFsIiwidDFoIiwidDJsIiwidDJoIiwid3JpdGVJbnQ2NEJFIiwiY2gzMiIsIm1hajMyIiwicDMyIiwiZnRfMSIsInMwXzI1NiIsInMxXzI1NiIsImcwXzI1NiIsImcxXzI1NiIsInNoYUNvbW1vbiIsInNoYTI1Nl9LIiwiU0hBMjU2Iiwic2hhNTEyX0siLCJTSEE1MTIiLCJjaDY0X2hpIiwieWgiLCJ5bCIsInpoIiwiY2g2NF9sbyIsInpsIiwibWFqNjRfaGkiLCJtYWo2NF9sbyIsInMwXzUxMl9oaSIsInMwXzUxMl9sbyIsInMxXzUxMl9oaSIsInMxXzUxMl9sbyIsImcwXzUxMl9oaSIsImcwXzUxMl9sbyIsImcxXzUxMl9oaSIsImcxXzUxMl9sbyIsIl9wcmVwYXJlQmxvY2siLCJjMF9oaSIsImMwX2xvIiwiYzFfaGkiLCJjMV9sbyIsImMyX2hpIiwiYzJfbG8iLCJjM19oaSIsImMzX2xvIiwiYzRfaGkiLCJjNF9sbyIsIlQxX2hpIiwiVDFfbG8iLCJUMl9oaSIsIlQyX2xvIiwib2JqZWN0QXNzaWduIiwicFNsaWNlIiwiZnVuY3Rpb25zSGF2ZU5hbWVzIiwicFRvU3RyaW5nIiwiYXJyYnVmIiwiRGF0YVZpZXciLCJvayIsInJlZ2V4IiwiZ2V0TmFtZSIsImZ1bmMiLCJ0cnVuY2F0ZSIsInNvbWV0aGluZyIsInJhd25hbWUiLCJmYWlsIiwiZXhwZWN0ZWQiLCJvcGVyYXRvciIsInN0YWNrU3RhcnRGdW5jdGlvbiIsIkFzc2VydGlvbkVycm9yIiwiX2RlZXBFcXVhbCIsInN0cmljdCIsIm1lbW9zIiwiZ2V0VGltZSIsIm11bHRpbGluZSIsImxhc3RJbmRleCIsImlnbm9yZUNhc2UiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJhY3R1YWxJbmRleCIsImFjdHVhbFZpc2l0ZWRPYmplY3RzIiwiYUlzQXJncyIsImlzQXJndW1lbnRzIiwiYklzQXJncyIsImthIiwia2IiLCJzb3J0Iiwib2JqRXF1aXYiLCJleHBlY3RlZEV4Y2VwdGlvbiIsImlzUHJvdG90eXBlT2YiLCJfdGhyb3dzIiwic2hvdWxkVGhyb3ciLCJfdHJ5QmxvY2siLCJ1c2VyUHJvdmlkZWRNZXNzYWdlIiwiaXNVbmV4cGVjdGVkRXhjZXB0aW9uIiwiZ2VuZXJhdGVkTWVzc2FnZSIsImdldE1lc3NhZ2UiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInN0YWNrIiwiZm5fbmFtZSIsIm5leHRfbGluZSIsIm5vdEVxdWFsIiwiZGVlcEVxdWFsIiwiZGVlcFN0cmljdEVxdWFsIiwibm90RGVlcEVxdWFsIiwibm90RGVlcFN0cmljdEVxdWFsIiwic3RyaWN0RXF1YWwiLCJub3RTdHJpY3RFcXVhbCIsInRocm93cyIsImRvZXNOb3RUaHJvdyIsImlmRXJyb3IiLCJzYWZlUGFyc2VJbnQiLCJlbmNvZGVMZW5ndGgiLCJoZXhMZW5ndGgiLCJpbnRlZ2VyIiwiaW5wdXRCdWYiLCJkZWNvZGVkIiwiX2RlY29kZSIsImxsZW5ndGgiLCJpbm5lclJlbWFpbmRlciIsInRvdGFsTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwiaW5wdXRCdWZmZXIiLCJjb2xsIiwiaXRlcmF0ZWUiLCJfaXNBcnJheUxpa2UyIiwiZWFjaE9mQXJyYXlMaWtlIiwiZWFjaE9mR2VuZXJpYyIsIl93cmFwQXN5bmMyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9icmVha0xvb3AyIiwiX2VhY2hPZkxpbWl0MiIsIl9kb0xpbWl0MiIsIl9ub29wMiIsIl9vbmNlMiIsIl9vbmx5T25jZTIiLCJjb21wbGV0ZWQiLCJpdGVyYXRvckNhbGxiYWNrIiwiZnJlZUdsb2JhbCIsImZyZWVTZWxmIiwicm9vdCIsIk1BWF9TQUZFX0lOVEVHRVIiLCJuZXh0RWxlbSIsIl9pdGVyYXRvcjIiLCJydW5uaW5nIiwibG9vcGluZyIsIml0ZXJhdGVlQ2FsbGJhY2siLCJyZXBsZW5pc2giLCJlbGVtIiwiaGFzU3ltYm9scyIsIm9yaWdEZWZpbmVQcm9wZXJ0eSIsInN1cHBvcnRzRGVzY3JpcHRvcnMiLCJhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkIiwicHJlZGljYXRlIiwicHJlZGljYXRlcyIsImlzQXJncyIsImNhbGxlZSIsIkVTIiwibGVmdFdoaXRlc3BhY2UiLCJyaWdodFdoaXRlc3BhY2UiLCJTIiwiVG9TdHJpbmciLCJDaGVja09iamVjdENvZXJjaWJsZSIsIlRocm93VHlwZUVycm9yIiwiYXN5bmNHZW5JdGVyYXRvciIsIlR5cGVkQXJyYXkiLCJJTlRSSU5TSUNTIiwiZW50cmllcyIsIkF0b21pY3MiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJldmFsIiwiRXZhbEVycm9yIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJwYXJzZSIsIk1hcCIsInZhbHVlT2YiLCJwYXJzZUZsb2F0IiwiYWxsIiwiUHJveHkiLCJTZXQiLCJTaGFyZWRBcnJheUJ1ZmZlciIsIlN5bnRheEVycm9yIiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiVVJJRXJyb3IiLCJXZWFrTWFwIiwiV2Vha1NldCIsImFsbG93TWlzc2luZyIsInByZWNvbmQiLCJCYWNrb2ZmIiwiYmFja29mZlN0cmF0ZWd5IiwiYmFja29mZlN0cmF0ZWd5XyIsIm1heE51bWJlck9mUmV0cnlfIiwiYmFja29mZk51bWJlcl8iLCJiYWNrb2ZmRGVsYXlfIiwidGltZW91dElEXyIsImhhbmRsZXJzIiwiYmFja29mZiIsIm9uQmFja29mZl8iLCJmYWlsQWZ0ZXIiLCJtYXhOdW1iZXJPZlJldHJ5IiwiY2hlY2tBcmd1bWVudCIsImNoZWNrU3RhdGUiLCJpc0RlZiIsIkJhY2tvZmZTdHJhdGVneSIsImluaXRpYWxEZWxheSIsIm1heERlbGF5IiwiaW5pdGlhbERlbGF5XyIsIm1heERlbGF5XyIsInJhbmRvbWlzYXRpb25GYWN0b3IiLCJyYW5kb21pc2F0aW9uRmFjdG9yXyIsImdldE1heERlbGF5IiwiZ2V0SW5pdGlhbERlbGF5IiwiYmFja29mZkRlbGF5IiwibmV4dF8iLCJyYW5kb21pc2F0aW9uTXVsdGlwbGUiLCJyZXNldF8iLCJGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kiLCJuZXh0QmFja29mZkRlbGF5XyIsImV0aFV0aWwiLCJFdGhCbG9ja1RyYWNrZXIiLCJlYWNoU2VyaWVzIiwiU3RvcGxpZ2h0IiwiV2ViM1Byb3ZpZGVyRW5naW5lIiwiZGlyZWN0UHJvdmlkZXIiLCJfaGFuZGxlQXN5bmMiLCJibG9ja1RyYWNrZXJQcm92aWRlciIsIl9ibG9ja1RyYWNrZXIiLCJibG9ja1RyYWNrZXIiLCJwcm92aWRlciIsInBvbGxpbmdJbnRlcnZhbCIsImpzb25CbG9jayIsImJ1ZmZlckJsb2NrIiwicGFyZW50SGFzaCIsIm1peEhhc2giLCJzaGEzVW5jbGVzIiwibG9nc0Jsb29tIiwidHJhbnNhY3Rpb25zUm9vdCIsInN0YXRlUm9vdCIsInJlY2VpcHRzUm9vdCIsInJlY2VpcHRSb290IiwibWluZXIiLCJkaWZmaWN1bHR5IiwidG90YWxEaWZmaWN1bHR5IiwiZXh0cmFEYXRhIiwiZ2FzTGltaXQiLCJnYXNVc2VkIiwidHJhbnNhY3Rpb25zIiwidG9CdWZmZXJCbG9jayIsIl9zZXRDdXJyZW50QmxvY2siLCJfcmVhZHkiLCJnbyIsIl9wcm92aWRlcnMiLCJjYXRjaCIsIl9ydW5uaW5nIiwiaXNSdW5uaW5nIiwiYWRkUHJvdmlkZXIiLCJyZW1vdmVQcm92aWRlciIsInNlbmQiLCJhd2FpdCIsImN1cnJlbnRQcm92aWRlciIsIl9lcnJvciIsIl9yZXN1bHQiLCJyZXN1bHRPYmoiLCJhZnRlciIsIlN1YnByb3ZpZGVyIiwiSnNvblJwY0Vycm9yIiwiUnBjU291cmNlIiwicnBjVXJsIiwidGFyZ2V0VXJsIiwibmV3UGF5bG9hZCIsInhociIsInVyaSIsImhlYWRlcnMiLCJib2R5IiwicmVqZWN0VW5hdXRob3JpemVkIiwiSW50ZXJuYWxFcnJvciIsInN0YXR1c0NvZGUiLCJNZXRob2ROb3RGb3VuZCIsIldlYlNvY2tldCIsIldlYnNvY2tldFN1YnByb3ZpZGVyIiwic3VwZXIiLCJfYmFja29mZiIsImV4cG9uZW50aWFsIiwiX2Nvbm5lY3RUaW1lIiwiX2xvZyIsIl9vcmlnaW4iLCJfcGVuZGluZ1JlcXVlc3RzIiwiX3NvY2tldCIsIl91bmhhbmRsZWRSZXF1ZXN0cyIsIl91cmwiLCJfaGFuZGxlU29ja2V0Q2xvc2UiLCJfaGFuZGxlU29ja2V0TWVzc2FnZSIsIl9oYW5kbGVTb2NrZXRPcGVuIiwiX29wZW5Tb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIm5vdyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYXMiLCJvcmlnaW5hbFJlcSIsImRlbGV0ZSIsInJlcXVlc3QiLCJ3YXRlcmZhbGwiLCJwYXJhbGxlbCIsInNpZ1V0aWwiLCJTZW1hcGhvcmUiLCJlc3RpbWF0ZUdhcyIsImhleFJlZ2V4IiwiSG9va2VkV2FsbGV0U3VicHJvdmlkZXIiLCJub25jZUxvY2siLCJnZXRBY2NvdW50cyIsInByb2Nlc3NUcmFuc2FjdGlvbiIsInByb2Nlc3NNZXNzYWdlIiwicHJvY2Vzc1BlcnNvbmFsTWVzc2FnZSIsInByb2Nlc3NUeXBlZE1lc3NhZ2UiLCJhcHByb3ZlVHJhbnNhY3Rpb24iLCJhdXRvQXBwcm92ZSIsImFwcHJvdmVNZXNzYWdlIiwiYXBwcm92ZVBlcnNvbmFsTWVzc2FnZSIsImFwcHJvdmVUeXBlZE1lc3NhZ2UiLCJzaWduVHJhbnNhY3Rpb24iLCJtdXN0UHJvdmlkZUluQ29uc3RydWN0b3IiLCJzaWduTWVzc2FnZSIsInNpZ25QZXJzb25hbE1lc3NhZ2UiLCJzaWduVHlwZWRNZXNzYWdlIiwicmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlIiwicHVibGlzaFRyYW5zYWN0aW9uIiwiZ2V0R2FzUHJpY2UiLCJpc1ZhbGlkSGV4IiwibWV0aG9kTmFtZSIsInR4UGFyYW1zIiwibXNnUGFyYW1zIiwiZXh0cmFQYXJhbXMiLCJfcGFyaXR5UmVxdWVzdHMiLCJfcGFyaXR5UmVxdWVzdENvdW50IiwiYWNjb3VudHMiLCJ2YWxpZGF0ZVRyYW5zYWN0aW9uIiwicHJvY2Vzc1NpZ25UcmFuc2FjdGlvbiIsInZhbGlkYXRlTWVzc2FnZSIsImZpeGVkIiwicmVzZW1ibGVzRGF0YSIsInJlc2VtYmxlc0FkZHJlc3MiLCJ2YWxpZGF0ZVBlcnNvbmFsTWVzc2FnZSIsInZhbGlkYXRlVHlwZWRNZXNzYWdlIiwicGFyaXR5UG9zdFRyYW5zYWN0aW9uIiwicGFyaXR5UG9zdFNpZ24iLCJyZXF1ZXN0SWQiLCJwYXJpdHlDaGVja1JlcXVlc3QiLCJhY2NvdW50IiwiZGlkQXBwcm92ZSIsImNoZWNrQXBwcm92YWwiLCJmaW5hbGl6ZUFuZFN1Ym1pdFR4IiwiZmluYWxpemVUeCIsInJlcUlkIiwidHhIYXNoIiwic2VuZGVySGV4IiwidmFsaWRhdGVTZW5kZXIiLCJzZW5kZXJJc1ZhbGlkIiwic2VuZGVyQWRkcmVzcyIsInRha2UiLCJmaWxsSW5UeEV4dHJhcyIsImxlYXZlIiwic2lnbmVkVHgiLCJ0eCIsInJhd1R4IiwidGFza3MiLCJnYXNQcmljZSIsImdhcyIsInRvIiwiY2xvbmVUeFBhcmFtcyIsInRhc2tSZXN1bHRzIiwiZXRoTmV0d29yayIsImlkR2V0dGVyIiwic29ja2V0U2VydmljZSIsIlNvY2tldFNlcnZpY2UiLCJTY2F0dGVyRXRoZXJldW1XYWxsZXQiLCJzZW5kQXBpUmVxdWVzdCIsImZpbHRlciIsImJsb2NrY2hhaW4iLCJCbG9ja2NoYWlucyIsIkVUSCIsInRyYW5zYWN0aW9uIiwibm9OZXR3b3JrIiwicmVxdWlyZWRGaWVsZHMiLCJhYmkiLCJzaWduYXR1cmVFcnJvciIsIm5ldHdvcmsiLCJzaWduYXR1cmVzIiwicmV0dXJuZWRGaWVsZHMiLCJmaWVsZHNDYWxsYmFjayIsIlNjYXR0ZXJFVEgiLCJQbHVnaW5UeXBlcyIsIkJMT0NLQ0hBSU5fU1VQUE9SVCIsIl9zIiwiX25ldHdvcmsiLCJfd2ViMyIsIk5ldHdvcmsiLCJmcm9tSnNvbiIsImZ1bGxob3N0IiwiUHJvdmlkZXJFbmdpbmUiLCJ3ZWIzIiwid2FsbGV0U3VicHJvdmlkZXIiLCJwcm90b2NvbCIsIlJwY1N1YnByb3ZpZGVyIiwiUGx1Z2luIiwiY3JlYXRlS2VjY2FrIiwiY3JlYXRlU2hha2UiLCJLZWNjYWtTdGF0ZSIsIktlY2NhayIsIlNoYWtlIiwiYWxnb3JpdGhtIiwicmF0ZSIsImNhcGFjaXR5IiwiZGVsaW1pdGVkU3VmZml4IiwiaGFzaEJpdExlbmd0aCIsIl9yYXRlIiwiX2NhcGFjaXR5IiwiX2RlbGltaXRlZFN1ZmZpeCIsIl9oYXNoQml0TGVuZ3RoIiwiX29wdGlvbnMiLCJfc3RhdGUiLCJpbml0aWFsaXplIiwiYWJzb3JiIiwiYWJzb3JiTGFzdEZld0JpdHMiLCJzcXVlZXplIiwiX3Jlc2V0U3RhdGUiLCJfY2xvbmUiLCJkYXRhQnl0ZUxlbmd0aCIsImtlY2Nha1N0YXRlIiwic3F1ZWV6aW5nIiwicDE2MDAiLCJQMTYwMF9ST1VORF9DT05TVEFOVFMiLCJsbzAiLCJoaTAiLCJsbzEiLCJoaTEiLCJsbzIiLCJoaTIiLCJsbzMiLCJoaTMiLCJsbzQiLCJoaTQiLCJ0MXNsbzAiLCJ0MXNoaTAiLCJ0MXNsbzUiLCJ0MXNoaTUiLCJ0MXNsbzEwIiwidDFzaGkxMCIsInQxc2xvMTUiLCJ0MXNoaTE1IiwidDFzbG8yMCIsInQxc2hpMjAiLCJ0MXNsbzEiLCJ0MXNoaTEiLCJ0MXNsbzYiLCJ0MXNoaTYiLCJ0MXNsbzExIiwidDFzaGkxMSIsInQxc2xvMTYiLCJ0MXNoaTE2IiwidDFzbG8yMSIsInQxc2hpMjEiLCJ0MXNsbzIiLCJ0MXNoaTIiLCJ0MXNsbzciLCJ0MXNoaTciLCJ0MXNsbzEyIiwidDFzaGkxMiIsInQxc2xvMTciLCJ0MXNoaTE3IiwidDFzbG8yMiIsInQxc2hpMjIiLCJ0MXNsbzMiLCJ0MXNoaTMiLCJ0MXNsbzgiLCJ0MXNoaTgiLCJ0MXNsbzEzIiwidDFzaGkxMyIsInQxc2xvMTgiLCJ0MXNoaTE4IiwidDFzbG8yMyIsInQxc2hpMjMiLCJ0MXNsbzQiLCJ0MXNoaTQiLCJ0MXNsbzkiLCJ0MXNoaTkiLCJ0MXNsbzE0IiwidDFzaGkxNCIsInQxc2xvMTkiLCJ0MXNoaTE5IiwidDFzbG8yNCIsInQxc2hpMjQiLCJ0MnNsbzAiLCJ0MnNoaTAiLCJ0MnNsbzE2IiwidDJzaGkxNiIsInQyc2xvNyIsInQyc2hpNyIsInQyc2xvMjMiLCJ0MnNoaTIzIiwidDJzbG8xNCIsInQyc2hpMTQiLCJ0MnNsbzEwIiwidDJzaGkxMCIsInQyc2xvMSIsInQyc2hpMSIsInQyc2xvMTciLCJ0MnNoaTE3IiwidDJzbG84IiwidDJzaGk4IiwidDJzbG8yNCIsInQyc2hpMjQiLCJ0MnNsbzIwIiwidDJzaGkyMCIsInQyc2xvMTEiLCJ0MnNoaTExIiwidDJzbG8yIiwidDJzaGkyIiwidDJzbG8xOCIsInQyc2hpMTgiLCJ0MnNsbzkiLCJ0MnNoaTkiLCJ0MnNsbzUiLCJ0MnNoaTUiLCJ0MnNsbzIxIiwidDJzaGkyMSIsInQyc2xvMTIiLCJ0MnNoaTEyIiwidDJzbG8zIiwidDJzaGkzIiwidDJzbG8xOSIsInQyc2hpMTkiLCJ0MnNsbzE1IiwidDJzaGkxNSIsInQyc2xvNiIsInQyc2hpNiIsInQyc2xvMjIiLCJ0MnNoaTIyIiwidDJzbG8xMyIsInQyc2hpMTMiLCJ0MnNsbzQiLCJ0MnNoaTQiLCJkZXIiLCJtZXNzYWdlcyIsImluaXRDb21wcmVzc2VkVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJDT01QUkVTU0VEX1RZUEVfSU5WQUxJRCIsIkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRCIsInByaXZhdGVLZXlFeHBvcnQiLCJjb21wcmVzc2VkIiwiaXNCdWZmZXJMZW5ndGgiLCJFQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRCIsInByaXZhdGVLZXlJbXBvcnQiLCJFQ19QUklWQVRFX0tFWV9JTVBPUlRfREVSX0ZBSUwiLCJwcml2YXRlS2V5TmVnYXRlIiwicHJpdmF0ZUtleU1vZEludmVyc2UiLCJwcml2YXRlS2V5VHdlYWtBZGQiLCJ0d2VhayIsIlRXRUFLX1RZUEVfSU5WQUxJRCIsIlRXRUFLX0xFTkdUSF9JTlZBTElEIiwicHJpdmF0ZUtleVR3ZWFrTXVsIiwiRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQiLCJpc0J1ZmZlckxlbmd0aDIiLCJFQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEIiwicHVibGljS2V5VHdlYWtBZGQiLCJwdWJsaWNLZXlUd2Vha011bCIsInB1YmxpY0tleUNvbWJpbmUiLCJwdWJsaWNLZXlzIiwiRUNfUFVCTElDX0tFWVNfVFlQRV9JTlZBTElEIiwiaXNMZW5ndGhHVFplcm8iLCJFQ19QVUJMSUNfS0VZU19MRU5HVEhfSU5WQUxJRCIsInNpZ25hdHVyZU5vcm1hbGl6ZSIsIkVDRFNBX1NJR05BVFVSRV9UWVBFX0lOVkFMSUQiLCJFQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQiLCJzaWduYXR1cmVFeHBvcnQiLCJzaWdPYmoiLCJzaWduYXR1cmVJbXBvcnQiLCJFQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwiLCJzaWduYXR1cmVJbXBvcnRMYXgiLCJNU0czMl9UWVBFX0lOVkFMSUQiLCJNU0czMl9MRU5HVEhfSU5WQUxJRCIsIm5vbmNlZm4iLCJPUFRJT05TX1RZUEVfSU5WQUxJRCIsIk9QVElPTlNfREFUQV9UWVBFX0lOVkFMSUQiLCJPUFRJT05TX0RBVEFfTEVOR1RIX0lOVkFMSUQiLCJPUFRJT05TX05PTkNFRk5fVFlQRV9JTlZBTElEIiwidmVyaWZ5IiwiUkVDT1ZFUllfSURfVFlQRV9JTlZBTElEIiwiaXNOdW1iZXJJbkludGVydmFsIiwiUkVDT1ZFUllfSURfVkFMVUVfSU5WQUxJRCIsImVjZGgiLCJlY2RoVW5zYWZlIiwibGVuZ3RoMSIsImxlbmd0aDIiLCJiaXA2NiIsIkVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEIiwiRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRCIsImxlbmIiLCJsZW5SIiwicG9zUiIsImxlblMiLCJwb3NTIiwibGVuYnl0ZSIsInJpbmRleCIsInNsZW4iLCJzaW5kZXgiLCJydmFsdWUiLCJzdmFsdWUiLCJjaGVjayIsIkVDIiwiZWNwYXJhbXMiLCJsb2FkUHVibGljS2V5IiwieEJ1ZmZlciIsImtleVBhaXIiLCJwdWIiLCJsb2FkQ29tcHJlc3NlZFB1YmxpY0tleSIsInlCdWZmZXIiLCJ4MyIsImxvYWRVbmNvbXByZXNzZWRQdWJsaWNLZXkiLCJibiIsIkVDX1BSSVZBVEVfS0VZX0VYUE9SVF9ERVJfRkFJTCIsImtleUZyb21Qcml2YXRlIiwiZ2V0UHVibGljIiwiRUNfUFJJVkFURV9LRVlfUkFOR0VfSU5WQUxJRCIsIkVDX1BSSVZBVEVfS0VZX1RXRUFLX0FERF9GQUlMIiwiRUNfUFJJVkFURV9LRVlfVFdFQUtfTVVMX0ZBSUwiLCJFQ19QVUJMSUNfS0VZX0NSRUFURV9GQUlMIiwicGFpciIsIkVDX1BVQkxJQ19LRVlfUEFSU0VfRkFJTCIsIkVDX1BVQkxJQ19LRVlfVFdFQUtfQUREX0ZBSUwiLCJwb2ludCIsImlzSW5maW5pdHkiLCJFQ19QVUJMSUNfS0VZX1RXRUFLX01VTF9GQUlMIiwicGFpcnMiLCJFQ19QVUJMSUNfS0VZX0NPTUJJTkVfRkFJTCIsIkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMIiwibmgiLCJnZXROb25jZSIsImNvdW50ZXIiLCJFQ0RTQV9TSUdOX0ZBSUwiLCJjYW5vbmljYWwiLCJwZXJzIiwicmVjb3ZlcnlQYXJhbSIsInNpZ3IiLCJzaWdzIiwicmVjb3ZlclB1YktleSIsIkVDRFNBX1JFQ09WRVJfRkFJTCIsInNoYXJlZCIsInNjYWxhciIsIkVDREhfRkFJTCIsIkFSUkFZMTYiLCJyb3RsIiwiZm5GIiwiZm5HIiwiZm5IIiwiZm5JIiwienIiLCJzbCIsInNyIiwiaHIiLCJmbjEiLCJmbjIiLCJmbjMiLCJmbjQiLCJmbjUiLCJiciIsImNyIiwiZHIiLCJ0bCIsInRyIiwiQWxnb3JpdGhtIiwiU2hhIiwicm90bDMwIiwiZnQiLCJTaGExIiwicm90bDUiLCJTaGEyMjQiLCJTaGEzODQiLCJDaXBoZXJCYXNlIiwiaGFzaE1vZGUiLCJfZmluYWxPckRpZ2VzdCIsIl9fZmluYWwiLCJfZGVjb2RlciIsIl9lbmNvZGluZyIsImlucHV0RW5jIiwib3V0cHV0RW5jIiwib3V0RGF0YSIsIl90b1N0cmluZyIsInNldEF1dG9QYWRkaW5nIiwiZ2V0QXV0aFRhZyIsInNldEF1dGhUYWciLCJzZXRBQUQiLCJmaW4iLCJtaW5Bc3NlcnQiLCJtaW5VdGlscyIsImdldE5BRiIsIm5hZiIsImdldEpTRiIsImsxIiwiazIiLCJqc2YiLCJkMSIsImQyIiwidTEiLCJ1MiIsIm04IiwibTE0IiwibTI0IiwiY2FjaGVkUHJvcGVydHkiLCJjb21wdXRlciIsInBhcnNlQnl0ZXMiLCJpbnRGcm9tTEUiLCJSYW5kIiwiZ2VuZXJhdGUiLCJfcmFuZCIsImdldEJ5dGVzIiwiZ2V0Qnl0ZSIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIm1zQ3J5cHRvIiwicmFuZG9tQnl0ZXMiLCJCYXNlQ3VydmUiLCJjb25mIiwiemVybyIsInR3byIsInBvaW50RnJvbUpTT04iLCJnUmVkIiwiX3duYWZUMSIsIl93bmFmVDIiLCJfd25hZlQzIiwiX3duYWZUNCIsImFkanVzdENvdW50IiwicmVkTiIsIl9tYXh3ZWxsVHJpY2siLCJCYXNlUG9pbnQiLCJwcmVjb21wdXRlZCIsInZhbGlkYXRlIiwiX2ZpeGVkTmFmTXVsIiwiZG91YmxlcyIsIl9nZXREb3VibGVzIiwiSSIsInN0ZXAiLCJyZXByIiwibmFmVyIsImpwb2ludCIsIm1peGVkQWRkIiwicG9pbnRzIiwidG9QIiwiX3duYWZNdWwiLCJuYWZQb2ludHMiLCJfZ2V0TkFGUG9pbnRzIiwiZGJscCIsIl93bmFmTXVsQWRkIiwiZGVmVyIsImNvZWZmcyIsImphY29iaWFuUmVzdWx0Iiwid25kV2lkdGgiLCJjb21iIiwidG9KIiwiamEiLCJqYiIsImRlY29kZVBvaW50IiwicG9pbnRGcm9tWCIsImVuY29kZUNvbXByZXNzZWQiLCJfZW5jb2RlIiwiY29tcGFjdCIsImdldFgiLCJnZXRZIiwicHJlY29tcHV0ZSIsInBvd2VyIiwiYmV0YSIsIl9nZXRCZXRhIiwiX2hhc0RvdWJsZXMiLCJkYmwiLCJTaG9ydEN1cnZlIiwidGludiIsInplcm9BIiwidGhyZWVBIiwiZW5kbyIsIl9nZXRFbmRvbW9ycGhpc20iLCJfZW5kb1duYWZUMSIsIl9lbmRvV25hZlQyIiwiUG9pbnQiLCJpc1JlZCIsImluZiIsIkpQb2ludCIsInpPbmUiLCJsYW1iZGEiLCJiZXRhcyIsIl9nZXRFbmRvUm9vdHMiLCJsYW1iZGFzIiwiYmFzaXMiLCJ2ZWMiLCJfZ2V0RW5kb0Jhc2lzIiwibnRpbnYiLCJwcmV2UiIsImFwcnhTcXJ0IiwieTEiLCJ5MiIsImxlbjEiLCJfZW5kb1NwbGl0IiwidjEiLCJ2MiIsImMxIiwiYzIiLCJwMSIsInAyIiwicTEiLCJxMiIsImF4IiwicmhzIiwiX2VuZG9XbmFmTXVsQWRkIiwibnBvaW50cyIsIm5jb2VmZnMiLCJmcm9tSlNPTiIsInByZSIsImVuZG9NdWwiLCJvYmoycG9pbnQiLCJueCIsIm55IiwieXMxIiwiZHlpbnYiLCJtdWxBZGQiLCJqbXVsQWRkIiwiX3ByZWNvbXB1dGUiLCJuZWdhdGUiLCJ6aW52IiwiemludjIiLCJheSIsInB6MiIsInoyIiwiczEiLCJzMiIsImgyIiwiaDMiLCJueiIsImp4IiwiankiLCJqeiIsImp6NCIsImp5ZCIsImp4MiIsImp5ZDIiLCJqeWQ0IiwidDEiLCJ0MiIsImRueSIsIl96ZXJvRGJsIiwiX3RocmVlRGJsIiwiX2RibCIsInh4IiwieXkiLCJ5eXl5IiwieXl5eTgiLCJjOCIsImdhbW1hIiwiYWxwaGEiLCJiZXRhNCIsImJldGE4IiwiZ2dhbW1hOCIsImp5MiIsImp4ZDQiLCJqeWQ4IiwidHJwbCIsInp6IiwibW0iLCJlZSIsInl5dTQiLCJrYmFzZSIsInozIiwicHozIiwiZXFYVG9QIiwienMiLCJ4YyIsIk1vbnRDdXJ2ZSIsImk0IiwiYTI0Iiwibm9ybWFsaXplIiwiYWEiLCJiYiIsImRpZmZBZGQiLCJkYSIsImp1bWxBZGQiLCJvdGhlciIsIkVkd2FyZHNDdXJ2ZSIsInR3aXN0ZWQiLCJtT25lQSIsImRkIiwib25lQyIsIl9tdWxBIiwiX211bEMiLCJsaHMiLCJwb2ludEZyb21ZIiwiX2V4dERibCIsIm50IiwiX3Byb2pEYmwiLCJfZXh0QWRkIiwiX3Byb2pBZGQiLCJ6aSIsIlByZXNldEN1cnZlIiwiZGVmaW5lQ3VydmUiLCJzaGExX0siLCJTSEExIiwiU0hBMjI0IiwiU0hBMzg0IiwiS2giLCJFIiwiQWgiLCJCaCIsIkRoIiwiRWgiLCJUIiwicmgiLCJzaCIsIkhtYWMiLCJpbm5lciIsIm91dGVyIiwiSG1hY0RSQkciLCJLZXlQYWlyIiwiU2lnbmF0dXJlIiwicHJpdiIsImZyb21Qcml2YXRlIiwia2V5RnJvbVB1YmxpYyIsImZyb21QdWJsaWMiLCJnZW5LZXlQYWlyIiwiZHJiZyIsInBlcnNFbmMiLCJlbnRyb3B5IiwiZW50cm9weUVuYyIsIm5zMiIsIl90cnVuY2F0ZVRvTiIsInRydW5jT25seSIsImJrZXkiLCJnZXRQcml2YXRlIiwibnMxIiwia3AiLCJrcFgiLCJzaW52IiwiaXNZT2RkIiwiaXNTZWNvbmRLZXkiLCJySW52IiwiZ2V0S2V5UmVjb3ZlcnlQYXJhbSIsIlEiLCJRcHJpbWUiLCJwcmVkUmVzaXN0IiwibWluRW50cm9weSIsIl9yZXNlZWQiLCJyZXNlZWRJbnRlcnZhbCIsIlYiLCJub25jZUVuYyIsInNlZWQiLCJfaG1hYyIsImttYWMiLCJyZXNlZWQiLCJhZGRFbmMiLCJ0ZW1wIiwiX2ltcG9ydFByaXZhdGUiLCJwcml2RW5jIiwiX2ltcG9ydFB1YmxpYyIsInB1YkVuYyIsImRlcml2ZSIsIl9pbXBvcnRERVIiLCJQb3NpdGlvbiIsInBsYWNlIiwiaW5pdGlhbCIsIm9jdGV0TGVuIiwicm1QYWRkaW5nIiwiY29uc3RydWN0TGVuZ3RoIiwib2N0ZXRzIiwidG9ERVIiLCJiYWNrSGFsZiIsIkVERFNBIiwicG9pbnRDbGFzcyIsImVuY29kaW5nTGVuZ3RoIiwic2VjcmV0Iiwia2V5RnJvbVNlY3JldCIsImhhc2hJbnQiLCJSZW5jb2RlZCIsImVuY29kZVBvaW50Iiwic18iLCJwdWJCeXRlcyIsIm1ha2VTaWduYXR1cmUiLCJTRyIsImZyb21TZWNyZXQiLCJsYXN0SXgiLCJub3JtZWQiLCJ4SXNPZGQiLCJlbmNvZGVJbnQiLCJkZWNvZGVJbnQiLCJpc1BvaW50IiwiX3NlY3JldCIsIl9wdWIiLCJfcHViQnl0ZXMiLCJwcml2Qnl0ZXMiLCJnZXRTZWNyZXQiLCJfUiIsIl9TIiwiX1JlbmNvZGVkIiwiX1NlbmNvZGVkIiwiU2VuY29kZWQiLCJ0b0J5dGVzIiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ0ZXN0MSIsInRlc3QyIiwidGVzdDMiLCJsZXR0ZXIiLCJzaG91bGRVc2VOYXRpdmUiLCJzeW1ib2xzIiwiRXRoUXVlcnkiLCJwaWZ5IiwiaGV4VXRpbHMiLCJpbmNyZW1lbnRIZXhOdW1iZXIiLCJzZWMiLCJfcHJvdmlkZXIiLCJfcXVlcnkiLCJfcG9sbGluZ0ludGVydmFsIiwiX3N5bmNpbmdUaW1lb3V0Iiwic3luY2luZ1RpbWVvdXQiLCJfdHJhY2tpbmdCbG9jayIsIl90cmFja2luZ0Jsb2NrVGltZXN0YW1wIiwiX2N1cnJlbnRCbG9jayIsIl9pc1J1bm5pbmciLCJfcGVyZm9ybVN5bmMiLCJfaGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24iLCJmcm9tQmxvY2siLCJfc2V0VHJhY2tpbmdCbG9jayIsIl9mZXRjaEJsb2NrQnlOdW1iZXIiLCJfZmV0Y2hMYXRlc3RCbG9jayIsIl9pbml0U3Vic2NyaXB0aW9uIiwiX3JlbW92ZVN1YnNjcmlwdGlvbiIsIm5ld0Jsb2NrIiwicHJldmlvdXMiLCJfd2FycFRvTGF0ZXN0Iiwib2xkQmxvY2siLCJ0cmFja2luZ0Jsb2NrIiwiZ2V0VHJhY2tpbmdCbG9jayIsIm5leHROdW1iZXIiLCJfcG9sbEZvck5leHRCbG9jayIsIm5vdGlmaWNhdGlvbiIsIl9zdWJzY3JpcHRpb25JZCIsImdldEJsb2NrQnlOdW1iZXIiLCJoZXhOdW1iZXIiLCJjbGVhbkhleCIsImZvcm1hdEhleCIsImNyZWF0ZVJhbmRvbUlkIiwiZ2VuZXJhdGVGbkZvciIsImdlbmVyYXRlRm5XaXRoRGVmYXVsdEJsb2NrRm9yIiwiYXJnQ291bnQiLCJnZXRCYWxhbmNlIiwiZ2V0Q29kZSIsImdldFRyYW5zYWN0aW9uQ291bnQiLCJnZXRTdG9yYWdlQXQiLCJwcm90b2NvbFZlcnNpb24iLCJzeW5jaW5nIiwiY29pbmJhc2UiLCJtaW5pbmciLCJoYXNocmF0ZSIsImJsb2NrTnVtYmVyIiwiZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwiZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlOdW1iZXIiLCJnZXRVbmNsZUNvdW50QnlCbG9ja0hhc2giLCJnZXRVbmNsZUNvdW50QnlCbG9ja051bWJlciIsInNlbmRUcmFuc2FjdGlvbiIsInNlbmRSYXdUcmFuc2FjdGlvbiIsImdldEJsb2NrQnlIYXNoIiwiZ2V0VHJhbnNhY3Rpb25CeUhhc2giLCJnZXRUcmFuc2FjdGlvbkJ5QmxvY2tIYXNoQW5kSW5kZXgiLCJnZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCIsImdldFRyYW5zYWN0aW9uUmVjZWlwdCIsImdldFVuY2xlQnlCbG9ja0hhc2hBbmRJbmRleCIsImdldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4IiwiZ2V0Q29tcGlsZXJzIiwiY29tcGlsZUxMTCIsImNvbXBpbGVTb2xpZGl0eSIsImNvbXBpbGVTZXJwZW50IiwibmV3RmlsdGVyIiwibmV3QmxvY2tGaWx0ZXIiLCJuZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiLCJ1bmluc3RhbGxGaWx0ZXIiLCJnZXRGaWx0ZXJDaGFuZ2VzIiwiZ2V0RmlsdGVyTG9ncyIsImdldExvZ3MiLCJnZXRXb3JrIiwic3VibWl0V29yayIsInN1Ym1pdEhhc2hyYXRlIiwicmVzcG9uc2UiLCJpZENvdW50ZXIiLCJwcm9jZXNzRm4iLCJQIiwibXVsdGlBcmdzIiwicmVzdWx0cyIsImV4Y2x1ZGUiLCJleGNsdWRlTWFpbiIsInBhdHRlcm4iLCJpbmNsdWRlIiwiZXRoanNVdGlsIiwiaGV4TnVtIiwic3RyaXBwZWQiLCJfZG9QYXJhbGxlbDIiLCJfbWFwMiIsIl9lYWNoT2YyIiwiYmFzZUdldFRhZyIsImFzeW5jVGFnIiwiZnVuY1RhZyIsImdlblRhZyIsInByb3h5VGFnIiwidGFnIiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwidW5tYXNrZWQiLCJfZWFjaE9mTGltaXQzIiwiY3JlYXRlQXJyYXlJdGVyYXRvciIsIl9nZXRJdGVyYXRvcjIiLCJjcmVhdGVFUzIwMTVJdGVyYXRvciIsIm9rZXlzIiwiX2tleXMyIiwiYXJyYXlMaWtlS2V5cyIsImJhc2VLZXlzIiwiaXNBcnJheUxpa2UiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaXNUeXBlZEFycmF5IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsInN0dWJGYWxzZSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwicmVJc1VpbnQiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIkN0b3IiLCJvdmVyQXJnIiwiX2luaXRpYWxQYXJhbXMyIiwiX2lzT2JqZWN0MiIsImludm9rZUNhbGxiYWNrIiwiX3NldEltbWVkaWF0ZTIiLCJyZXRocm93IiwiX3NsaWNlMiIsIl9zbGljZSIsImhhc05leHRUaWNrIiwiaGFzU2V0SW1tZWRpYXRlIiwiZmFsbGJhY2siLCJfZGVmZXIiLCJkZWZlciIsImVhY2hmbiIsIl9pdGVyYXRlZSIsIl9lYWNoTGltaXQyIiwiX3dpdGhvdXRJbmRleDIiLCJpc0xvY2tlZCIsImNhbkNhY2hlIiwiY2FjaGVUeXBlRm9yUGF5bG9hZCIsInBhcmFtc1dpdGhvdXRCbG9ja1RhZyIsImJsb2NrVGFnUGFyYW1JbmRleCIsImNhY2hlSWRlbnRpZmllckZvclBheWxvYWQiLCJpbmNsdWRlQmxvY2tSZWYiLCJibG9ja1RhZ0ZvclBheWxvYWQiLCJqc29uIiwic3BhY2UiLCJjeWNsZXMiLCJyZXBsYWNlciIsIm5vZGUiLCJhb2JqIiwiYm9iaiIsInBhcmVudCIsImxldmVsIiwiaW5kZW50IiwiY29sb25TZXBhcmF0b3IiLCJrZXlWYWx1ZSIsImF0IiwiZXNjYXBlZSIsInVmZmZmIiwid2hpdGUiLCJyZXZpdmVyIiwid2FsayIsImdhcCIsInJlcCIsImVzY2FwYWJsZSIsIm1ldGEiLCJxdW90ZSIsInBhcnRpYWwiLCJtaW5kIiwiZXh0cmFEaWdpdHMiLCJkYXRlUGFydCIsImV4dHJhUGFydCIsInBhcnNlSGVhZGVycyIsInh0ZW5kIiwiaW5pdFBhcmFtcyIsImNyZWF0ZVhIUiIsIl9jcmVhdGVYSFIiLCJjYWxsZWQiLCJnZXRCb2R5IiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VYTUwiLCJmaXJlZm94QnVnVGFrZW5FZmZlY3QiLCJub2RlTmFtZSIsImdldFhtbCIsImlzSnNvbiIsImVycm9yRnVuYyIsImV2dCIsInRpbWVvdXRUaW1lciIsImZhaWx1cmVSZXNwb25zZSIsImxvYWRGdW5jIiwiYWJvcnRlZCIsInN0YXR1cyIsInVzZVhEUiIsInVybCIsInJhd1JlcXVlc3QiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJjb3JzIiwiWERvbWFpblJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsIm9ubG9hZCIsIm9ucHJvZ3Jlc3MiLCJvbmFib3J0Iiwib250aW1lb3V0Iiwib3BlbiIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJhYm9ydCIsInNldFJlcXVlc3RIZWFkZXIiLCJpc0VtcHR5IiwiYmVmb3JlU2VuZCIsImZvckVhY2hBcnJheSIsIndpbiIsImFsZXJ0IiwiY29uZmlybSIsInByb21wdCIsInJvdyIsImRlZmluZSIsImdldFBvbHlmaWxsIiwic2hpbSIsImJvdW5kVHJpbSIsIkVSUk9SX01FU1NBR0UiLCJib3VuZCIsImJpbmRlciIsImJvdW5kTGVuZ3RoIiwiYm91bmRBcmdzIiwiRW1wdHkiLCJvcmlnS2V5cyIsImtleXNTaGltIiwib3JpZ2luYWxLZXlzIiwiaXNFbnVtZXJhYmxlIiwiaGFzRG9udEVudW1CdWciLCJoYXNQcm90b0VudW1CdWciLCJkb250RW51bXMiLCJlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSIsImV4Y2x1ZGVkS2V5cyIsIiRhcHBsaWNhdGlvbkNhY2hlIiwiJGNvbnNvbGUiLCIkZXh0ZXJuYWwiLCIkZnJhbWUiLCIkZnJhbWVFbGVtZW50IiwiJGZyYW1lcyIsIiRpbm5lckhlaWdodCIsIiRpbm5lcldpZHRoIiwiJG9ubW96ZnVsbHNjcmVlbmNoYW5nZSIsIiRvbm1vemZ1bGxzY3JlZW5lcnJvciIsIiRvdXRlckhlaWdodCIsIiRvdXRlcldpZHRoIiwiJHBhZ2VYT2Zmc2V0IiwiJHBhZ2VZT2Zmc2V0IiwiJHBhcmVudCIsIiRzY3JvbGxMZWZ0IiwiJHNjcm9sbFRvcCIsIiRzY3JvbGxYIiwiJHNjcm9sbFkiLCIkc2VsZiIsIiR3ZWJraXRJbmRleGVkREIiLCIkd2Via2l0U3RvcmFnZUluZm8iLCIkd2luZG93IiwiaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnIiwidGhlS2V5cyIsInNraXBQcm90byIsInNraXBDb25zdHJ1Y3RvciIsImVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSIsIkdldEludHJpbnNpYyIsIiRPYmplY3QiLCIkVHlwZUVycm9yIiwiJFN0cmluZyIsImFzc2VydFJlY29yZCIsIiRpc05hTiIsIiRpc0Zpbml0ZSIsIklzQ2FsbGFibGUiLCJ0b1ByaW1pdGl2ZSIsIkVTNSIsIlRvUHJpbWl0aXZlIiwiVG9Cb29sZWFuIiwiVG9OdW1iZXIiLCJUb0ludGVnZXIiLCJUb0ludDMyIiwiVG9VaW50MzIiLCJUb1VpbnQxNiIsInBvc0ludCIsIlRvT2JqZWN0Iiwib3B0TWVzc2FnZSIsIlNhbWVWYWx1ZSIsIlR5cGUiLCJJc1Byb3BlcnR5RGVzY3JpcHRvciIsIkRlc2MiLCJhbGxvd2VkIiwiaXNEYXRhIiwiSXNBY2Nlc3NvciIsIklzQWNjZXNzb3JEZXNjcmlwdG9yIiwiSXNEYXRhRGVzY3JpcHRvciIsIklzR2VuZXJpY0Rlc2NyaXB0b3IiLCJGcm9tUHJvcGVydHlEZXNjcmlwdG9yIiwiVG9Qcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmoiLCIkU3ludGF4RXJyb3IiLCJyZWNvcmRUeXBlIiwiYXJndW1lbnROYW1lIiwibW9kdWxvIiwicmVtYWluIiwiaXNDYWxsYWJsZSIsIkVTNWludGVybmFsU2xvdHMiLCJPIiwiYWN0dWFsSGludCIsIm1ldGhvZHMiLCJwb2x5ZmlsbCIsImZvckVhY2hTdHJpbmciLCJmb3JFYWNoT2JqZWN0IiwidGhpc0FyZyIsIlBhcnNlRXJyb3IiLCJJbnZhbGlkUmVxdWVzdCIsIkludmFsaWRQYXJhbXMiLCJTZXJ2ZXJFcnJvciIsIkV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5IiwiRnVuY3Rpb25DYWxsIiwiRmlib25hY2NpU3RyYXRlZ3kiLCJFeHBvbmVudGlhbFN0cmF0ZWd5IiwiZmlib25hY2NpIiwidmFyZ3MiLCJlcnJvcnMiLCJmYWlsQ2hlY2siLCJFeGNlcHRpb25Db25zdHJ1Y3RvciIsIm1lc3NhZ2VGb3JtYXQiLCJmb3JtYXRBcmdzIiwiZmFpbEFyZ3VtZW50Q2hlY2siLCJJbGxlZ2FsQXJndW1lbnRFcnJvciIsImZhaWxTdGF0ZUNoZWNrIiwiSWxsZWdhbFN0YXRlRXJyb3IiLCJ0eXBlT2YiLCJ0eXBlQ2hlY2siLCJleHBlY3QiLCJjaGVja0lzRGVmIiwiY2hlY2tJc0RlZkFuZE5vdE51bGwiLCJjaGVja0lzU3RyaW5nIiwiY2hlY2tJc0FycmF5IiwiY2hlY2tJc051bWJlciIsImNoZWNrSXNCb29sZWFuIiwiY2hlY2tJc0Z1bmN0aW9uIiwiY2hlY2tJc09iamVjdCIsImZhY3Rvcl8iLCJERUZBVUxUX0ZBQ1RPUiIsImZhY3RvciIsImZ1bmN0aW9uXyIsImFyZ3VtZW50c18iLCJjYWxsYmFja18iLCJsYXN0UmVzdWx0XyIsIm51bVJldHJpZXNfIiwiYmFja29mZl8iLCJzdHJhdGVneV8iLCJmYWlsQWZ0ZXJfIiwicmV0cnlQcmVkaWNhdGVfIiwiREVGQVVMVF9SRVRSWV9QUkVESUNBVEVfIiwic3RhdGVfIiwiU3RhdGVfIiwiUEVORElORyIsIlJVTk5JTkciLCJDT01QTEVURUQiLCJBQk9SVEVEIiwiaXNQZW5kaW5nIiwiaXNDb21wbGV0ZWQiLCJpc0Fib3J0ZWQiLCJzZXRTdHJhdGVneSIsInN0cmF0ZWd5IiwicmV0cnlJZiIsInJldHJ5UHJlZGljYXRlIiwiZ2V0TGFzdFJlc3VsdCIsImdldE51bVJldHJpZXMiLCJkb0NhbGxiYWNrXyIsImJhY2tvZmZGYWN0b3J5IiwiZG9DYWxsXyIsImhhbmRsZUJhY2tvZmZfIiwiaXNSZXRyeSIsImV2ZW50QXJncyIsImhhbmRsZUZ1bmN0aW9uQ2FsbGJhY2tfIiwiZGVsYXkiLCJfaXNBcnJheTIiLCJ0YXNrSW5kZXgiLCJuZXh0VGFzayIsIl9wYXJhbGxlbDIiLCJldGhBYmkiLCJ0eXBlZFNpZ25hdHVyZUhhc2giLCJ0eXBlZERhdGEiLCJzY2hlbWEiLCJzb2xpZGl0eVNIQTMiLCJyZWNvdmVyUHVibGljS2V5Iiwic2lnUGFyYW1zIiwiZ2V0UHVibGljS2V5Rm9yIiwicGFkV2l0aFplcm9lcyIsIm15U3RyaW5nIiwiY29uY2F0U2lnIiwiclNpZyIsInNTaWciLCJ2U2lnIiwiclN0ciIsInNTdHIiLCJ2U3RyIiwicGVyc29uYWxTaWduIiwic2VuZGVyIiwiZXh0cmFjdFB1YmxpY0tleSIsImhhc2hCdWZmZXIiLCJzaWduVHlwZWREYXRhIiwicmVjb3ZlclR5cGVkU2lnbmF0dXJlIiwiQUJJIiwiZWxlbWVudGFyeU5hbWUiLCJzdGFydHNXaXRoIiwicGFyc2VUeXBlTiIsImV4ZWMiLCJwYXJzZVR5cGVOeE0iLCJwYXJzZVR5cGVBcnJheSIsInBhcnNlTnVtYmVyIiwicGFyc2VTaWduYXR1cmUiLCJyZXRhcmdzIiwiZW5jb2RlU2luZ2xlIiwiZGVjb2RlU2luZ2xlIiwicGFyc2VkVHlwZSIsInBhcnNlVHlwZSIsInJhd1R5cGUiLCJzdWJBcnJheSIsIm1lbW9yeVVzYWdlIiwiaXNEeW5hbWljIiwiZXZlbnRJRCIsIm1ldGhvZElEIiwicmF3RW5jb2RlIiwiaGVhZExlbmd0aCIsInJhd0RlY29kZSIsInNpbXBsZUVuY29kZSIsInNpbXBsZURlY29kZSIsInNvbGlkaXR5UGFjayIsInNvbGlkaXR5U0hBMjU2Iiwic29saWRpdHlSSVBFTUQxNjAiLCJmcm9tU2VycGVudCIsInRvU2VycGVudCIsImNhbGN1bGF0ZVNpZ1JlY292ZXJ5IiwiY2hhaW5JZCIsImlzVmFsaWRTaWdSZWNvdmVyeSIsImFkZHIiLCJub25jZUJOIiwiZ2VuZXJhdGVBZGRyZXNzMiIsInNhbHQiLCJpbml0Q29kZSIsImZyb21CdWYiLCJzYWx0QnVmIiwiaW5pdENvZGVCdWYiLCJob21lc3RlYWRPckxhdGVyIiwickJOIiwic0JOIiwib2JqXzEiLCJrZXlzXzEiLCJzZW1hcGhvcmUiLCJmaXJzdEhlcmUiLCJpc0ZpcnN0IiwiYXZhaWxhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Z0JBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFB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SUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFDMUYsSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxHQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sSUFDMUYsR0FBTSxFQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxHQUFNLEdBQU0sSUFDMUYsR0FBTSxJQUFNLEVBQU0sR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFDMUYsSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sR0FDMUYsSUFBTSxJQUFNLEdBQU0sR0FBTSxHQUFNLEVBQU0sRUFBTSxFQUFNLElBQU0sR0FBTSxFQUFNLEdBQU0sRUFFeEUsRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsSUFHRWdpRSxFQUFxQ3ppRSxFQUFPUyxLQUFLLENBRW5ELEdBQU0sSUFBTSxFQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxHQUVoRCxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUMxRixFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUUxRixJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxFQUFNLEVBQU0sRUFBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEdBQU0sSUFBTSxHQUMxRixJQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUMxRixHQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxJQUMxRixHQUFNLEVBQU0sRUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLEdBQU0sSUFBTSxJQUFNLEdBQU0sR0FBTSxJQUMxRixHQUFNLElBQU0sR0FBTSxHQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxHQUMxRixFQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sR0FBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sSUFBTSxHQUMxRixJQUFNLElBQU0sRUFBTSxHQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxHQUMxRixJQUFNLElBQU0sR0FBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sSUFBTSxHQUFNLEVBQU0sR0FBTSxFQUV4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RUFBVSxJQUFJajlELE1BQU0sSUFFcEIwMUMsRUFBSyxDQUNQLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQ2xELEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQ25ELEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQ2xELEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQ25ELEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLElBR2hENm5CLEVBQUssQ0FDUCxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUNsRCxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUNuRCxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUNsRCxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUNsRCxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxJQUdoREMsRUFBSyxDQUNQLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQ3JELEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQ3BELEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQ3JELEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQ3BELEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEdBR25EQyxFQUFLLENBQ1AsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFDckQsRUFBRyxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FDcEQsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFDckQsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFDckQsRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksSUFHbEQzcUIsRUFBSyxDQUFDLEVBQVksV0FBWSxXQUFZLFdBQVksWUFDdEQ0cUIsRUFBSyxDQUFDLFdBQVksV0FBWSxXQUFZLFdBQVksR0FFMUQsU0FBU3Z4QixJQUNQcUQsRUFBU3I5QyxLQUFLMkMs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RyxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFDbkQsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FDbEQsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FDbEQsR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsSUFHaER4NUUsRUFBSSxDQUNOLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQ3JELEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQ3BELEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQ3JELEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQ3BELEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEdBR25EeTVFLEVBQUssQ0FDUCxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUNyRCxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxHQUNwRCxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBRyxFQUNyRCxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUNyRCxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxLLDZCQzlJdEQsSUFBSXJrRCxFQUFRLEVBQVEsSUFDaEIxZSxFQUFTLEVBQVEsSUFFckIsU0FBU2dqRSxFQUFLam9ELEVBQU1qeUIsRUFBSys3QixHQUN2QixLQUFNeDZCLGdCQUFnQjI0RSxHQUNwQixPQUFPLElBQUlBLEVBQUtqb0QsRUFBTWp5QixFQUFLKzdCLEdBQzdCeDZCLEtBQUs4bEMsS0FBT3BWLEVBQ1oxd0IsS0FBSytsQyxVQUFZclYsRUFBS3FWLFVBQVksRUFDbEMvbEMsS0FBSzJzQyxRQUFVamMsRUFBS2ljLFFBQVUsRUFDOUIzc0MsS0FBSzQ0RSxNQUFRLEtBQ2I1NEUsS0FBSzY0RSxNQUFRLEtBRWI3NEUsS0FBS3FXLE1BQU1nZSxFQUFNbmQsUUFBUXpZLEVBQUsrN0IsSUFFaEN2OUIsRUFBT0QsUUFBVTI3RSxFQUVqQkEsRUFBSzc1RSxVQUFVdVgsTUFBUSxTQUFjNVgsR0FFL0JBLEVBQUlvQyxPQUFTYixLQUFLK2xDLFlBQ3BCdG5DLEdBQU0sSUFBSXVCLEtBQUs4bEMsTUFBT08sT0FBTzVuQyxHQUFLa29DLFVBQ3BDaHhCLEVBQU9sWCxFQUFJb0MsUUFBVWIsS0FBSytsQyxXQUcxQixJQUFLLElBQUk3b0MsRUFBSXVCLEVBQUlvQyxPQUFRM0QsRUFBSThDLEtBQUsrbEMsVUFBVzdvQyxJQUMzQ3VCLEVBQUk2SSxLQUFLLEdBRVgsSUFBS3BLLEVBQUksRUFBR0EsRUFBSXVCLEVBQUlvQyxPQUFRM0QsSUFDMUJ1QixFQUFJdkIsSUFBTSxHQUlaLElBSEE4QyxLQUFLNDRFLE9BQVEsSUFBSTU0RSxLQUFLOGxDLE1BQU9PLE9BQU81bkMsR0FHL0J2QixFQUFJLEVBQUdBLEVBQUl1QixFQUFJb0MsT0FBUTNELElBQzFCdUIsRUFBSXZCLElBQU0sSUFDWjhDLEtBQUs2NEUsT0FBUSxJQUFJNzRFLEtBQUs4bEMsTUFBT08sT0FBTzVuQyxJQUd0Q2s2RSxFQUFLNzVFLFVBQVV1bkMsT0FBUyxTQUFnQnp3QixFQUFLNGtCLEdBRTNDLE9BREF4NkIsS0FBSzQ0RSxNQUFNdnlDLE9BQU96d0IsRUFBSzRrQixHQUNoQng2QixNQUdUMjRFLEVBQUs3NUUsVUFBVTZuQyxPQUFTLFNBQWdCbk0sR0FFdEMsT0FEQXg2QixLQUFLNjRFLE1BQU14eUMsT0FBT3JtQyxLQUFLNDRFLE1BQU1qeUMsVUFDdEIzbUMsS0FBSzY0RSxNQUFNbHlDLE9BQU9uTSxLLGNDN0MzQnY5QixFQUFPRCxRQUFVLENBQ2Yyd0UsUUFBUyxDQUNQRyxLQUFNLEVBQ05LLE9BQVEsQ0FDTixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxrRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0Usa0VBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esc0VBSU5sRCxJQUFLLENBQ0h2L0MsSUFBSyxFQUNMeWlELE9BQVEsQ0FDTixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLGtFQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0Usa0VBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLGlFQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLGtFQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLHdFLDZCQ3J3QlIsSUFBSXQ0RCxFQUFLLEVBQVEsSUFDYmlqRSxFQUFXLEVBQVEsS0FDbkIxa0QsRUFBVyxFQUFRLElBRW5CemUsRUFEUXllLEVBQVNDLE1BQ0YxZSxPQUVmb2pFLEVBQVUsRUFBUSxLQUNsQkMsRUFBWSxFQUFRLEtBRXhCLFNBQVN0VCxFQUFHLzBELEdBQ1YsS0FBTTNRLGdCQUFnQjBsRSxHQUNwQixPQUFPLElBQUlBLEVBQUcvMEQsR0FHTyxpQkFBWkEsSUFDVGdGLEVBQU95ZSxFQUFTSSxPQUFPejFCLGVBQWU0UixHQUFVLGlCQUFtQkEsR0FFbkVBLEVBQVV5akIsRUFBU0ksT0FBTzdqQixJQUl4QkEsYUFBbUJ5akIsRUFBU0ksT0FBT29qRCxjQUNyQ2puRSxFQUFVLENBQUU0akIsTUFBTzVqQixJQUVyQjNRLEtBQUt1MEIsTUFBUTVqQixFQUFRNGpCLE1BQU1BLE1BQzNCdjBCLEtBQUtyQixFQUFJcUIsS0FBS3UwQixNQUFNNTFCLEVBQ3BCcUIsS0FBS3FuRSxHQUFLcm5FLEtBQUtyQixFQUFFaW1CLE1BQU0sR0FDdkI1a0IsS0FBSzRCLEVBQUk1QixLQUFLdTBCLE1BQU0zeUIsRUFHcEI1QixLQUFLNEIsRUFBSStPLEVBQVE0akIsTUFBTTN5QixFQUN2QjVCLEtBQUs0QixFQUFFNnRFLFdBQVc5K0QsRUFBUTRqQixNQUFNNTFCLEVBQUU4YSxZQUFjLEdBR2hEelosS0FBSzB3QixLQUFPL2YsRUFBUStmLE1BQVEvZixFQUFRNGpCLE1BQU03RCxLQUU1Q3p6QixFQUFPRCxRQUFVMG9FLEVBRWpCQSxFQUFHNW1FLFVBQVVnbkUsUUFBVSxTQUFpQm4xRCxHQUN0QyxPQUFPLElBQUlvb0UsRUFBUS80RSxLQUFNMlEsSUFHM0IrMEQsRUFBRzVtRSxVQUFVd25FLGVBQWlCLFNBQXdCMlMsRUFBTXorQyxHQUMxRCxPQUFPdStDLEVBQVFHLFlBQVlsNUUsS0FBTWk1RSxFQUFNeitDLElBR3pDa3JDLEVBQUc1bUUsVUFBVXE2RSxjQUFnQixTQUF1QnBULEVBQUt2ckMsR0FDdkQsT0FBT3UrQyxFQUFRSyxXQUFXcDVFLEtBQU0rbEUsRUFBS3ZyQyxJQUd2Q2tyQyxFQUFHNW1FLFVBQVV1NkUsV0FBYSxTQUFvQjFvRSxHQUN2Q0EsSUFDSEEsRUFBVSxJQWNaLElBWEEsSUFBSTJvRSxFQUFPLElBQUlSLEVBQVMsQ0FDdEJwb0QsS0FBTTF3QixLQUFLMHdCLEtBQ1hnM0MsS0FBTS8yRCxFQUFRKzJELEtBQ2Q2UixRQUFTNW9FLEVBQVE0b0UsU0FBVyxPQUM1QkMsUUFBUzdvRSxFQUFRNm9FLFNBQVdwbEQsRUFBU0UsS0FBS3QwQixLQUFLMHdCLEtBQUtrYyxjQUNwRDZzQyxXQUFZOW9FLEVBQVE2b0UsU0FBVzdvRSxFQUFROG9FLFlBQWMsT0FDckR6akMsTUFBT2gyQyxLQUFLckIsRUFBRXVZLFlBR1ozTCxFQUFRdkwsS0FBS3JCLEVBQUVzRSxhQUNmeTJFLEVBQU0xNUUsS0FBS3JCLEVBQUVzUCxJQUFJLElBQUk0SCxFQUFHLE1BQ3pCLENBQ0QsSUFBSW9qRSxFQUFPLElBQUlwakUsRUFBR3lqRSxFQUFLcE4sU0FBUzNnRSxJQUNoQyxLQUFJMHRFLEVBQUtyaUUsSUFBSThpRSxHQUFPLEdBSXBCLE9BREFULEVBQUtsL0QsTUFBTSxHQUNKL1osS0FBS3NtRSxlQUFlMlMsS0FJL0J2VCxFQUFHNW1FLFVBQVU2NkUsYUFBZSxTQUFxQi9qRSxFQUFLZ2tFLEdBQ3BELElBQUkzeUQsRUFBMkIsRUFBbkJyUixFQUFJM1MsYUFBbUJqRCxLQUFLckIsRUFBRThhLFlBRzFDLE9BRkl3TixFQUFRLElBQ1ZyUixFQUFNQSxFQUFJZ1AsTUFBTXFDLEtBQ2IyeUQsR0FBYWhrRSxFQUFJZ0IsSUFBSTVXLEtBQUtyQixJQUFNLEVBQzVCaVgsRUFBSTNILElBQUlqTyxLQUFLckIsR0FFYmlYLEdBR1g4dkQsRUFBRzVtRSxVQUFVZzJDLEtBQU8sU0FBY2wvQixFQUFLblgsRUFBSys3QixFQUFLN3BCLEdBQzVCLGlCQUFSNnBCLElBQ1Q3cEIsRUFBVTZwQixFQUNWQSxFQUFNLE1BRUg3cEIsSUFDSEEsRUFBVSxJQUVabFMsRUFBTXVCLEtBQUtzbUUsZUFBZTduRSxFQUFLKzdCLEdBQy9CNWtCLEVBQU01VixLQUFLMjVFLGFBQWEsSUFBSTlqRSxFQUFHRCxFQUFLLEtBcUJwQyxJQWxCQSxJQUFJckssRUFBUXZMLEtBQUtyQixFQUFFc0UsYUFDZjQyRSxFQUFPcDdFLEVBQUlxN0UsYUFBYTVpRSxRQUFRLEtBQU0zTCxHQUd0Q3lxQyxFQUFRcGdDLEVBQUlzQixRQUFRLEtBQU0zTCxHQUcxQit0RSxFQUFPLElBQUlSLEVBQVMsQ0FDdEJwb0QsS0FBTTF3QixLQUFLMHdCLEtBQ1g4b0QsUUFBU0ssRUFDVDdqQyxNQUFPQSxFQUNQMHhCLEtBQU0vMkQsRUFBUSsyRCxLQUNkNlIsUUFBUzVvRSxFQUFRNG9FLFNBQVcsU0FJMUJRLEVBQU0vNUUsS0FBS3JCLEVBQUVzUCxJQUFJLElBQUk0SCxFQUFHLElBRW5CbWpCLEVBQU8sR0FBU0EsSUFBUSxDQUMvQixJQUFJNWdCLEVBQUl6SCxFQUFReUgsRUFDWnpILEVBQVF5SCxFQUFFNGdCLEdBQ1YsSUFBSW5qQixFQUFHeWpFLEVBQUtwTixTQUFTbHNFLEtBQUtyQixFQUFFc0UsZUFFaEMsTUFEQW1WLEVBQUlwWSxLQUFLMjVFLGFBQWF2aEUsR0FBRyxJQUNuQjhPLEtBQUssSUFBTSxHQUFLOU8sRUFBRXhCLElBQUltakUsSUFBUSxHQUFwQyxDQUdBLElBQUlDLEVBQUtoNkUsS0FBSzRCLEVBQUV5SyxJQUFJK0wsR0FDcEIsSUFBSTRoRSxFQUFHaFQsYUFBUCxDQUdBLElBQUlpVCxFQUFNRCxFQUFHekssT0FDVHZ4RSxFQUFJaThFLEVBQUlyMEQsS0FBSzVsQixLQUFLckIsR0FDdEIsR0FBa0IsSUFBZFgsRUFBRWtwQixLQUFLLEdBQVgsQ0FHQSxJQUFJam9CLEVBQUltWixFQUFFK08sS0FBS25uQixLQUFLckIsR0FBRzBOLElBQUlyTyxFQUFFcU8sSUFBSTVOLEVBQUlxN0UsY0FBY3YrRCxLQUFLM0YsSUFFeEQsR0FBa0IsS0FEbEIzVyxFQUFJQSxFQUFFMm1CLEtBQUs1bEIsS0FBS3JCLElBQ1Z1b0IsS0FBSyxHQUFYLENBR0EsSUFBSXlnRCxHQUFpQnFTLEVBQUd4SyxPQUFPN29ELFFBQVUsRUFBSSxJQUNULElBQWZzekQsRUFBSXJqRSxJQUFJNVksR0FBVyxFQUFJLEdBUTVDLE9BTEkyUyxFQUFRODJELFdBQWF4b0UsRUFBRTJYLElBQUk1VyxLQUFLcW5FLElBQU0sSUFDeENwb0UsRUFBSWUsS0FBS3JCLEVBQUVzUCxJQUFJaFAsR0FDZjBvRSxHQUFpQixHQUdaLElBQUlxUixFQUFVLENBQUVoN0UsRUFBR0EsRUFBR2lCLEVBQUdBLEVBQUcwb0UsY0FBZUEsVUFJdERqQyxFQUFHNW1FLFVBQVVxbEUsT0FBUyxTQUFnQnZ1RCxFQUFLbS9CLEVBQVd0MkMsRUFBSys3QixHQUN6RDVrQixFQUFNNVYsS0FBSzI1RSxhQUFhLElBQUk5akUsRUFBR0QsRUFBSyxLQUNwQ25YLEVBQU11QixLQUFLbTVFLGNBQWMxNkUsRUFBSys3QixHQUk5QixJQUFJeDhCLEdBSEorMkMsRUFBWSxJQUFJaWtDLEVBQVVqa0MsRUFBVyxRQUduQi8yQyxFQUNkaUIsRUFBSTgxQyxFQUFVOTFDLEVBQ2xCLEdBQUlqQixFQUFFa3BCLEtBQUssR0FBSyxHQUFLbHBCLEVBQUU0WSxJQUFJNVcsS0FBS3JCLElBQU0sRUFDcEMsT0FBTyxFQUNULEdBQUlNLEVBQUVpb0IsS0FBSyxHQUFLLEdBQUtqb0IsRUFBRTJYLElBQUk1VyxLQUFLckIsSUFBTSxFQUNwQyxPQUFPLEVBR1QsSUFlSUssRUFmQWs3RSxFQUFPajdFLEVBQUVrb0IsS0FBS25uQixLQUFLckIsR0FDbkI2c0UsRUFBSzBPLEVBQUs3dEUsSUFBSXVKLEdBQUtnUSxLQUFLNWxCLEtBQUtyQixHQUM3QjhzRSxFQUFLeU8sRUFBSzd0RSxJQUFJck8sR0FBRzRuQixLQUFLNWxCLEtBQUtyQixHQUUvQixPQUFLcUIsS0FBS3UwQixNQUFNKzRDLGdCQVdadHVFLEVBQUlnQixLQUFLNEIsRUFBRW94RSxRQUFReEgsRUFBSS9zRSxFQUFJOG5FLFlBQWFrRixJQUN0Q3pFLGNBTUNob0UsRUFBRWczRSxPQUFPaDRFLEtBakJWZ0IsRUFBSWdCLEtBQUs0QixFQUFFbXhFLE9BQU92SCxFQUFJL3NFLEVBQUk4bkUsWUFBYWtGLElBQ3JDekUsY0FHa0MsSUFBakNob0UsRUFBRXV3RSxPQUFPM3BELEtBQUs1bEIsS0FBS3JCLEdBQUdpWSxJQUFJNVksSUFnQnJDMG5FLEVBQUc1bUUsVUFBVWdwRSxjQUFnQixTQUFTbHlELEVBQUttL0IsRUFBV3Z1QyxFQUFHZzBCLEdBQ3ZEN2tCLEdBQVEsRUFBSW5QLEtBQU9BLEVBQUcsNENBQ3RCdXVDLEVBQVksSUFBSWlrQyxFQUFVamtDLEVBQVd2YSxHQUVyQyxJQUFJNzdCLEVBQUlxQixLQUFLckIsRUFDVG1ELEVBQUksSUFBSStULEVBQUdELEdBQ1g1WCxFQUFJKzJDLEVBQVUvMkMsRUFDZGlCLEVBQUk4MUMsRUFBVTkxQyxFQUdkazdFLEVBQWEsRUFBSjN6RSxFQUNUNHpFLEVBQWM1ekUsR0FBSyxFQUN2QixHQUFJeEksRUFBRTRZLElBQUk1VyxLQUFLdTBCLE1BQU12MUIsRUFBRTRtQixLQUFLNWxCLEtBQUt1MEIsTUFBTTUxQixLQUFPLEdBQUt5N0UsRUFDakQsTUFBTSxJQUFJejNFLE1BQU0sd0NBSWhCM0UsRUFERW84RSxFQUNFcDZFLEtBQUt1MEIsTUFBTTQ2QyxXQUFXbnhFLEVBQUV5ZCxJQUFJemIsS0FBS3UwQixNQUFNNTFCLEdBQUl3N0UsR0FFM0NuNkUsS0FBS3UwQixNQUFNNDZDLFdBQVdueEUsRUFBR204RSxHQUUvQixJQUFJRSxFQUFPdGxDLEVBQVUvMkMsRUFBRW1wQixLQUFLeG9CLEdBQ3hCNjBFLEVBQUs3MEUsRUFBRXNQLElBQUluTSxHQUFHdUssSUFBSWd1RSxHQUFNejBELEtBQUtqbkIsR0FDN0I4MEUsRUFBS3gwRSxFQUFFb04sSUFBSWd1RSxHQUFNejBELEtBQUtqbkIsR0FJMUIsT0FBT3FCLEtBQUs0QixFQUFFbXhFLE9BQU9TLEVBQUl4MUUsRUFBR3kxRSxJQUc5Qi9OLEVBQUc1bUUsVUFBVXc3RSxvQkFBc0IsU0FBU3g0RSxFQUFHaXpDLEVBQVd3bEMsRUFBRy8vQyxHQUUzRCxHQUFnQyxRQURoQ3VhLEVBQVksSUFBSWlrQyxFQUFVamtDLEVBQVd2YSxJQUN2Qm10QyxjQUNaLE9BQU81eUIsRUFBVTR5QixjQUVuQixJQUFLLElBQUl6cUUsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQUssQ0FDMUIsSUFBSXM5RSxFQUNKLElBQ0VBLEVBQVN4NkUsS0FBSzhuRSxjQUFjaG1FLEVBQUdpekMsRUFBVzczQyxHQUMxQyxNQUFPNEUsR0FDUCxTQUdGLEdBQUkwNEUsRUFBT3p5RCxHQUFHd3lELEdBQ1osT0FBT3I5RSxFQUVYLE1BQU0sSUFBSXlGLE1BQU0sMEMsNkJDNU9sQixJQUFJK3RCLEVBQU8sRUFBUSxJQUNmMkQsRUFBUSxFQUFRLElBQ2hCMWUsRUFBUyxFQUFRLElBRXJCLFNBQVNtakUsRUFBU25vRSxHQUNoQixLQUFNM1EsZ0JBQWdCODRFLEdBQ3BCLE9BQU8sSUFBSUEsRUFBU25vRSxHQUN0QjNRLEtBQUswd0IsS0FBTy9mLEVBQVErZixLQUNwQjF3QixLQUFLeTZFLGFBQWU5cEUsRUFBUThwRSxXQUU1Qno2RSxLQUFLaXJCLE9BQVNqckIsS0FBSzB3QixLQUFLaWMsUUFDeEIzc0MsS0FBSzA2RSxXQUFhL3BFLEVBQVErcEUsWUFBYzE2RSxLQUFLMHdCLEtBQUtrYyxhQUVsRDVzQyxLQUFLMjZFLFFBQVUsS0FDZjM2RSxLQUFLNDZFLGVBQWlCLEtBQ3RCNTZFLEtBQUsrNkMsRUFBSSxLQUNULzZDLEtBQUs2NkUsRUFBSSxLQUVULElBQUlyQixFQUFVbmxELEVBQU1uZCxRQUFRdkcsRUFBUTZvRSxRQUFTN29FLEVBQVE4b0UsWUFBYyxPQUMvRHpqQyxFQUFRM2hCLEVBQU1uZCxRQUFRdkcsRUFBUXFsQyxNQUFPcmxDLEVBQVFtcUUsVUFBWSxPQUN6RHBULEVBQU9yekMsRUFBTW5kLFFBQVF2RyxFQUFRKzJELEtBQU0vMkQsRUFBUTRvRSxTQUFXLE9BQzFENWpFLEVBQU82akUsRUFBUTM0RSxRQUFXYixLQUFLMDZFLFdBQWEsRUFDckMsbUNBQXFDMTZFLEtBQUswNkUsV0FBYSxTQUM5RDE2RSxLQUFLcVcsTUFBTW1qRSxFQUFTeGpDLEVBQU8weEIsR0FFN0J6cUUsRUFBT0QsUUFBVTg3RSxFQUVqQkEsRUFBU2g2RSxVQUFVdVgsTUFBUSxTQUFjbWpFLEVBQVN4akMsRUFBTzB4QixHQUN2RCxJQUFJcVQsRUFBT3ZCLEVBQVF4dkUsT0FBT2dzQyxHQUFPaHNDLE9BQU8wOUQsR0FFeEMxbkUsS0FBSys2QyxFQUFJLElBQUk3dkMsTUFBTWxMLEtBQUtpckIsT0FBUyxHQUNqQ2pyQixLQUFLNjZFLEVBQUksSUFBSTN2RSxNQUFNbEwsS0FBS2lyQixPQUFTLEdBQ2pDLElBQUssSUFBSS90QixFQUFJLEVBQUdBLEVBQUk4QyxLQUFLNjZFLEVBQUVoNkUsT0FBUTNELElBQ2pDOEMsS0FBSys2QyxFQUFFNzlDLEdBQUssRUFDWjhDLEtBQUs2NkUsRUFBRTM5RSxHQUFLLEVBR2Q4QyxLQUFLMG1DLFFBQVFxMEMsR0FDYi82RSxLQUFLMjZFLFFBQVUsRUFDZjM2RSxLQUFLNDZFLGVBQWlCLGlCQUd4QjlCLEVBQVNoNkUsVUFBVWs4RSxNQUFRLFdBQ3pCLE9BQU8sSUFBSXRxRCxFQUFLb25CLEtBQUs5M0MsS0FBSzB3QixLQUFNMXdCLEtBQUsrNkMsSUFHdkMrOUIsRUFBU2g2RSxVQUFVNG5DLFFBQVUsU0FBZ0JxMEMsR0FDM0MsSUFBSUUsRUFBT2o3RSxLQUFLZzdFLFFBQ0EzMEMsT0FBT3JtQyxLQUFLNjZFLEdBQ1p4MEMsT0FBTyxDQUFFLElBQ3JCMDBDLElBQ0ZFLEVBQU9BLEVBQUs1MEMsT0FBTzAwQyxJQUNyQi82RSxLQUFLKzZDLEVBQUlrZ0MsRUFBS3QwQyxTQUNkM21DLEtBQUs2NkUsRUFBSTc2RSxLQUFLZzdFLFFBQVEzMEMsT0FBT3JtQyxLQUFLNjZFLEdBQUdsMEMsU0FDaENvMEMsSUFHTC82RSxLQUFLKzZDLEVBQUkvNkMsS0FBS2c3RSxRQUNBMzBDLE9BQU9ybUMsS0FBSzY2RSxHQUNaeDBDLE9BQU8sQ0FBRSxJQUNUQSxPQUFPMDBDLEdBQ1BwMEMsU0FDZDNtQyxLQUFLNjZFLEVBQUk3NkUsS0FBS2c3RSxRQUFRMzBDLE9BQU9ybUMsS0FBSzY2RSxHQUFHbDBDLFdBR3ZDbXlDLEVBQVNoNkUsVUFBVW84RSxPQUFTLFNBQWdCMUIsRUFBU0MsRUFBWWgrRCxFQUFLMC9ELEdBRTFDLGlCQUFmMUIsSUFDVDBCLEVBQVMxL0QsRUFDVEEsRUFBTWcrRCxFQUNOQSxFQUFhLE1BR2ZELEVBQVVubEQsRUFBTW5kLFFBQVFzaUUsRUFBU0MsR0FDakNoK0QsRUFBTTRZLEVBQU1uZCxRQUFRdUUsRUFBSzAvRCxHQUV6QnhsRSxFQUFPNmpFLEVBQVEzNEUsUUFBV2IsS0FBSzA2RSxXQUFhLEVBQ3JDLG1DQUFxQzE2RSxLQUFLMDZFLFdBQWEsU0FFOUQxNkUsS0FBSzBtQyxRQUFROHlDLEVBQVF4dkUsT0FBT3lSLEdBQU8sS0FDbkN6YixLQUFLMjZFLFFBQVUsR0FHakI3QixFQUFTaDZFLFVBQVVvdEUsU0FBVyxTQUFrQnJvRSxFQUFLMjJCLEVBQUsvZSxFQUFLMC9ELEdBQzdELEdBQUluN0UsS0FBSzI2RSxRQUFVMzZFLEtBQUs0NkUsZUFDdEIsTUFBTSxJQUFJajRFLE1BQU0sc0JBR0MsaUJBQVI2M0IsSUFDVDJnRCxFQUFTMS9ELEVBQ1RBLEVBQU0rZSxFQUNOQSxFQUFNLE1BSUovZSxJQUNGQSxFQUFNNFksRUFBTW5kLFFBQVF1RSxFQUFLMC9ELEdBQVUsT0FDbkNuN0UsS0FBSzBtQyxRQUFRanJCLElBSWYsSUFEQSxJQUFJMi9ELEVBQU8sR0FDSkEsRUFBS3Y2RSxPQUFTZ0QsR0FDbkI3RCxLQUFLNjZFLEVBQUk3NkUsS0FBS2c3RSxRQUFRMzBDLE9BQU9ybUMsS0FBSzY2RSxHQUFHbDBDLFNBQ3JDeTBDLEVBQU9BLEVBQUtweEUsT0FBT2hLLEtBQUs2NkUsR0FHMUIsSUFBSTF5RSxFQUFNaXpFLEVBQUszM0UsTUFBTSxFQUFHSSxHQUd4QixPQUZBN0QsS0FBSzBtQyxRQUFRanJCLEdBQ2J6YixLQUFLMjZFLFVBQ0V0bUQsRUFBTXVmLE9BQU96ckMsRUFBS3F5QixLLDZCQzdHM0IsSUFBSTNrQixFQUFLLEVBQVEsSUFHYkYsRUFGVyxFQUFRLElBQ0YwZSxNQUNGMWUsT0FFbkIsU0FBU29qRSxFQUFRdGtELEVBQUk5akIsR0FDbkIzUSxLQUFLeTBCLEdBQUtBLEVBQ1Z6MEIsS0FBS2k1RSxLQUFPLEtBQ1pqNUUsS0FBSytsRSxJQUFNLEtBR1BwMUQsRUFBUXNvRSxNQUNWajVFLEtBQUtxN0UsZUFBZTFxRSxFQUFRc29FLEtBQU10b0UsRUFBUTJxRSxTQUN4QzNxRSxFQUFRbzFELEtBQ1YvbEUsS0FBS3U3RSxjQUFjNXFFLEVBQVFvMUQsSUFBS3AxRCxFQUFRNnFFLFFBRTVDditFLEVBQU9ELFFBQVUrN0UsRUFFakJBLEVBQVFLLFdBQWEsU0FBb0Iza0QsRUFBSXN4QyxFQUFLdnJDLEdBQ2hELE9BQUl1ckMsYUFBZWdULEVBQ1ZoVCxFQUVGLElBQUlnVCxFQUFRdGtELEVBQUksQ0FDckJzeEMsSUFBS0EsRUFDTHlWLE9BQVFoaEQsS0FJWnUrQyxFQUFRRyxZQUFjLFNBQXFCemtELEVBQUl3a0QsRUFBTXorQyxHQUNuRCxPQUFJeStDLGFBQWdCRixFQUNYRSxFQUVGLElBQUlGLEVBQVF0a0QsRUFBSSxDQUNyQndrRCxLQUFNQSxFQUNOcUMsUUFBUzlnRCxLQUlidStDLEVBQVFqNkUsVUFBVTJ1RSxTQUFXLFdBQzNCLElBQUkxSCxFQUFNL2xFLEtBQUt1bUUsWUFFZixPQUFJUixFQUFJaUIsYUFDQyxDQUFFeHZDLFFBQVEsRUFBT2pFLE9BQVEsc0JBQzdCd3lDLEVBQUkwSCxXQUVKMUgsRUFBSTE1RCxJQUFJck0sS0FBS3kwQixHQUFHRixNQUFNNTFCLEdBQUdxb0UsYUFHdkIsQ0FBRXh2QyxRQUFRLEVBQU1qRSxPQUFRLE1BRnRCLENBQUVpRSxRQUFRLEVBQU9qRSxPQUFRLHVCQUZ6QixDQUFFaUUsUUFBUSxFQUFPakUsT0FBUSw4QkFPcEN3bEQsRUFBUWo2RSxVQUFVeW5FLFVBQVksU0FBbUIrSSxFQUFTOTBDLEdBVXhELE1BUnVCLGlCQUFaODBDLElBQ1Q5MEMsRUFBTTgwQyxFQUNOQSxFQUFVLE1BR1B0dkUsS0FBSytsRSxNQUNSL2xFLEtBQUsrbEUsSUFBTS9sRSxLQUFLeTBCLEdBQUc3eUIsRUFBRXlLLElBQUlyTSxLQUFLaTVFLE9BRTNCeitDLEVBR0V4NkIsS0FBSytsRSxJQUFJbnlCLE9BQU9wWixFQUFLODBDLEdBRm5CdHZFLEtBQUsrbEUsS0FLaEJnVCxFQUFRajZFLFVBQVVnN0UsV0FBYSxTQUFvQnQvQyxHQUNqRCxNQUFZLFFBQVJBLEVBQ0t4NkIsS0FBS2k1RSxLQUFLMTBFLFNBQVMsR0FBSSxHQUV2QnZFLEtBQUtpNUUsTUFHaEJGLEVBQVFqNkUsVUFBVXU4RSxlQUFpQixTQUF3QjU4RSxFQUFLKzdCLEdBQzlEeDZCLEtBQUtpNUUsS0FBTyxJQUFJcGpFLEVBQUdwWCxFQUFLKzdCLEdBQU8sSUFJL0J4NkIsS0FBS2k1RSxLQUFPajVFLEtBQUtpNUUsS0FBS3J6RCxLQUFLNWxCLEtBQUt5MEIsR0FBR0YsTUFBTTUxQixJQUczQ282RSxFQUFRajZFLFVBQVV5OEUsY0FBZ0IsU0FBdUI5OEUsRUFBSys3QixHQUM1RCxHQUFJLzdCLEVBQUlxTCxHQUFLckwsRUFBSXNMLEVBV2YsTUFQMkIsU0FBdkIvSixLQUFLeTBCLEdBQUdGLE1BQU1yd0IsS0FDaEJ5UixFQUFPbFgsRUFBSXFMLEVBQUcscUJBQ2tCLFVBQXZCOUosS0FBS3kwQixHQUFHRixNQUFNcndCLE1BQ1MsWUFBdkJsRSxLQUFLeTBCLEdBQUdGLE1BQU1yd0IsTUFDdkJ5UixFQUFPbFgsRUFBSXFMLEdBQUtyTCxFQUFJc0wsRUFBRyxxQ0FFekIvSixLQUFLK2xFLElBQU0vbEUsS0FBS3kwQixHQUFHRixNQUFNd3lDLE1BQU10b0UsRUFBSXFMLEVBQUdyTCxFQUFJc0wsSUFHNUMvSixLQUFLK2xFLElBQU0vbEUsS0FBS3kwQixHQUFHRixNQUFNMjZDLFlBQVl6d0UsRUFBSys3QixJQUk1Q3UrQyxFQUFRajZFLFVBQVUyOEUsT0FBUyxTQUFnQjFWLEdBQ3pDLE9BQU9BLEVBQUkxNUQsSUFBSXJNLEtBQUtpNUUsTUFBTTFKLFFBSTVCd0osRUFBUWo2RSxVQUFVZzJDLEtBQU8sU0FBY2wvQixFQUFLNGtCLEVBQUs3cEIsR0FDL0MsT0FBTzNRLEtBQUt5MEIsR0FBR3FnQixLQUFLbC9CLEVBQUs1VixLQUFNdzZCLEVBQUs3cEIsSUFHdENvb0UsRUFBUWo2RSxVQUFVcWxFLE9BQVMsU0FBZ0J2dUQsRUFBS20vQixHQUM5QyxPQUFPLzBDLEtBQUt5MEIsR0FBRzB2QyxPQUFPdnVELEVBQUttL0IsRUFBVy8wQyxPQUd4Qys0RSxFQUFRajZFLFVBQVV5TCxRQUFVLFdBQzFCLE1BQU8sZUFBaUJ2SyxLQUFLaTVFLE1BQVFqNUUsS0FBS2k1RSxLQUFLMTBFLFNBQVMsR0FBSSxJQUNyRCxVQUFZdkUsS0FBSytsRSxLQUFPL2xFLEtBQUsrbEUsSUFBSXg3RCxXQUFhLE8sNkJDbkh2RCxJQUFJc0wsRUFBSyxFQUFRLElBR2J3ZSxFQURXLEVBQVEsSUFDRkEsTUFDakIxZSxFQUFTMGUsRUFBTTFlLE9BRW5CLFNBQVNxakUsRUFBVXJvRSxFQUFTNnBCLEdBQzFCLEdBQUk3cEIsYUFBbUJxb0UsRUFDckIsT0FBT3JvRSxFQUVMM1EsS0FBSzA3RSxXQUFXL3FFLEVBQVM2cEIsS0FHN0I3a0IsRUFBT2hGLEVBQVEzUyxHQUFLMlMsRUFBUTFSLEVBQUcsNEJBQy9CZSxLQUFLaEMsRUFBSSxJQUFJNlgsRUFBR2xGLEVBQVEzUyxFQUFHLElBQzNCZ0MsS0FBS2YsRUFBSSxJQUFJNFcsRUFBR2xGLEVBQVExUixFQUFHLFNBQ0dvQixJQUExQnNRLEVBQVFnM0QsY0FDVjNuRSxLQUFLMm5FLGNBQWdCLEtBRXJCM25FLEtBQUsybkUsY0FBZ0JoM0QsRUFBUWczRCxlQUlqQyxTQUFTZ1UsSUFDUDM3RSxLQUFLNDdFLE1BQVEsRUFHZixTQUFTajFCLEVBQVV2Z0QsRUFBS3BILEdBQ3RCLElBQUk2OEUsRUFBVXoxRSxFQUFJcEgsRUFBRTQ4RSxTQUNwQixLQUFnQixJQUFWQyxHQUNKLE9BQU9BLEVBSVQsSUFGQSxJQUFJQyxFQUFxQixHQUFWRCxFQUNYNTNFLEVBQU0sRUFDRC9HLEVBQUksRUFBR3FZLEVBQU12VyxFQUFFNDhFLE1BQU8xK0UsRUFBSTQrRSxFQUFVNStFLElBQUtxWSxJQUNoRHRSLElBQVEsRUFDUkEsR0FBT21DLEVBQUltUCxHQUdiLE9BREF2VyxFQUFFNDhFLE1BQVFybUUsRUFDSHRSLEVBR1QsU0FBUzgzRSxFQUFVMzFFLEdBR2pCLElBRkEsSUFBSWxKLEVBQUksRUFDSjJHLEVBQU11QyxFQUFJdkYsT0FBUyxHQUNmdUYsRUFBSWxKLE1BQXFCLElBQWJrSixFQUFJbEosRUFBSSxLQUFjQSxFQUFJMkcsR0FDNUMzRyxJQUVGLE9BQVUsSUFBTkEsRUFDS2tKLEVBRUZBLEVBQUkzQyxNQUFNdkcsR0F5Q25CLFNBQVM4K0UsRUFBZ0JsMkUsRUFBS2pDLEdBQzVCLEdBQUlBLEVBQU0sSUFDUmlDLEVBQUl3QixLQUFLekQsT0FEWCxDQUlBLElBQUlvNEUsRUFBUyxHQUFLaDBFLEtBQUtrckIsSUFBSXR2QixHQUFPb0UsS0FBS2kyQixNQUFRLEdBRS9DLElBREFwNEIsRUFBSXdCLEtBQWMsSUFBVDIwRSxLQUNBQSxHQUNQbjJFLEVBQUl3QixLQUFNekQsS0FBU280RSxHQUFVLEdBQU0sS0FFckNuMkUsRUFBSXdCLEtBQUt6RCxJQWpGWDVHLEVBQU9ELFFBQVVnOEUsRUFpQ2pCQSxFQUFVbDZFLFVBQVU0OEUsV0FBYSxTQUFvQnYzRSxFQUFNcTJCLEdBQ3pEcjJCLEVBQU9rd0IsRUFBTW5kLFFBQVEvUyxFQUFNcTJCLEdBQzNCLElBQUl4N0IsRUFBSSxJQUFJMjhFLEVBQ1osR0FBd0IsS0FBcEJ4M0UsRUFBS25GLEVBQUU0OEUsU0FDVCxPQUFPLEVBR1QsR0FEVWoxQixFQUFVeGlELEVBQU1uRixHQUNmQSxFQUFFNDhFLFFBQVd6M0UsRUFBS3RELE9BQzNCLE9BQU8sRUFFVCxHQUF3QixJQUFwQnNELEVBQUtuRixFQUFFNDhFLFNBQ1QsT0FBTyxFQUVULElBQUloeEQsRUFBTys3QixFQUFVeGlELEVBQU1uRixHQUN2QmhCLEVBQUltRyxFQUFLVixNQUFNekUsRUFBRTQ4RSxNQUFPaHhELEVBQU81ckIsRUFBRTQ4RSxPQUVyQyxHQURBNThFLEVBQUU0OEUsT0FBU2h4RCxFQUNhLElBQXBCem1CLEVBQUtuRixFQUFFNDhFLFNBQ1QsT0FBTyxFQUVULElBQUl2VyxFQUFPMWUsRUFBVXhpRCxFQUFNbkYsR0FDM0IsR0FBSW1GLEVBQUt0RCxTQUFXd2tFLEVBQU9ybUUsRUFBRTQ4RSxNQUMzQixPQUFPLEVBRVQsSUFBSTM4RSxFQUFJa0YsRUFBS1YsTUFBTXpFLEVBQUU0OEUsTUFBT3ZXLEVBQU9ybUUsRUFBRTQ4RSxPQVlyQyxPQVhhLElBQVQ1OUUsRUFBRSxJQUFvQixJQUFQQSxFQUFFLEtBQ25CQSxFQUFJQSxFQUFFeUYsTUFBTSxJQUVELElBQVR4RSxFQUFFLElBQW9CLElBQVBBLEVBQUUsS0FDbkJBLEVBQUlBLEVBQUV3RSxNQUFNLElBR2R6RCxLQUFLaEMsRUFBSSxJQUFJNlgsRUFBRzdYLEdBQ2hCZ0MsS0FBS2YsRUFBSSxJQUFJNFcsRUFBRzVXLEdBQ2hCZSxLQUFLMm5FLGNBQWdCLE1BRWQsR0FnQlRxUixFQUFVbDZFLFVBQVVvOUUsTUFBUSxTQUFlMWhELEdBQ3pDLElBQUl4OEIsRUFBSWdDLEtBQUtoQyxFQUFFa1osVUFDWGpZLEVBQUllLEtBQUtmLEVBQUVpWSxVQVlmLElBVFcsSUFBUGxaLEVBQUUsS0FDSkEsRUFBSSxDQUFFLEdBQUlnTSxPQUFPaE0sSUFFUixJQUFQaUIsRUFBRSxLQUNKQSxFQUFJLENBQUUsR0FBSStLLE9BQU8vSyxJQUVuQmpCLEVBQUkrOUUsRUFBVS85RSxHQUNkaUIsRUFBSTg4RSxFQUFVOThFLEtBRU5BLEVBQUUsSUFBZSxJQUFQQSxFQUFFLEtBQ2xCQSxFQUFJQSxFQUFFd0UsTUFBTSxHQUVkLElBQUlxQyxFQUFNLENBQUUsR0FDWmsyRSxFQUFnQmwyRSxFQUFLOUgsRUFBRTZDLFNBQ3ZCaUYsRUFBTUEsRUFBSWtFLE9BQU9oTSxJQUNic0osS0FBSyxHQUNUMDBFLEVBQWdCbDJFLEVBQUs3RyxFQUFFNEIsUUFDdkIsSUFBSXM3RSxFQUFXcjJFLEVBQUlrRSxPQUFPL0ssR0FDdEJrSixFQUFNLENBQUUsSUFHWixPQUZBNnpFLEVBQWdCN3pFLEVBQUtnMEUsRUFBU3Q3RSxRQUM5QnNILEVBQU1BLEVBQUk2QixPQUFPbXlFLEdBQ1Y5bkQsRUFBTXVmLE9BQU96ckMsRUFBS3F5QixLLDZCQ25JM0IsSUFBSTlKLEVBQU8sRUFBUSxJQUNmMEQsRUFBVyxFQUFRLElBQ25CQyxFQUFRRCxFQUFTQyxNQUNqQjFlLEVBQVMwZSxFQUFNMWUsT0FDZm8yRCxFQUFhMTNDLEVBQU0wM0MsV0FDbkJnTixFQUFVLEVBQVEsS0FDbEJDLEVBQVksRUFBUSxLQUV4QixTQUFTb0QsRUFBTTduRCxHQUdiLEdBRkE1ZSxFQUFpQixZQUFWNGUsRUFBcUIscUNBRXRCdjBCLGdCQUFnQm84RSxHQUNwQixPQUFPLElBQUlBLEVBQU03bkQsR0FFZkEsRUFBUUgsRUFBU0ksT0FBT0QsR0FBT0EsTUFDbkN2MEIsS0FBS3UwQixNQUFRQSxFQUNidjBCLEtBQUs0QixFQUFJMnlCLEVBQU0zeUIsRUFDZjVCLEtBQUs0QixFQUFFNnRFLFdBQVdsN0MsRUFBTTUxQixFQUFFOGEsWUFBYyxHQUV4Q3paLEtBQUtxOEUsV0FBYTluRCxFQUFNd3lDLFFBQVFwbEUsWUFDaEMzQixLQUFLczhFLGVBQWlCcjBFLEtBQUtrUCxLQUFLb2QsRUFBTTUxQixFQUFFOGEsWUFBYyxHQUN0RHpaLEtBQUswd0IsS0FBT0EsRUFBS3duQixPQUduQmo3QyxFQUFPRCxRQUFVby9FLEVBT2pCQSxFQUFNdDlFLFVBQVVnMkMsS0FBTyxTQUFjcmdDLEVBQVM4bkUsR0FDNUM5bkUsRUFBVXMzRCxFQUFXdDNELEdBQ3JCLElBQUloVyxFQUFNdUIsS0FBS3c4RSxjQUFjRCxHQUN6QnYrRSxFQUFJZ0MsS0FBS3k4RSxRQUFRaCtFLEVBQUk0d0MsZ0JBQWlCNTZCLEdBQ3RDL0MsRUFBSTFSLEtBQUs0QixFQUFFeUssSUFBSXJPLEdBQ2YwK0UsRUFBVzE4RSxLQUFLMjhFLFlBQVlqckUsR0FDNUJrckUsRUFBSzU4RSxLQUFLeThFLFFBQVFDLEVBQVVqK0UsRUFBSW8rRSxXQUFZcG9FLEdBQ2xDcEksSUFBSTVOLEVBQUl3NkUsUUFDbEIvdkIsRUFBSWxyRCxFQUFFeWQsSUFBSW1oRSxHQUFJaDNELEtBQUs1bEIsS0FBS3UwQixNQUFNNTFCLEdBQ2xDLE9BQU9xQixLQUFLODhFLGNBQWMsQ0FBRXByRSxFQUFHQSxFQUFHdzNDLEVBQUdBLEVBQUd3ekIsU0FBVUEsS0FTcEROLEVBQU10OUUsVUFBVXFsRSxPQUFTLFNBQWdCMXZELEVBQVNvZ0MsRUFBS2t4QixHQUNyRHR4RCxFQUFVczNELEVBQVd0M0QsR0FDckJvZ0MsRUFBTTcwQyxLQUFLODhFLGNBQWNqb0MsR0FDekIsSUFBSXAyQyxFQUFNdUIsS0FBS201RSxjQUFjcFQsR0FDekIxaEQsRUFBSXJrQixLQUFLeThFLFFBQVE1bkMsRUFBSTZuQyxXQUFZaitFLEVBQUlvK0UsV0FBWXBvRSxHQUNqRHNvRSxFQUFLLzhFLEtBQUs0QixFQUFFeUssSUFBSXdvQyxFQUFJcVUsS0FFeEIsT0FEY3JVLEVBQUluakMsSUFBSStKLElBQUloZCxFQUFJc25FLE1BQU0xNUQsSUFBSWdZLElBQ3pCMEQsR0FBR2cxRCxJQUdwQlgsRUFBTXQ5RSxVQUFVMjlFLFFBQVUsV0FFeEIsSUFEQSxJQUFJL3JELEVBQU8xd0IsS0FBSzB3QixPQUNQeHpCLEVBQUksRUFBR0EsRUFBSWdELFVBQVVXLE9BQVEzRCxJQUNwQ3d6QixFQUFLMlYsT0FBT25tQyxVQUFVaEQsSUFDeEIsT0FBT20zQixFQUFNMjNDLFVBQVV0N0MsRUFBS2lXLFVBQVUvZ0IsS0FBSzVsQixLQUFLdTBCLE1BQU01MUIsSUFHeER5OUUsRUFBTXQ5RSxVQUFVcTZFLGNBQWdCLFNBQXVCcFQsR0FDckQsT0FBT2dULEVBQVFLLFdBQVdwNUUsS0FBTStsRSxJQUdsQ3FXLEVBQU10OUUsVUFBVTA5RSxjQUFnQixTQUF1QkQsR0FDckQsT0FBT3hELEVBQVFpRSxXQUFXaDlFLEtBQU11OEUsSUFHbENILEVBQU10OUUsVUFBVWcrRSxjQUFnQixTQUF1QmpvQyxHQUNyRCxPQUFJQSxhQUFlbWtDLEVBQ1Zua0MsRUFDRixJQUFJbWtDLEVBQVVoNUUsS0FBTTYwQyxJQVc3QnVuQyxFQUFNdDlFLFVBQVU2OUUsWUFBYyxTQUFxQjVWLEdBQ2pELElBQUl2c0MsRUFBTXVzQyxFQUFNeUksT0FBT3Q0RCxRQUFRLEtBQU1sWCxLQUFLczhFLGdCQUUxQyxPQURBOWhELEVBQUl4NkIsS0FBS3M4RSxlQUFpQixJQUFNdlYsRUFBTXdJLE9BQU81b0QsUUFBVSxJQUFPLEVBQ3ZENlQsR0FHVDRoRCxFQUFNdDlFLFVBQVVvd0UsWUFBYyxTQUFxQjNqRSxHQUdqRCxJQUFJMHhFLEdBRkoxeEUsRUFBUThvQixFQUFNMDNDLFdBQVd4Z0UsSUFFTjFLLE9BQVMsRUFDeEJxOEUsRUFBUzN4RSxFQUFNOUgsTUFBTSxFQUFHdzVFLEdBQVFqekUsUUFBdUIsSUFBaEJ1QixFQUFNMHhFLElBQzdDRSxFQUFvQyxJQUFWLElBQWhCNXhFLEVBQU0weEUsSUFFaEJsekUsRUFBSXNxQixFQUFNMjNDLFVBQVVrUixHQUN4QixPQUFPbDlFLEtBQUt1MEIsTUFBTThpRCxXQUFXdHRFLEVBQUdvekUsSUFHbENmLEVBQU10OUUsVUFBVXMrRSxVQUFZLFNBQW1CM21FLEdBQzdDLE9BQU9BLEVBQUlTLFFBQVEsS0FBTWxYLEtBQUtzOEUsaUJBR2hDRixFQUFNdDlFLFVBQVV1K0UsVUFBWSxTQUFtQjl4RSxHQUM3QyxPQUFPOG9CLEVBQU0yM0MsVUFBVXpnRSxJQUd6QjZ3RSxFQUFNdDlFLFVBQVV3K0UsUUFBVSxTQUFpQnI1RSxHQUN6QyxPQUFPQSxhQUFlakUsS0FBS3E4RSxhLDZCQ2xIN0IsSUFDSWhvRCxFQURXLEVBQVEsSUFDRkEsTUFDakIxZSxFQUFTMGUsRUFBTTFlLE9BQ2ZvMkQsRUFBYTEzQyxFQUFNMDNDLFdBQ25CRixFQUFpQngzQyxFQUFNdzNDLGVBVzNCLFNBQVNrTixFQUFRcmtELEVBQU80WSxHQUN0QnR0QyxLQUFLMDBCLE1BQVFBLEVBQ2IxMEIsS0FBS3U5RSxRQUFVeFIsRUFBV3orQixFQUFPaXZDLFFBQzdCN25ELEVBQU00b0QsUUFBUWh3QyxFQUFPeTRCLEtBQ3ZCL2xFLEtBQUt3OUUsS0FBT2x3QyxFQUFPeTRCLElBRW5CL2xFLEtBQUt5OUUsVUFBWTFSLEVBQVd6K0IsRUFBT3k0QixLQUd2Q2dULEVBQVFLLFdBQWEsU0FBb0Ixa0QsRUFBT3F4QyxHQUM5QyxPQUFJQSxhQUFlZ1QsRUFDVmhULEVBQ0YsSUFBSWdULEVBQVFya0QsRUFBTyxDQUFFcXhDLElBQUtBLEtBR25DZ1QsRUFBUWlFLFdBQWEsU0FBb0J0b0QsRUFBTzZuRCxHQUM5QyxPQUFJQSxhQUFrQnhELEVBQ2J3RCxFQUNGLElBQUl4RCxFQUFRcmtELEVBQU8sQ0FBRTZuRCxPQUFRQSxLQUd0Q3hELEVBQVFqNkUsVUFBVXk5RSxPQUFTLFdBQ3pCLE9BQU92OEUsS0FBS3U5RSxTQUdkMVIsRUFBZWtOLEVBQVMsWUFBWSxXQUNsQyxPQUFPLzRFLEtBQUswMEIsTUFBTWlvRCxZQUFZMzhFLEtBQUsrbEUsVUFHckM4RixFQUFla04sRUFBUyxPQUFPLFdBQzdCLE9BQUkvNEUsS0FBS3k5RSxVQUNBejlFLEtBQUswMEIsTUFBTXc2QyxZQUFZbHZFLEtBQUt5OUUsV0FDOUJ6OUUsS0FBSzAwQixNQUFNOXlCLEVBQUV5SyxJQUFJck0sS0FBS2k1RSxXQUcvQnBOLEVBQWVrTixFQUFTLGFBQWEsV0FDbkMsSUFBSXJrRCxFQUFRMTBCLEtBQUswMEIsTUFDYmhFLEVBQU8xd0IsS0FBSzB3QixPQUNadXNELEVBQVN2b0QsRUFBTTRuRCxlQUFpQixFQUVoQ3p5RSxFQUFJNm1CLEVBQUtqdEIsTUFBTSxFQUFHaXhCLEVBQU00bkQsZ0JBSzVCLE9BSkF6eUUsRUFBRSxJQUFNLElBQ1JBLEVBQUVvekUsSUFBVyxJQUNicHpFLEVBQUVvekUsSUFBVyxHQUVOcHpFLEtBR1RnaUUsRUFBZWtOLEVBQVMsUUFBUSxXQUM5QixPQUFPLzRFLEtBQUswMEIsTUFBTTJvRCxVQUFVcjlFLEtBQUswOUUsZ0JBR25DN1IsRUFBZWtOLEVBQVMsUUFBUSxXQUM5QixPQUFPLzRFLEtBQUswMEIsTUFBTWhFLE9BQU8yVixPQUFPcm1DLEtBQUt1OEUsVUFBVTUxQyxZQUdqRGtsQyxFQUFla04sRUFBUyxpQkFBaUIsV0FDdkMsT0FBTy80RSxLQUFLMHdCLE9BQU9qdEIsTUFBTXpELEtBQUswMEIsTUFBTTRuRCxtQkFHdEN2RCxFQUFRajZFLFVBQVVnMkMsS0FBTyxTQUFjcmdDLEdBRXJDLE9BREFrQixFQUFPM1YsS0FBS3U5RSxRQUFTLDJCQUNkdjlFLEtBQUswMEIsTUFBTW9nQixLQUFLcmdDLEVBQVN6VSxPQUdsQys0RSxFQUFRajZFLFVBQVVxbEUsT0FBUyxTQUFnQjF2RCxFQUFTb2dDLEdBQ2xELE9BQU83MEMsS0FBSzAwQixNQUFNeXZDLE9BQU8xdkQsRUFBU29nQyxFQUFLNzBDLE9BR3pDKzRFLEVBQVFqNkUsVUFBVTYrRSxVQUFZLFNBQW1CbmpELEdBRS9DLE9BREE3a0IsRUFBTzNWLEtBQUt1OUUsUUFBUywwQkFDZGxwRCxFQUFNdWYsT0FBTzV6QyxLQUFLdThFLFNBQVUvaEQsSUFHckN1K0MsRUFBUWo2RSxVQUFVeW5FLFVBQVksU0FBbUIvckMsR0FDL0MsT0FBT25HLEVBQU11ZixPQUFPNXpDLEtBQUs2OEUsV0FBWXJpRCxJQUd2Q3Y5QixFQUFPRCxRQUFVKzdFLEcsNkJDN0ZqQixJQUFJbGpFLEVBQUssRUFBUSxJQUVid2UsRUFEVyxFQUFRLElBQ0ZBLE1BQ2pCMWUsRUFBUzBlLEVBQU0xZSxPQUNmazJELEVBQWlCeDNDLEVBQU13M0MsZUFDdkJFLEVBQWExM0MsRUFBTTAzQyxXQVV2QixTQUFTaU4sRUFBVXRrRCxFQUFPbWdCLEdBQ3hCNzBDLEtBQUswMEIsTUFBUUEsRUFFTSxpQkFBUm1nQixJQUNUQSxFQUFNazNCLEVBQVdsM0IsSUFFZjNwQyxNQUFNaEosUUFBUTJ5QyxLQUNoQkEsRUFBTSxDQUNKbmpDLEVBQUdtakMsRUFBSXB4QyxNQUFNLEVBQUdpeEIsRUFBTTRuRCxnQkFDdEJwekIsRUFBR3JVLEVBQUlweEMsTUFBTWl4QixFQUFNNG5ELGtCQUl2QjNtRSxFQUFPay9CLEVBQUluakMsR0FBS21qQyxFQUFJcVUsRUFBRyw0QkFFbkJ4MEIsRUFBTTRvRCxRQUFRem9DLEVBQUluakMsS0FDcEIxUixLQUFLNDlFLEdBQUsvb0MsRUFBSW5qQyxHQUNabWpDLEVBQUlxVSxhQUFhcnpDLElBQ25CN1YsS0FBSzY5RSxHQUFLaHBDLEVBQUlxVSxHQUVoQmxwRCxLQUFLODlFLFVBQVk1eUUsTUFBTWhKLFFBQVEyeUMsRUFBSW5qQyxHQUFLbWpDLEVBQUluakMsRUFBSW1qQyxFQUFJNm5DLFNBQ3BEMThFLEtBQUsrOUUsVUFBWTd5RSxNQUFNaEosUUFBUTJ5QyxFQUFJcVUsR0FBS3JVLEVBQUlxVSxFQUFJclUsRUFBSW1wQyxTQUd0RG5TLEVBQWVtTixFQUFXLEtBQUssV0FDN0IsT0FBT2g1RSxLQUFLMDBCLE1BQU0yb0QsVUFBVXI5RSxLQUFLZytFLGVBR25DblMsRUFBZW1OLEVBQVcsS0FBSyxXQUM3QixPQUFPaDVFLEtBQUswMEIsTUFBTXc2QyxZQUFZbHZFLEtBQUswOEUsZUFHckM3USxFQUFlbU4sRUFBVyxZQUFZLFdBQ3BDLE9BQU9oNUUsS0FBSzAwQixNQUFNaW9ELFlBQVkzOEUsS0FBSzBSLFFBR3JDbTZELEVBQWVtTixFQUFXLFlBQVksV0FDcEMsT0FBT2g1RSxLQUFLMDBCLE1BQU0wb0QsVUFBVXA5RSxLQUFLa3BELFFBR25DOHZCLEVBQVVsNkUsVUFBVW0vRSxRQUFVLFdBQzVCLE9BQU9qK0UsS0FBSzA4RSxXQUFXMXlFLE9BQU9oSyxLQUFLZytFLGFBR3JDaEYsRUFBVWw2RSxVQUFVd00sTUFBUSxXQUMxQixPQUFPK29CLEVBQU11ZixPQUFPNXpDLEtBQUtpK0UsVUFBVyxPQUFPN3JELGVBRzdDbjFCLEVBQU9ELFFBQVVnOEUsRzs7Ozs7RUN6RGpCLElBQUlqbkUsRUFBd0JuVSxPQUFPbVUsc0JBQy9CaFQsRUFBaUJuQixPQUFPa0IsVUFBVUMsZUFDbENtL0UsRUFBbUJ0Z0YsT0FBT2tCLFVBQVVxL0UscUJBRXhDLFNBQVNDLEVBQVNuNkUsR0FDakIsR0FBSUEsUUFDSCxNQUFNLElBQUl4RCxVQUFVLHlEQUdyQixPQUFPN0MsT0FBT3FHLEdBK0NmaEgsRUFBT0QsUUE1Q1AsV0FDQyxJQUNDLElBQUtZLE9BQU8yekMsT0FDWCxPQUFPLEVBTVIsSUFBSThzQyxFQUFRLElBQUluNEUsT0FBTyxPQUV2QixHQURBbTRFLEVBQU0sR0FBSyxLQUNrQyxNQUF6Q3pnRixPQUFPb1Usb0JBQW9CcXNFLEdBQU8sR0FDckMsT0FBTyxFQUtSLElBREEsSUFBSUMsRUFBUSxHQUNIcGhGLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUN2Qm9oRixFQUFNLElBQU1wNEUsT0FBTzJDLGFBQWEzTCxJQUFNQSxFQUt2QyxHQUF3QixlQUhYVSxPQUFPb1Usb0JBQW9Cc3NFLEdBQU85c0QsS0FBSSxTQUFVN3lCLEdBQzVELE9BQU8yL0UsRUFBTTMvRSxNQUVIK0wsS0FBSyxJQUNmLE9BQU8sRUFJUixJQUFJNnpFLEVBQVEsR0FJWixNQUhBLHVCQUF1QjF6RCxNQUFNLElBQUk4RixTQUFRLFNBQVU2dEQsR0FDbERELEVBQU1DLEdBQVVBLEtBR2YseUJBREU1Z0YsT0FBT3VTLEtBQUt2UyxPQUFPMnpDLE9BQU8sR0FBSWd0QyxJQUFRN3pFLEtBQUssSUFNOUMsTUFBT3RLLEdBRVIsT0FBTyxHQUlRcStFLEdBQW9CN2dGLE9BQU8yekMsT0FBUyxTQUFVNXdDLEVBQVE2OUIsR0FLdEUsSUFKQSxJQUFJMzdCLEVBRUE2N0UsRUFEQWpvQixFQUFLMm5CLEVBQVN6OUUsR0FHVDFCLEVBQUksRUFBR0EsRUFBSWlCLFVBQVVXLE9BQVE1QixJQUFLLENBRzFDLElBQUssSUFBSVIsS0FGVG9FLEVBQU9qRixPQUFPc0MsVUFBVWpCLElBR25CRixFQUFlMUIsS0FBS3dGLEVBQU1wRSxLQUM3Qmc0RCxFQUFHaDRELEdBQU9vRSxFQUFLcEUsSUFJakIsR0FBSXNULEVBQXVCLENBQzFCMnNFLEVBQVUzc0UsRUFBc0JsUCxHQUNoQyxJQUFLLElBQUkzRixFQUFJLEVBQUdBLEVBQUl3aEYsRUFBUTc5RSxPQUFRM0QsSUFDL0JnaEYsRUFBaUI3Z0YsS0FBS3dGLEVBQU02N0UsRUFBUXhoRixNQUN2Q3U1RCxFQUFHaW9CLEVBQVF4aEYsSUFBTTJGLEVBQUs2N0UsRUFBUXhoRixNQU1sQyxPQUFPdTVELEksZ0JDeEZSLElBQUl2Z0IsRUFBZ0IsRUFBUSxJQU81Qmo1QyxFQUFPRCxRQUFVLFNBQXdCb0ssR0FDdkMsTUFBbUIsaUJBQVJBLEVBQ0ZBLEVBR0Y4dUMsRUFBYzl1QyxHQUFPQSxFQUFJM0QsTUFBTSxHQUFLMkQsSSxnQkNYN0MsTUFBTXUzRSxFQUFXLEVBQVEsS0FDbkJ6c0UsRUFBZSxFQUFRLElBQ3ZCMHNFLEVBQU8sRUFBUSxLQUNmQyxFQUFXLEVBQVEsS0FDbkJDLEVBQXFCRCxFQUFTQyxtQkFDOUJDLEVBQU0sSUFDTjcyRSxFQUFNLEdBQUs2MkUsRUFxTWpCOWhGLEVBQU9ELFFBbk1QLGNBQThCa1YsRUFFNUIsWUFBWWlkLEVBQU8sSUFFakIsR0FEQThoQyxTQUNLOWhDLEVBQUswK0IsU0FBVSxNQUFNLElBQUlsckQsTUFBTSw0Q0FDcEMzQyxLQUFLZy9FLFVBQVk3dkQsRUFBSzArQixTQUN0Qjd0RCxLQUFLaS9FLE9BQVMsSUFBSU4sRUFBU3h2RCxFQUFLMCtCLFVBRWhDN3RELEtBQUtrL0UsaUJBQW1CL3ZELEVBQUsyK0IsaUJBQW1CLEVBQUlpeEIsRUFDcEQvK0UsS0FBS20vRSxnQkFBa0Jod0QsRUFBS2l3RCxnQkFBa0IsRUFBSWwzRSxFQUVsRGxJLEtBQUtxL0UsZUFBaUIsS0FDdEJyL0UsS0FBS3MvRSx3QkFBMEIsS0FDL0J0L0UsS0FBS3UvRSxjQUFnQixLQUNyQnYvRSxLQUFLdy9FLFlBQWEsRUFFbEJ4L0UsS0FBS3kvRSxhQUFlei9FLEtBQUt5L0UsYUFBYS9nRixLQUFLc0IsTUFDM0NBLEtBQUswL0UsNEJBQThCMS9FLEtBQUswL0UsNEJBQTRCaGhGLEtBQUtzQixNQUczRSxtQkFDRSxPQUFPQSxLQUFLcS9FLGVBR2Qsa0JBQ0UsT0FBT3IvRSxLQUFLdS9FLGNBR2QsMEJBRUUsT0FBSXYvRSxLQUFLdS9FLGNBQXNCdi9FLEtBQUt1L0UscUJBRTlCLElBQUkzL0UsUUFBUVIsR0FBV1ksS0FBSzhRLEtBQUssU0FBVTFSLElBRTFDWSxLQUFLdS9FLGVBR2QsWUFBYXB3RCxFQUFPLElBRWRudkIsS0FBS3cvRSxhQUNUeC9FLEtBQUt3L0UsWUFBYSxFQUVkcndELEVBQUt3d0QsZ0JBRUQzL0UsS0FBSzQvRSx3QkFBd0I1L0UsS0FBSzYvRSxvQkFBb0Ixd0QsRUFBS3d3RCxrQkFHM0QzL0UsS0FBSzQvRSx3QkFBd0I1L0UsS0FBSzgvRSxxQkFFdEM5L0UsS0FBS2cvRSxVQUFVbHFFLFNBQ1g5VSxLQUFLKy9FLG9CQUVYLy9FLEtBQUt5L0UsZUFDRnB3QixNQUFPanZELElBQ0ZBLEdBQUtrVCxRQUFRNVQsTUFBTVUsTUFLL0IsYUFDRUosS0FBS3cvRSxZQUFhLEVBQ2R4L0UsS0FBS2cvRSxVQUFVbHFFLFVBQ1g5VSxLQUFLZ2dGLHNCQVFmLHdCQUF5QkMsR0FDdkIsR0FBSWpnRixLQUFLcS9FLGdCQUFtQnIvRSxLQUFLcS9FLGVBQWUzdUQsT0FBU3V2RCxFQUFTdnZELEtBQU8sT0FFekUsTUFBTXd2RCxFQUFXbGdGLEtBQUtzL0Usd0JBQ2hCcnRCLEVBQU05Z0MsS0FBSzhnQyxNQUViaXVCLEdBQWFqdUIsRUFBTWl1QixFQUFZbGdGLEtBQUttL0UsaUJBQ3RDbi9FLEtBQUtzL0Usd0JBQTBCLFdBQ3pCdC9FLEtBQUttZ0Ysa0JBRVhuZ0YsS0FBS3EvRSxlQUFpQlksRUFDdEJqZ0YsS0FBS3MvRSx3QkFBMEJydEIsRUFDL0JqeUQsS0FBS2dULEtBQUssUUFBU2l0RSxJQUl2Qix1QkFBd0JBLEdBQ3RCLEdBQUlqZ0YsS0FBS3UvRSxlQUFrQnYvRSxLQUFLdS9FLGNBQWM3dUQsT0FBU3V2RCxFQUFTdnZELEtBQU8sT0FDdkUsTUFBTTB2RCxFQUFXcGdGLEtBQUt1L0UsY0FDdEJ2L0UsS0FBS3UvRSxjQUFnQlUsRUFDckJqZ0YsS0FBS2dULEtBQUssU0FBVWl0RSxHQUNwQmpnRixLQUFLZ1QsS0FBSyxPQUFRLENBQUVpdEUsV0FBVUcsYUFHaEMsNEJBRVFwZ0YsS0FBSzQvRSx3QkFBd0I1L0UsS0FBSzgvRSxxQkFHMUMsMEJBQ0V4ekQsV0FBVyxJQUFNdHNCLEtBQUt5L0UsZUFBZ0J6L0UsS0FBS2svRSxrQkFHN0MscUJBQ0UsSUFBS2wvRSxLQUFLdy9FLFdBQVksT0FDdEIsTUFBTWEsRUFBZ0JyZ0YsS0FBS3NnRixtQkFDM0IsSUFBS0QsRUFBZSxNQUFNLElBQUkxOUUsTUFBTSwrQ0FDcEMsTUFBTTQ5RSxFQUFhekIsRUFBbUJ1QixFQUFjdnFFLFFBQ3BELElBRUUsTUFBTW1xRSxRQUFpQmpnRixLQUFLNi9FLG9CQUFvQlUsR0FDNUNOLFNBRUlqZ0YsS0FBSzQvRSxrQkFBa0JLLEdBRTdCamdGLEtBQUt5L0UsdUJBR0N6L0UsS0FBS2l2RCxpQkFBaUJveEIsR0FFNUJyZ0YsS0FBS3dnRixxQkFHUCxNQUFPcGdGLEdBR0hBLEVBQUlxVSxRQUFRMUosU0FBUyx1QkFDckIzSyxFQUFJcVUsUUFBUTFKLFNBQVMsMkNBRWpCL0ssS0FBS2l2RCxpQkFBaUJveEIsR0FFNUJyZ0YsS0FBS3dnRixzQkFFTGx0RSxRQUFRNVQsTUFBTVUsR0FDZEosS0FBS3dnRixzQkFNWCxrQ0FBa0NwZ0YsRUFBS3FnRixHQUNqQ0EsRUFBYXJ6QyxJQUFNcHRDLEtBQUswZ0Ysa0JBR3hCdGdGLElBQ0ZKLEtBQUtnVCxLQUFLLFFBQVM1UyxTQUNiSixLQUFLZ2dGLDZCQUdQaGdGLEtBQUs0L0Usd0JBQXdCNS9FLEtBQUs2L0Usb0JBQW9CWSxFQUFhanBELE9BQU8xaEIsVUFHbEYsMEJBQ0U5VixLQUFLZy9FLFVBQVVscUUsR0FBRyxPQUFROVUsS0FBSzAvRSw2QkFFL0IsSUFBSWxvRCxRQUFlb25ELEVBQUs1K0UsS0FBS2cvRSxVQUFVdmtDLFdBQWF6NkMsS0FBS2cvRSxVQUFVdHZCLEtBQWhEa3ZCLENBQXNELENBQ3ZFdnhDLFFBQVMsTUFDVEQsSUFBSSxJQUFJamMsTUFBT3d5QixVQUNmanpDLE9BQVEsZ0JBQ1I0OEIsT0FBUSxDQUNOLGNBSUp0dEMsS0FBSzBnRixnQkFBa0JscEQsRUFBT0EsT0FHaEMsNEJBQ0UsSUFBS3gzQixLQUFLMGdGLGdCQUFpQixNQUFNLElBQUkvOUUsTUFBTSxtQkFFM0MzQyxLQUFLZy9FLFVBQVV0ckUsZUFBZSxPQUFRMVQsS0FBSzAvRSxtQ0FFckNkLEVBQUs1K0UsS0FBS2cvRSxVQUFVdmtDLFdBQWF6NkMsS0FBS2cvRSxVQUFVdHZCLEtBQWhEa3ZCLENBQXNELENBQzFEdnhDLFFBQVMsTUFDVEQsSUFBSSxJQUFJamMsTUFBT3d5QixVQUNmanpDLE9BQVEsa0JBQ1I0OEIsT0FBUSxDQUNOdHRDLEtBQUswZ0YsMEJBSUYxZ0YsS0FBSzBnRixnQkFHZCxvQkFDRSxPQUFPOUIsRUFBSzUrRSxLQUFLaS9FLE9BQU8wQixrQkFBa0J0akYsS0FBSzJDLEtBQUtpL0UsT0FBUSxVQUFVLEdBR3hFLG9CQUFxQjJCLEdBQ25CLE1BQU1DLEVBQVdoQyxFQUFTaUMsVUFBVUYsR0FDcEMsT0FBT2hDLEVBQUs1K0UsS0FBS2kvRSxPQUFPMEIsa0JBQWtCdGpGLEtBQUsyQyxLQUFLaS9FLE9BQVE0QixHQUFVLE0sZ0JDdk0xRSxNQUFNMXpDLEVBQVMsRUFBUSxJQUNqQjR6QyxFQUFpQixFQUFRLElBQVIsR0FLdkIsU0FBU3BDLEVBQVM5d0IsR0FDSDd0RCxLQUNSNHZELGdCQUFrQi9CLEVBa0V6QixTQUFTbXpCLEVBQWM5c0IsR0FDckIsT0FBTyxXQUNMLE1BQU1uMEQsRUFBT0MsS0FDYixJQUFJQyxFQUFPLEdBQUd3RCxNQUFNcEcsS0FBSzZDLFdBQ3JCc1IsRUFBS3ZSLEVBQUtvVixNQUNkdFYsRUFBSzA2QyxVQUFVLENBQ2IvcEMsT0FBUXdqRCxFQUNSNW1CLE9BQVFydEMsR0FDUHVSLElBSVAsU0FBU3l2RSxFQUE4QkMsRUFBVWh0QixHQUMvQyxPQUFPLFdBQ0wsTUFBTW4wRCxFQUFPQyxLQUNiLElBQUlDLEVBQU8sR0FBR3dELE1BQU1wRyxLQUFLNkMsV0FDckJzUixFQUFLdlIsRUFBS29WLE1BRVZwVixFQUFLWSxPQUFTcWdGLEdBQVVqaEYsRUFBS3FILEtBQUssVUFDdEN2SCxFQUFLMDZDLFVBQVUsQ0FDYi9wQyxPQUFRd2pELEVBQ1I1bUIsT0FBUXJ0QyxHQUNQdVIsSUE3RlB2VSxFQUFPRCxRQUFVMmhGLEVBYWpCQSxFQUFTNy9FLFVBQVVxaUYsV0FBc0NGLEVBQThCLEVBQUcsa0JBQzFGdEMsRUFBUzcvRSxVQUFVc2lGLFFBQXNDSCxFQUE4QixFQUFHLGVBQzFGdEMsRUFBUzcvRSxVQUFVdWlGLG9CQUFzQ0osRUFBOEIsRUFBRywyQkFDMUZ0QyxFQUFTNy9FLFVBQVV3aUYsYUFBc0NMLEVBQThCLEVBQUcsb0JBQzFGdEMsRUFBUzcvRSxVQUFVekIsS0FBc0M0akYsRUFBOEIsRUFBRyxZQUUxRnRDLEVBQVM3L0UsVUFBVXlpRixnQkFBc0NQLEVBQWMsdUJBQ3ZFckMsRUFBUzcvRSxVQUFVMGlGLFFBQXNDUixFQUFjLGVBQ3ZFckMsRUFBUzcvRSxVQUFVMmlGLFNBQXNDVCxFQUFjLGdCQUN2RXJDLEVBQVM3L0UsVUFBVTRpRixPQUFzQ1YsRUFBYyxjQUN2RXJDLEVBQVM3L0UsVUFBVTZpRixTQUFzQ1gsRUFBYyxnQkFDdkVyQyxFQUFTNy9FLFVBQVV5M0QsU0FBc0N5cUIsRUFBYyxnQkFDdkVyQyxFQUFTNy9FLFVBQVUwMUQsU0FBc0N3c0IsRUFBYyxnQkFDdkVyQyxFQUFTNy9FLFVBQVU4aUYsWUFBc0NaLEVBQWMsbUJBQ3ZFckMsRUFBUzcvRSxVQUFVK2lGLCtCQUFzQ2IsRUFBYyxzQ0FDdkVyQyxFQUFTNy9FLFVBQVVnakYsaUNBQXNDZCxFQUFjLHdDQUN2RXJDLEVBQVM3L0UsVUFBVWlqRix5QkFBc0NmLEVBQWMsZ0NBQ3ZFckMsRUFBUzcvRSxVQUFVa2pGLDJCQUFzQ2hCLEVBQWMsa0NBQ3ZFckMsRUFBUzcvRSxVQUFVZzJDLEtBQXNDa3NDLEVBQWMsWUFDdkVyQyxFQUFTNy9FLFVBQVVtakYsZ0JBQXNDakIsRUFBYyx1QkFDdkVyQyxFQUFTNy9FLFVBQVVvakYsbUJBQXNDbEIsRUFBYywwQkFDdkVyQyxFQUFTNy9FLFVBQVU2ekQsWUFBc0NxdUIsRUFBYyxtQkFDdkVyQyxFQUFTNy9FLFVBQVVxakYsZUFBc0NuQixFQUFjLHNCQUN2RXJDLEVBQVM3L0UsVUFBVTZoRixpQkFBc0NLLEVBQWMsd0JBQ3ZFckMsRUFBUzcvRSxVQUFVc2pGLHFCQUFzQ3BCLEVBQWMsNEJBQ3ZFckMsRUFBUzcvRSxVQUFVdWpGLGtDQUFzQ3JCLEVBQWMseUNBQ3ZFckMsRUFBUzcvRSxVQUFVd2pGLG9DQUFzQ3RCLEVBQWMsMkNBQ3ZFckMsRUFBUzcvRSxVQUFVeWpGLHNCQUFzQ3ZCLEVBQWMsNkJBQ3ZFckMsRUFBUzcvRSxVQUFVMGpGLDRCQUFzQ3hCLEVBQWMsbUNBQ3ZFckMsRUFBUzcvRSxVQUFVMmpGLDhCQUFzQ3pCLEVBQWMscUNBQ3ZFckMsRUFBUzcvRSxVQUFVNGpGLGFBQXNDMUIsRUFBYyxvQkFDdkVyQyxFQUFTNy9FLFVBQVU2akYsV0FBc0MzQixFQUFjLGtCQUN2RXJDLEVBQVM3L0UsVUFBVThqRixnQkFBc0M1QixFQUFjLHVCQUN2RXJDLEVBQVM3L0UsVUFBVStqRixlQUFzQzdCLEVBQWMsc0JBQ3ZFckMsRUFBUzcvRSxVQUFVZ2tGLFVBQXNDOUIsRUFBYyxpQkFDdkVyQyxFQUFTNy9FLFVBQVVpa0YsZUFBc0MvQixFQUFjLHNCQUN2RXJDLEVBQVM3L0UsVUFBVWtrRiw0QkFBc0NoQyxFQUFjLG1DQUN2RXJDLEVBQVM3L0UsVUFBVW1rRixnQkFBc0NqQyxFQUFjLHVCQUN2RXJDLEVBQVM3L0UsVUFBVW9rRixpQkFBc0NsQyxFQUFjLHdCQUN2RXJDLEVBQVM3L0UsVUFBVXFrRixjQUFzQ25DLEVBQWMscUJBQ3ZFckMsRUFBUzcvRSxVQUFVc2tGLFFBQXNDcEMsRUFBYyxlQUN2RXJDLEVBQVM3L0UsVUFBVXVrRixRQUFzQ3JDLEVBQWMsZUFDdkVyQyxFQUFTNy9FLFVBQVV3a0YsV0FBc0N0QyxFQUFjLGtCQUN2RXJDLEVBQVM3L0UsVUFBVXlrRixlQUFzQ3ZDLEVBQWMsc0JBSXZFckMsRUFBUzcvRSxVQUFVMjdDLFVBQVksU0FBU3RyQixFQUFNM2QsR0FxQzlDLElBQXVCck4sRUFwQ1JuRSxLQUNSNHZELGdCQUFnQm5WLFdBbUNBdDJDLEVBbkN3QmdyQixFQW9DdENnZSxFQUFPLENBRVpDLEdBQUkyekMsSUFDSjF6QyxRQUFTLE1BQ1RDLE9BQVEsSUFFUG5wQyxLQTFDaUQsU0FBUy9ELEVBQUtvakYsR0FFaEUsSUFES3BqRixHQUFPb2pGLEVBQVM5akYsUUFBT1UsRUFBTSxJQUFJdUMsTUFBTSwwQkFBMEI2Z0YsRUFBUzlqRixNQUFNK1UsVUFDakZyVSxFQUFLLE9BQU9vUixFQUFHcFIsR0FDbkJvUixFQUFHLEtBQU1neUUsRUFBU2hzRCxhLGNDcEV0QnY2QixFQUFPRCxRQUVQLFNBQW9CbXlCLEdBRWxCLElBQUkza0IsR0FESjJrQixFQUFPQSxHQUFRLElBQ0Eza0IsS0FBTzdELE9BQU9vaEQsaUJBQ3pCMDdCLE9BQWtDLElBQWZ0MEQsRUFBS3JxQixNQUF3QnFxQixFQUFLcnFCLE1BQVFtRCxLQUFLeUYsTUFBTXpGLEtBQUs0b0MsU0FBV3JtQyxHQUU1RixPQUFPLFdBRUwsT0FEQWk1RSxHQUF3Qmo1RSxFQUNqQmk1RSxPLDZCQ1BYLElBQUlDLEVBQVksU0FBVTVqRixFQUFJNmpGLEVBQUd4MEQsR0FDaEMsT0FBTyxXQUlOLElBSEEsSUFBSTVzQixFQUFPdkMsS0FDUEMsRUFBTyxJQUFJaUwsTUFBTWhMLFVBQVVXLFFBRXRCM0QsRUFBSSxFQUFHQSxFQUFJZ0QsVUFBVVcsT0FBUTNELElBQ3JDK0MsRUFBSy9DLEdBQUtnRCxVQUFVaEQsR0FHckIsT0FBTyxJQUFJeW1GLEdBQUUsU0FBVXZrRixFQUFTQyxHQUMvQlksRUFBS3FILE1BQUssU0FBVWxILEVBQUtvM0IsR0FDeEIsR0FBSXAzQixFQUNIZixFQUFPZSxRQUNELEdBQUkrdUIsRUFBS3kwRCxVQUFXLENBRzFCLElBRkEsSUFBSUMsRUFBVSxJQUFJMzRFLE1BQU1oTCxVQUFVVyxPQUFTLEdBRWxDM0QsRUFBSSxFQUFHQSxFQUFJZ0QsVUFBVVcsT0FBUTNELElBQ3JDMm1GLEVBQVEzbUYsRUFBSSxHQUFLZ0QsVUFBVWhELEdBRzVCa0MsRUFBUXlrRixRQUVSemtGLEVBQVFvNEIsTUFJVjEzQixFQUFHSyxNQUFNb0MsRUFBTXRDLFFBS2QyK0UsRUFBTzNoRixFQUFPRCxRQUFVLFNBQVUyRyxFQUFLZ2dGLEVBQUd4MEQsR0FDNUIsbUJBQU53MEQsSUFDVngwRCxFQUFPdzBELEVBQ1BBLEVBQUkvakYsVUFHTHV2QixFQUFPQSxHQUFRLElBQ1YyMEQsUUFBVTMwRCxFQUFLMjBELFNBQVcsQ0FBQyxXQUVoQyxJQVFJMTRFLEVBQXFCLG1CQUFSekgsRUFBcUIsV0FDckMsT0FBSXdyQixFQUFLNDBELFlBQ0RwZ0YsRUFBSXhELE1BQU1ILEtBQU1FLFdBR2pCd2pGLEVBQVUvL0UsRUFBS2dnRixFQUFHeDBELEdBQU1odkIsTUFBTUgsS0FBTUUsWUFDeEMsR0FFSixPQUFPdEMsT0FBT3VTLEtBQUt4TSxHQUFLOHRCLFFBQU8sU0FBVXJtQixFQUFLM00sR0FDN0MsSUFBSXFMLEVBQUluRyxFQUFJbEYsR0FJWixPQUZBMk0sRUFBSTNNLEdBQW9CLG1CQUFOcUwsR0FuQk4sU0FBVXJMLEdBQ3RCLElBQUlnTSxFQUFRLFNBQVV1NUUsR0FDckIsTUFBMEIsaUJBQVpBLEVBQXVCdmxGLElBQVF1bEYsRUFBVUEsRUFBUTN4RCxLQUFLNXpCLElBR3JFLE9BQU8wd0IsRUFBSzgwRCxRQUFVOTBELEVBQUs4MEQsUUFBUTFyQyxLQUFLOXRDLElBQVUwa0IsRUFBSzIwRCxRQUFRdnJDLEtBQUs5dEMsR0FjOUJ5c0QsQ0FBT3o0RCxHQUFPaWxGLEVBQVU1NUUsRUFBRzY1RSxFQUFHeDBELEdBQVFybEIsRUFFckVzQixJQUNMQSxJQUdKd3pFLEVBQUtwMEIsSUFBTW8wQixHLDZCQ2pFWCxNQUFNc0YsRUFBWSxFQUFRLElBVzFCLFNBQVNwRCxFQUFXcUQsR0FDbEIsSUFBSUMsRUFBV0YsRUFBVXB4QyxlQUFlcXhDLEdBQ3hDLEtBQXVCLE1BQWhCQyxFQUFTLElBQ2RBLEVBQVdBLEVBQVNwOUUsT0FBTyxHQUU3QixNQUFPLEtBQUtvOUUsSUFkZG5uRixFQUFPRCxRQUFVLENBQ2Y4aEYsbUJBSUYsU0FBNEJxRixHQUMxQixPQUFPckQsRUFBVW9ELEVBQVUvckMsU0FBVXB4QyxTQUFTbzlFLEVBQVEsSUFBTSxLQUo1RHJELGMsNkJDSkZsakYsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQzNDbUIsT0FBTyxJQUdULElBRUlrbUYsRUFBZWw5QixFQUZELEVBQVEsTUFNdEJtOUIsRUFBUW45QixFQUZELEVBQVEsTUFJbkIsU0FBU0EsRUFBdUJ4akQsR0FBTyxPQUFPQSxHQUFPQSxFQUFJckYsV0FBYXFGLEVBQU0sQ0FBRWdpQyxRQUFTaGlDLEdBc0N2RjNHLEVBQVEyb0MsU0FBVSxFQUFJMCtDLEVBQWExK0MsU0FBUzIrQyxFQUFNMytDLFNBQ2xEMW9DLEVBQU9ELFFBQVVBLEVBQWlCLFMsNkJDbkRsQ1ksT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQ3pDbUIsT0FBTyxJQUVYbkIsRUFBUTJvQyxRQVlSLFNBQW9CN2xDLEdBQ2hCLE9BQU8sU0FBVTZELEVBQUttakQsRUFBVXZuQixHQUM1QixPQUFPei9CLEVBQUd5a0YsRUFBUzUrQyxRQUFTaGlDLEdBQUssRUFBSXVqRCxFQUFZdmhCLFNBQVNtaEIsR0FBV3ZuQixLQVo3RSxJQUVJZ2xELEVBQVdwOUIsRUFGRCxFQUFRLEtBTWxCRCxFQUFjQyxFQUZELEVBQVEsS0FJekIsU0FBU0EsRUFBdUJ4akQsR0FBTyxPQUFPQSxHQUFPQSxFQUFJckYsV0FBYXFGLEVBQU0sQ0FBRWdpQyxRQUFTaGlDLEdBT3ZGMUcsRUFBT0QsUUFBVUEsRUFBaUIsUyxnQkN0QmxDLElBQUl3bkYsRUFBYSxFQUFRLElBQ3JCNzFELEVBQVcsRUFBUSxJQUduQjgxRCxFQUFXLHlCQUNYQyxFQUFVLG9CQUNWQyxFQUFTLDZCQUNUQyxFQUFXLGlCQTZCZjNuRixFQUFPRCxRQVZQLFNBQW9CbUIsR0FDbEIsSUFBS3d3QixFQUFTeHdCLEdBQ1osT0FBTyxFQUlULElBQUkwbUYsRUFBTUwsRUFBV3JtRixHQUNyQixPQUFPMG1GLEdBQU9ILEdBQVdHLEdBQU9GLEdBQVVFLEdBQU9KLEdBQVlJLEdBQU9ELEksZ0JDakN0RSxJQUFJM21GLEVBQVMsRUFBUSxJQUdqQjZtRixFQUFjbG5GLE9BQU9rQixVQUdyQkMsRUFBaUIrbEYsRUFBWS9sRixlQU83QmdtRixFQUF1QkQsRUFBWXZnRixTQUduQyswQyxFQUFpQnI3QyxFQUFTQSxFQUFPQyxpQkFBY21DLEVBNkJuRHBELEVBQU9ELFFBcEJQLFNBQW1CbUIsR0FDakIsSUFBSTZtRixFQUFRam1GLEVBQWUxQixLQUFLYyxFQUFPbTdDLEdBQ25DdXJDLEVBQU0xbUYsRUFBTW03QyxHQUVoQixJQUNFbjdDLEVBQU1tN0MsUUFBa0JqNUMsRUFDeEIsSUFBSTRrRixHQUFXLEVBQ2YsTUFBT25qRixJQUVULElBQUkwMUIsRUFBU3V0RCxFQUFxQjFuRixLQUFLYyxHQVF2QyxPQVBJOG1GLElBQ0VELEVBQ0Y3bUYsRUFBTW03QyxHQUFrQnVyQyxTQUVqQjFtRixFQUFNbTdDLElBR1Y5aEIsSSxjQ3pDVCxJQU9JdXRELEVBUGNubkYsT0FBT2tCLFVBT2N5RixTQWF2Q3RILEVBQU9ELFFBSlAsU0FBd0JtQixHQUN0QixPQUFPNG1GLEVBQXFCMW5GLEtBQUtjLEssNkJDaEJuQ1AsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQzNDbUIsT0FBTyxJQUVUbkIsRUFBUTJvQyxRQWdDUixTQUFxQmtoQixFQUFNNzRDLEVBQU84NEMsRUFBVXZuQixJQUMxQyxFQUFJMmxELEVBQWN2L0MsU0FBUzMzQixFQUEzQixDQUFrQzY0QyxHQUFNLEVBQUlLLEVBQVl2aEIsU0FBU21oQixHQUFXdm5CLElBL0I5RSxJQUVJMmxELEVBQWdCLzlCLEVBRkEsRUFBUSxNQU14QkQsRUFBY0MsRUFGRCxFQUFRLEtBSXpCLFNBQVNBLEVBQXVCeGpELEdBQU8sT0FBT0EsR0FBT0EsRUFBSXJGLFdBQWFxRixFQUFNLENBQUVnaUMsUUFBU2hpQyxHQXlCdkYxRyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ3RDbENZLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUN6Q21CLE9BQU8sSUFFWG5CLEVBQVEyb0MsUUE0Q1IsU0FBa0JraEIsR0FDZCxJQUFJLEVBQUlFLEVBQWNwaEIsU0FBU2toQixHQUMzQixPQTlCUixTQUE2QkEsR0FDekIsSUFBSTNwRCxHQUFLLEVBQ0wyRyxFQUFNZ2pELEVBQUtobUQsT0FDZixPQUFPLFdBQ0gsUUFBUzNELEVBQUkyRyxFQUFNLENBQUUxRixNQUFPMG9ELEVBQUszcEQsR0FBSXVCLElBQUt2QixHQUFNLE1BMEJ6Q2lvRixDQUFvQnQrQixHQUcvQixJQUFJbjNDLEdBQVcsRUFBSTAxRSxFQUFjei9DLFNBQVNraEIsR0FDMUMsT0FBT24zQyxFQTFCWCxTQUE4QkEsR0FDMUIsSUFBSXhTLEdBQUssRUFDVCxPQUFPLFdBQ0gsSUFBSWd4QyxFQUFPeCtCLEVBQVN5YixPQUNwQixPQUFJK2lCLEVBQUt2dUMsS0FBYSxNQUN0QnpDLElBQ08sQ0FBRWlCLE1BQU8rdkMsRUFBSy92QyxNQUFPTSxJQUFLdkIsS0FvQm5CbW9GLENBQXFCMzFFLElBaEJiL0wsRUFnQjhDa2pELEVBZnBFeStCLEdBQVEsRUFBSUMsRUFBTzUvQyxTQUFTaGlDLEdBQzVCekcsR0FBSyxFQUNMMkcsRUFBTXloRixFQUFNemtGLE9BQ1QsV0FDSCxJQUFJcEMsRUFBTTZtRixJQUFRcG9GLEdBQ2xCLE9BQU9BLEVBQUkyRyxFQUFNLENBQUUxRixNQUFPd0YsRUFBSWxGLEdBQU1BLElBQUtBLEdBQVEsT0FOekQsSUFBOEJrRixFQUN0QjJoRixFQUNBcG9GLEVBQ0EyRyxHQW5DUixJQUVJa2pELEVBQWdCSSxFQUZELEVBQVEsS0FNdkJpK0IsRUFBZ0JqK0IsRUFGRCxFQUFRLE1BTXZCbytCLEVBQVNwK0IsRUFGRCxFQUFRLE1BSXBCLFNBQVNBLEVBQXVCeGpELEdBQU8sT0FBT0EsR0FBT0EsRUFBSXJGLFdBQWFxRixFQUFNLENBQUVnaUMsUUFBU2hpQyxHQXNDdkYxRyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ3ZEbENZLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUN6Q21CLE9BQU8sSUFHWG5CLEVBQVEyb0MsUUFBVSxTQUFVa2hCLEdBQ3hCLE9BQU85eEIsR0FBa0I4eEIsRUFBSzl4QixJQUFtQjh4QixFQUFLOXhCLE1BRzFELElBQUlBLEVBQW1DLG1CQUFYOTJCLFFBQXlCQSxPQUFPeVIsU0FFNUR6UyxFQUFPRCxRQUFVQSxFQUFpQixTLGdCQ1psQyxJQUFJd29GLEVBQWdCLEVBQVEsS0FDeEJDLEVBQVcsRUFBUSxLQUNuQkMsRUFBYyxFQUFRLElBa0MxQnpvRixFQUFPRCxRQUpQLFNBQWM0QixHQUNaLE9BQU84bUYsRUFBWTltRixHQUFVNG1GLEVBQWM1bUYsR0FBVTZtRixFQUFTN21GLEssZ0JDakNoRSxJQUFJK21GLEVBQVksRUFBUSxLQUNwQnZoQyxFQUFjLEVBQVEsS0FDdEJsaUQsRUFBVSxFQUFRLEtBQ2xCMEIsRUFBVyxFQUFRLEtBQ25CZ2lGLEVBQVUsRUFBUSxLQUNsQkMsRUFBZSxFQUFRLEtBTXZCOW1GLEVBSGNuQixPQUFPa0IsVUFHUUMsZUFxQ2pDOUIsRUFBT0QsUUEzQlAsU0FBdUJtQixFQUFPMm5GLEdBQzVCLElBQUlDLEVBQVE3akYsRUFBUS9ELEdBQ2hCNm5GLEdBQVNELEdBQVMzaEMsRUFBWWptRCxHQUM5QjhuRixHQUFVRixJQUFVQyxHQUFTcGlGLEVBQVN6RixHQUN0QytuRixHQUFVSCxJQUFVQyxJQUFVQyxHQUFVSixFQUFhMW5GLEdBQ3JEZ29GLEVBQWNKLEdBQVNDLEdBQVNDLEdBQVVDLEVBQzFDMXVELEVBQVMydUQsRUFBY1IsRUFBVXhuRixFQUFNMEMsT0FBUXFGLFFBQVUsR0FDekRyRixFQUFTMjJCLEVBQU8zMkIsT0FFcEIsSUFBSyxJQUFJcEMsS0FBT04sR0FDVDJuRixJQUFhL21GLEVBQWUxQixLQUFLYyxFQUFPTSxJQUN2QzBuRixJQUVRLFVBQVAxbkYsR0FFQ3duRixJQUFrQixVQUFQeG5GLEdBQTBCLFVBQVBBLElBRTlCeW5GLElBQWtCLFVBQVB6bkYsR0FBMEIsY0FBUEEsR0FBOEIsY0FBUEEsSUFFdERtbkYsRUFBUW5uRixFQUFLb0MsS0FFbEIyMkIsRUFBT2x3QixLQUFLN0ksR0FHaEIsT0FBTys0QixJLGNDMUJUdjZCLEVBQU9ELFFBVlAsU0FBbUIyQixFQUFHbW9ELEdBSXBCLElBSEEsSUFBSTF4QyxHQUFTLEVBQ1RvaUIsRUFBU3RzQixNQUFNdk0sS0FFVnlXLEVBQVF6VyxHQUNmNjRCLEVBQU9waUIsR0FBUzB4QyxFQUFTMXhDLEdBRTNCLE9BQU9vaUIsSSxnQkNoQlQsSUFBSTR1RCxFQUFrQixFQUFRLEtBQzFCQyxFQUFlLEVBQVEsSUFHdkJ2QixFQUFjbG5GLE9BQU9rQixVQUdyQkMsRUFBaUIrbEYsRUFBWS9sRixlQUc3Qm8vRSxFQUF1QjJHLEVBQVkzRyxxQkFvQm5DLzVCLEVBQWNnaUMsRUFBZ0IsV0FBYSxPQUFPbG1GLFVBQXBCLElBQXNDa21GLEVBQWtCLFNBQVNqb0YsR0FDakcsT0FBT2tvRixFQUFhbG9GLElBQVVZLEVBQWUxQixLQUFLYyxFQUFPLFlBQ3REZ2dGLEVBQXFCOWdGLEtBQUtjLEVBQU8sV0FHdENsQixFQUFPRCxRQUFVb25ELEcsZ0JDbkNqQixJQUFJb2dDLEVBQWEsRUFBUSxJQUNyQjZCLEVBQWUsRUFBUSxJQUd2QkMsRUFBVSxxQkFhZHJwRixFQUFPRCxRQUpQLFNBQXlCbUIsR0FDdkIsT0FBT2tvRixFQUFhbG9GLElBQVVxbUYsRUFBV3JtRixJQUFVbW9GLEksaUJDZHJELGtCQUFXLEVBQVEsSUFDZkMsRUFBWSxFQUFRLEtBR3BCQyxFQUE0Q3hwRixJQUFZQSxFQUFReXBGLFVBQVl6cEYsRUFHNUUwcEYsRUFBYUYsR0FBZ0MsaUJBQVZ2cEYsR0FBc0JBLElBQVdBLEVBQU93cEYsVUFBWXhwRixFQU12Rm1GLEVBSGdCc2tGLEdBQWNBLEVBQVcxcEYsVUFBWXdwRixFQUc1QjErQixFQUFLMWxELFlBQVMvQixFQXNCdkN1RCxHQW5CaUJ4QixFQUFTQSxFQUFPd0IsY0FBV3ZELElBbUJma21GLEVBRWpDdHBGLEVBQU9ELFFBQVU0RyxJLG1DQ3BCakIzRyxFQUFPRCxRQUpQLFdBQ0UsT0FBTyxJLGNDYlQsSUFBSStxRCxFQUFtQixpQkFHbkI0K0IsRUFBVyxtQkFvQmYxcEYsRUFBT0QsUUFWUCxTQUFpQm1CLEVBQU8wQyxHQUN0QixJQUFJcUQsU0FBYy9GLEVBR2xCLFNBRkEwQyxFQUFtQixNQUFWQSxFQUFpQmtuRCxFQUFtQmxuRCxLQUdsQyxVQUFScUQsR0FDVSxVQUFSQSxHQUFvQnlpRixFQUFTdDBELEtBQUtsMEIsS0FDaENBLEdBQVMsR0FBS0EsRUFBUSxHQUFLLEdBQUtBLEVBQVEwQyxJLGdCQ3JCakQsSUFBSStsRixFQUFtQixFQUFRLEtBQzNCQyxFQUFZLEVBQVEsS0FDcEJDLEVBQVcsRUFBUSxLQUduQkMsRUFBbUJELEdBQVlBLEVBQVNqQixhQW1CeENBLEVBQWVrQixFQUFtQkYsRUFBVUUsR0FBb0JILEVBRXBFM3BGLEVBQU9ELFFBQVU2b0YsRyxnQkMxQmpCLElBQUlyQixFQUFhLEVBQVEsSUFDckIzMUMsRUFBVyxFQUFRLElBQ25CdzNDLEVBQWUsRUFBUSxJQThCdkJXLEVBQWlCLEdBQ3JCQSxFQVppQix5QkFZWUEsRUFYWix5QkFZakJBLEVBWGMsc0JBV1lBLEVBVlgsdUJBV2ZBLEVBVmUsdUJBVVlBLEVBVFosdUJBVWZBLEVBVHNCLDhCQVNZQSxFQVJsQix3QkFTaEJBLEVBUmdCLHlCQVFZLEVBQzVCQSxFQWpDYyxzQkFpQ1lBLEVBaENYLGtCQWlDZkEsRUFwQnFCLHdCQW9CWUEsRUFoQ25CLG9CQWlDZEEsRUFwQmtCLHFCQW9CWUEsRUFoQ2hCLGlCQWlDZEEsRUFoQ2Usa0JBZ0NZQSxFQS9CYixxQkFnQ2RBLEVBL0JhLGdCQStCWUEsRUE5QlQsbUJBK0JoQkEsRUE5QmdCLG1CQThCWUEsRUE3QlosbUJBOEJoQkEsRUE3QmEsZ0JBNkJZQSxFQTVCVCxtQkE2QmhCQSxFQTVCaUIscUJBNEJZLEVBYzdCL3BGLEVBQU9ELFFBTFAsU0FBMEJtQixHQUN4QixPQUFPa29GLEVBQWFsb0YsSUFDbEIwd0MsRUFBUzF3QyxFQUFNMEMsV0FBYW1tRixFQUFleEMsRUFBV3JtRixNLGNDM0MxRGxCLEVBQU9ELFFBTlAsU0FBbUIrbEQsR0FDakIsT0FBTyxTQUFTNWtELEdBQ2QsT0FBTzRrRCxFQUFLNWtELE0saUJDVGhCLGtCQUFpQixFQUFRLElBR3JCcW9GLEVBQTRDeHBGLElBQVlBLEVBQVF5cEYsVUFBWXpwRixFQUc1RTBwRixFQUFhRixHQUFnQyxpQkFBVnZwRixHQUFzQkEsSUFBV0EsRUFBT3dwRixVQUFZeHBGLEVBTXZGZ3FGLEVBSGdCUCxHQUFjQSxFQUFXMXBGLFVBQVl3cEYsR0FHdEI1K0IsRUFBVzM3QixRQUcxQzY2RCxFQUFZLFdBQ2QsSUFFRSxJQUFJSSxFQUFRUixHQUFjQSxFQUFXUyxTQUFXVCxFQUFXUyxRQUFRLFFBQVFELE1BRTNFLE9BQUlBLEdBS0dELEdBQWVBLEVBQVl2NUQsU0FBV3U1RCxFQUFZdjVELFFBQVEsUUFDakUsTUFBTzVyQixLQVhJLEdBY2Y3RSxFQUFPRCxRQUFVOHBGLEkscUNDN0JqQixJQUFJTSxFQUFjLEVBQVEsS0FDdEJDLEVBQWEsRUFBUSxLQU1yQnRvRixFQUhjbkIsT0FBT2tCLFVBR1FDLGVBc0JqQzlCLEVBQU9ELFFBYlAsU0FBa0I0QixHQUNoQixJQUFLd29GLEVBQVl4b0YsR0FDZixPQUFPeW9GLEVBQVd6b0YsR0FFcEIsSUFBSTQ0QixFQUFTLEdBQ2IsSUFBSyxJQUFJLzRCLEtBQU9iLE9BQU9nQixHQUNqQkcsRUFBZTFCLEtBQUt1QixFQUFRSCxJQUFlLGVBQVBBLEdBQ3RDKzRCLEVBQU9sd0IsS0FBSzdJLEdBR2hCLE9BQU8rNEIsSSxjQ3pCVCxJQUFJc3RELEVBQWNsbkYsT0FBT2tCLFVBZ0J6QjdCLEVBQU9ELFFBUFAsU0FBcUJtQixHQUNuQixJQUFJbXBGLEVBQU9ucEYsR0FBU0EsRUFBTXdELFlBRzFCLE9BQU94RCxLQUZxQixtQkFBUm1wRixHQUFzQkEsRUFBS3hvRixXQUFjZ21GLEssZ0JDWi9ELElBR0l1QyxFQUhVLEVBQVEsSUFHTEUsQ0FBUTNwRixPQUFPdVMsS0FBTXZTLFFBRXRDWCxFQUFPRCxRQUFVcXFGLEcsY0NTakJwcUYsRUFBT0QsUUFOUCxTQUFpQitsRCxFQUFNbmhDLEdBQ3JCLE9BQU8sU0FBU3BpQixHQUNkLE9BQU91akQsRUFBS25oQyxFQUFVcGlCLE8sNkJDUjFCNUIsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQ3pDbUIsT0FBTyxJQUVYbkIsRUFBUTJvQyxRQXdFUixTQUFrQm9kLEdBQ2QsT0FBTyxFQUFJeWtDLEVBQWdCN2hELFVBQVMsU0FBVTFsQyxFQUFNcy9CLEdBQ2hELElBQUkvSCxFQUNKLElBQ0lBLEVBQVN1ckIsRUFBSzVpRCxNQUFNSCxLQUFNQyxHQUM1QixNQUFPNkIsR0FDTCxPQUFPeTlCLEVBQVN6OUIsSUFHaEIsRUFBSTJsRixFQUFXOWhELFNBQVNuTyxJQUFrQyxtQkFBaEJBLEVBQU8zM0IsS0FDakQyM0IsRUFBTzMzQixNQUFLLFNBQVUxQixHQUNsQnVwRixFQUFlbm9ELEVBQVUsS0FBTXBoQyxNQUNoQyxTQUFVaUMsR0FDVHNuRixFQUFlbm9ELEVBQVVuL0IsRUFBSXFVLFFBQVVyVSxFQUFNLElBQUl1QyxNQUFNdkMsT0FHM0RtL0IsRUFBUyxLQUFNL0gsT0F0RjNCLElBRUlpd0QsRUFBYXRnQyxFQUZELEVBQVEsS0FNcEJxZ0MsRUFBa0JyZ0MsRUFGRCxFQUFRLE1BTXpCd2dDLEVBQWlCeGdDLEVBRkQsRUFBUSxNQUk1QixTQUFTQSxFQUF1QnhqRCxHQUFPLE9BQU9BLEdBQU9BLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0ErRXZGLFNBQVMrakYsRUFBZW5vRCxFQUFVNy9CLEVBQU92QixHQUNyQyxJQUNJb2hDLEVBQVM3L0IsRUFBT3ZCLEdBQ2xCLE1BQU8yRCxJQUNMLEVBQUk2bEYsRUFBZWhpRCxTQUFTaWlELEVBQVM5bEYsSUFJN0MsU0FBUzhsRixFQUFRbG9GLEdBQ2IsTUFBTUEsRUFFVnpDLEVBQU9ELFFBQVVBLEVBQWlCLFMsNkJDM0dsQ1ksT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQ3pDbUIsT0FBTyxJQUdYbkIsRUFBUTJvQyxRQUFVLFNBQVU3bEMsR0FDeEIsT0FBTyxXQUNILElBQUlHLEdBQU8sRUFBSTRuRixFQUFRbGlELFNBQVN6bEMsV0FDNUJxL0IsRUFBV3QvQixFQUFLb1YsTUFDcEJ2VixFQUFHekMsS0FBSzJDLEtBQU1DLEVBQU1zL0IsS0FJNUIsSUFJZ0M1N0IsRUFKNUJta0YsRUFBUyxFQUFRLElBRWpCRCxHQUU0QmxrRixFQUZLbWtGLElBRWdCbmtGLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0FFdkYxRyxFQUFPRCxRQUFVQSxFQUFpQixTLDhCQ3BCbEMsY0FFQVksT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQ3pDbUIsT0FBTyxJQUVYbkIsRUFBUStxRixZQUFjL3FGLEVBQVFnckYscUJBQWtCM25GLEVBQ2hEckQsRUFBUWlyRixTQUFXQSxFQUNuQmpyRixFQUFRbTRCLEtBQU9BLEVBRWYsSUFJZ0N4eEIsRUFKNUJta0YsRUFBUyxFQUFRLElBRWpCRCxHQUU0QmxrRixFQUZLbWtGLElBRWdCbmtGLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0FFdkYsSUFnQkl1a0YsRUFoQkFGLEVBQWtCaHJGLEVBQVFnckYsZ0JBQTBDLG1CQUFqQnBvRCxHQUErQkEsRUFDbEZtb0QsRUFBYy9xRixFQUFRK3FGLFlBQWlDLGlCQUFaOTdELEdBQW9ELG1CQUFyQkEsRUFBUS9hLFNBRXRGLFNBQVMrMkUsRUFBU25vRixHQUNkd3NCLFdBQVd4c0IsRUFBSSxHQUduQixTQUFTcTFCLEVBQUtnekQsR0FDVixPQUFPLFNBQVVyb0YsR0FDYixJQUFJRyxHQUFPLEVBQUk0bkYsRUFBUWxpRCxTQUFTemxDLFVBQVcsR0FDM0Npb0YsR0FBTSxXQUNGcm9GLEVBQUdLLE1BQU0sS0FBTUYsT0FRdkJpb0YsRUFEQUYsRUFDU3BvRCxFQUNGbW9ELEVBQ0U5N0QsRUFBUS9hLFNBRVIrMkUsRUFHYmpyRixFQUFRMm9DLFFBQVV4USxFQUFLK3lELEssa0VDdkN2QnRxRixPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FDekNtQixPQUFPLElBRVhuQixFQUFRMm9DLFFBWVIsU0FBbUJ5aUQsRUFBUXRpRixFQUFLZ2hELEVBQVV2bkIsR0FDdENBLEVBQVdBLEdBQVlnb0IsRUFBTzVoQixRQUM5QjcvQixFQUFNQSxHQUFPLEdBQ2IsSUFBSSs5RSxFQUFVLEdBQ1Z0YyxFQUFVLEVBQ1Y4Z0IsR0FBWSxFQUFJbmhDLEVBQVl2aEIsU0FBU21oQixHQUV6Q3NoQyxFQUFPdGlGLEdBQUssU0FBVTNILEVBQU8ra0IsRUFBR3FjLEdBQzVCLElBQUlucUIsRUFBUW15RCxJQUNaOGdCLEVBQVVscUYsR0FBTyxTQUFVaUMsRUFBS3FRLEdBQzVCb3pFLEVBQVF6dUUsR0FBUzNFLEVBQ2pCOHVCLEVBQVNuL0IsU0FFZCxTQUFVQSxHQUNUbS9CLEVBQVNuL0IsRUFBS3lqRixPQXhCdEIsSUFFSXQ4QixFQUFTSixFQUZELEVBQVEsS0FNaEJELEVBQWNDLEVBRkQsRUFBUSxLQUl6QixTQUFTQSxFQUF1QnhqRCxHQUFPLE9BQU9BLEdBQU9BLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0FtQnZGMUcsRUFBT0QsUUFBVUEsRUFBaUIsUyw2QkNoQ2xDWSxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FDM0NtQixPQUFPLElBR1QsSUFFSW1xRixFQUFjbmhDLEVBRkQsRUFBUSxNQU1yQkcsRUFBWUgsRUFGRCxFQUFRLE1BSXZCLFNBQVNBLEVBQXVCeGpELEdBQU8sT0FBT0EsR0FBT0EsRUFBSXJGLFdBQWFxRixFQUFNLENBQUVnaUMsUUFBU2hpQyxHQXFCdkYzRyxFQUFRMm9DLFNBQVUsRUFBSTJoQixFQUFVM2hCLFNBQVMyaUQsRUFBWTNpRCxRQUFTLEdBQzlEMW9DLEVBQU9ELFFBQVVBLEVBQWlCLFMsNkJDbENsQ1ksT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQzNDbUIsT0FBTyxJQUVUbkIsRUFBUTJvQyxRQW9DUixTQUFtQmtoQixFQUFNNzRDLEVBQU84NEMsRUFBVXZuQixJQUN4QyxFQUFJOG5CLEVBQWMxaEIsU0FBUzMzQixFQUEzQixDQUFrQzY0QyxHQUFNLEVBQUkwaEMsRUFBZTVpRCxVQUFTLEVBQUl1aEIsRUFBWXZoQixTQUFTbWhCLElBQVl2bkIsSUFuQzNHLElBRUk4bkIsRUFBZ0JGLEVBRkQsRUFBUSxNQU12Qm9oQyxFQUFpQnBoQyxFQUZELEVBQVEsTUFNeEJELEVBQWNDLEVBRkQsRUFBUSxLQUl6QixTQUFTQSxFQUF1QnhqRCxHQUFPLE9BQU9BLEdBQU9BLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0F5QnZGMUcsRUFBT0QsUUFBVUEsRUFBaUIsUyw2QkMxQ2xDWSxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FDekNtQixPQUFPLElBRVhuQixFQUFRMm9DLFFBQ1IsU0FBdUJtaEIsR0FDbkIsT0FBTyxTQUFVM29ELEVBQU9pWCxFQUFPbXFCLEdBQzNCLE9BQU91bkIsRUFBUzNvRCxFQUFPb2hDLEtBRy9CdGlDLEVBQU9ELFFBQVVBLEVBQWlCLFMsZ0JDWGxDLE1BQU1rVixFQUFlLEVBQVEsSUFBVUEsYUFDakM1QixFQUFXLEVBQVEsSUFBUUEsU0FPakMsU0FBU2c5QyxJQUVQcDdDLEVBQWE3VSxLQURBMkMsV0FFUndvRixVQUFXLEVBUmxCdnJGLEVBQU9ELFFBQVVzd0QsRUFHakJoOUMsRUFBU2c5QyxFQUFXcDdDLEdBUXBCbzdDLEVBQVV4dUQsVUFBVXF3RCxHQUFLLFdBQ1ZudkQsS0FDUndvRixVQUFXLEVBREh4b0YsS0FFUmdULEtBQUssV0FHWnM2QyxFQUFVeHVELFVBQVVzNkIsS0FBTyxXQUNacDVCLEtBQ1J3b0YsVUFBVyxFQURIeG9GLEtBRVJnVCxLQUFLLFNBR1pzNkMsRUFBVXh1RCxVQUFVNndELE1BQVEsU0FBUzd2RCxHQUNuQyxNQUFNQyxFQUFPQyxLQUNURCxFQUFLeW9GLFNBQ1B6b0YsRUFBSytRLEtBQUssU0FBVWhSLEdBRXBCd3NCLFdBQVd4c0IsSyxnQkMvQmYsTUFBTTJ1QixFQUFZLEVBQVEsS0FrQjFCLFNBQVNnNkQsRUFBU2x1QyxHQUNoQixNQUF3QyxVQUFqQ211QyxFQUFvQm51QyxHQWM3QixTQUFTb3VDLEVBQXNCcHVDLEdBQzdCLElBQUlubEMsRUFBUXd6RSxFQUFtQnJ1QyxHQUcvQixPQUFJbmxDLEdBQVNtbEMsRUFBUWpOLE9BQU96c0MsT0FDbkIwNUMsRUFBUWpOLE9BSU0seUJBQW5CaU4sRUFBUTdwQyxPQUNINnBDLEVBQVFqTixPQUFPN3BDLE1BQU0sR0FHdkI4MkMsRUFBUWpOLE9BQU83cEMsTUFBTSxFQUFFMlIsR0FHaEMsU0FBU3d6RSxFQUFtQnJ1QyxHQUMxQixPQUFPQSxFQUFRN3BDLFFBRWIsSUFBSyxtQkFDSCxPQUFPLEVBRVQsSUFBSyxpQkFDTCxJQUFLLGNBQ0wsSUFBSywwQkFDTCxJQUFLLFdBQ0wsSUFBSyxrQkFDSCxPQUFPLEVBRVQsSUFBSyx1QkFDSCxPQUFPLEVBRVQsUUFDRSxRQUlOLFNBQVNnNEUsRUFBb0JudUMsR0FDM0IsT0FBUUEsRUFBUTdwQyxRQUVkLElBQUsscUJBQ0wsSUFBSyxZQUNMLElBQUssc0JBQ0wsSUFBSyxxQ0FDTCxJQUFLLCtCQUNMLElBQUssY0FDTCxJQUFLLHFCQUNMLElBQUssMkJBQ0wsSUFBSyx3Q0FDTCxJQUFLLDRCQUNMLElBQUssa0NBQ0wsSUFBSyxtQkFDTCxJQUFLLGlCQUNMLElBQUssc0JBQ0wsSUFBSyxxQkFDTCxJQUFLLGNBQ0gsTUFBTyxRQUdULElBQUssdUJBQ0wsSUFBSyx1Q0FDTCxJQUFLLGlDQUNMLElBQUssMENBQ0wsSUFBSyxvQ0FDSCxNQUFPLE9BR1QsSUFBSyxlQUNMLElBQUssa0JBQ0wsSUFBSyxpQkFDTCxJQUFLLG1CQUNMLElBQUssMEJBQ0wsSUFBSyxXQUNMLElBQUssa0JBQ0wsSUFBSyxvQkFDTCxJQUFLLGNBQ0gsTUFBTyxRQUdULElBQUssY0FDTCxJQUFLLGdCQUNMLElBQUssZ0JBQ0wsSUFBSyxjQUNMLElBQUssV0FDTCxJQUFLLGVBQ0wsSUFBSyxhQUNMLElBQUssZUFDTCxJQUFLLGVBQ0wsSUFBSyxzQkFDTCxJQUFLLHlCQUNMLElBQUssZ0JBQ0wsSUFBSyxxQkFDTCxJQUFLLGtDQUNMLElBQUssc0JBQ0wsSUFBSyx1QkFDTCxJQUFLLGNBQ0wsSUFBSyxpQkFDTCxJQUFLLHFCQUNMLElBQUssZUFDTCxJQUFLLGVBQ0wsSUFBSyxZQUNMLElBQUssWUFDTCxJQUFLLFdBQ0wsSUFBSyxrQkFDTCxJQUFLLGtCQUNMLElBQUssZUFDTCxJQUFLLGlCQUNMLElBQUssZ0JBQ0wsSUFBSyxzQkFDTCxJQUFLLHVCQUNMLElBQUssa0JBQ0gsTUFBTyxTQTlJYnpULEVBQU9ELFFBQVUsQ0FDZjZyRiwwQkFRRixTQUFtQ3R1QyxFQUFTcHJCLEVBQU8sSUFDakQsSUFBS3M1RCxFQUFTbHVDLEdBQVUsT0FBTyxLQUMvQixNQUFNLGdCQUFFdXVDLEdBQW9CMzVELEVBQ3RCbWUsRUFBU3c3QyxFQUFrQnZ1QyxFQUFRak4sT0FBU3E3QyxFQUFzQnB1QyxHQUN4RSxPQUFPQSxFQUFRN3BDLE9BQVMsSUFBTStkLEVBQVU2ZSxJQVh4Q203QyxTQUFVQSxFQUNWTSxtQkFpQkYsU0FBNEJ4dUMsR0FDMUIsSUFBSW5sQyxFQUFRd3pFLEVBQW1CcnVDLEdBRy9CLEdBQUlubEMsR0FBU21sQyxFQUFRak4sT0FBT3pzQyxPQUMxQixPQUFPLEtBR1QsT0FBTzA1QyxFQUFRak4sT0FBT2w0QixJQXhCdEJ1ekUsc0JBQXVCQSxFQUN2QkMsbUJBQW9CQSxFQUNwQkYsb0JBQXFCQSxJLGdCQ1J2QixJQUFJTSxFQUF1QixvQkFBVHg2RCxLQUF1QkEsS0FBTyxFQUFRLEtBRXhEdnhCLEVBQU9ELFFBQVUsU0FBVTJHLEVBQUt3ckIsR0FDdkJBLElBQU1BLEVBQU8sSUFDRSxtQkFBVEEsSUFBcUJBLEVBQU8sQ0FBRXZZLElBQUt1WSxJQUM5QyxJQUFJODVELEVBQVE5NUQsRUFBSzg1RCxPQUFTLEdBQ0wsaUJBQVZBLElBQW9CQSxFQUFRLzlFLE1BQU0rOUUsRUFBTSxHQUFHditFLEtBQUssTUFDM0QsSUFHaUMyakIsRUFIN0I2NkQsRUFBaUMsa0JBQWhCLzVELEVBQUsrNUQsUUFBd0IvNUQsRUFBSys1RCxPQUNuREMsRUFBV2g2RCxFQUFLZzZELFVBQVksU0FBUzFxRixFQUFLTixHQUFTLE9BQU9BLEdBRTFEeVksRUFBTXVZLEVBQUt2WSxNQUFrQnlYLEVBUTlCYyxFQUFLdlksSUFQRyxTQUFVd3lFLEdBQ2IsT0FBTyxTQUFVdi9FLEVBQUd0RSxHQUNoQixJQUFJOGpGLEVBQU8sQ0FBRTVxRixJQUFLb0wsRUFBRzFMLE1BQU9pckYsRUFBS3YvRSxJQUM3QnkvRSxFQUFPLENBQUU3cUYsSUFBSzhHLEVBQUdwSCxNQUFPaXJGLEVBQUs3akYsSUFDakMsT0FBTzhvQixFQUFFZzdELEVBQU1DLE1BS3ZCbDZELEVBQU8sR0FDWCxPQUFPLFNBQVVYLEVBQVc4NkQsRUFBUTlxRixFQUFLMnFGLEVBQU1JLEdBQzNDLElBQUlDLEVBQVNSLEVBQVMsS0FBTyxJQUFJLzlFLE1BQU1zK0UsRUFBUSxHQUFHOStFLEtBQUt1K0UsR0FBVSxHQUM3RFMsRUFBaUJULEVBQVEsS0FBTyxJQVFwQyxHQU5JRyxHQUFRQSxFQUFLbitFLFFBQWlDLG1CQUFoQm0rRSxFQUFLbitFLFNBQ25DbStFLEVBQU9BLEVBQUtuK0UsZUFLSDVLLEtBRmIrb0YsRUFBT0QsRUFBUzlyRixLQUFLa3NGLEVBQVE5cUYsRUFBSzJxRixJQUVsQyxDQUdBLEdBQW9CLGlCQUFUQSxHQUE4QixPQUFUQSxFQUM1QixPQUFPSixFQUFLdjZELFVBQVUyNkQsR0FFMUIsR0FBSWxuRixFQUFRa25GLEdBQU8sQ0FFZixJQURBLElBQUkvOUUsRUFBTSxHQUNEbk8sRUFBSSxFQUFHQSxFQUFJa3NGLEVBQUt2b0YsT0FBUTNELElBQUssQ0FDbEMsSUFBSWd4QyxFQUFPemYsRUFBVTI2RCxFQUFNbHNGLEVBQUdrc0YsRUFBS2xzRixHQUFJc3NGLEVBQU0sSUFBTVIsRUFBS3Y2RCxVQUFVLE1BQ2xFcGpCLEVBQUkvRCxLQUFLbWlGLEVBQVNSLEVBQVEvNkMsR0FFOUIsTUFBTyxJQUFNN2lDLEVBQUlYLEtBQUssS0FBTysrRSxFQUFTLElBR3RDLElBQTRCLElBQXhCcjZELEVBQUt4cEIsUUFBUXdqRixHQUFjLENBQzNCLEdBQUlGLEVBQVEsT0FBT0YsRUFBS3Y2RCxVQUFVLGFBQ2xDLE1BQU0sSUFBSWh1QixVQUFVLHlDQUVuQjJ1QixFQUFLOW5CLEtBQUs4aEYsR0FFZixJQUFJajVFLEVBQU9ELEVBQVdrNUUsR0FBTTVrQyxLQUFLNXRDLEdBQU9BLEVBQUl3eUUsSUFFNUMsSUFESS85RSxFQUFNLEdBQ0RuTyxFQUFJLEVBQUdBLEVBQUlpVCxFQUFLdFAsT0FBUTNELElBQUssQ0FDbEMsSUFDSWlCLEVBQVFzd0IsRUFBVTI2RCxFQURsQjNxRixFQUFNMFIsRUFBS2pULEdBQ2tCa3NGLEVBQUszcUYsR0FBTStxRixFQUFNLEdBRWxELEdBQUlyckYsRUFBSixDQUVBLElBQUl3ckYsRUFBV1gsRUFBS3Y2RCxVQUFVaHdCLEdBQ3hCaXJGLEVBQ0F2ckYsRUFFTmtOLEVBQUkvRCxLQUFLbWlGLEVBQVNSLEVBQVFVLElBRzlCLE9BREF2NkQsRUFBS2djLE9BQU9oYyxFQUFLeHBCLFFBQVF3akYsR0FBTyxHQUN6QixJQUFNLzlFLEVBQUlYLEtBQUssS0FBTysrRSxFQUFTLEtBOUN2QyxDQWdESixDQUFFLEdBQUk5bEYsR0FBTyxHQUFJQSxFQUFLLElBRzdCLElBQUl6QixFQUFVZ0osTUFBTWhKLFNBQVcsU0FBVTRILEdBQ3JDLE1BQStCLG1CQUF4QixHQUFHdkYsU0FBU2xILEtBQUt5TSxJQUd4Qm9HLEVBQWF0UyxPQUFPdVMsTUFBUSxTQUFVeE0sR0FDdEMsSUFBSXd1RCxFQUFNdjBELE9BQU9rQixVQUFVQyxnQkFBa0IsV0FBYyxPQUFPLEdBQzlEb1IsRUFBTyxHQUNYLElBQUssSUFBSTFSLEtBQU9rRixFQUNSd3VELEVBQUk5MEQsS0FBS3NHLEVBQUtsRixJQUFNMFIsRUFBSzdJLEtBQUs3SSxHQUV0QyxPQUFPMFIsSSxnQkNsRlhuVCxFQUFRb3RELE1BQVEsRUFBUSxLQUN4QnB0RCxFQUFReXhCLFVBQVksRUFBUSxNLGNDRDVCLElBQUltN0QsRUFDQWx1RCxFQVdBNkksRUE0SUFwbUMsRUF0SkEwckYsRUFBVSxDQUNOLElBQU0sSUFDTixLQUFNLEtBQ04sSUFBTSxJQUNOdGtGLEVBQU0sS0FDTjhvQixFQUFNLEtBQ04xdkIsRUFBTSxLQUNOWCxFQUFNLEtBQ05JLEVBQU0sTUFJVnNCLEVBQVEsU0FBVXBDLEdBRWQsS0FBTSxDQUNGRyxLQUFTLGNBQ1RnWCxRQUFTblgsRUFDVHNzRixHQUFTQSxFQUNUcmxELEtBQVNBLElBSWpCcFosRUFBTyxTQUFVNXRCLEdBV2IsT0FUSUEsR0FBS0EsSUFBTW0rQixHQUNYaDhCLEVBQU0sYUFBZW5DLEVBQUksaUJBQW1CbStCLEVBQUssS0FNckRBLEVBQUs2SSxFQUFLcEwsT0FBT3l3RCxHQUNqQkEsR0FBTSxFQUNDbHVELEdBR1g1bEIsRUFBUyxXQUVMLElBQUlBLEVBQ0ExUyxFQUFTLEdBTWIsSUFKVyxNQUFQczRCLElBQ0F0NEIsRUFBUyxJQUNUK25CLEVBQUssTUFFRnVRLEdBQU0sS0FBT0EsR0FBTSxLQUN0QnQ0QixHQUFVczRCLEVBQ1Z2USxJQUVKLEdBQVcsTUFBUHVRLEVBRUEsSUFEQXQ0QixHQUFVLElBQ0grbkIsS0FBVXVRLEdBQU0sS0FBT0EsR0FBTSxLQUNoQ3Q0QixHQUFVczRCLEVBR2xCLEdBQVcsTUFBUEEsR0FBcUIsTUFBUEEsRUFPZCxJQU5BdDRCLEdBQVVzNEIsRUFDVnZRLElBQ1csTUFBUHVRLEdBQXFCLE1BQVBBLElBQ2R0NEIsR0FBVXM0QixFQUNWdlEsS0FFR3VRLEdBQU0sS0FBT0EsR0FBTSxLQUN0QnQ0QixHQUFVczRCLEVBQ1Z2USxJQUlSLEdBREFyVixHQUFVMVMsRUFDTDRILFNBQVM4SyxHQUdWLE9BQU9BLEVBRlBwVyxFQUFNLGVBTWQwRCxFQUFTLFdBRUwsSUFBSXExQyxFQUNBdjdDLEVBRUE0c0YsRUFEQTFtRixFQUFTLEdBSWIsR0FBVyxNQUFQczRCLEVBQ0EsS0FBT3ZRLEtBQVEsQ0FDWCxHQUFXLE1BQVB1USxFQUVBLE9BREF2USxJQUNPL25CLEVBQ0osR0FBVyxPQUFQczRCLEVBRVAsR0FEQXZRLElBQ1csTUFBUHVRLEVBQVksQ0FFWixJQURBb3VELEVBQVEsRUFDSDVzRixFQUFJLEVBQUdBLEVBQUksSUFDWnU3QyxFQUFNMXhDLFNBQVNva0IsSUFBUSxJQUNsQm5nQixTQUFTeXRDLElBRkN2N0MsR0FBSyxFQUtwQjRzRixFQUFnQixHQUFSQSxFQUFhcnhDLEVBRXpCcjFDLEdBQVU4QyxPQUFPMkMsYUFBYWloRixPQUMzQixJQUEyQixpQkFBaEJELEVBQVFudUQsR0FHdEIsTUFGQXQ0QixHQUFVeW1GLEVBQVFudUQsUUFLdEJ0NEIsR0FBVXM0QixFQUl0Qmg4QixFQUFNLGVBR1ZxcUYsRUFBUSxXQUlKLEtBQU9ydUQsR0FBTUEsR0FBTSxLQUNmdlEsS0ErRlpodEIsRUFBUSxXQU1KLE9BREE0ckYsSUFDUXJ1RCxHQUNSLElBQUssSUFDRCxPQTFDSyxXQUlMLElBQUlqOUIsRUFDQUcsRUFBUyxHQUViLEdBQVcsTUFBUDg4QixFQUFZLENBR1osR0FGQXZRLEVBQUssS0FDTDQrRCxJQUNXLE1BQVBydUQsRUFFQSxPQURBdlEsRUFBSyxLQUNFdnNCLEVBRVgsS0FBTzg4QixHQUFJLENBU1AsR0FSQWo5QixFQUFNMkUsSUFDTjJtRixJQUNBNStELEVBQUssS0FDRHZ0QixPQUFPbUIsZUFBZTFCLEtBQUt1QixFQUFRSCxJQUNuQ2lCLEVBQU0sa0JBQW9CakIsRUFBTSxLQUVwQ0csRUFBT0gsR0FBT04sSUFDZDRyRixJQUNXLE1BQVBydUQsRUFFQSxPQURBdlEsRUFBSyxLQUNFdnNCLEVBRVh1c0IsRUFBSyxLQUNMNCtELEtBR1JycUYsRUFBTSxjQVdDZCxHQUNYLElBQUssSUFDRCxPQXZFSSxXQUlKLElBQUltRSxFQUFRLEdBRVosR0FBVyxNQUFQMjRCLEVBQVksQ0FHWixHQUZBdlEsRUFBSyxLQUNMNCtELElBQ1csTUFBUHJ1RCxFQUVBLE9BREF2USxFQUFLLEtBQ0Vwb0IsRUFFWCxLQUFPMjRCLEdBQUksQ0FHUCxHQUZBMzRCLEVBQU11RSxLQUFLbkosS0FDWDRyRixJQUNXLE1BQVBydUQsRUFFQSxPQURBdlEsRUFBSyxLQUNFcG9CLEVBRVhvb0IsRUFBSyxLQUNMNCtELEtBR1JycUYsRUFBTSxhQStDQ3FELEdBQ1gsSUFBSyxJQUNELE9BQU9LLElBQ1gsSUFBSyxJQUNELE9BQU8wUyxJQUNYLFFBQ0ksT0FBTzRsQixHQUFNLEtBQU9BLEdBQU0sSUFBTTVsQixJQTNHN0IsV0FJSCxPQUFRNGxCLEdBQ1IsSUFBSyxJQUtELE9BSkF2USxFQUFLLEtBQ0xBLEVBQUssS0FDTEEsRUFBSyxLQUNMQSxFQUFLLE1BQ0UsRUFDWCxJQUFLLElBTUQsT0FMQUEsRUFBSyxLQUNMQSxFQUFLLEtBQ0xBLEVBQUssS0FDTEEsRUFBSyxLQUNMQSxFQUFLLE1BQ0UsRUFDWCxJQUFLLElBS0QsT0FKQUEsRUFBSyxLQUNMQSxFQUFLLEtBQ0xBLEVBQUssS0FDTEEsRUFBSyxLQUNFLEtBRVh6ckIsRUFBTSxlQUFpQmc4QixFQUFLLEtBa0ZlbGtCLEtBT25EdmEsRUFBT0QsUUFBVSxTQUFVd2hDLEVBQVF3ckQsR0FDL0IsSUFBSXh5RCxFQWlCSixPQWZBK00sRUFBTy9GLEVBQ1BvckQsRUFBSyxFQUNMbHVELEVBQUssSUFDTGxFLEVBQVNyNUIsSUFDVDRyRixJQUNJcnVELEdBQ0FoOEIsRUFBTSxnQkFTZ0IsbUJBQVpzcUYsRUFBMEIsU0FBU0MsRUFBS3RuRCxFQUFRbGtDLEdBQzFELElBQUkyWixFQUFHM0gsRUFBR3RTLEVBQVF3a0MsRUFBT2xrQyxHQUN6QixHQUFJTixHQUEwQixpQkFBVkEsRUFDaEIsSUFBS2lhLEtBQUtqYSxFQUNGUCxPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtjLEVBQU9pYSxVQUVsQy9YLEtBRFZvUSxFQUFJdzVFLEVBQUs5ckYsRUFBT2lhLElBRVpqYSxFQUFNaWEsR0FBSzNILFNBRUp0UyxFQUFNaWEsSUFLN0IsT0FBTzR4RSxFQUFRM3NGLEtBQUtzbEMsRUFBUWxrQyxFQUFLTixHQWRFLENBZXJDLENBQUMsR0FBSXE1QixHQUFTLElBQU9BLEksY0MvUTNCLElBRUkweUQsRUFDQVQsRUFVQVUsRUFaQUMsRUFBWSwySEFHWkMsRUFBTyxDQUNILEtBQU0sTUFDTixLQUFNLE1BQ04sS0FBTSxNQUNOLEtBQU0sTUFDTixLQUFNLE1BQ04sSUFBTSxNQUNOLEtBQU0sUUFJZCxTQUFTQyxFQUFNbG5GLEdBT1gsT0FEQWduRixFQUFVdm1DLFVBQVksRUFDZnVtQyxFQUFVLzNELEtBQUtqdkIsR0FBVSxJQUFNQSxFQUFPZ00sUUFBUWc3RSxHQUFXLFNBQVV2Z0YsR0FDdEUsSUFBSXRNLEVBQUk4c0YsRUFBS3hnRixHQUNiLE1BQW9CLGlCQUFOdE0sRUFBaUJBLEVBQzNCLE9BQVMsT0FBU3NNLEVBQUV0QyxXQUFXLEdBQUdoRCxTQUFTLEtBQUtkLE9BQU8sTUFDMUQsSUFBTSxJQUFNTCxFQUFTLElBbUc5Qm5HLEVBQU9ELFFBQVUsU0FBVW1CLEVBQU9nckYsRUFBVUYsR0FDeEMsSUFBSS9yRixFQU1KLEdBTEFndEYsRUFBTSxHQUNOVCxFQUFTLEdBSVksaUJBQVZSLEVBQ1AsSUFBSy9yRixFQUFJLEVBQUdBLEVBQUkrckYsRUFBTy9yRixHQUFLLEVBQ3hCdXNGLEdBQVUsUUFJUSxpQkFBVlIsSUFDWlEsRUFBU1IsR0FNYixHQURBa0IsRUFBTWhCLEVBQ0ZBLEdBQWdDLG1CQUFiQSxJQUNDLGlCQUFiQSxHQUFvRCxpQkFBcEJBLEVBQVN0b0YsUUFDaEQsTUFBTSxJQUFJOEIsTUFBTSxrQkFLcEIsT0EzSEosU0FBU3lFLEVBQUkzSSxFQUFLa2tDLEdBRWQsSUFBSXpsQyxFQUNBa2IsRUFDQTNILEVBQ0E1UCxFQUVBMHBGLEVBREFDLEVBQU9OLEVBRVAvckYsRUFBUXdrQyxFQUFPbGtDLEdBZW5CLE9BWklOLEdBQTBCLGlCQUFWQSxHQUNZLG1CQUFqQkEsRUFBTThNLFNBQ2pCOU0sRUFBUUEsRUFBTThNLE9BQU94TSxJQUtOLG1CQUFSMHJGLElBQ1Boc0YsRUFBUWdzRixFQUFJOXNGLEtBQUtzbEMsRUFBUWxrQyxFQUFLTixXQUluQkEsR0FDWCxJQUFLLFNBQ0QsT0FBT21zRixFQUFNbnNGLEdBRWpCLElBQUssU0FFRCxPQUFPNk0sU0FBUzdNLEdBQVMrSCxPQUFPL0gsR0FBUyxPQUU3QyxJQUFLLFVBQ0wsSUFBSyxPQUlELE9BQU8rSCxPQUFPL0gsR0FFbEIsSUFBSyxTQUNELElBQUtBLEVBQU8sTUFBTyxPQUtuQixHQUpBK3JGLEdBQU9ULEVBQ1BjLEVBQVUsR0FHcUMsbUJBQTNDM3NGLE9BQU9rQixVQUFVeUYsU0FBU3BFLE1BQU1oQyxHQUE2QixDQUU3RCxJQURBMEMsRUFBUzFDLEVBQU0wQyxPQUNWM0QsRUFBSSxFQUFHQSxFQUFJMkQsRUFBUTNELEdBQUssRUFDekJxdEYsRUFBUXJ0RixHQUFLa0ssRUFBSWxLLEVBQUdpQixJQUFVLE9BU2xDLE9BSkFzUyxFQUF1QixJQUFuQjg1RSxFQUFRMXBGLE9BQWUsS0FBT3FwRixFQUM5QixNQUFRQSxFQUFNSyxFQUFRNy9FLEtBQUssTUFBUXcvRSxHQUFPLEtBQU9NLEVBQU8sSUFDeEQsSUFBTUQsRUFBUTcvRSxLQUFLLEtBQU8sSUFDOUJ3L0UsRUFBTU0sRUFDQy81RSxFQUtYLEdBQUkwNUUsR0FBc0IsaUJBQVJBLEVBRWQsSUFEQXRwRixFQUFTc3BGLEVBQUl0cEYsT0FDUjNELEVBQUksRUFBR0EsRUFBSTJELEVBQVEzRCxHQUFLLEVBRVIsaUJBRGpCa2IsRUFBSSt4RSxFQUFJanRGLE1BRUp1VCxFQUFJckosRUFBSWdSLEVBQUdqYSxLQUVQb3NGLEVBQVFqakYsS0FBS2dqRixFQUFNbHlFLElBQU04eEUsRUFBTSxLQUFPLEtBQU96NUUsUUFPekQsSUFBSzJILEtBQUtqYSxFQUNGUCxPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtjLEVBQU9pYSxLQUM1QzNILEVBQUlySixFQUFJZ1IsRUFBR2phLEtBRVBvc0YsRUFBUWpqRixLQUFLZ2pGLEVBQU1seUUsSUFBTTh4RSxFQUFNLEtBQU8sS0FBT3o1RSxHQWFqRSxPQUpBQSxFQUF1QixJQUFuQjg1RSxFQUFRMXBGLE9BQWUsS0FBT3FwRixFQUM5QixNQUFRQSxFQUFNSyxFQUFRNy9FLEtBQUssTUFBUXcvRSxHQUFPLEtBQU9NLEVBQU8sSUFDeEQsSUFBTUQsRUFBUTcvRSxLQUFLLEtBQU8sSUFDOUJ3L0UsRUFBTU0sRUFDQy81RSxHQStCSnJKLENBQUksR0FBSSxDQUFDLEdBQUlqSixNLGNDdkp4QixNQUFNc3NGLEVBQWMsRUFFcEJ4dEYsRUFBT0QsUUFHUCxXQUVFLElBQUkwdEYsR0FBVyxJQUFJdjVELE1BQU93eUIsVUFBVTE3QyxLQUFLMkUsSUFBSSxHQUFJNjlFLEdBRTdDRSxFQUFZMWlGLEtBQUt5RixNQUFNekYsS0FBSzRvQyxTQUFTNW9DLEtBQUsyRSxJQUFJLEdBQUk2OUUsSUFFdEQsT0FBT0MsRUFBU0MsSSw2QkNYbEIsSUFBSTVvRixFQUFTLEVBQVEsS0FDakJxdUIsRUFBYSxFQUFRLEtBQ3JCdzZELEVBQWUsRUFBUSxLQUN2QkMsRUFBUSxFQUFRLElBNkJwQixTQUFTQyxFQUFXdDZCLEVBQUs3L0MsRUFBUzR1QixHQUM5QixJQUFJK04sRUFBU2tqQixFQVliLE9BVklwZ0MsRUFBV3pmLElBQ1g0dUIsRUFBVzV1QixFQUNRLGlCQUFSNi9DLElBQ1BsakIsRUFBUyxDQUFDa2pCLElBQUlBLEtBR2xCbGpCLEVBQVN1OUMsRUFBTWw2RSxFQUFTLENBQUM2L0MsSUFBS0EsSUFHbENsakIsRUFBTy9OLFNBQVdBLEVBQ1grTixFQUdYLFNBQVN5OUMsRUFBVXY2QixFQUFLNy9DLEVBQVM0dUIsR0FFN0IsT0FBT3lyRCxFQURQcjZFLEVBQVVtNkUsRUFBV3Q2QixFQUFLNy9DLEVBQVM0dUIsSUFJdkMsU0FBU3lyRCxFQUFXcjZFLEdBQ2hCLFFBQStCLElBQXJCQSxFQUFRNHVCLFNBQ2QsTUFBTSxJQUFJNThCLE1BQU0sNkJBR3BCLElBQUlzb0YsR0FBUyxFQUNUMXJELEVBQVcsU0FBZ0JuL0IsRUFBS29qRixFQUFVOXlCLEdBQ3RDdTZCLElBQ0FBLEdBQVMsRUFDVHQ2RSxFQUFRNHVCLFNBQVNuL0IsRUFBS29qRixFQUFVOXlCLEtBVXhDLFNBQVN3NkIsSUFFTCxJQUFJeDZCLE9BQU9yd0QsRUFRWCxHQUxJcXdELEVBREFILEVBQUlpekIsU0FDR2p6QixFQUFJaXpCLFNBRUpqekIsRUFBSTQ2QixjQXNKdkIsU0FBZ0I1NkIsR0FHWixJQUNJLEdBQXlCLGFBQXJCQSxFQUFJNjZCLGFBQ0osT0FBTzc2QixFQUFJODZCLFlBRWYsSUFBSUMsRUFBd0IvNkIsRUFBSTg2QixhQUE0RCxnQkFBN0M5NkIsRUFBSTg2QixZQUFZNzZDLGdCQUFnQis2QyxTQUMvRSxHQUF5QixLQUFyQmg3QixFQUFJNjZCLGVBQXdCRSxFQUM1QixPQUFPLzZCLEVBQUk4NkIsWUFFakIsTUFBT3ZwRixJQUVULE9BQU8sS0FuSzRCMHBGLENBQU9qN0IsR0FHbENrN0IsRUFDQSxJQUNJLzZCLEVBQU9saUMsS0FBSzQ3QixNQUFNc0csR0FDcEIsTUFBTzV1RCxJQUdiLE9BQU80dUQsRUFHWCxTQUFTZzdCLEVBQVVDLEdBTWYsT0FMQXAvRCxhQUFhcS9ELEdBQ1JELGFBQWVocEYsUUFDaEJncEYsRUFBTSxJQUFJaHBGLE1BQU0sSUFBTWdwRixHQUFPLGtDQUVqQ0EsRUFBSTk2QixXQUFhLEVBQ1Z0eEIsRUFBU29zRCxFQUFLRSxHQUl6QixTQUFTQyxJQUNMLElBQUlDLEVBQUosQ0FDQSxJQUFJQyxFQUNKei9ELGFBQWFxL0QsR0FHVEksRUFGRHI3RSxFQUFRczdFLGFBQXVCNXJGLElBQWJrd0QsRUFBSXk3QixPQUVaLElBRWdCLE9BQWZ6N0IsRUFBSXk3QixPQUFrQixJQUFNejdCLEVBQUl5N0IsT0FFOUMsSUFBSXhJLEVBQVdxSSxFQUNYenJGLEVBQU0sS0FpQlYsT0FmZSxJQUFYNHJGLEdBQ0F4SSxFQUFXLENBQ1A5eUIsS0FBTXc2QixJQUNOcjZCLFdBQVltN0IsRUFDWnQ3RSxPQUFRQSxFQUNSKy9DLFFBQVMsR0FDVHk3QixJQUFLMTdCLEVBQ0wyN0IsV0FBWTU3QixHQUViQSxFQUFJNjdCLHdCQUNINUksRUFBUy95QixRQUFVbTZCLEVBQWFyNkIsRUFBSTY3QiwyQkFHeENoc0YsRUFBTSxJQUFJdUMsTUFBTSxpQ0FFYjQ4QixFQUFTbi9CLEVBQUtvakYsRUFBVUEsRUFBUzl5QixPQUc1QyxJQVVJanlELEVBQ0FzdEYsRUFYQXg3QixFQUFNNS9DLEVBQVE0L0MsS0FBTyxLQUVwQkEsSUFFR0EsRUFEQTUvQyxFQUFRMDdFLE1BQVExN0UsRUFBUXM3RSxPQUNsQixJQUFJbEIsRUFBVXVCLGVBRWQsSUFBSXZCLEVBQVV3QixnQkFNNUIsSUFNSVgsRUFOQXA3QixFQUFNRCxFQUFJMjdCLElBQU12N0UsRUFBUTYvQyxLQUFPNy9DLEVBQVF1N0UsSUFDdkN4N0UsRUFBUzYvQyxFQUFJNy9DLE9BQVNDLEVBQVFELFFBQVUsTUFDeENnZ0QsRUFBTy8vQyxFQUFRKy9DLE1BQVEvL0MsRUFBUXhNLEtBQy9Cc3NELEVBQVVGLEVBQUlFLFFBQVU5L0MsRUFBUTgvQyxTQUFXLEdBQzNDcnZCLElBQVN6d0IsRUFBUXl3QixLQUNqQnFxRCxHQUFTLEVBRVRJLEVBQWtCLENBQ2xCbjdCLFVBQU1yd0QsRUFDTm93RCxRQUFTLEdBQ1RJLFdBQVksRUFDWm5nRCxPQUFRQSxFQUNSdzdFLElBQUsxN0IsRUFDTDI3QixXQUFZNTdCLEdBMENoQixHQXZDSSxTQUFVNS9DLElBQTRCLElBQWpCQSxFQUFRcTRFLE9BQzdCeUMsR0FBUyxFQUNUaDdCLEVBQWdCLFFBQUtBLEVBQWdCLFNBQU1BLEVBQWdCLE9BQUksb0JBQ2hELFFBQVgvL0MsR0FBK0IsU0FBWEEsSUFDcEIrL0MsRUFBUSxpQkFBbUJBLEVBQVEsa0JBQW9CQSxFQUFRLGdCQUFrQixvQkFDakZDLEVBQU9saUMsS0FBS0MsV0FBMkIsSUFBakI5ZCxFQUFRcTRFLEtBQWdCdDRCLEVBQU8vL0MsRUFBUXE0RSxRQUlyRXo0QixFQUFJN2YsbUJBdkdKLFdBQzJCLElBQW5CNmYsRUFBSXdCLFlBQ0p6bEMsV0FBV3cvRCxFQUFVLElBc0c3QnY3QixFQUFJaThCLE9BQVNWLEVBQ2J2N0IsRUFBSXJ4QixRQUFVd3NELEVBRWRuN0IsRUFBSWs4QixXQUFhLGFBR2pCbDhCLEVBQUltOEIsUUFBVSxXQUNWWCxHQUFVLEdBRWR4N0IsRUFBSW84QixVQUFZakIsRUFDaEJuN0IsRUFBSXE4QixLQUFLbDhFLEVBQVE4L0MsR0FBTXB2QixFQUFNendCLEVBQVFrOEUsU0FBVWw4RSxFQUFRbThFLFVBRW5EMXJELElBQ0FtdkIsRUFBSXc4QixrQkFBb0JwOEUsRUFBUW84RSxrQkFLL0IzckQsR0FBUXp3QixFQUFRbWMsUUFBVSxJQUMzQjgrRCxFQUFldC9ELFlBQVcsV0FDdEIsSUFBSXkvRCxFQUFKLENBQ0FBLEdBQVUsRUFDVng3QixFQUFJeThCLE1BQU0sV0FDVixJQUFJbHJGLEVBQUksSUFBSWEsTUFBTSwwQkFDbEJiLEVBQUVnTixLQUFPLFlBQ1Q0OEUsRUFBVTVwRixNQUNYNk8sRUFBUW1jLFVBR1h5akMsRUFBSTA4QixpQkFDSixJQUFJeHVGLEtBQU9neUQsRUFDSkEsRUFBUTF4RCxlQUFlTixJQUN0Qjh4RCxFQUFJMDhCLGlCQUFpQnh1RixFQUFLZ3lELEVBQVFoeUQsU0FHdkMsR0FBSWtTLEVBQVE4L0MsVUFwTHZCLFNBQWlCOXNELEdBQ2IsSUFBSSxJQUFJekcsS0FBS3lHLEVBQ1QsR0FBR0EsRUFBSTVFLGVBQWU3QixHQUFJLE9BQU8sRUFFckMsT0FBTyxFQWdMd0Jnd0YsQ0FBUXY4RSxFQUFROC9DLFNBQzNDLE1BQU0sSUFBSTl0RCxNQUFNLHFEQWtCcEIsTUFmSSxpQkFBa0JnTyxJQUNsQjQvQyxFQUFJNjZCLGFBQWV6NkUsRUFBUXk2RSxjQUczQixlQUFnQno2RSxHQUNjLG1CQUF2QkEsRUFBUXc4RSxZQUVmeDhFLEVBQVF3OEUsV0FBVzU4QixHQU12QkEsRUFBSWIsS0FBS2dCLEdBQVEsTUFFVkgsRUEzTlh0ekQsRUFBT0QsUUFBVSt0RixFQUVqQjl0RixFQUFPRCxRQUFRMm9DLFFBQVVvbEQsRUFDekJBLEVBQVV3QixlQUFpQnhxRixFQUFPd3FGLGdCQTZPbEMsYUE1T0F4QixFQUFVdUIsZUFBaUIsb0JBQXFCLElBQUt2QixFQUFVd0IsZUFBb0J4QixFQUFVd0IsZUFBaUJ4cUYsRUFBT3VxRixlQVVySCxTQUFzQnZwRixFQUFPMk0sR0FDekIsSUFBSyxJQUFJeFMsRUFBSSxFQUFHQSxFQUFJNkYsRUFBTWxDLE9BQVEzRCxJQUM5QndTLEVBQVMzTSxFQUFNN0YsSUFWdkJrd0YsQ0FBYSxDQUFDLE1BQU8sTUFBTyxPQUFRLFFBQVMsT0FBUSxXQUFXLFNBQVMxOEUsR0FDckVxNkUsRUFBcUIsV0FBWHI2RSxFQUFzQixNQUFRQSxHQUFVLFNBQVM4L0MsRUFBSzcvQyxFQUFTNHVCLEdBR3JFLE9BRkE1dUIsRUFBVW02RSxFQUFXdDZCLEVBQUs3L0MsRUFBUzR1QixJQUMzQjd1QixPQUFTQSxFQUFPMGhCLGNBQ2pCNDRELEVBQVdyNkUsUSxpQkNoQjFCLGtCQUdJMDhFLEVBRGtCLG9CQUFYdHJGLE9BQ0RBLFlBQ21CLElBQVhtSCxFQUNSQSxFQUNpQixvQkFBVG5KLEtBQ1JBLEtBRUEsR0FHVjlDLEVBQU9ELFFBQVVxd0YsSSwrQkNaakJwd0YsRUFBT0QsUUFJUCxTQUFxQjhDLEdBQ25CLElBQUlzRCxFQUFTbUIsRUFBU2xILEtBQUt5QyxHQUMzQixNQUFrQixzQkFBWHNELEdBQ1UsbUJBQVB0RCxHQUFnQyxvQkFBWHNELEdBQ1Ysb0JBQVhyQixTQUVOakMsSUFBT2lDLE9BQU91cUIsWUFDZHhzQixJQUFPaUMsT0FBT3VyRixPQUNkeHRGLElBQU9pQyxPQUFPd3JGLFNBQ2R6dEYsSUFBT2lDLE9BQU95ckYsU0FYcEIsSUFBSWpwRixFQUFXM0csT0FBT2tCLFVBQVV5RixVLGdCQ0ZoQyxJQUFJNEssRUFBTyxFQUFRLEtBQ2Z3aEIsRUFBVSxFQUFRLEtBS3RCMXpCLEVBQU9ELFFBQVUsU0FBVXl6RCxHQUN6QixJQUFLQSxFQUNILE1BQU8sR0FFVCxJQUFJajVCLEVBQVMsR0FtQmIsT0FqQkE3RyxFQUNJeGhCLEVBQUtzaEQsR0FBUzVsQyxNQUFNLE9BQ3BCLFNBQVU0aUUsR0FDUixJQWJlanVGLEVBYVg0VixFQUFRcTRFLEVBQUk3bkYsUUFBUSxLQUNwQm5ILEVBQU0wUSxFQUFLcytFLEVBQUlocUYsTUFBTSxFQUFHMlIsSUFBUXhRLGNBQ2hDekcsRUFBUWdSLEVBQUtzK0UsRUFBSWhxRixNQUFNMlIsRUFBUSxTQUVQLElBQWpCb2lCLEVBQU8vNEIsR0FDaEIrNEIsRUFBTy80QixHQUFPTixHQWxCRHFCLEVBbUJJZzRCLEVBQU8vNEIsR0FsQm1CLG1CQUF4Q2IsT0FBT2tCLFVBQVV5RixTQUFTbEgsS0FBS21DLEdBbUJsQ2c0QixFQUFPLzRCLEdBQUs2SSxLQUFLbkosR0FFakJxNUIsRUFBTy80QixHQUFPLENBQUUrNEIsRUFBTy80QixHQUFNTixPQUs5QnE1QixJLDZCQzNCVCxJQUFJOTRCLEVBQU8sRUFBUSxJQUNmZ3ZGLEVBQVMsRUFBUSxLQUVqQmwwQyxFQUFpQixFQUFRLEtBQ3pCbTBDLEVBQWMsRUFBUSxLQUN0QkMsRUFBTyxFQUFRLEtBRWZDLEVBQVludkYsRUFBS3JCLEtBQUt3RSxTQUFTeEUsS0FBTXN3RixLQUV6Q0QsRUFBT0csRUFBVyxDQUNqQkYsWUFBYUEsRUFDYm4wQyxlQUFnQkEsRUFDaEJvMEMsS0FBTUEsSUFHUDN3RixFQUFPRCxRQUFVNndGLEcsNkJDYmpCLElBQUlDLEVBQWdCLGtEQUNoQnJxRixFQUFReUgsTUFBTXBNLFVBQVUyRSxNQUN4Qm8yQyxFQUFRajhDLE9BQU9rQixVQUFVeUYsU0FHN0J0SCxFQUFPRCxRQUFVLFNBQWN1RixHQUMzQixJQUFJNUIsRUFBU1gsS0FDYixHQUFzQixtQkFBWFcsR0FKQSxzQkFJeUJrNUMsRUFBTXg4QyxLQUFLc0QsR0FDM0MsTUFBTSxJQUFJRixVQUFVcXRGLEVBQWdCbnRGLEdBeUJ4QyxJQXZCQSxJQUVJb3RGLEVBRkE5dEYsRUFBT3dELEVBQU1wRyxLQUFLNkMsVUFBVyxHQUc3Qjh0RixFQUFTLFdBQ1QsR0FBSWh1RixnQkFBZ0IrdEYsRUFBTyxDQUN2QixJQUFJdjJELEVBQVM3MkIsRUFBT1IsTUFDaEJILEtBQ0FDLEVBQUsrSixPQUFPdkcsRUFBTXBHLEtBQUs2QyxhQUUzQixPQUFJdEMsT0FBTzQ1QixLQUFZQSxFQUNaQSxFQUVKeDNCLEtBRVAsT0FBT1csRUFBT1IsTUFDVm9DLEVBQ0F0QyxFQUFLK0osT0FBT3ZHLEVBQU1wRyxLQUFLNkMsY0FLL0IrdEYsRUFBY2htRixLQUFLdUMsSUFBSSxFQUFHN0osRUFBT0UsT0FBU1osRUFBS1ksUUFDL0NxdEYsRUFBWSxHQUNQaHhGLEVBQUksRUFBR0EsRUFBSSt3RixFQUFhL3dGLElBQzdCZ3hGLEVBQVU1bUYsS0FBSyxJQUFNcEssR0FLekIsR0FGQTZ3RixFQUFRbHNGLFNBQVMsU0FBVSxvQkFBc0Jxc0YsRUFBVXhqRixLQUFLLEtBQU8sNENBQS9EN0ksQ0FBNEdtc0YsR0FFaEhydEYsRUFBTzdCLFVBQVcsQ0FDbEIsSUFBSXF2RixFQUFRLGFBQ1pBLEVBQU1ydkYsVUFBWTZCLEVBQU83QixVQUN6Qml2RixFQUFNanZGLFVBQVksSUFBSXF2RixFQUN0QkEsRUFBTXJ2RixVQUFZLEtBR3RCLE9BQU9pdkYsSSw2QkNoRFgsSUFBSXRxRixFQUFReUgsTUFBTXBNLFVBQVUyRSxNQUN4Qm9sRCxFQUFTLEVBQVEsS0FFakJ1bEMsRUFBV3h3RixPQUFPdVMsS0FDbEJrK0UsRUFBV0QsRUFBVyxTQUFjendGLEdBQUssT0FBT3l3RixFQUFTendGLElBQVEsRUFBUSxLQUV6RTJ3RixFQUFlMXdGLE9BQU91UyxLQUUxQmsrRSxFQUFTVCxLQUFPLFdBQ1hod0YsT0FBT3VTLEtBQ29CLFdBRTdCLElBQUlsUSxFQUFPckMsT0FBT3VTLEtBQUtqUSxXQUN2QixPQUFPRCxHQUFRQSxFQUFLWSxTQUFXWCxVQUFVVyxPQUhiLENBSTNCLEVBQUcsS0FFSmpELE9BQU91UyxLQUFPLFNBQWN2UixHQUMzQixPQUFJaXFELEVBQU9qcUQsR0FDSDB2RixFQUFhN3FGLEVBQU1wRyxLQUFLdUIsSUFFekIwdkYsRUFBYTF2RixLQUl0QmhCLE9BQU91UyxLQUFPaytFLEVBRWYsT0FBT3p3RixPQUFPdVMsTUFBUWsrRSxHQUd2QnB4RixFQUFPRCxRQUFVcXhGLEcsNkJDN0JqQixJQUFJQSxFQUNKLElBQUt6d0YsT0FBT3VTLEtBQU0sQ0FFakIsSUFBSWdpRCxFQUFNdjBELE9BQU9rQixVQUFVQyxlQUN2Qjg2QyxFQUFRajhDLE9BQU9rQixVQUFVeUYsU0FDekJza0QsRUFBUyxFQUFRLEtBQ2pCMGxDLEVBQWUzd0YsT0FBT2tCLFVBQVVxL0UscUJBQ2hDcVEsR0FBa0JELEVBQWFseEYsS0FBSyxDQUFFa0gsU0FBVSxNQUFRLFlBQ3hEa3FGLEVBQWtCRixFQUFhbHhGLE1BQUssY0FBZ0IsYUFDcERxeEYsRUFBWSxDQUNmLFdBQ0EsaUJBQ0EsVUFDQSxpQkFDQSxnQkFDQSx1QkFDQSxlQUVHQyxFQUE2QixTQUFVaHhGLEdBQzFDLElBQUlrUyxFQUFPbFMsRUFBRWdFLFlBQ2IsT0FBT2tPLEdBQVFBLEVBQUsvUSxZQUFjbkIsR0FFL0JpeEYsRUFBZSxDQUNsQkMsbUJBQW1CLEVBQ25CQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsUUFBUSxFQUNSQyxlQUFlLEVBQ2ZDLFNBQVMsRUFDVEMsY0FBYyxFQUNkQyxhQUFhLEVBQ2JDLHdCQUF3QixFQUN4QkMsdUJBQXVCLEVBQ3ZCQyxjQUFjLEVBQ2RDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLFNBQVMsRUFDVEMsYUFBYSxFQUNiQyxZQUFZLEVBQ1pDLFVBQVUsRUFDVkMsVUFBVSxFQUNWQyxPQUFPLEVBQ1BDLGtCQUFrQixFQUNsQkMsb0JBQW9CLEVBQ3BCQyxTQUFTLEdBRU5DLEVBQTRCLFdBRS9CLEdBQXNCLG9CQUFYcnVGLE9BQTBCLE9BQU8sRUFDNUMsSUFBSyxJQUFJcVcsS0FBS3JXLE9BQ2IsSUFDQyxJQUFLNnNGLEVBQWEsSUFBTXgyRSxJQUFNKzVDLEVBQUk5MEQsS0FBSzBFLE9BQVFxVyxJQUFvQixPQUFkclcsT0FBT3FXLElBQW9DLGlCQUFkclcsT0FBT3FXLEdBQ3hGLElBQ0N1MkUsRUFBMkI1c0YsT0FBT3FXLElBQ2pDLE1BQU90VyxHQUNSLE9BQU8sR0FHUixNQUFPQSxHQUNSLE9BQU8sRUFHVCxPQUFPLEVBaEJ1QixHQThCL0J1c0YsRUFBVyxTQUFjenZGLEdBQ3hCLElBQUkrdkIsRUFBc0IsT0FBWC92QixHQUFxQyxpQkFBWEEsRUFDckN3eEIsRUFBb0Msc0JBQXZCeXBCLEVBQU14OEMsS0FBS3VCLEdBQ3hCd2xELEVBQWN5RSxFQUFPanFELEdBQ3JCMHZCLEVBQVdLLEdBQW1DLG9CQUF2QmtyQixFQUFNeDhDLEtBQUt1QixHQUNsQ3l4RixFQUFVLEdBRWQsSUFBSzFoRSxJQUFheUIsSUFBZWcwQixFQUNoQyxNQUFNLElBQUkzakQsVUFBVSxzQ0FHckIsSUFBSTZ2RixFQUFZN0IsR0FBbUJyK0QsRUFDbkMsR0FBSTlCLEdBQVkxdkIsRUFBT2lDLE9BQVMsSUFBTXN4RCxFQUFJOTBELEtBQUt1QixFQUFRLEdBQ3RELElBQUssSUFBSTFCLEVBQUksRUFBR0EsRUFBSTBCLEVBQU9pQyxTQUFVM0QsRUFDcENtekYsRUFBUS9vRixLQUFLcEIsT0FBT2hKLElBSXRCLEdBQUlrbkQsR0FBZXhsRCxFQUFPaUMsT0FBUyxFQUNsQyxJQUFLLElBQUkyRixFQUFJLEVBQUdBLEVBQUk1SCxFQUFPaUMsU0FBVTJGLEVBQ3BDNnBGLEVBQVEvb0YsS0FBS3BCLE9BQU9NLFNBR3JCLElBQUssSUFBSS9JLEtBQVFtQixFQUNWMHhGLEdBQXNCLGNBQVQ3eUYsSUFBeUIwMEQsRUFBSTkwRCxLQUFLdUIsRUFBUW5CLElBQzVENHlGLEVBQVEvb0YsS0FBS3BCLE9BQU96SSxJQUt2QixHQUFJK3dGLEVBR0gsSUFGQSxJQUFJK0IsRUEzQ3FDLFNBQVU1eUYsR0FFcEQsR0FBc0Isb0JBQVhvRSxTQUEyQnF1RixFQUNyQyxPQUFPekIsRUFBMkJoeEYsR0FFbkMsSUFDQyxPQUFPZ3hGLEVBQTJCaHhGLEdBQ2pDLE1BQU9tRSxHQUNSLE9BQU8sR0FtQ2UwdUYsQ0FBcUM1eEYsR0FFbER3WixFQUFJLEVBQUdBLEVBQUlzMkUsRUFBVTd0RixTQUFVdVgsRUFDakNtNEUsR0FBb0MsZ0JBQWpCN0IsRUFBVXQyRSxLQUF5Qis1QyxFQUFJOTBELEtBQUt1QixFQUFROHZGLEVBQVV0MkUsS0FDdEZpNEUsRUFBUS9vRixLQUFLb25GLEVBQVV0MkUsSUFJMUIsT0FBT2k0RSxHQUdUcHpGLEVBQU9ELFFBQVVxeEYsRyw2QkN2SGpCLElBQUlvQyxFQUFlLEVBQVEsS0FFdkJDLEVBQVVELEVBQWEsWUFDdkJFLEVBQWFGLEVBQWEsZUFDMUJHLEVBQVVILEVBQWEsWUFFdkJJLEVBQWUsRUFBUSxLQUN2QkMsRUFBUyxFQUFRLEtBQ2pCQyxFQUFZLEVBQVEsS0FFcEJqOEMsRUFBTyxFQUFRLEtBQ2Z2OUIsRUFBTSxFQUFRLEtBRWR5NUUsRUFBYSxFQUFRLElBQ3JCQyxFQUFjLEVBQVEsS0FFdEI5K0IsRUFBTSxFQUFRLEtBR2QrK0IsRUFBTSxDQUNUQyxZQUFhRixFQUViRyxVQUFXLFNBQW1CanpGLEdBQzdCLFFBQVNBLEdBRVZrekYsU0FBVSxTQUFrQmx6RixHQUMzQixPQUFRQSxHQUVUbXpGLFVBQVcsU0FBbUJuekYsR0FDN0IsSUFBSTJYLEVBQVM5VixLQUFLcXhGLFNBQVNsekYsR0FDM0IsT0FBSTJ5RixFQUFPaDdFLEdBQWtCLEVBQ2QsSUFBWEEsR0FBaUJpN0UsRUFBVWo3RSxHQUN4QmcvQixFQUFLaC9CLEdBQVU3TixLQUFLeUYsTUFBTXpGLEtBQUs0UixJQUFJL0QsSUFET0EsR0FHbER5N0UsUUFBUyxTQUFpQnpuRixHQUN6QixPQUFPOUosS0FBS3F4RixTQUFTdm5GLElBQU0sR0FFNUIwbkYsU0FBVSxTQUFrQjFuRixHQUMzQixPQUFPOUosS0FBS3F4RixTQUFTdm5GLEtBQU8sR0FFN0IybkYsU0FBVSxTQUFrQnR6RixHQUMzQixJQUFJMlgsRUFBUzlWLEtBQUtxeEYsU0FBU2x6RixHQUMzQixHQUFJMnlGLEVBQU9oN0UsSUFBc0IsSUFBWEEsSUFBaUJpN0UsRUFBVWo3RSxHQUFXLE9BQU8sRUFDbkUsSUFBSTQ3RSxFQUFTNThDLEVBQUtoL0IsR0FBVTdOLEtBQUt5RixNQUFNekYsS0FBSzRSLElBQUkvRCxJQUNoRCxPQUFPeUIsRUFBSW02RSxFQUFRLFFBRXBCdm9DLFNBQVUsU0FBa0JockQsR0FDM0IsT0FBT3l5RixFQUFRenlGLElBRWhCd3pGLFNBQVUsU0FBa0J4ekYsR0FFM0IsT0FEQTZCLEtBQUtvcEQscUJBQXFCanJELEdBQ25CdXlGLEVBQVF2eUYsSUFFaEJpckQscUJBQXNCLFNBQThCanJELEVBQU95ekYsR0FFMUQsR0FBYSxNQUFUenpGLEVBQ0gsTUFBTSxJQUFJd3lGLEVBQVdpQixHQUFjLHlCQUEyQnp6RixHQUUvRCxPQUFPQSxHQUVSNnlGLFdBQVlBLEVBQ1phLFVBQVcsU0FBbUIvbkYsRUFBR0MsR0FDaEMsT0FBSUQsSUFBTUMsRUFDQyxJQUFORCxHQUFrQixFQUFJQSxHQUFNLEVBQUlDLEVBRzlCK21GLEVBQU9obkYsSUFBTWduRixFQUFPL21GLElBSTVCK25GLEtBQU0sU0FBY2hvRixHQUNuQixPQUFVLE9BQU5BLEVBQ0ksWUFFUyxJQUFOQSxFQUNILFlBRVMsbUJBQU5BLEdBQWlDLGlCQUFOQSxFQUM5QixTQUVTLGlCQUFOQSxFQUNILFNBRVMsa0JBQU5BLEVBQ0gsVUFFUyxpQkFBTkEsRUFDSCxjQURSLEdBTURpb0YscUJBQXNCLFNBQThCQyxHQUNuRCxHQUF3QixXQUFwQmh5RixLQUFLOHhGLEtBQUtFLEdBQ2IsT0FBTyxFQUVSLElBQUlDLEVBQVUsQ0FDYixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixHQUdqQixJQUFLLElBQUl4ekYsS0FBT3V6RixFQUNmLEdBQUk3L0IsRUFBSTYvQixFQUFNdnpGLEtBQVN3ekYsRUFBUXh6RixHQUM5QixPQUFPLEVBSVQsSUFBSXl6RixFQUFTLy9CLEVBQUk2L0IsRUFBTSxhQUNuQkcsRUFBYWhnQyxFQUFJNi9CLEVBQU0sWUFBYzcvQixFQUFJNi9CLEVBQU0sV0FDbkQsR0FBSUUsR0FBVUMsRUFDYixNQUFNLElBQUl4QixFQUFXLHNFQUV0QixPQUFPLEdBSVJ5QixxQkFBc0IsU0FBOEJKLEdBQ25ELFlBQW9CLElBQVRBLElBSVhuQixFQUFhN3dGLEtBQU0sc0JBQXVCLE9BQVFneUYsTUFFN0M3L0IsRUFBSTYvQixFQUFNLGFBQWU3L0IsRUFBSTYvQixFQUFNLGNBUXpDSyxpQkFBa0IsU0FBMEJMLEdBQzNDLFlBQW9CLElBQVRBLElBSVhuQixFQUFhN3dGLEtBQU0sc0JBQXVCLE9BQVFneUYsTUFFN0M3L0IsRUFBSTYvQixFQUFNLGVBQWlCNy9CLEVBQUk2L0IsRUFBTSxtQkFRM0NNLG9CQUFxQixTQUE2Qk4sR0FDakQsWUFBb0IsSUFBVEEsSUFJWG5CLEVBQWE3d0YsS0FBTSxzQkFBdUIsT0FBUWd5RixJQUU3Q2h5RixLQUFLb3lGLHFCQUFxQkosS0FBVWh5RixLQUFLcXlGLGlCQUFpQkwsS0FRaEVPLHVCQUF3QixTQUFnQ1AsR0FDdkQsUUFBb0IsSUFBVEEsRUFDVixPQUFPQSxFQUtSLEdBRkFuQixFQUFhN3dGLEtBQU0sc0JBQXVCLE9BQVFneUYsR0FFOUNoeUYsS0FBS3F5RixpQkFBaUJMLEdBQ3pCLE1BQU8sQ0FDTjd6RixNQUFPNnpGLEVBQUssYUFDWmh4RixXQUFZZ3hGLEVBQUssZ0JBQ2pCbDBGLGFBQWNrMEYsRUFBSyxrQkFDbkJqeEYsZUFBZ0JpeEYsRUFBSyxxQkFFaEIsR0FBSWh5RixLQUFLb3lGLHFCQUFxQkosR0FDcEMsTUFBTyxDQUNOajBGLElBQUtpMEYsRUFBSyxXQUNWbmpGLElBQUttakYsRUFBSyxXQUNWbDBGLGFBQWNrMEYsRUFBSyxrQkFDbkJqeEYsZUFBZ0JpeEYsRUFBSyxxQkFHdEIsTUFBTSxJQUFJckIsRUFBVyxxRkFLdkI2QixxQkFBc0IsU0FBOEJDLEdBQ25ELEdBQXVCLFdBQW5CenlGLEtBQUs4eEYsS0FBS1csR0FDYixNQUFNLElBQUk5QixFQUFXLDJDQUd0QixJQUFJOStELEVBQU8sR0FhWCxHQVpJc2dDLEVBQUlzZ0MsRUFBSyxnQkFDWjVnRSxFQUFLLGtCQUFvQjd4QixLQUFLb3hGLFVBQVVxQixFQUFJMzBGLGFBRXpDcTBELEVBQUlzZ0MsRUFBSyxrQkFDWjVnRSxFQUFLLG9CQUFzQjd4QixLQUFLb3hGLFVBQVVxQixFQUFJMXhGLGVBRTNDb3hELEVBQUlzZ0MsRUFBSyxXQUNaNWdFLEVBQUssYUFBZTRnRSxFQUFJdDBGLE9BRXJCZzBELEVBQUlzZ0MsRUFBSyxjQUNaNWdFLEVBQUssZ0JBQWtCN3hCLEtBQUtveEYsVUFBVXFCLEVBQUl6eEYsV0FFdkNteEQsRUFBSXNnQyxFQUFLLE9BQVEsQ0FDcEIsSUFBSS8wRixFQUFTKzBGLEVBQUkxMEYsSUFDakIsUUFBc0IsSUFBWEwsSUFBMkJzQyxLQUFLZ3hGLFdBQVd0ekYsR0FDckQsTUFBTSxJQUFJK0MsVUFBVSw2QkFFckJveEIsRUFBSyxXQUFhbjBCLEVBRW5CLEdBQUl5MEQsRUFBSXNnQyxFQUFLLE9BQVEsQ0FDcEIsSUFBSTE3QyxFQUFTMDdDLEVBQUk1akYsSUFDakIsUUFBc0IsSUFBWGtvQyxJQUEyQi8yQyxLQUFLZ3hGLFdBQVdqNkMsR0FDckQsTUFBTSxJQUFJNDVDLEVBQVcsNkJBRXRCOStELEVBQUssV0FBYWtsQixFQUduQixJQUFLb2IsRUFBSXRnQyxFQUFNLFlBQWNzZ0MsRUFBSXRnQyxFQUFNLGNBQWdCc2dDLEVBQUl0Z0MsRUFBTSxjQUFnQnNnQyxFQUFJdGdDLEVBQU0saUJBQzFGLE1BQU0sSUFBSTgrRCxFQUFXLGdHQUV0QixPQUFPOStELElBSVQ1MEIsRUFBT0QsUUFBVWswRixHLDZCQ3hPakIsSUFBSVQsRUFBZSxFQUFRLEtBRXZCRSxFQUFhRixFQUFhLGVBQzFCaUMsRUFBZWpDLEVBQWEsaUJBRTVCdCtCLEVBQU0sRUFBUSxLQUVkdkosRUFBYSxDQUVmLHNCQUF1QixTQUE4QkcsRUFBSWlwQyxHQUN2RCxHQUFzQixXQUFsQmpwQyxFQUFHK29DLEtBQUtFLEdBQ1YsT0FBTyxFQUVULElBQUlDLEVBQVUsQ0FDWixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixHQUdsQixJQUFLLElBQUl4ekYsS0FBT3V6RixFQUNkLEdBQUk3L0IsRUFBSTYvQixFQUFNdnpGLEtBQVN3ekYsRUFBUXh6RixHQUM3QixPQUFPLEVBSVgsSUFBSXl6RixFQUFTLy9CLEVBQUk2L0IsRUFBTSxhQUNuQkcsRUFBYWhnQyxFQUFJNi9CLEVBQU0sWUFBYzcvQixFQUFJNi9CLEVBQU0sV0FDbkQsR0FBSUUsR0FBVUMsRUFDWixNQUFNLElBQUl4QixFQUFXLHNFQUV2QixPQUFPLElBSVgxekYsRUFBT0QsUUFBVSxTQUFzQityRCxFQUFJNHBDLEVBQVlDLEVBQWN6MEYsR0FDbkUsSUFBSXdxRCxFQUFZQyxFQUFXK3BDLEdBQzNCLEdBQXlCLG1CQUFkaHFDLEVBQ1QsTUFBTSxJQUFJK3BDLEVBQWEsd0JBQTBCQyxHQUVuRCxJQUFLaHFDLEVBQVVJLEVBQUk1cUQsR0FDakIsTUFBTSxJQUFJd3lGLEVBQVdpQyxFQUFlLGNBQWdCRCxHQUV0RHIvRSxRQUFRNmYsSUFBSXcxQixFQUFVSSxFQUFJNXFELEdBQVFBLEssY0MvQ3BDbEIsRUFBT0QsUUFBVTJKLE9BQU9qQixPQUFTLFNBQWVtRSxHQUMvQyxPQUFPQSxHQUFNQSxJLGNDRGQsSUFBSWluRixFQUFTbnFGLE9BQU9qQixPQUFTLFNBQVVtRSxHQUFLLE9BQU9BLEdBQU1BLEdBRXpENU0sRUFBT0QsUUFBVTJKLE9BQU9xRSxVQUFZLFNBQVVsQixHQUFLLE1BQW9CLGlCQUFOQSxJQUFtQmduRixFQUFPaG5GLElBQU1BLElBQU1rRixLQUFZbEYsS0FBT2tGLE0sY0NGMUgvUixFQUFPRCxRQUFVLFNBQWM4WSxHQUM5QixPQUFPQSxHQUFVLEVBQUksR0FBSyxJLGNDRDNCN1ksRUFBT0QsUUFBVSxTQUFhOFksRUFBUSs4RSxHQUNyQyxJQUFJQyxFQUFTaDlFLEVBQVMrOEUsRUFDdEIsT0FBTzVxRixLQUFLeUYsTUFBTW9sRixHQUFVLEVBQUlBLEVBQVNBLEVBQVNELEssNkJDQW5ELElBQUloNUMsRUFBUWo4QyxPQUFPa0IsVUFBVXlGLFNBRXpCa3VCLEVBQWMsRUFBUSxLQUV0QnNnRSxFQUFhLEVBQVEsSUFHckJDLEVBQ2lCLFNBQVVDLEdBQzdCLElBQUlDLEVBT0osSUFMQ0EsRUFER2h6RixVQUFVVyxPQUFTLEVBQ1RYLFVBQVUsR0FFUSxrQkFBbEIyNUMsRUFBTXg4QyxLQUFLNDFGLEdBQXlCL3NGLE9BQVNTLFVBR3hDVCxRQUFVZ3RGLElBQWV2c0YsT0FBUSxDQUNuRCxJQUNJeEksRUFBT2pCLEVBRFBpMkYsRUFBVUQsSUFBZWh0RixPQUFTLENBQUMsV0FBWSxXQUFhLENBQUMsVUFBVyxZQUU1RSxJQUFLaEosRUFBSSxFQUFHQSxFQUFJaTJGLEVBQVF0eUYsU0FBVTNELEVBQ2pDLEdBQUk2MUYsRUFBV0UsRUFBRUUsRUFBUWoyRixPQUN4QmlCLEVBQVE4MEYsRUFBRUUsRUFBUWoyRixNQUNkdTFCLEVBQVl0MEIsSUFDZixPQUFPQSxFQUlWLE1BQU0sSUFBSXNDLFVBQVUsb0JBRXJCLE1BQU0sSUFBSUEsVUFBVSwyQ0FLdEJ4RCxFQUFPRCxRQUFVLFNBQXFCK3RCLEdBQ3JDLE9BQUkwSCxFQUFZMUgsR0FDUkEsRUFFSjdxQixVQUFVVyxPQUFTLEVBQ2ZteUYsRUFBcUNqb0UsRUFBTzdxQixVQUFVLElBRXZEOHlGLEVBQXFDam9FLEssY0MzQzdDOXRCLEVBQU9ELFFBQVUsU0FBcUJtQixHQUNyQyxPQUFpQixPQUFWQSxHQUFvQyxtQkFBVkEsR0FBeUMsaUJBQVZBLEksNkJDQ2pFLElBQUl1dkYsRUFBUyxFQUFRLEtBQ2pCQyxFQUFjLEVBQVEsS0FFMUIxd0YsRUFBT0QsUUFBVSxXQUNoQixJQUFJbzJGLEVBQVd6RixJQUVmLE9BREFELEVBQU94bkYsT0FBT3BILFVBQVcsQ0FBRXFRLEtBQU1pa0YsR0FBWSxDQUFFamtGLEtBQU0sV0FBYyxPQUFPakosT0FBT3BILFVBQVVxUSxPQUFTaWtGLEtBQzdGQSxJLDZCQ05SLElBQUlMLEVBQWEsRUFBUSxJQUVyQmw1QyxFQUFRajhDLE9BQU9rQixVQUFVeUYsU0FDekJ4RixFQUFpQm5CLE9BQU9rQixVQUFVQyxlQUVsQ3F1RixFQUFlLFNBQXNCcnFGLEVBQU8yTSxFQUFVbUMsR0FDdEQsSUFBSyxJQUFJM1UsRUFBSSxFQUFHMkcsRUFBTWQsRUFBTWxDLE9BQVEzRCxFQUFJMkcsRUFBSzNHLElBQ3JDNkIsRUFBZTFCLEtBQUswRixFQUFPN0YsS0FDWCxNQUFaMlUsRUFDQW5DLEVBQVMzTSxFQUFNN0YsR0FBSUEsRUFBRzZGLEdBRXRCMk0sRUFBU3JTLEtBQUt3VSxFQUFVOU8sRUFBTTdGLEdBQUlBLEVBQUc2RixLQU1qRHN3RixFQUFnQixTQUF1Qmp3RixFQUFRc00sRUFBVW1DLEdBQ3pELElBQUssSUFBSTNVLEVBQUksRUFBRzJHLEVBQU1ULEVBQU92QyxPQUFRM0QsRUFBSTJHLEVBQUszRyxJQUUxQixNQUFaMlUsRUFDQW5DLEVBQVN0TSxFQUFPKzFCLE9BQU9qOEIsR0FBSUEsRUFBR2tHLEdBRTlCc00sRUFBU3JTLEtBQUt3VSxFQUFVek8sRUFBTysxQixPQUFPajhCLEdBQUlBLEVBQUdrRyxJQUtyRGt3RixFQUFnQixTQUF1QjEwRixFQUFROFEsRUFBVW1DLEdBQ3pELElBQUssSUFBSXVHLEtBQUt4WixFQUNORyxFQUFlMUIsS0FBS3VCLEVBQVF3WixLQUNaLE1BQVp2RyxFQUNBbkMsRUFBUzlRLEVBQU93WixHQUFJQSxFQUFHeFosR0FFdkI4USxFQUFTclMsS0FBS3dVLEVBQVVqVCxFQUFPd1osR0FBSUEsRUFBR3haLEtBeUJ0RDNCLEVBQU9ELFFBbkJPLFNBQWlCaU4sRUFBTXlGLEVBQVU2akYsR0FDM0MsSUFBS1IsRUFBV3JqRixHQUNaLE1BQU0sSUFBSWpQLFVBQVUsK0JBR3hCLElBQUlvUixFQUNBM1IsVUFBVVcsUUFBVSxJQUNwQmdSLEVBQVcwaEYsR0FHVSxtQkFBckIxNUMsRUFBTXg4QyxLQUFLNE0sR0FDWG1qRixFQUFhbmpGLEVBQU15RixFQUFVbUMsR0FDTixpQkFBVDVILEVBQ2RvcEYsRUFBY3BwRixFQUFNeUYsRUFBVW1DLEdBRTlCeWhGLEVBQWNycEYsRUFBTXlGLEVBQVVtQyxLLGdDQ3pEdEM1VSxFQUFPRCxRQUFVLEVBQVEsTSxnQkNBekIsSUFBSXNULEVBQVcsRUFBUSxJQUVuQjQvQyxFQUFlLFNBQVN6N0MsRUFBUzNGLEVBQU0zSyxHQUN6QyxLQUFNbkUsZ0JBQWdCa3dELEdBQ3BCLE9BQU8sSUFBSUEsRUFBYXo3QyxFQUFTM0YsRUFBTTNLLEdBR3pDbkUsS0FBS3lVLFFBQVVBLEVBQ2Z6VSxLQUFLOE8sS0FBT0EsT0FFUSxJQUFUM0ssSUFDVG5FLEtBQUttRSxLQUFPQSxJQUloQm1NLEVBQVM0L0MsRUFBY3Z0RCxPQUV2QixJQUFJNndGLEVBQWEsV0FDZixLQUFNeHpGLGdCQUFnQnd6RixHQUNwQixPQUFPLElBQUlBLEVBR2J0akMsRUFBYTd5RCxLQUFLMkMsS0FBTSxlQUFnQixRQUcxQ3NRLEVBQVNrakYsRUFBWXRqQyxHQUVyQixJQUFJdWpDLEVBQWlCLFdBQ25CLEtBQU16ekYsZ0JBQWdCeXpGLEdBQ3BCLE9BQU8sSUFBSUEsRUFHYnZqQyxFQUFhN3lELEtBQUsyQyxLQUFNLG1CQUFvQixRQUc5Q3NRLEVBQVNtakYsRUFBZ0J2akMsR0FFekIsSUFBSVksRUFBaUIsV0FDbkIsS0FBTTl3RCxnQkFBZ0I4d0QsR0FDcEIsT0FBTyxJQUFJQSxFQUdiWixFQUFhN3lELEtBQUsyQyxLQUFNLG9CQUFxQixRQUcvQ3NRLEVBQVN3Z0QsRUFBZ0JaLEdBRXpCLElBQUl3akMsRUFBZ0IsV0FDbEIsS0FBTTF6RixnQkFBZ0IwekYsR0FDcEIsT0FBTyxJQUFJQSxFQUdieGpDLEVBQWE3eUQsS0FBSzJDLEtBQU0sa0JBQW1CLFFBRzdDc1EsRUFBU29qRixFQUFleGpDLEdBRXhCLElBQUlVLEVBQWdCLFNBQVN4d0QsR0FDM0IsSUFBSXFVLEVBRUosS0FBTXpVLGdCQUFnQjR3RCxHQUNwQixPQUFPLElBQUlBLEVBQWN4d0QsR0FJekJxVSxFQURFclUsR0FBT0EsRUFBSXFVLFFBQ0hyVSxFQUFJcVUsUUFFSixpQkFHWnk3QyxFQUFhN3lELEtBQUsyQyxLQUFNeVUsR0FBVSxRQUdwQ25FLEVBQVNzZ0QsRUFBZVYsR0FFeEIsSUFBSXlqQyxFQUFjLFNBQVM3a0YsR0FDekIsR0FBSUEsR0FBUSxPQUFTQSxHQUFRLEtBQzNCLE1BQU0sSUFBSW5NLE1BQU0sc0JBR2xCLEtBQU0zQyxnQkFBZ0IyekYsR0FDcEIsT0FBTyxJQUFJQSxFQUFZN2tGLEdBR3pCb2hELEVBQWE3eUQsS0FBSzJDLEtBQU0sZUFBZ0I4TyxJQUcxQ3dCLEVBQVNxakYsRUFBYXpqQyxHQUV0QkEsRUFBYXNqQyxXQUFhQSxFQUMxQnRqQyxFQUFhdWpDLGVBQWlCQSxFQUM5QnZqQyxFQUFhWSxlQUFpQkEsRUFDOUJaLEVBQWF3akMsY0FBZ0JBLEVBQzdCeGpDLEVBQWFVLGNBQWdCQSxFQUM3QlYsRUFBYXlqQyxZQUFjQSxFQUUzQjEyRixFQUFPRCxRQUFVa3pELEcsZ0JDN0ZqQixJQUFJN0UsRUFBVSxFQUFRLEtBQ2xCdW9DLEVBQTZCLEVBQVEsS0FDckMzbUMsRUFBMkIsRUFBUSxLQUNuQzRtQyxFQUFlLEVBQVEsS0FFM0I1MkYsRUFBT0QsUUFBUXF1RCxRQUFVQSxFQUN6QnB1RCxFQUFPRCxRQUFRNjJGLGFBQWVBLEVBQzlCNTJGLEVBQU9ELFFBQVE4MkYsa0JBQW9CN21DLEVBQ25DaHdELEVBQU9ELFFBQVErMkYsb0JBQXNCSCxFQUdyQzMyRixFQUFPRCxRQUFRZzNGLFVBQVksU0FBU3JqRixHQUNoQyxPQUFPLElBQUkwNkMsRUFBUSxJQUFJNEIsRUFBeUJ0OEMsS0FJcEQxVCxFQUFPRCxRQUFRbTBELFlBQWMsU0FBU3hnRCxHQUNsQyxPQUFPLElBQUkwNkMsRUFBUSxJQUFJdW9DLEVBQTJCampGLEtBSXREMVQsRUFBT0QsUUFBUUssS0FBTyxTQUFTeUMsRUFBSW0wRixFQUFPMTBELEdBQ3RDLElBQUl0L0IsRUFBT2lMLE1BQU1wTSxVQUFVMkUsTUFBTXBHLEtBQUs2QyxXQUl0QyxPQUhBSixFQUFLRyxFQUFLLEdBQ1ZnMEYsRUFBUWgwRixFQUFLd0QsTUFBTSxFQUFHeEQsRUFBS1ksT0FBUyxHQUNwQzArQixFQUFXdC9CLEVBQUtBLEVBQUtZLE9BQVMsR0FDdkIsSUFBSWd6RixFQUFhL3pGLEVBQUltMEYsRUFBTzEwRCxLLGdCQ3hCdkMsSUFBSWx2QixFQUFPLEVBQVEsSUFFZjZqRixFQUFTajNGLEVBQU9ELFFBQVUsRUFBUSxLQUV0QyxTQUFTbTNGLEVBQVVDLEVBQXNCdHJDLEVBQVF1ckMsRUFBZUMsR0FDNURELEVBQWdCQSxHQUFpQixHQUNqQyxJQUNJMzBGLEVBQVEsSUFBSTAwRixFQURGL2pGLEVBQUsrZCxPQUFPanVCLE1BQU1ILEtBQU0sQ0FBQ3EwRixHQUFlcnFGLE9BQU9zcUYsS0FHN0QsTUFEQTN4RixNQUFNd2lELGtCQUFrQnpsRCxFQUFPb3BELEdBQ3pCcHBELEVBR1YsU0FBUzYwRixFQUFrQnpyQyxFQUFRcjBDLEVBQVM2L0UsR0FDeENILEVBQVVELEVBQU9NLHFCQUFzQjFyQyxFQUFRcjBDLEVBQVM2L0UsR0FHNUQsU0FBU0csRUFBZTNyQyxFQUFRcjBDLEVBQVM2L0UsR0FDckNILEVBQVVELEVBQU9RLGtCQUFtQjVyQyxFQUFRcjBDLEVBQVM2L0UsR0F3Q3pELFNBQVNLLEVBQU94MkYsR0FDWixJQUFJYyxTQUFXZCxFQUNmLEdBQVMsVUFBTGMsRUFBZSxDQUNmLElBQUtkLEVBQ0QsTUFBTyxPQUNKLEdBQUlBLGFBQWlCK00sTUFDeEIsTUFBTyxRQUdmLE9BQU9qTSxFQUdYLFNBQVMyMUYsRUFBVUMsR0FDZixPQUFPLFNBQVMxMkYsRUFBT3NXLEdBQ25CLElBQUl2USxFQUFPeXdGLEVBQU94MkYsR0FFbEIsR0FBSStGLEdBQVEyd0YsRUFDUixPQUFPMTJGLEVBR1hvMkYsRUFBa0JyMEYsVUFBVTRvRCxPQUFRcjBDLEdBQ2hDLGFBQWVvZ0YsRUFBUyxjQUFnQjN3RixFQUFPLEtBQy9DZ0gsTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFVBQVcsS0EzRGxEakQsRUFBT0QsUUFBUWl2RCxjQUFnQixTQUFTOXRELEVBQU9zVyxHQUN0Q3RXLEdBQ0RvMkYsRUFBa0JyMEYsVUFBVTRvRCxPQUFRcjBDLEVBQ2hDdkosTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFVBQVcsS0FJbERqRCxFQUFPRCxRQUFRa3ZELFdBQWEsU0FBUy90RCxFQUFPc1csR0FDbkN0VyxHQUNEczJGLEVBQWV2MEYsVUFBVTRvRCxPQUFRcjBDLEVBQzdCdkosTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFVBQVcsS0FJbERqRCxFQUFPRCxRQUFRODNGLFdBQWEsU0FBUzMyRixFQUFPc1csR0FDeEMsUUFBY3BVLElBQVZsQyxFQUNBLE9BQU9BLEVBR1hvMkYsRUFBa0JyMEYsVUFBVTRvRCxPQUFRcjBDLEdBQ2hDLGtEQUNBdkosTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFVBQVcsS0FHOUNqRCxFQUFPRCxRQUFRKzNGLHFCQUF1QixTQUFTNTJGLEVBQU9zVyxHQUVsRCxHQUFhLE1BQVR0VyxFQUNBLE9BQU9BLEVBR1hvMkYsRUFBa0JyMEYsVUFBVTRvRCxPQUFRcjBDLEdBQ2hDLHNEQUNBa2dGLEVBQU94MkYsR0FBUyxLQUFNK00sTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFVBQVcsS0ErQnBFakQsRUFBT0QsUUFBUWc0RixjQUFnQkosRUFBVSxVQUN6QzMzRixFQUFPRCxRQUFRaTRGLGFBQWVMLEVBQVUsU0FDeEMzM0YsRUFBT0QsUUFBUWs0RixjQUFnQk4sRUFBVSxVQUN6QzMzRixFQUFPRCxRQUFRbTRGLGVBQWlCUCxFQUFVLFdBQzFDMzNGLEVBQU9ELFFBQVFvNEYsZ0JBQWtCUixFQUFVLFlBQzNDMzNGLEVBQU9ELFFBQVFxNEYsY0FBZ0JULEVBQVUsVyxnQkN4RnpDLElBQUl2a0YsRUFBTyxFQUFRLElBRW5CLFNBQVNta0YsRUFBcUIvL0UsR0FDMUI5UixNQUFNdEYsS0FBSzJDLEtBQU15VSxHQUNqQnpVLEtBQUt5VSxRQUFVQSxFQU1uQixTQUFTaWdGLEVBQWtCamdGLEdBQ3ZCOVIsTUFBTXRGLEtBQUsyQyxLQUFNeVUsR0FDakJ6VSxLQUFLeVUsUUFBVUEsRUFObkJwRSxFQUFLQyxTQUFTa2tGLEVBQXNCN3hGLE9BRXBDNnhGLEVBQXFCMTFGLFVBQVVyQixLQUFPLHVCQU10QzRTLEVBQUtDLFNBQVNva0YsRUFBbUIveEYsT0FFakMreEYsRUFBa0I1MUYsVUFBVXJCLEtBQU8sb0JBRW5DUixFQUFPRCxRQUFRMDNGLGtCQUFvQkEsRUFDbkN6M0YsRUFBT0QsUUFBUXczRixxQkFBdUJBLEcsZ0JDckJ0QyxJQUFJbmtGLEVBQU8sRUFBUSxJQUNmKzZDLEVBQVUsRUFBUSxJQUVsQmdCLEVBQWtCLEVBQVEsS0FHOUIsU0FBU3duQyxFQUEyQmpqRixHQUNoQ3k3QyxFQUFnQi91RCxLQUFLMkMsS0FBTTJRLEdBQzNCM1EsS0FBSzByRCxjQUFnQixFQUNyQjFyRCxLQUFLa3RELGtCQUFvQmx0RCxLQUFLNHNELGtCQUM5QjVzRCxLQUFLczFGLFFBQVUxQixFQUEyQjJCLGVBRXRDNWtGLFFBQThCdFEsSUFBbkJzUSxFQUFRNmtGLFNBQ25CcHFDLEVBQVFhLGNBQWN0N0MsRUFBUTZrRixPQUFTLEVBQ25DLDBEQUNBN2tGLEVBQVE2a0YsUUFDWngxRixLQUFLczFGLFFBQVUza0YsRUFBUTZrRixRQUcvQm5sRixFQUFLQyxTQUFTc2pGLEVBQTRCeG5DLEdBSzFDd25DLEVBQTJCMkIsZUFBaUIsRUFFNUMzQixFQUEyQjkwRixVQUFVZ3VELE1BQVEsV0FHekMsT0FGQTlzRCxLQUFLMHJELGNBQWdCempELEtBQUtDLElBQUlsSSxLQUFLa3RELGtCQUFtQmx0RCxLQUFLMnNELGVBQzNEM3NELEtBQUtrdEQsa0JBQW9CbHRELEtBQUswckQsY0FBZ0IxckQsS0FBS3MxRixRQUM1Q3QxRixLQUFLMHJELGVBR2hCa29DLEVBQTJCOTBGLFVBQVVrdUQsT0FBUyxXQUMxQ2h0RCxLQUFLMHJELGNBQWdCLEVBQ3JCMXJELEtBQUtrdEQsa0JBQW9CbHRELEtBQUs0c0QsbUJBR2xDM3ZELEVBQU9ELFFBQVU0MkYsRyxnQkNyQ2pCLElBQUloaEYsRUFBUyxFQUFRLElBQ2pCdzRDLEVBQVUsRUFBUSxJQUNsQi82QyxFQUFPLEVBQVEsSUFFZmc3QyxFQUFVLEVBQVEsS0FDbEI0QixFQUEyQixFQUFRLEtBR3ZDLFNBQVM0bUMsRUFBYS96RixFQUFJRyxFQUFNcy9CLEdBQzVCM3NCLEVBQU9WLGFBQWE3VSxLQUFLMkMsTUFFekJvckQsRUFBUWdxQyxnQkFBZ0J0MUYsRUFBSSxpQ0FDNUJzckQsRUFBUTZwQyxhQUFhaDFGLEVBQU0saUNBQzNCbXJELEVBQVFncUMsZ0JBQWdCNzFELEVBQVUsdUNBRWxDdi9CLEtBQUt5MUYsVUFBWTMxRixFQUNqQkUsS0FBSzAxRixXQUFhejFGLEVBQ2xCRCxLQUFLMjFGLFVBQVlwMkQsRUFDakJ2L0IsS0FBSzQxRixZQUFjLEdBQ25CNTFGLEtBQUs2MUYsWUFBYyxFQUVuQjcxRixLQUFLODFGLFNBQVcsS0FDaEI5MUYsS0FBSysxRixVQUFZLEtBQ2pCLzFGLEtBQUtnMkYsWUFBYyxFQUNuQmgyRixLQUFLaTJGLGdCQUFrQnBDLEVBQWFxQyx5QkFFcENsMkYsS0FBS20yRixPQUFTdEMsRUFBYXVDLE9BQU9DLFFBRXRDaG1GLEVBQUtDLFNBQVN1akYsRUFBY2poRixFQUFPVixjQUduQzJoRixFQUFhdUMsT0FBUyxDQUVsQkMsUUFBUyxFQUVUQyxRQUFTLEVBR1RDLFVBQVcsRUFFWEMsUUFBUyxHQUliM0MsRUFBYXFDLHlCQUEyQixTQUFTOTFGLEdBQy9DLE9BQU8sR0FJVHl6RixFQUFhLzBGLFVBQVUyM0YsVUFBWSxXQUMvQixPQUFPejJGLEtBQUttMkYsUUFBVXRDLEVBQWF1QyxPQUFPQyxTQUk5Q3hDLEVBQWEvMEYsVUFBVXl3RCxVQUFZLFdBQy9CLE9BQU92dkQsS0FBS20yRixRQUFVdEMsRUFBYXVDLE9BQU9FLFNBSTlDekMsRUFBYS8wRixVQUFVNDNGLFlBQWMsV0FDakMsT0FBTzEyRixLQUFLbTJGLFFBQVV0QyxFQUFhdUMsT0FBT0csV0FJOUMxQyxFQUFhLzBGLFVBQVU2M0YsVUFBWSxXQUMvQixPQUFPMzJGLEtBQUttMkYsUUFBVXRDLEVBQWF1QyxPQUFPSSxTQUs5QzNDLEVBQWEvMEYsVUFBVTgzRixZQUFjLFNBQVNDLEdBRzFDLE9BRkF6ckMsRUFBUWMsV0FBV2xzRCxLQUFLeTJGLFlBQWEsNkJBQ3JDejJGLEtBQUsrMUYsVUFBWWMsRUFDVjcyRixNQU9YNnpGLEVBQWEvMEYsVUFBVWc0RixRQUFVLFNBQVNDLEdBR3RDLE9BRkEzckMsRUFBUWMsV0FBV2xzRCxLQUFLeTJGLFlBQWEsNkJBQ3JDejJGLEtBQUtpMkYsZ0JBQWtCYyxFQUNoQi8yRixNQUtYNnpGLEVBQWEvMEYsVUFBVWs0RixjQUFnQixXQUNuQyxPQUFPaDNGLEtBQUs0MUYsWUFBWTVyRixVQUk1QjZwRixFQUFhLzBGLFVBQVVtNEYsY0FBZ0IsV0FDbkMsT0FBT2ozRixLQUFLNjFGLGFBSWhCaEMsRUFBYS8wRixVQUFVaXRELFVBQVksU0FBU0MsR0FHeEMsT0FGQVosRUFBUWMsV0FBV2xzRCxLQUFLeTJGLFlBQWEsNkJBQ3JDejJGLEtBQUtnMkYsV0FBYWhxQyxFQUNYaHNELE1BSVg2ekYsRUFBYS8wRixVQUFVa3VGLE1BQVEsV0FDdkJodEYsS0FBSzAyRixlQUFpQjEyRixLQUFLMjJGLGNBSTNCMzJGLEtBQUt1dkQsYUFDTHZ2RCxLQUFLODFGLFNBQVN2OUQsUUFHbEJ2NEIsS0FBS20yRixPQUFTdEMsRUFBYXVDLE9BQU9JLFFBQ2xDeDJGLEtBQUs0MUYsWUFBYyxDQUFDLElBQUlqekYsTUFBTSxxQkFDOUIzQyxLQUFLZ1QsS0FBSyxTQUNWaFQsS0FBS2szRixnQkFLVHJELEVBQWEvMEYsVUFBVWdHLE1BQVEsU0FBU3F5RixHQUNwQy9yQyxFQUFRYyxZQUFZbHNELEtBQUsyMkYsWUFBYSw0QkFDdEN2ckMsRUFBUWMsV0FBV2xzRCxLQUFLeTJGLFlBQWEsaUNBRXJDLElBQUlJLEVBQVc3MkYsS0FBSysxRixXQUFhLElBQUk5b0MsRUFFckNqdEQsS0FBSzgxRixTQUFXcUIsRUFDWkEsRUFBZU4sR0FDZixJQUFJeHJDLEVBQVF3ckMsR0FFaEI3MkYsS0FBSzgxRixTQUFTaGhGLEdBQUcsUUFBUzlVLEtBQUtvM0YsUUFBUTE0RixLQUFLc0IsTUFBTSxJQUNsREEsS0FBSzgxRixTQUFTaGhGLEdBQUcsT0FBUTlVLEtBQUtrM0YsWUFBWXg0RixLQUFLc0IsT0FDL0NBLEtBQUs4MUYsU0FBU2hoRixHQUFHLFVBQVc5VSxLQUFLcTNGLGVBQWUzNEYsS0FBS3NCLE9BRWpEQSxLQUFLZzJGLFdBQWEsR0FDbEJoMkYsS0FBSzgxRixTQUFTL3BDLFVBQVUvckQsS0FBS2cyRixZQUdqQ2gyRixLQUFLbTJGLE9BQVN0QyxFQUFhdUMsT0FBT0UsUUFDbEN0MkYsS0FBS28zRixTQUFRLElBSWpCdkQsRUFBYS8wRixVQUFVczRGLFFBQVUsU0FBU0UsR0FDbENBLEdBQ0F0M0YsS0FBSzYxRixjQUVULElBQUkwQixFQUFZLENBQUMsUUFBUXZ0RixPQUFPaEssS0FBSzAxRixZQUNyQzlpRixFQUFPVixhQUFhcFQsVUFBVWtVLEtBQUs3UyxNQUFNSCxLQUFNdTNGLEdBQy9DLElBQUloNEQsRUFBV3YvQixLQUFLdzNGLHdCQUF3Qjk0RixLQUFLc0IsTUFDakRBLEtBQUt5MUYsVUFBVXQxRixNQUFNLEtBQU1ILEtBQUswMUYsV0FBVzFyRixPQUFPdTFCLEtBS3REczBELEVBQWEvMEYsVUFBVW80RixZQUFjLFdBQ2pDbDNGLEtBQUsyMUYsVUFBVXgxRixNQUFNLEtBQU1ILEtBQUs0MUYsY0FLcEMvQixFQUFhLzBGLFVBQVUwNEYsd0JBQTBCLFdBQzdDLElBQUl4M0YsS0FBSzIyRixZQUFULENBSUEsSUFBSTEyRixFQUFPaUwsTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFdBQ3RDRixLQUFLNDFGLFlBQWMzMUYsRUFDbkIyUyxFQUFPVixhQUFhcFQsVUFBVWtVLEtBQUs3UyxNQUFNSCxLQUFNLENBQUMsWUFBWWdLLE9BQU8vSixJQUVuRSxJQUFJRyxFQUFNSCxFQUFLLEdBQ1hHLEdBQU9KLEtBQUtpMkYsZ0JBQWdCNzFGLEdBQzVCSixLQUFLODFGLFNBQVNqcUMsUUFBUXpyRCxJQUV0QkosS0FBS20yRixPQUFTdEMsRUFBYXVDLE9BQU9HLFVBQ2xDdjJGLEtBQUtrM0YsaUJBS2JyRCxFQUFhLzBGLFVBQVV1NEYsZUFBaUIsU0FBU3ZoRixFQUFRMmhGLEVBQU9yM0YsR0FDNURKLEtBQUtnVCxLQUFLLFVBQVc4QyxFQUFRMmhGLEVBQU9yM0YsSUFHeENuRCxFQUFPRCxRQUFVNjJGLEcsNkNDM0xqQmoyRixPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FDekNtQixPQUFPLElBR1huQixFQUFRMm9DLFFBQVUsU0FBVTJ3QixFQUFPLzJCLEdBRS9CLEdBREFBLEdBQVcsRUFBSWlvQixFQUFPN2hCLFNBQVNwRyxHQUFZZ29CLEVBQU81aEIsV0FDN0MsRUFBSSt4RCxFQUFVL3hELFNBQVMyd0IsR0FBUSxPQUFPLzJCLEVBQVMsSUFBSTU4QixNQUFNLDhEQUM5RCxJQUFLMnpELEVBQU16MUQsT0FBUSxPQUFPMCtCLElBQzFCLElBQUlvNEQsRUFBWSxFQUVoQixTQUFTQyxFQUFTMzNGLEdBQ2QsSUFBSSt3QyxHQUFPLEVBQUlrVyxFQUFZdmhCLFNBQVMyd0IsRUFBTXFoQyxNQUMxQzEzRixFQUFLcUgsTUFBSyxFQUFJbWdELEVBQVc5aEIsU0FBU3hhLElBQ2xDNmxCLEVBQUs3d0MsTUFBTSxLQUFNRixHQUdyQixTQUFTa3JCLEVBQUsvcUIsR0FDVixHQUFJQSxHQUFPdTNGLElBQWNyaEMsRUFBTXoxRCxPQUMzQixPQUFPMCtCLEVBQVNwL0IsTUFBTSxLQUFNRCxXQUVoQzAzRixHQUFTLEVBQUkvUCxFQUFRbGlELFNBQVN6bEMsVUFBVyxJQUc3QzAzRixFQUFTLEtBR2IsSUFFSUYsRUFBWXZ3QyxFQUZELEVBQVEsTUFNbkJJLEVBQVNKLEVBRkQsRUFBUSxLQU1oQkssRUFBU0wsRUFGRCxFQUFRLEtBTWhCMGdDLEVBQVUxZ0MsRUFGRCxFQUFRLEtBTWpCTSxFQUFhTixFQUZELEVBQVEsS0FNcEJELEVBQWNDLEVBRkQsRUFBUSxLQUl6QixTQUFTQSxFQUF1QnhqRCxHQUFPLE9BQU9BLEdBQU9BLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0FFdkYxRyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ3BEbENZLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUMzQ21CLE9BQU8sSUFFVG5CLEVBQVEyb0MsUUFpRlIsU0FBdUIyd0IsRUFBTy8yQixJQUM1QixFQUFJczRELEVBQVdseUQsU0FBUzQrQyxFQUFTNStDLFFBQVMyd0IsRUFBTy8yQixJQWhGbkQsSUFFSWdsRCxFQUFXcDlCLEVBRkQsRUFBUSxLQU1sQjB3QyxFQUFhMXdDLEVBRkQsRUFBUSxNQUl4QixTQUFTQSxFQUF1QnhqRCxHQUFPLE9BQU9BLEdBQU9BLEVBQUlyRixXQUFhcUYsRUFBTSxDQUFFZ2lDLFFBQVNoaUMsR0EwRXZGMUcsRUFBT0QsUUFBVUEsRUFBaUIsUyw2QkN2RmxDWSxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FDekNtQixPQUFPLElBRVhuQixFQUFRMm9DLFFBb0JSLFNBQW1CeWlELEVBQVE5eEIsRUFBTy8yQixHQUM5QkEsRUFBV0EsR0FBWWdvQixFQUFPNWhCLFFBQzlCLElBQUlrK0MsR0FBVSxFQUFJOThCLEVBQWNwaEIsU0FBUzJ3QixHQUFTLEdBQUssR0FFdkQ4eEIsRUFBTzl4QixHQUFPLFNBQVV0bEIsRUFBTXZ5QyxFQUFLOGdDLElBQy9CLEVBQUkybkIsRUFBWXZoQixTQUFTcUwsRUFBekIsRUFBK0IsU0FBVTV3QyxFQUFLbzNCLEdBQ3RDdDNCLFVBQVVXLE9BQVMsSUFDbkIyMkIsR0FBUyxFQUFJcXdELEVBQVFsaUQsU0FBU3psQyxVQUFXLElBRTdDMmpGLEVBQVFwbEYsR0FBTys0QixFQUNmK0gsRUFBU24vQixTQUVkLFNBQVVBLEdBQ1RtL0IsRUFBU24vQixFQUFLeWpGLE9BL0J0QixJQUVJdDhCLEVBQVNKLEVBRkQsRUFBUSxLQU1oQkosRUFBZ0JJLEVBRkQsRUFBUSxLQU12QjBnQyxFQUFVMWdDLEVBRkQsRUFBUSxLQU1qQkQsRUFBY0MsRUFGRCxFQUFRLEtBSXpCLFNBQVNBLEVBQXVCeGpELEdBQU8sT0FBT0EsR0FBT0EsRUFBSXJGLFdBQWFxRixFQUFNLENBQUVnaUMsUUFBU2hpQyxHQWtCdkYxRyxFQUFPRCxRQUFVQSxFQUFpQixTLGdCQ3pDbEMsTUFBTW13RCxFQUFVLEVBQVEsSUFDbEIycUMsRUFBUyxFQUFRLEtBMkV2QixTQUFTQyxFQUFtQkMsR0FDMUIsTUFBTXQ0RixFQUFRLElBQUlpRCxNQUFNLHlDQUN4QixHQUF5QixpQkFBZHExRixJQUEyQkEsRUFBVW4zRixPQUFRLE1BQU1uQixFQUU5RCxNQUFNeUUsRUFBTzZ6RixFQUFVeG1FLEtBQUksU0FBVTF2QixHQUNuQyxNQUFrQixVQUFYQSxFQUFFb0MsS0FBbUJpcEQsRUFBUXAwQyxTQUFTalgsRUFBRTNELE9BQVMyRCxFQUFFM0QsU0FFdEQrb0YsRUFBUThRLEVBQVV4bUUsS0FBSSxTQUFVMXZCLEdBQUssT0FBT0EsRUFBRW9DLFFBQzlDK3pGLEVBQVNELEVBQVV4bUUsS0FBSSxTQUFVMXZCLEdBQ3JDLElBQUtBLEVBQUVyRSxLQUFNLE1BQU1pQyxFQUNuQixPQUFPb0MsRUFBRW9DLEtBQU8sSUFBTXBDLEVBQUVyRSxRQUcxQixPQUFPcTZGLEVBQU9JLGFBQ1osQ0FBQyxVQUFXLFdBQ1osQ0FDRUosRUFBT0ksYUFBYSxJQUFJaHRGLE1BQU04c0YsRUFBVW4zRixRQUFRNEksS0FBSyxVQUFXd3VGLEdBQ2hFSCxFQUFPSSxhQUFhaFIsRUFBTy9pRixLQUtqQyxTQUFTZzBGLEVBQWlCem5FLEVBQU1ta0IsR0FDOUIsTUFBTUUsRUFBWW9ZLEVBQVFwMEMsU0FBUzg3QixHQUM3QnVqRCxFQUFZanJDLEVBQVE1WCxXQUFXUixHQUNyQyxPQUFPb1ksRUFBUWhZLFVBQVV6a0IsRUFBTTBuRSxFQUFVM25GLEVBQUcybkYsRUFBVXA2RixFQUFHbzZGLEVBQVVuNUYsR0FHckUsU0FBU281RixFQUFpQmprQyxHQUN4QixNQUFNMy9DLEVBQVUwNEMsRUFBUXAwQyxTQUFTcTdDLEVBQVVqd0QsTUFFM0MsT0FBT2cwRixFQURTaHJDLEVBQVFsWSxvQkFBb0J4Z0MsR0FDWDIvQyxFQUFVdmYsS0FJN0MsU0FBU3lqRCxFQUFleGlGLEVBQVFqVixHQUU5QixJQURBLElBQUkwM0YsRUFBVyxHQUFLemlGLEVBQ2J5aUYsRUFBUzEzRixPQUFTQSxHQUN2QjAzRixFQUFXLElBQU1BLEVBRW5CLE9BQU9BLEVBakhUdDdGLEVBQU9ELFFBQVUsQ0FFZnc3RixVQUFXLFNBQVUvbkYsRUFBR3pTLEVBQUdpQixHQUN6QixNQUFNdzVGLEVBQU90ckMsRUFBUWhhLFdBQVduMUMsR0FDMUIwNkYsRUFBT3ZyQyxFQUFRaGEsV0FBV2wwQyxHQUMxQjA1RixFQUFPeHJDLEVBQVFqYSxZQUFZemlDLEdBQzNCbW9GLEVBQU9OLEVBQWNuckMsRUFBUS9aLFdBQVdxbEQsR0FBTWwwRixTQUFTLE9BQVEsSUFDL0RzMEYsRUFBT1AsRUFBY25yQyxFQUFRL1osV0FBV3NsRCxHQUFNbjBGLFNBQVMsT0FBUSxJQUMvRHUwRixFQUFPM3JDLEVBQVFyYSxlQUFlcWEsRUFBUWhWLFNBQVN3Z0QsSUFDckQsT0FBT3hyQyxFQUFRdlgsYUFBYWdqRCxFQUFLNXVGLE9BQU82dUYsRUFBTUMsSUFBT3YwRixTQUFTLFFBR2hFK3hFLFVBQVcsU0FBVXZyRCxHQUNuQixHQUFLQSxFQUFMLENBRUEsR0FBcUIsaUJBQVZBLEVBQW9CLENBQzdCLE1BQU0vbUIsRUFBU21wRCxFQUFRcDBDLFNBQVNnUyxHQUNoQ0EsRUFBUW9pQyxFQUFRNWEsWUFBWXZ1QyxHQUc5QixHQUFxQixpQkFBVittQixFQUFvQixDQUM3QixJQUFJblYsRUFBTSxpRUFFVixNQUFNLElBQUlqVCxNQURWaVQsR0FBTyxvQkFBdUJtVixFQUFTLEtBQU9BLEdBSWhELE9BQU9vaUMsRUFBUXZYLGFBQWE3cUIsRUFBTW5tQixpQkFHcENtMEYsYUFBYyxTQUFVamxELEVBQVlzZ0IsR0FDbEMsSUFBSTMvQyxFQUFVMDRDLEVBQVFwMEMsU0FBU3E3QyxFQUFVandELE1BQ3JDeXdDLEVBQVV1WSxFQUFRbFksb0JBQW9CeGdDLEdBQ3RDb2dDLEVBQU1zWSxFQUFReFksT0FBT0MsRUFBU2QsR0FFbEMsT0FEaUJxWixFQUFRNWEsWUFBWXZ5QyxLQUFLdzRGLFVBQVUzakQsRUFBSXBrQyxFQUFHb2tDLEVBQUk3MkMsRUFBRzYyQyxFQUFJNTFDLEtBSXhFNjBELHlCQUEwQixTQUFVTSxHQUNsQyxNQUFNbmdCLEVBQVlva0QsRUFBZ0Jqa0MsR0FDNUI0a0MsRUFBUzdyQyxFQUFROVksZ0JBQWdCSixHQUV2QyxPQURrQmtaLEVBQVE1YSxZQUFZeW1ELElBSXhDQyxpQkFBa0IsU0FBVTdrQyxHQUUxQixNQUFPLEtBRFdpa0MsRUFBZ0Jqa0MsR0FDVjd2RCxTQUFTLFFBR25Dd3pGLG1CQUFvQixTQUFVQyxHQUM1QixNQUFNa0IsRUFBYW5CLEVBQW1CQyxHQUN0QyxPQUFPN3FDLEVBQVE1YSxZQUFZMm1ELElBRzdCQyxjQUFlLFNBQVVybEQsRUFBWXNnQixHQUNuQyxNQUFNeGYsRUFBVW1qRCxFQUFtQjNqQyxFQUFVandELE1BQ3ZDMHdDLEVBQU1zWSxFQUFReFksT0FBT0MsRUFBU2QsR0FDcEMsT0FBT3FaLEVBQVE1YSxZQUFZdnlDLEtBQUt3NEYsVUFBVTNqRCxFQUFJcGtDLEVBQUdva0MsRUFBSTcyQyxFQUFHNjJDLEVBQUk1MUMsS0FHOURtNkYsc0JBQXVCLFNBQVVobEMsR0FDL0IsTUFDTW5nQixFQUFZa2tELEVBREZKLEVBQW1CM2pDLEVBQVVqd0QsTUFDRGl3RCxFQUFVdmYsS0FDaERta0QsRUFBUzdyQyxFQUFROVksZ0JBQWdCSixHQUN2QyxPQUFPa1osRUFBUTVhLFlBQVl5bUQsTSxnQkNuRS9CLzdGLEVBQU9ELFFBQVUsRUFBUSxNLGlCQ0F6QixZQUNBLE1BQU1xM0IsRUFBUSxFQUFRLEtBQ2hCeGUsRUFBSyxFQUFRLElBRW5CLElBQUl3akYsRUFBTSxhQUtWLFNBQVNDLEVBQWdCNzdGLEdBQ3ZCLE9BQUlBLEVBQUs4N0YsV0FBVyxRQUNYLFNBQVc5N0YsRUFBS2dHLE1BQU0sR0FDWCxRQUFUaEcsRUFDRixTQUNFQSxFQUFLODdGLFdBQVcsU0FDbEIsVUFBWTk3RixFQUFLZ0csTUFBTSxHQUNaLFNBQVRoRyxFQUNGLFVBQ0VBLEVBQUs4N0YsV0FBVyxVQUNsQixlQUFpQjk3RixFQUFLZ0csTUFBTSxHQUNqQixVQUFUaEcsRUFDRixlQUNFQSxFQUFLODdGLFdBQVcsV0FDbEIsZ0JBQWtCOTdGLEVBQUtnRyxNQUFNLEdBQ2xCLFdBQVRoRyxFQUNGLGdCQUVGQSxFQWNULFNBQVMrN0YsRUFBWXQxRixHQUNuQixPQUFPNkMsU0FBUyxhQUFhMHlGLEtBQUt2MUYsR0FBTSxHQUFJLElBSTlDLFNBQVN3MUYsRUFBY3gxRixHQUNyQixJQUFJNmxCLEVBQU0sbUJBQW1CMHZFLEtBQUt2MUYsR0FDbEMsTUFBTyxDQUFFNkMsU0FBU2dqQixFQUFJLEdBQUksSUFBS2hqQixTQUFTZ2pCLEVBQUksR0FBSSxLQUlsRCxTQUFTNHZFLEVBQWdCejFGLEdBQ3ZCLElBQUk2bEIsRUFBTTdsQixFQUFLdUcsTUFBTSxrQkFDckIsT0FBSXNmLEVBQ2dCLEtBQVhBLEVBQUksR0FBWSxVQUFZaGpCLFNBQVNnakIsRUFBSSxHQUFJLElBRS9DLEtBR1QsU0FBUzZ2RSxFQUFhcDZGLEdBQ3BCLElBQUkwRSxTQUFjMUUsRUFDbEIsR0FBYSxXQUFUMEUsRUFDRixPQUFJbXdCLEVBQU02aEIsY0FBYzEyQyxHQUNmLElBQUlxVyxFQUFHd2UsRUFBTXllLGVBQWV0ekMsR0FBTSxJQUVsQyxJQUFJcVcsRUFBR3JXLEVBQUssSUFFaEIsR0FBYSxXQUFUMEUsRUFDVCxPQUFPLElBQUkyUixFQUFHclcsR0FDVCxHQUFJQSxFQUFJMFgsUUFFYixPQUFPMVgsRUFFUCxNQUFNLElBQUltRCxNQUFNLDRCQU1wQixTQUFTazNGLEVBQWdCaGxELEdBQ3ZCLElBQUk5cUIsRUFBTSxrQkFBa0IwdkUsS0FBSzVrRCxHQUVqQyxHQUFtQixJQUFmOXFCLEVBQUlscEIsT0FDTixNQUFNLElBQUk4QixNQUFNLDRCQUdsQixJQUFJMUMsRUFBTyxrQkFBa0J3NUYsS0FBSzF2RSxFQUFJLElBRXRDLEdBQWEsT0FBVDlwQixHQUFpQyxJQUFoQkEsRUFBS1ksT0FDeEIsTUFBTyxDQUNMNlAsT0FBUXFaLEVBQUksR0FDWjlwQixLQUFNQSxFQUFLLEdBQUc0cUIsTUFBTSxLQUNwQml2RSxRQUFTNzVGLEVBQUssR0FBRzRxQixNQUFNLE1BR3pCLElBQUl5aUIsRUFBU3ZqQixFQUFJLEdBQUdjLE1BQU0sS0FPMUIsT0FOc0IsSUFBbEJ5aUIsRUFBT3pzQyxRQUE4QixLQUFkeXNDLEVBQU8sS0FJaENBLEVBQVMsSUFFSixDQUNMNThCLE9BQVFxWixFQUFJLEdBQ1o5cEIsS0FBTXF0QyxHQU9aLFNBQVN5c0QsRUFBYzcxRixFQUFNMUUsR0FDM0IsSUFBSThFLEVBQU1tUyxFQUFLckwsRUFBS2xPLEVBRXBCLEdBQWEsWUFBVGdILEVBQ0YsT0FBTzYxRixFQUFhLFVBQVdILEVBQVlwNkYsSUFDdEMsR0FBYSxTQUFUMEUsRUFDVCxPQUFPNjFGLEVBQWEsUUFBU3Y2RixFQUFNLEVBQUksR0FDbEMsR0FBYSxXQUFUMEUsRUFDVCxPQUFPNjFGLEVBQWEsUUFBUzMzRixFQUFPUyxLQUFLckQsRUFBSyxTQUN6QyxHQUFJMEMsRUFBUWdDLEdBQU8sQ0FHeEIsUUFBMEIsSUFBZjFFLEVBQUlxQixPQUNiLE1BQU0sSUFBSThCLE1BQU0saUJBR2xCLEdBQWEsYUFEYjJCLEVBQU9xMUYsRUFBZXoxRixLQUNhLElBQVRJLEdBQWM5RSxFQUFJcUIsT0FBU3lELEVBQ25ELE1BQU0sSUFBSTNCLE1BQU0sK0JBQWlDMkIsR0FPbkQsSUFBS3BILEtBTExrTyxFQUFNLEdBQ05sSCxFQUFPQSxFQUFLVCxNQUFNLEVBQUdTLEVBQUsyQixZQUFZLE1BQ25CLGlCQUFSckcsSUFDVEEsRUFBTWd2QixLQUFLNDdCLE1BQU01cUQsSUFFVEEsRUFDUjRMLEVBQUk5RCxLQUFLeXlGLEVBQWE3MUYsRUFBTTFFLEVBQUl0QyxLQUVsQyxHQUFhLFlBQVRvSCxFQUFvQixDQUN0QixJQUFJekQsRUFBU2s1RixFQUFhLFVBQVd2NkYsRUFBSXFCLFFBQ3pDdUssRUFBSTZILFFBQVFwUyxHQUVkLE9BQU91QixFQUFPNEgsT0FBT29CLEdBQ2hCLEdBQWEsVUFBVGxILEVBU1QsT0FSQTFFLEVBQU00QyxFQUFPUyxLQUFLckQsR0FFbEI0TCxFQUFNaEosRUFBTzRILE9BQU8sQ0FBRSt2RixFQUFhLFVBQVd2NkYsRUFBSXFCLFFBQVNyQixJQUV0REEsRUFBSXFCLE9BQVMsSUFBUSxJQUN4QnVLLEVBQU1oSixFQUFPNEgsT0FBTyxDQUFFb0IsRUFBS2lwQixFQUFNdGMsTUFBTSxHQUFNdlksRUFBSXFCLE9BQVMsT0FHckR1SyxFQUNGLEdBQUlsSCxFQUFLcTFGLFdBQVcsU0FBVSxDQUVuQyxJQURBajFGLEVBQU9rMUYsRUFBV3QxRixJQUNQLEdBQUtJLEVBQU8sR0FDckIsTUFBTSxJQUFJM0IsTUFBTSwyQkFBNkIyQixHQUcvQyxPQUFPK3ZCLEVBQU1xZSxlQUFlbHpDLEVBQUssSUFDNUIsR0FBSTBFLEVBQUtxMUYsV0FBVyxRQUFTLENBRWxDLElBREFqMUYsRUFBT2sxRixFQUFXdDFGLElBQ04sR0FBT0ksRUFBTyxHQUFPQSxFQUFPLElBQ3RDLE1BQU0sSUFBSTNCLE1BQU0sMEJBQTRCMkIsR0FJOUMsSUFEQW1TLEVBQU1takYsRUFBWXA2RixJQUNWaWEsWUFBY25WLEVBQ3BCLE1BQU0sSUFBSTNCLE1BQU0sZ0NBQWtDMkIsRUFBTyxPQUFTbVMsRUFBSWdELGFBR3hFLEdBQUloRCxFQUFNLEVBQ1IsTUFBTSxJQUFJOVQsTUFBTSw2QkFHbEIsT0FBTzhULEVBQUl1QyxZQUFZNVcsRUFBUSxLQUFNLElBQ2hDLEdBQUk4QixFQUFLcTFGLFdBQVcsT0FBUSxDQUVqQyxJQURBajFGLEVBQU9rMUYsRUFBV3QxRixJQUNOLEdBQU9JLEVBQU8sR0FBT0EsRUFBTyxJQUN0QyxNQUFNLElBQUkzQixNQUFNLHlCQUEyQjJCLEdBSTdDLElBREFtUyxFQUFNbWpGLEVBQVlwNkYsSUFDVmlhLFlBQWNuVixFQUNwQixNQUFNLElBQUkzQixNQUFNLCtCQUFpQzJCLEVBQU8sT0FBU21TLEVBQUlnRCxhQUd2RSxPQUFPaEQsRUFBSWtELE9BQU8sS0FBS1gsWUFBWTVXLEVBQVEsS0FBTSxJQUM1QyxHQUFJOEIsRUFBS3ExRixXQUFXLFVBQVcsQ0FLcEMsR0FKQWoxRixFQUFPbzFGLEVBQWF4MUYsSUFFcEJ1UyxFQUFNbWpGLEVBQVlwNkYsSUFFUixFQUNSLE1BQU0sSUFBSW1ELE1BQU0sK0JBR2xCLE9BQU9vM0YsRUFBYSxVQUFXdGpGLEVBQUlwSyxJQUFJLElBQUl3SixFQUFHLEdBQUdqSixJQUFJLElBQUlpSixFQUFHdlIsRUFBSyxPQUM1RCxHQUFJSixFQUFLcTFGLFdBQVcsU0FHekIsT0FGQWoxRixFQUFPbzFGLEVBQWF4MUYsR0FFYjYxRixFQUFhLFNBQVVILEVBQVlwNkYsR0FBSzZNLElBQUksSUFBSXdKLEVBQUcsR0FBR2pKLElBQUksSUFBSWlKLEVBQUd2UixFQUFLLE9BRy9FLE1BQU0sSUFBSTNCLE1BQU0sZ0NBQWtDdUIsR0FNcEQsU0FBUzgxRixFQUFjQyxFQUFZOTFGLEVBQU11QyxHQUl2QyxJQUFJcEMsRUFBTW1TLEVBQUtyTCxFQUFLbE8sRUFFcEIsR0FMMEIsaUJBQWYrOEYsSUFDVEEsRUFBYUMsRUFBVUQsSUFJRCxZQUFwQkEsRUFBV3g4RixLQUNiLE9BQU91OEYsRUFBYUMsRUFBV0UsUUFBU2gyRixFQUFNdUMsR0FBUXNTLFlBQVk1VyxFQUFRLEtBQU0sSUFBSW1DLFNBQVMsT0FDeEYsR0FBd0IsU0FBcEIwMUYsRUFBV3g4RixLQUNwQixPQUFPdThGLEVBQWFDLEVBQVdFLFFBQVNoMkYsRUFBTXVDLEdBQVFuQyxhQUFlLElBQUlzUixFQUFHLEdBQUd0UixXQUMxRSxHQUF3QixXQUFwQjAxRixFQUFXeDhGLEtBQW1CLENBQ3ZDLElBQUk4TixFQUFReXVGLEVBQWFDLEVBQVdFLFFBQVNoMkYsRUFBTXVDLEdBQ25ELE9BQU90RSxFQUFPUyxLQUFLMEksRUFBTyxRQUFRaEgsV0FDN0IsR0FBSTAxRixFQUFXLzNGLFFBQVMsQ0FXN0IsSUFSQWtKLEVBQU0sR0FDTjlHLEVBQU8yMUYsRUFBVzMxRixLQUVNLFlBQXBCMjFGLEVBQVczMUYsT0FDYm9DLEVBQVNzekYsRUFBYSxVQUFXNzFGLEVBQU11QyxHQUFRb1MsV0FDL0N4VSxFQUFPMDFGLEVBQWEsVUFBVzcxRixFQUFNdUMsR0FBUW9TLFdBQzdDcFMsR0FBa0IsSUFFZnhKLEVBQUksRUFBR0EsRUFBSW9ILEVBQU1wSCxJQUFLLENBQ3pCLElBQUlvcEQsRUFBVTB6QyxFQUFhQyxFQUFXRyxTQUFVajJGLEVBQU11QyxHQUN0RDBFLEVBQUk5RCxLQUFLZy9DLEdBQ1Q1L0MsR0FBVXV6RixFQUFXRyxTQUFTQyxZQUVoQyxPQUFPanZGLEVBQ0YsR0FBd0IsVUFBcEI2dUYsRUFBV3g4RixLQUdwQixPQUZBaUosRUFBU3N6RixFQUFhLFVBQVc3MUYsRUFBTXVDLEdBQVFvUyxXQUMvQ3hVLEVBQU8wMUYsRUFBYSxVQUFXNzFGLEVBQU11QyxHQUFRb1MsV0FDdEMzVSxFQUFLVixNQUFNaUQsRUFBUyxHQUFJQSxFQUFTLEdBQUtwQyxHQUN4QyxHQUFJMjFGLEVBQVd4OEYsS0FBSzg3RixXQUFXLFNBQ3BDLE9BQU9wMUYsRUFBS1YsTUFBTWlELEVBQVFBLEVBQVN1ekYsRUFBVzMxRixNQUN6QyxHQUFJMjFGLEVBQVd4OEYsS0FBSzg3RixXQUFXLFFBQVMsQ0FFN0MsSUFEQTlpRixFQUFNLElBQUlaLEVBQUcxUixFQUFLVixNQUFNaUQsRUFBUUEsRUFBUyxJQUFLLEdBQUksT0FDMUMrUyxZQUFjd2dGLEVBQVczMUYsS0FDL0IsTUFBTSxJQUFJM0IsTUFBTSw4QkFBZ0NzM0YsRUFBVzMxRixLQUFPLE9BQVNtUyxFQUFJZ0QsYUFFakYsT0FBT2hELEVBQ0YsR0FBSXdqRixFQUFXeDhGLEtBQUs4N0YsV0FBVyxPQUFRLENBRTVDLElBREE5aUYsRUFBTSxJQUFJWixFQUFHMVIsRUFBS1YsTUFBTWlELEVBQVFBLEVBQVMsSUFBSyxHQUFJLE1BQU1zVCxTQUFTLE1BQ3pEUCxZQUFjd2dGLEVBQVczMUYsS0FDL0IsTUFBTSxJQUFJM0IsTUFBTSwrQkFBaUNzM0YsRUFBVzMxRixLQUFPLE9BQVNtUyxFQUFJZ0QsYUFHbEYsT0FBT2hELEVBQ0YsR0FBSXdqRixFQUFXeDhGLEtBQUs4N0YsV0FBVyxVQUFXLENBRy9DLEdBRkFqMUYsRUFBTyxJQUFJdVIsRUFBRyxHQUFHakosSUFBSSxJQUFJaUosRUFBR29rRixFQUFXMzFGLEtBQUssT0FDNUNtUyxFQUFNdWpGLEVBQWEsVUFBVzcxRixFQUFNdUMsSUFDM0I2USxJQUFJalQsR0FBTXFVLFNBQ2pCLE1BQU0sSUFBSWhXLE1BQU0sOEJBRWxCLE9BQU84VCxFQUFJK08sSUFBSWxoQixHQUNWLEdBQUkyMUYsRUFBV3g4RixLQUFLODdGLFdBQVcsU0FBVSxDQUc5QyxHQUZBajFGLEVBQU8sSUFBSXVSLEVBQUcsR0FBR2pKLElBQUksSUFBSWlKLEVBQUdva0YsRUFBVzMxRixLQUFLLE9BQzVDbVMsRUFBTXVqRixFQUFhLFNBQVU3MUYsRUFBTXVDLElBQzFCNlEsSUFBSWpULEdBQU1xVSxTQUNqQixNQUFNLElBQUloVyxNQUFNLDhCQUVsQixPQUFPOFQsRUFBSStPLElBQUlsaEIsR0FFakIsTUFBTSxJQUFJM0IsTUFBTSxnQ0FBa0NzM0YsRUFBV3g4RixNQUsvRCxTQUFTeThGLEVBQVdoMkYsR0FDbEIsSUFBSUksRUFDQThHLEVBY0UrdUYsRUFiTixHQUFJajRGLEVBQVFnQyxHQUFPLENBQ2pCSSxFQUFPcTFGLEVBQWV6MUYsR0FDdEIsSUFBSWsyRixFQUFXbDJGLEVBQUtULE1BQU0sRUFBR1MsRUFBSzJCLFlBQVksTUFTOUMsT0FSQXUwRixFQUFXRixFQUFVRSxHQUNyQmh2RixFQUFNLENBQ0psSixTQUFTLEVBQ1R6RSxLQUFNeUcsRUFDTkksS0FBTUEsRUFDTisxRixZQUFzQixZQUFULzFGLEVBQXFCLEdBQUs4MUYsRUFBU0MsWUFBYy8xRixFQUM5RDgxRixTQUFVQSxHQUtaLE9BQVFsMkYsR0FDTixJQUFLLFVBQ0hpMkYsRUFBVSxVQUNWLE1BQ0YsSUFBSyxPQUNIQSxFQUFVLFFBQ1YsTUFDRixJQUFLLFNBQ0hBLEVBQVUsUUFlZCxHQVpBL3VGLEVBQU0sQ0FDSit1RixRQUFTQSxFQUNUMThGLEtBQU15RyxFQUNObTJGLFlBQWEsSUFHVm4yRixFQUFLcTFGLFdBQVcsVUFBcUIsVUFBVHIxRixHQUFxQkEsRUFBS3ExRixXQUFXLFNBQVdyMUYsRUFBS3ExRixXQUFXLE9BQy9GbnVGLEVBQUk5RyxLQUFPazFGLEVBQVd0MUYsSUFDYkEsRUFBS3ExRixXQUFXLFdBQWFyMUYsRUFBS3ExRixXQUFXLFlBQ3REbnVGLEVBQUk5RyxLQUFPbzFGLEVBQWF4MUYsSUFHdEJBLEVBQUtxMUYsV0FBVyxVQUFxQixVQUFUcjFGLElBQXFCa0gsRUFBSTlHLEtBQU8sR0FBSzhHLEVBQUk5RyxLQUFPLElBQzlFLE1BQU0sSUFBSTNCLE1BQU0sMkJBQTZCeUksRUFBSTlHLE1BRW5ELElBQUtKLEVBQUtxMUYsV0FBVyxTQUFXcjFGLEVBQUtxMUYsV0FBVyxVQUFZbnVGLEVBQUk5RyxLQUFPLEdBQUs4RyxFQUFJOUcsS0FBTyxHQUFLOEcsRUFBSTlHLEtBQU8sS0FDckcsTUFBTSxJQUFJM0IsTUFBTSw4QkFBZ0N5SSxFQUFJOUcsTUFFdEQsT0FBTzhHLEVBS1gsU0FBU2t2RixFQUFXcDJGLEdBRWxCLE1BQWlCLFdBQVRBLEdBQWdDLFVBQVRBLEdBQStDLFlBQXpCeTFGLEVBQWV6MUYsR0FJdEUsU0FBU2hDLEVBQVNnQyxHQUNoQixPQUFPQSxFQUFLMkIsWUFBWSxPQUFTM0IsRUFBS3JELE9BQVMsRUFpRmpELFNBQVM0dEIsRUFBV3ZxQixFQUFNL0YsR0FDeEIsT0FBSStGLEVBQUtxMUYsV0FBVyxZQUFjcjFGLEVBQUtxMUYsV0FBVyxTQUN6QyxLQUFPcDdGLEVBQU1vRyxTQUFTLE9BRXRCcEcsRUFBTW9HLFdBellqQjgwRixFQUFJa0IsUUFBVSxTQUFVOThGLEVBQU15cEYsR0FFNUIsSUFBSXJ5QyxFQUFNcDNDLEVBQU8sSUFBTXlwRixFQUFNMTFELElBQUk4bkUsR0FBZ0I1dUYsS0FBSyxLQUFPLElBQzdELE9BQU8ycEIsRUFBTWlmLFVBQVVseEMsRUFBT1MsS0FBS2d5QyxLQUdyQ3drRCxFQUFJbUIsU0FBVyxTQUFVLzhGLEVBQU15cEYsR0FDN0IsT0FBT21TLEVBQUlrQixRQUFROThGLEVBQU15cEYsR0FBT3pqRixNQUFNLEVBQUcsSUFtVDNDNDFGLEVBQUlvQixVQUFZLFNBQVV2VCxFQUFPandELEdBQy9CLElBQUlqTSxFQUFTLEdBQ1Q3bUIsRUFBTyxHQUVQdTJGLEVBQWEsRUFFakJ4VCxFQUFNdjJELFNBQVEsU0FBVXpzQixHQUN0QixHQUFJaEMsRUFBUWdDLEdBQU8sQ0FDakIsSUFBSUksRUFBT3ExRixFQUFlejFGLEdBR3hCdzJGLEdBRFcsWUFBVHAyRixFQUNZLEdBQUtBLEVBRUwsUUFHaEJvMkYsR0FBYyxNQUlsQixJQUFLLElBQUl4OUYsRUFBSSxFQUFHQSxFQUFJZ3FGLEVBQU1ybUYsT0FBUTNELElBQUssQ0FDckMsSUFBSWdILEVBQU9vMUYsRUFBZXBTLEVBQU1ocUYsSUFFNUJ3MEIsRUFBTXFvRSxFQUFhNzFGLEVBRFgreUIsRUFBTy81QixJQUlmbzlGLEVBQVVwMkYsSUFDWjhtQixFQUFPMWpCLEtBQUt5eUYsRUFBYSxVQUFXVyxJQUNwQ3YyRixFQUFLbUQsS0FBS29xQixHQUNWZ3BFLEdBQWNocEUsRUFBSTd3QixRQUVsQm1xQixFQUFPMWpCLEtBQUtvcUIsR0FJaEIsT0FBT3R2QixFQUFPNEgsT0FBT2doQixFQUFPaGhCLE9BQU83RixLQUdyQ2sxRixFQUFJc0IsVUFBWSxTQUFVelQsRUFBTy9pRixHQUMvQixJQUFJaUgsRUFBTSxHQUNWakgsRUFBTy9CLEVBQU9TLEtBQUtzQixHQUVuQixJQURBLElBQUl1QyxFQUFTLEVBQ0p4SixFQUFJLEVBQUdBLEVBQUlncUYsRUFBTXJtRixPQUFRM0QsSUFBSyxDQUNyQyxJQUNJNEosRUFBU296RixFQURGWixFQUFlcFMsRUFBTWhxRixLQUU1Qm9wRCxFQUFVMHpDLEVBQWFsekYsRUFBUTNDLEVBQU11QyxHQUN6Q0EsR0FBVUksRUFBT3V6RixZQUNqQmp2RixFQUFJOUQsS0FBS2cvQyxHQUVYLE9BQU9sN0MsR0FHVGl1RixFQUFJdUIsYUFBZSxTQUFVbHFGLEdBQzNCLElBQUl6USxFQUFPaUwsTUFBTXBNLFVBQVUyRSxNQUFNcEcsS0FBSzZDLFdBQVd1RCxNQUFNLEdBQ25Eb3hDLEVBQU1nbEQsRUFBZW5wRixHQUd6QixHQUFJelEsRUFBS1ksU0FBV2cwQyxFQUFJNTBDLEtBQUtZLE9BQzNCLE1BQU0sSUFBSThCLE1BQU0sMkJBR2xCLE9BQU9QLEVBQU80SCxPQUFPLENBQUVxdkYsRUFBSW1CLFNBQVMzbEQsRUFBSW5rQyxPQUFRbWtDLEVBQUk1MEMsTUFBT281RixFQUFJb0IsVUFBVTVsRCxFQUFJNTBDLEtBQU1BLE1BR3JGbzVGLEVBQUl3QixhQUFlLFNBQVVucUYsRUFBUXZNLEdBQ25DLElBQUkwd0MsRUFBTWdsRCxFQUFlbnBGLEdBR3pCLElBQUtta0MsRUFBSWlsRCxRQUNQLE1BQU0sSUFBSW4zRixNQUFNLDhCQUdsQixPQUFPMDJGLEVBQUlzQixVQUFVOWxELEVBQUlpbEQsUUFBUzMxRixJQVdwQ2sxRixFQUFJNXFFLFVBQVksU0FBVXk0RCxFQUFPandELEdBQy9CLElBQUk3ckIsRUFBTSxHQUVWLElBQUssSUFBSWxPLEtBQUtncUYsRUFBTyxDQUNuQixJQUFJaGpGLEVBQU9nakYsRUFBTWhxRixHQUNiaUIsRUFBUTg0QixFQUFPLzVCLEdBSWpCaUIsRUFERSxpQkFBaUJrMEIsS0FBS251QixHQUNoQi9GLEVBQU1xekIsS0FBSSxTQUFVMGMsR0FDMUIsT0FBT3pmLEVBQVV2cUIsRUFBTWdxQyxNQUN0QnhqQyxLQUFLLE1BRUErakIsRUFBVXZxQixFQUFNL0YsR0FHMUJpTixFQUFJOUQsS0FBS25KLEdBR1gsT0FBT2lOLEdBR1RpdUYsRUFBSXlCLGFBQWUsU0FBVTVULEVBQU9qd0QsR0FDbEMsR0FBSWl3RCxFQUFNcm1GLFNBQVdvMkIsRUFBT3AyQixPQUMxQixNQUFNLElBQUk4QixNQUFNLCtDQU1sQixJQUhBLElBQUkyQixFQUFNbVMsRUFDTnJMLEVBQU0sR0FFRGxPLEVBQUksRUFBR0EsRUFBSWdxRixFQUFNcm1GLE9BQVEzRCxJQUFLLENBQ3JDLElBQUlnSCxFQUFPbzFGLEVBQWVwUyxFQUFNaHFGLElBQzVCaUIsRUFBUTg0QixFQUFPLzVCLEdBRW5CLEdBQWEsVUFBVGdILEVBQ0ZrSCxFQUFJOUQsS0FBS25KLFFBQ0osR0FBYSxXQUFUK0YsRUFDVGtILEVBQUk5RCxLQUFLbEYsRUFBT1MsS0FBSzFFLEVBQU8sY0FDdkIsR0FBYSxTQUFUK0YsRUFDVGtILEVBQUk5RCxLQUFLbEYsRUFBT1MsS0FBSzFFLEVBQVEsS0FBTyxLQUFNLGFBQ3JDLEdBQWEsWUFBVCtGLEVBQ1RrSCxFQUFJOUQsS0FBSytzQixFQUFNbWUsY0FBY3IwQyxFQUFPLFVBQy9CLEdBQUkrRixFQUFLcTFGLFdBQVcsU0FBVSxDQUVuQyxJQURBajFGLEVBQU9rMUYsRUFBV3QxRixJQUNQLEdBQUtJLEVBQU8sR0FDckIsTUFBTSxJQUFJM0IsTUFBTSwyQkFBNkIyQixHQUcvQzhHLEVBQUk5RCxLQUFLK3NCLEVBQU1xZSxlQUFldjBDLEVBQU9tRyxTQUNoQyxHQUFJSixFQUFLcTFGLFdBQVcsUUFBUyxDQUVsQyxJQURBajFGLEVBQU9rMUYsRUFBV3QxRixJQUNOLEdBQU9JLEVBQU8sR0FBT0EsRUFBTyxJQUN0QyxNQUFNLElBQUkzQixNQUFNLDBCQUE0QjJCLEdBSTlDLElBREFtUyxFQUFNbWpGLEVBQVl6N0YsSUFDVnNiLFlBQWNuVixFQUNwQixNQUFNLElBQUkzQixNQUFNLGdDQUFrQzJCLEVBQU8sT0FBU21TLEVBQUlnRCxhQUd4RXJPLEVBQUk5RCxLQUFLbVAsRUFBSXVDLFlBQVk1VyxFQUFRLEtBQU1rQyxFQUFPLFFBQ3pDLEtBQUlKLEVBQUtxMUYsV0FBVyxPQWN6QixNQUFNLElBQUk1MkYsTUFBTSxnQ0FBa0N1QixHQVpsRCxJQURBSSxFQUFPazFGLEVBQVd0MUYsSUFDTixHQUFPSSxFQUFPLEdBQU9BLEVBQU8sSUFDdEMsTUFBTSxJQUFJM0IsTUFBTSx5QkFBMkIyQixHQUk3QyxJQURBbVMsRUFBTW1qRixFQUFZejdGLElBQ1ZzYixZQUFjblYsRUFDcEIsTUFBTSxJQUFJM0IsTUFBTSwrQkFBaUMyQixFQUFPLE9BQVNtUyxFQUFJZ0QsYUFHdkVyTyxFQUFJOUQsS0FBS21QLEVBQUlrRCxPQUFPclYsR0FBTTBVLFlBQVk1VyxFQUFRLEtBQU1rQyxFQUFPLEtBTy9ELE9BQU9sQyxFQUFPNEgsT0FBT29CLElBR3ZCaXVGLEVBQUluQixhQUFlLFNBQVVoUixFQUFPandELEdBQ2xDLE9BQU81QyxFQUFNaWYsVUFBVStsRCxFQUFJeUIsYUFBYTVULEVBQU9qd0QsS0FHakRvaUUsRUFBSTBCLGVBQWlCLFNBQVU3VCxFQUFPandELEdBQ3BDLE9BQU81QyxFQUFNbWYsT0FBTzZsRCxFQUFJeUIsYUFBYTVULEVBQU9qd0QsS0FHOUNvaUUsRUFBSTJCLGtCQUFvQixTQUFVOVQsRUFBT2p3RCxHQUN2QyxPQUFPNUMsRUFBTW9mLFVBQVU0bEQsRUFBSXlCLGFBQWE1VCxFQUFPandELElBQVMsSUFnQjFEb2lFLEVBQUk0QixZQUFjLFNBQVVwbUQsR0FFMUIsSUFEQSxJQVBrQnQzQyxFQU9kNk4sRUFBTSxHQUNEbE8sRUFBSSxFQUFHQSxFQUFJMjNDLEVBQUloMEMsT0FBUTNELElBQUssQ0FDbkMsSUFBSWdILEVBQU8yd0MsRUFBSTMzQyxHQUNmLEdBQWEsTUFBVGdILEVBQ0ZrSCxFQUFJOUQsS0FBSyxjQUNKLEdBQWEsTUFBVHBELEVBQWMsQ0FHdkIsSUFGQSxJQUFJNmxCLEVBQU0sUUFDTnZqQixFQUFJdEosRUFBSSxFQUNKc0osRUFBSXF1QyxFQUFJaDBDLFVBZkZ0RCxFQWV1QnMzQyxFQUFJcnVDLEtBYmhDLEtBQVNqSixHQUFLLE1BY3JCd3NCLEdBQU84cUIsRUFBSXJ1QyxHQUFLLElBQ2hCQSxJQUVGdEosRUFBSXNKLEVBQUksRUFDUjRFLEVBQUk5RCxLQUFLeWlCLFFBQ0osR0FBYSxNQUFUN2xCLEVBQ1RrSCxFQUFJOUQsS0FBSyxjQUNKLElBQWEsTUFBVHBELEVBR1QsTUFBTSxJQUFJdkIsTUFBTSxnQ0FBa0N1QixHQUZsRGtILEVBQUk5RCxLQUFLLGFBS2IsT0FBTzhELEdBR1RpdUYsRUFBSTZCLFVBQVksU0FBVWhVLEdBRXhCLElBREEsSUFBSTk3RSxFQUFNLEdBQ0RsTyxFQUFJLEVBQUdBLEVBQUlncUYsRUFBTXJtRixPQUFRM0QsSUFBSyxDQUNyQyxJQUFJZ0gsRUFBT2dqRixFQUFNaHFGLEdBQ2pCLEdBQWEsVUFBVGdILEVBQ0ZrSCxFQUFJOUQsS0FBSyxVQUNKLEdBQUlwRCxFQUFLcTFGLFdBQVcsU0FDekJudUYsRUFBSTlELEtBQUssSUFBTWt5RixFQUFXdDFGLFNBQ3JCLEdBQWEsV0FBVEEsRUFDVGtILEVBQUk5RCxLQUFLLFNBQ0osSUFBYSxhQUFUcEQsRUFHVCxNQUFNLElBQUl2QixNQUFNLGdDQUFrQ3VCLEdBRmxEa0gsRUFBSTlELEtBQUssTUFLYixPQUFPOEQsRUFBSVYsS0FBSyxLQUdsQnpOLEVBQU9ELFFBQVVxOEYsSSxzRENsa0JqQno3RixPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sSUFDdEQsSUFBSTBYLEVBQUssRUFBUSxJQUNqQjdZLEVBQVE2WSxHQUFLQSxFQUNiLElBQUl3N0IsRUFBTSxFQUFRLElBQ2xCcjBDLEVBQVFxMEMsSUFBTUEsRUFDZCxJQUFJRixFQUFtQixFQUFRLElBQzNCQyxFQUFZLEVBQVEsSUFDeEJwMEMsRUFBUW8wQyxVQUFZQSxFQUNwQixJQUFJejdCLEVBQVMsRUFBUSxJQUNqQjI3QixFQUFhLEVBQVEsSUFDckJsdkMsRUFBUyxFQUFRLElBQWVBLE9BQ2hDOGhGLEVBQVksRUFBUSxJQW1rQnhCLFNBQVNpWCxFQUFxQjFxRixFQUFHMnFGLEdBQzdCLE9BQU9BLEVBQVUzcUYsR0FBSyxFQUFJMnFGLEVBQVUsSUFBTTNxRixFQUFJLEdBRWxELFNBQVM0cUYsRUFBbUJybUQsR0FDeEIsT0FBb0IsSUFBYkEsR0FBK0IsSUFBYkEsRUF0a0I3QnAzQyxPQUFPMnpDLE9BQU92MEMsRUFBU2tuRixHQUl2QmxuRixFQUFRdzBDLFlBQWMsSUFBSTM3QixFQUFHLG1FQUFvRSxJQUlqRzdZLEVBQVF5MEMsV0FBYSxJQUFJNTdCLEVBQUcsb0VBQXFFLElBSWpHN1ksRUFBUTAwQyxpQkFBbUIsbUVBSTNCMTBDLEVBQVE0MEMsZUFBaUJ4dkMsRUFBT1MsS0FBSzdGLEVBQVEwMEMsaUJBQWtCLE9BSS9EMTBDLEVBQVE4MEMsc0JBQXdCLG1FQUloQzkwQyxFQUFRZzFDLG9CQUFzQjV2QyxFQUFPUyxLQUFLN0YsRUFBUTgwQyxzQkFBdUIsT0FJekU5MEMsRUFBUWsxQyxnQkFBa0IsbUVBSTFCbDFDLEVBQVFvMUMsY0FBZ0Jod0MsRUFBT1MsS0FBSzdGLEVBQVFrMUMsZ0JBQWlCLE9BSzdEbDFDLEVBQVErYSxNQUFRLFNBQVV4TSxHQUN0QixPQUFPbkosRUFBT1EsWUFBWTJJLEdBQU85QixLQUFLLElBSzFDek0sRUFBUXMxQyxZQUFjLFdBQ2xCLElBQ0lncEQsRUFBT3QrRixFQUFRK2EsTUFEQyxJQUVwQixPQUFPL2EsRUFBUXUxQyxZQUFZK29ELElBVS9CdCtGLEVBQVF3MUMsY0FBZ0IsU0FBVTU4QixFQUFLL1UsRUFBUThWLFFBQzdCLElBQVZBLElBQW9CQSxHQUFRLEdBQ2hDLElBQUl2USxFQUFNcEosRUFBUSthLE1BQU1sWCxHQUV4QixPQURBK1UsRUFBTTVZLEVBQVErYixTQUFTbkQsR0FDbkJlLEVBQ0lmLEVBQUkvVSxPQUFTQSxHQUNiK1UsRUFBSTdSLEtBQUtxQyxHQUNGQSxHQUVKd1AsRUFBSW5TLE1BQU0sRUFBRzVDLEdBR2hCK1UsRUFBSS9VLE9BQVNBLEdBQ2IrVSxFQUFJN1IsS0FBS3FDLEVBQUt2RixFQUFTK1UsRUFBSS9VLFFBQ3BCdUYsR0FFSndQLEVBQUluUyxPQUFPNUMsSUFHMUI3RCxFQUFReTFDLFVBQVl6MUMsRUFBUXcxQyxjQVE1QngxQyxFQUFRMDFDLGVBQWlCLFNBQVU5OEIsRUFBSy9VLEdBQ3BDLE9BQU83RCxFQUFReTFDLFVBQVU3OEIsRUFBSy9VLEdBQVEsSUFPMUM3RCxFQUFRMjFDLE1BQVEsU0FBVTlvQyxHQUd0QixJQURBLElBQUlncEMsR0FESmhwQyxFQUFJcTZFLEVBQVVweEMsZUFBZWpwQyxJQUNmLEdBQ1BBLEVBQUVoSixPQUFTLEdBQTBCLE1BQXJCZ3lDLEVBQU10dUMsWUFFekJzdUMsR0FEQWhwQyxFQUFJQSxFQUFFcEcsTUFBTSxJQUNGLEdBRWQsT0FBT29HLEdBRVg3TSxFQUFRNDFDLFdBQWE1MUMsRUFBUTIxQyxNQUs3QjMxQyxFQUFRK2IsU0FBVyxTQUFVdEksR0FDekIsSUFBS3JPLEVBQU93QixTQUFTNk0sR0FDakIsR0FBSXZGLE1BQU1oSixRQUFRdU8sR0FDZEEsRUFBSXJPLEVBQU9TLEtBQUs0TixRQUVmLEdBQWlCLGlCQUFOQSxFQUVSQSxFQURBelQsRUFBUSsxQyxZQUFZdGlDLEdBQ2hCck8sRUFBT1MsS0FBSzdGLEVBQVFnMkMsVUFBVWgyQyxFQUFRODFDLGVBQWVyaUMsSUFBSyxPQUcxRHJPLEVBQU9TLEtBQUs0TixRQUduQixHQUFpQixpQkFBTkEsRUFDWkEsRUFBSXpULEVBQVFpMkMsWUFBWXhpQyxRQUV2QixHQUFJQSxRQUNMQSxFQUFJck8sRUFBT1EsWUFBWSxRQUV0QixHQUFJaVQsRUFBR0ksS0FBS3hGLEdBQ2JBLEVBQUlBLEVBQUV1SSxZQUFZNVcsT0FFakIsS0FBSXFPLEVBQUV5RyxRQUtQLE1BQU0sSUFBSXZVLE1BQU0sZ0JBSGhCOE4sRUFBSXJPLEVBQU9TLEtBQUs0TixFQUFFeUcsV0FNMUIsT0FBT3pHLEdBT1h6VCxFQUFRazJDLFlBQWMsU0FBVTlzQyxHQUM1QixPQUFPLElBQUl5UCxFQUFHN1ksRUFBUStiLFNBQVMzUyxJQUFNMFMsWUFNekM5YixFQUFRdTFDLFlBQWMsU0FBVW5zQyxHQUU1QixNQUFPLE1BRFBBLEVBQU1wSixFQUFRK2IsU0FBUzNTLElBQ0w3QixTQUFTLFFBTS9CdkgsRUFBUW0yQyxXQUFhLFNBQVUxOEIsR0FDM0IsT0FBTyxJQUFJWixFQUFHWSxHQUFLdUQsU0FBUyxNQU1oQ2hkLEVBQVFvMkMsV0FBYSxTQUFVMzhCLEdBQzNCLE9BQU9yVSxFQUFPUyxLQUFLNFQsRUFBSWtELE9BQU8sS0FBS3pDLFlBT3ZDbGEsRUFBUXEyQyxPQUFTLFNBQVV4cEMsRUFBR2thLEdBSzFCLFlBSmEsSUFBVEEsSUFBbUJBLEVBQU8sS0FDOUJsYSxFQUFJN00sRUFBUStiLFNBQVNsUCxHQUNoQmthLElBQ0RBLEVBQU8sS0FDSm90QixFQUFpQixTQUFXcHRCLEdBQzlCc2lCLE9BQU94OEIsR0FDUDg4QixVQU1UM3BDLEVBQVFzMkMsVUFBWSxTQUFVenBDLEdBQzFCLE9BQU83TSxFQUFRcTJDLE9BQU94cEMsSUFNMUI3TSxFQUFRdzJDLE9BQVMsU0FBVTNwQyxHQUV2QixPQURBQSxFQUFJN00sRUFBUStiLFNBQVNsUCxHQUNkeW5DLEVBQVcsVUFDYmpMLE9BQU94OEIsR0FDUDg4QixVQU9UM3BDLEVBQVF5MkMsVUFBWSxTQUFVNXBDLEVBQUc2cEMsR0FDN0I3cEMsRUFBSTdNLEVBQVErYixTQUFTbFAsR0FDckIsSUFBSTZtQixFQUFPNGdCLEVBQVcsVUFDakJqTCxPQUFPeDhCLEdBQ1A4OEIsU0FDTCxPQUFlLElBQVgrTSxFQUNPMTJDLEVBQVF5MUMsVUFBVS9oQixFQUFNLElBR3hCQSxHQU9mMXpCLEVBQVEyMkMsUUFBVSxTQUFVOXBDLEdBQ3hCLE9BQU83TSxFQUFRcTJDLE9BQU9oQyxFQUFJdUMsT0FBTy9wQyxLQUtyQzdNLEVBQVE2MkMsZUFBaUIsU0FBVUMsR0FDL0IsT0FBTzFDLEVBQVUyQyxpQkFBaUJELElBUXRDOTJDLEVBQVFnM0MsY0FBZ0IsU0FBVUMsRUFBV0MsR0FFekMsWUFEaUIsSUFBYkEsSUFBdUJBLEdBQVcsR0FDYixLQUFyQkQsRUFBVXB6QyxPQUVIdXdDLEVBQVUrQyxnQkFBZ0IveEMsRUFBTzRILE9BQU8sQ0FBQzVILEVBQU9TLEtBQUssQ0FBQyxJQUFLb3hDLE9BRWpFQyxHQUdFOUMsRUFBVStDLGdCQUFnQkYsSUFRckNqM0MsRUFBUW8zQyxhQUFlLFNBQVVFLEVBQVFKLEdBUXJDLFlBUGlCLElBQWJBLElBQXVCQSxHQUFXLEdBQ3RDSSxFQUFTdDNDLEVBQVErYixTQUFTdTdCLEdBQ3RCSixHQUE4QixLQUFsQkksRUFBT3p6QyxTQUNuQnl6QyxFQUFTbEQsRUFBVW1ELGlCQUFpQkQsR0FBUSxHQUFPN3dDLE1BQU0sSUFFN0RrUyxFQUF5QixLQUFsQjIrQixFQUFPenpDLFFBRVA3RCxFQUFRcTJDLE9BQU9pQixHQUFRN3dDLE9BQU8sS0FFekN6RyxFQUFRcTNDLGdCQUFrQnIzQyxFQUFRbzNDLGFBS2xDcDNDLEVBQVF3M0MsZ0JBQWtCLFNBQVVWLEdBR2hDLE9BRkFBLEVBQWE5MkMsRUFBUStiLFNBQVMrNkIsR0FFdkIxQyxFQUFVcUQsZ0JBQWdCWCxHQUFZLEdBQU9yd0MsTUFBTSxJQUs5RHpHLEVBQVEwM0MsYUFBZSxTQUFVVCxHQUs3QixPQUh5QixNQUR6QkEsRUFBWWozQyxFQUFRK2IsU0FBU2s3QixJQUNmcHpDLFNBQ1ZvekMsRUFBWTdDLEVBQVVtRCxpQkFBaUJOLEdBQVcsR0FBT3h3QyxNQUFNLElBRTVEd3dDLEdBS1hqM0MsRUFBUTIzQyxPQUFTLFNBQVVDLEVBQVNkLEVBQVlzbkQsR0FDNUMsSUFBSXZtRCxFQUFNekQsRUFBVTBELEtBQUtGLEVBQVNkLEdBQzlCa0IsRUFBV0gsRUFBSUcsU0FNbkIsTUFMVSxDQUNOaDNDLEVBQUc2MkMsRUFBSUUsVUFBVXR4QyxNQUFNLEVBQUcsSUFDMUJ4RSxFQUFHNDFDLEVBQUlFLFVBQVV0eEMsTUFBTSxHQUFJLElBQzNCZ04sRUFBRzJxRixFQUFVcG1ELEdBQXNCLEVBQVZvbUQsRUFBYyxJQUFNcG1ELEVBQVcsS0FVaEVoNEMsRUFBUWk0QyxvQkFBc0IsU0FBVXhnQyxHQUNwQyxJQUFJeWdDLEVBQVNsNEMsRUFBUStiLFNBQVMsOEJBQXFDdEUsRUFBUTVULE9BQU8wRCxZQUNsRixPQUFPdkgsRUFBUXEyQyxPQUFPanhDLEVBQU80SCxPQUFPLENBQUNrckMsRUFBUXpnQyxNQU1qRHpYLEVBQVFtNEMsVUFBWSxTQUFVUCxFQUFTbmtDLEVBQUd6UyxFQUFHaUIsRUFBR204RixHQUM1QyxJQUFJcm1ELEVBQVkzeUMsRUFBTzRILE9BQU8sQ0FBQ2hOLEVBQVF5MUMsVUFBVXowQyxFQUFHLElBQUtoQixFQUFReTFDLFVBQVV4ekMsRUFBRyxLQUFNLElBQ2hGKzFDLEVBQVdtbUQsRUFBcUIxcUYsRUFBRzJxRixHQUN2QyxJQUFLQyxFQUFtQnJtRCxHQUNwQixNQUFNLElBQUlyeUMsTUFBTSw2QkFFcEIsSUFBSXl5QyxFQUFlaEUsRUFBVWlFLFFBQVFULEVBQVNHLEVBQVdDLEdBQ3pELE9BQU81RCxFQUFVbUQsaUJBQWlCYSxHQUFjLEdBQU8zeEMsTUFBTSxJQU1qRXpHLEVBQVFzNEMsU0FBVyxTQUFVN2tDLEVBQUd6UyxFQUFHaUIsRUFBR204RixHQUVsQyxJQUFLQyxFQURVRixFQUFxQjFxRixFQUFHMnFGLElBRW5DLE1BQU0sSUFBSXo0RixNQUFNLDZCQUdwQixPQUFPM0YsRUFBUXUxQyxZQUFZbndDLEVBQU80SCxPQUFPLENBQUNoTixFQUFRdzFDLGNBQWN4MEMsRUFBRyxJQUFLaEIsRUFBUXcxQyxjQUFjdnpDLEVBQUcsSUFBS2pDLEVBQVErYixTQUFTdEksT0FNM0h6VCxFQUFRdTRDLFdBQWEsU0FBVVYsR0FDM0IsSUFBSXp1QyxFQUFNcEosRUFBUStiLFNBQVM4N0IsR0FFM0IsR0FBbUIsS0FBZnp1QyxFQUFJdkYsT0FDSixNQUFNLElBQUk4QixNQUFNLDRCQUVwQixJQUFJOE4sRUFBSXJLLEVBQUksSUFLWixPQUhJcUssRUFBSSxLQUNKQSxHQUFLLElBRUYsQ0FDSEEsRUFBR0EsRUFDSHpTLEVBQUdvSSxFQUFJM0MsTUFBTSxFQUFHLElBQ2hCeEUsRUFBR21ILEVBQUkzQyxNQUFNLEdBQUksTUFPekJ6RyxFQUFRdzRDLGlCQUFtQixTQUFVMUIsR0FDakMsT0FBTzkyQyxFQUFRcTNDLGdCQUFnQnIzQyxFQUFRdzNDLGdCQUFnQlYsS0FLM0Q5MkMsRUFBUXk0QyxlQUFpQixTQUFVQyxHQUMvQixNQUFPLHNCQUFzQnJqQixLQUFLcWpCLElBS3RDMTRDLEVBQVEyNEMsY0FBZ0IsU0FBVUQsR0FFOUIsT0FEZTE0QyxFQUFRczFDLGdCQUNIdDFDLEVBQVE0NEMsYUFBYUYsSUFLN0MxNEMsRUFBUTY0QyxrQkFBb0IsU0FBVUgsR0FDbENBLEVBQVV3dUMsRUFBVXB4QyxlQUFlNEMsR0FBUzl3QyxjQUc1QyxJQUZBLElBQUk4ckIsRUFBTzF6QixFQUFRcTJDLE9BQU9xQyxHQUFTbnhDLFNBQVMsT0FDeEM2RyxFQUFNLEtBQ0RsTyxFQUFJLEVBQUdBLEVBQUl3NEMsRUFBUTcwQyxPQUFRM0QsSUFDNUI2SixTQUFTMnBCLEVBQUt4ekIsR0FBSSxLQUFPLEVBQ3pCa08sR0FBT3NxQyxFQUFReDRDLEdBQUdrMUIsY0FHbEJobkIsR0FBT3NxQyxFQUFReDRDLEdBR3ZCLE9BQU9rTyxHQUtYcE8sRUFBUTg0Qyx1QkFBeUIsU0FBVUosR0FDdkMsT0FBTzE0QyxFQUFReTRDLGVBQWVDLElBQVkxNEMsRUFBUTY0QyxrQkFBa0JILEtBQWFBLEdBT3JGMTRDLEVBQVErNEMsZ0JBQWtCLFNBQVVsekMsRUFBTW16QyxHQUN0Q256QyxFQUFPN0YsRUFBUStiLFNBQVNsVyxHQUN4QixJQUFJMDRGLEVBQVUsSUFBSTFsRixFQUFHbWdDLEdBQ3JCLE9BQUl1bEQsRUFBUTVpRixTQUdEM2IsRUFBUTIyQyxRQUFRLENBQUM5d0MsRUFBTSxPQUFPWSxPQUFPLElBR3pDekcsRUFBUTIyQyxRQUFRLENBQUM5d0MsRUFBTVQsRUFBT1MsS0FBSzA0RixFQUFRcmtGLGFBQWF6VCxPQUFPLEtBUTFFekcsRUFBUXcrRixpQkFBbUIsU0FBVTM0RixFQUFNNDRGLEVBQU1DLEdBQzdDLElBQUlDLEVBQVUzK0YsRUFBUStiLFNBQVNsVyxHQUMzQis0RixFQUFVNStGLEVBQVErYixTQUFTMGlGLEdBQzNCSSxFQUFjNytGLEVBQVErYixTQUFTMmlGLEdBSW5DLE9BSEEvbEYsRUFBMEIsS0FBbkJnbUYsRUFBUTk2RixRQUNmOFUsRUFBMEIsS0FBbkJpbUYsRUFBUS82RixRQUNEN0QsRUFBUXMyQyxVQUFVbHhDLEVBQU80SCxPQUFPLENBQUM1SCxFQUFPUyxLQUFLLEtBQU0sT0FBUTg0RixFQUFTQyxFQUFTNStGLEVBQVFzMkMsVUFBVXVvRCxNQUM5RnA0RixPQUFPLEtBSzFCekcsRUFBUWk1QyxjQUFnQixTQUFVUCxHQUM5QixJQUFJN3JDLEVBQUk3TSxFQUFRMjFDLE1BQU0rQyxHQUN0QixPQUFvQixJQUFiN3JDLEVBQUVoSixRQUFnQmdKLEVBQUUsSUFBTSxHQUFLQSxFQUFFLElBQU0sR0FLbEQ3TSxFQUFRNDRDLGFBQWUsU0FBVXh1QyxHQUM3QixNQUFtQixpQkFBUkEsRUFDQUEsRUFFSjg4RSxFQUFVaHVDLGNBQWM5dUMsR0FBT0EsRUFBTSxLQUFPQSxHQU12RHBLLEVBQVFtNUMsaUJBQW1CLFNBQVUxbEMsRUFBR3pTLEVBQUdpQixFQUFHNjhGLEVBQWtCVixRQUNuQyxJQUFyQlUsSUFBK0JBLEdBQW1CLEdBQ3RELElBQUl6bEQsRUFBb0IsSUFBSXhnQyxFQUFHLG1FQUFvRSxJQUMvRnlnQyxFQUFjLElBQUl6Z0MsRUFBRyxtRUFBb0UsSUFDN0YsR0FBaUIsS0FBYjdYLEVBQUU2QyxRQUE4QixLQUFiNUIsRUFBRTRCLE9BQ3JCLE9BQU8sRUFFWCxJQUFLdzZGLEVBQW1CRixFQUFxQjFxRixFQUFHMnFGLElBQzVDLE9BQU8sRUFFWCxJQUFJVyxFQUFNLElBQUlsbUYsRUFBRzdYLEdBQ2JnK0YsRUFBTSxJQUFJbm1GLEVBQUc1VyxHQUNqQixRQUFJODhGLEVBQUlwakYsVUFBWW9qRixFQUFJeDBFLEdBQUcrdUIsSUFBZ0IwbEQsRUFBSXJqRixVQUFZcWpGLEVBQUl6MEUsR0FBRyt1QixPQUc5RHdsRCxHQUFtRCxJQUEvQkUsRUFBSXBsRixJQUFJeS9CLEtBVXBDcjVDLEVBQVF1NUMsU0FBVyxTQUFVQyxHQUN6QixHQUFJcDBDLEVBQU93QixTQUFTNHlDLEdBQ2hCLE1BQU8sS0FBT0EsRUFBR2p5QyxTQUFTLE9BRXpCLEdBQUlpeUMsYUFBY3RyQyxNQUFPLENBRTFCLElBREEsSUFBSW5JLEVBQVEsR0FDSDdGLEVBQUksRUFBR0EsRUFBSXM1QyxFQUFHMzFDLE9BQVEzRCxJQUMzQjZGLEVBQU11RSxLQUFLdEssRUFBUXU1QyxTQUFTQyxFQUFHdDVDLEtBRW5DLE9BQU82RixJQWFmL0YsRUFBUTgyQixpQkFBbUIsU0FBVS96QixFQUFNMDJDLEVBQVF0eUMsR0F5RC9DLEdBeERBcEUsRUFBSzIyQyxJQUFNLEdBQ1gzMkMsRUFBSzQyQyxRQUFVLEdBRWY1MkMsRUFBS2tMLE9BQVMsU0FBVTJyQyxHQUVwQixRQURjLElBQVZBLElBQW9CQSxHQUFRLEdBQzVCQSxFQUFPLENBQ1AsSUFBSXFsRCxFQUFRLEdBSVosT0FIQWw4RixFQUFLNDJDLFFBQVFobUIsU0FBUSxTQUFVa21CLEdBQzNCb2xELEVBQU1wbEQsR0FBUyxLQUFPOTJDLEVBQUs4MkMsR0FBT3R5QyxTQUFTLFVBRXhDMDNGLEVBRVgsT0FBT2ovRixFQUFRdTVDLFNBQVN4MkMsRUFBSzIyQyxNQUVqQzMyQyxFQUFLKzJDLFVBQVksV0FDYixPQUFPekYsRUFBSXVDLE9BQU83ekMsRUFBSzIyQyxNQUUzQkQsRUFBTzlsQixTQUFRLFNBQVVrbUIsRUFBTzM1QyxHQUU1QixTQUFTUSxJQUNMLE9BQU9xQyxFQUFLMjJDLElBQUl4NUMsR0FFcEIsU0FBUzY1QyxFQUFPdG1DLEdBRWMsUUFEMUJBLEVBQUl6VCxFQUFRK2IsU0FBU3RJLElBQ2ZsTSxTQUFTLFFBQW9Cc3lDLEVBQU1HLFlBQ3JDdm1DLEVBQUlyTyxFQUFPUSxZQUFZLElBRXZCaTBDLEVBQU1JLFdBQWFKLEVBQU1oMkMsUUFDekI0UCxFQUFJelQsRUFBUTQxQyxXQUFXbmlDLEdBQ3ZCa0YsRUFBT2toQyxFQUFNaDJDLFFBQVU0UCxFQUFFNVAsT0FBUSxhQUFlZzJDLEVBQU1wNUMsS0FBTyx1QkFBeUJvNUMsRUFBTWgyQyxPQUFTLFdBRTlGZzJDLEVBQU1HLFdBQTBCLElBQWJ2bUMsRUFBRTVQLFNBQWlCZzJDLEVBQU1oMkMsUUFDbkQ4VSxFQUFPa2hDLEVBQU1oMkMsU0FBVzRQLEVBQUU1UCxPQUFRLGFBQWVnMkMsRUFBTXA1QyxLQUFPLDZCQUErQm81QyxFQUFNaDJDLFFBRXZHZCxFQUFLMjJDLElBQUl4NUMsR0FBS3VULEVBaEJsQjFRLEVBQUs0MkMsUUFBUXJ2QyxLQUFLdXZDLEVBQU1wNUMsTUFrQnhCRyxPQUFPQyxlQUFla0MsRUFBTTgyQyxFQUFNcDVDLEtBQU0sQ0FDcENLLFlBQVksRUFDWmlELGNBQWMsRUFDZGhELElBQUtMLEVBQ0xtUixJQUFLa29DLElBRUxGLEVBQU1sUixVQUNONWxDLEVBQUs4MkMsRUFBTXA1QyxNQUFRbzVDLEVBQU1sUixTQUd6QmtSLEVBQU1LLE9BQ050NUMsT0FBT0MsZUFBZWtDLEVBQU04MkMsRUFBTUssTUFBTyxDQUNyQ3A1QyxZQUFZLEVBQ1ppRCxjQUFjLEVBQ2Q4TixJQUFLa29DLEVBQ0xoNUMsSUFBS0wsT0FLYnlHLEVBT0EsR0FOb0IsaUJBQVRBLElBQ1BBLEVBQU8vQixFQUFPUyxLQUFLcWhGLEVBQVVweEMsZUFBZTN1QyxHQUFPLFFBRW5EL0IsRUFBT3dCLFNBQVNPLEtBQ2hCQSxFQUFPa3RDLEVBQUk4RixPQUFPaHpDLElBRWxCK0csTUFBTWhKLFFBQVFpQyxHQUFPLENBQ3JCLEdBQUlBLEVBQUt0RCxPQUFTZCxFQUFLNDJDLFFBQVE5MUMsT0FDM0IsTUFBTSxJQUFJOEIsTUFBTSxrQ0FHcEJ3QixFQUFLd3NCLFNBQVEsU0FBVW56QixFQUFHTixHQUN0QjZDLEVBQUtBLEVBQUs0MkMsUUFBUXo1QyxJQUFNRixFQUFRK2IsU0FBU3ZiLFVBRzVDLElBQW9CLGlCQUFUMkcsRUFVWixNQUFNLElBQUl4QixNQUFNLGdCQVRoQixJQUFJdTVGLEVBQVN0K0YsT0FBT3VTLEtBQUtoTSxHQUN6QnN5QyxFQUFPOWxCLFNBQVEsU0FBVWttQixJQUNlLElBQWhDcWxELEVBQU90MkYsUUFBUWl4QyxFQUFNcDVDLFFBQ3JCc0MsRUFBSzgyQyxFQUFNcDVDLE1BQVEwRyxFQUFLMHlDLEVBQU1wNUMsUUFDRyxJQUFqQ3krRixFQUFPdDJGLFFBQVFpeEMsRUFBTUssU0FDckJuM0MsRUFBSzgyQyxFQUFNSyxPQUFTL3lDLEVBQUsweUMsRUFBTUssYyxpQkN2a0JuRCxhQUFFLFNBQVNodUMsR0FFWCxhQUVBLElBQUlnSSxFQUFXLFNBQVVwUixHQUFNd3NCLFdBQVd4c0IsRUFBSSxTQUN4QixJQUFYbXNCLEdBQTBCQSxHQUFzQyxtQkFBcEJBLEVBQVEvYSxXQUU5REEsRUFBVythLEVBQVEvYSxVQW1GaEJqVSxFQUFPRCxRQWhGWCxTQUFtQnE4RCxHQUNsQixJQUFJOGlDLEVBQVksQ0FDZjlpQyxTQUFVQSxHQUFZLEVBQ3RCMXRDLFFBQVMsRUFDVGMsTUFBTyxHQUNQMnZFLFdBQVcsRUFFWHBtQyxLQUFNLFdBQ0wsSUFBNEIsSUFBeEJtbUMsRUFBVUMsVUFBcUIsQ0FDM0JELEVBQVV4d0UsVUFDVnd3RSxFQUFVQyxXQUFZLEVBQ3RCLElBQUlDLEVBQVUsT0FFVkEsRUFBVSxFQUV0QixJQUFJbnVELEVBQU8sQ0FBRXZ2QyxFQUFHLEdBRVcsbUJBQWhCdUIsVUFBVSxHQUNwQmd1QyxFQUFLOEMsS0FBTzl3QyxVQUFVLEdBRXRCZ3VDLEVBQUt2dkMsRUFBSXVCLFVBQVUsR0FHaEJBLFVBQVVXLFFBQVUsSUFDSSxtQkFBaEJYLFVBQVUsR0FBa0JndUMsRUFBSzhDLEtBQU85d0MsVUFBVSxHQUN4RGd1QyxFQUFLdnZDLEVBQUl1QixVQUFVLElBR3pCLElBQUk4d0MsRUFBTzlDLEVBQUs4QyxLQUdoQixHQUZBOUMsRUFBSzhDLEtBQU8sV0FBYUEsRUFBS21yRCxFQUFVam1DLFFBRXBDaW1DLEVBQVV4d0UsUUFBVXVpQixFQUFLdnZDLEVBQUkwOUYsRUFBVUYsRUFBVTlpQyxTQUtwRCxPQUp1QixJQUFaZ2pDLElBQ0hGLEVBQVV4d0UsVUFDVnd3RSxFQUFVQyxXQUFZLEdBRXZCRCxFQUFVMXZFLE1BQU1ubEIsS0FBSzRtQyxHQUc3Qml1RCxFQUFVeHdFLFNBQVd1aUIsRUFBS3Z2QyxFQUFJMDlGLEVBQzlCbnVELEVBQUs4QyxLQUFLbXJELEVBQVVqbUMsT0FDRSxJQUFabW1DLElBQWVGLEVBQVVDLFdBQVksSUFHaERsbUMsTUFBTyxTQUFTdjNELEdBS2YsR0FKQUEsRUFBSUEsR0FBSyxFQUVUdzlGLEVBQVV4d0UsU0FBV2h0QixFQUVoQnc5RixFQUFVMXZFLE1BQU01ckIsT0FBckIsQ0FRQSxJQUFJcXRDLEVBQU9pdUQsRUFBVTF2RSxNQUFNLEdBRXZCeWhCLEVBQUt2dkMsRUFBSXc5RixFQUFVeHdFLFFBQVV3d0UsRUFBVTlpQyxXQUkzQzhpQyxFQUFVMXZFLE1BQU10WCxRQUNoQmduRixFQUFVeHdFLFNBQVd1aUIsRUFBS3Z2QyxFQUUxQnVTLEVBQVNnOUIsRUFBSzhDLFlBaEJiLEdBQUltckQsRUFBVXh3RSxRQUFVLEVBQ3ZCLE1BQU0sSUFBSWhwQixNQUFNLGlDQWtCbkIyNUYsVUFBVyxTQUFTMzlGLEdBRW5CLE9BREFBLEVBQUlBLEdBQUssRUFDRnc5RixFQUFVeHdFLFFBQVVodEIsR0FBS3c5RixFQUFVOWlDLFdBSTVDLE9BQU84aUMsR0FyRlAsSyxrQ0NBRCxNQUFNbGlELEVBQWdCLEVBQVEsSUFFOUJoOUMsRUFBT0QsUUFTUCxTQUFxQjZ3RCxFQUFVc0csRUFBVTNpRCxHQUN2Q3E4QyxFQUFTcFQsVUFBVVIsRUFBYyxDQUMvQnZwQyxPQUFRLGtCQUNSNDhCLE9BQVEsQ0FBQzZtQixNQUNQLFNBQVMvekQsRUFBSytILEdBQ2hCLEdBQUkvSCxFQUVGLE1BQW9CLHNDQUFoQkEsRUFBSXFVLFFBQ0NqRCxFQUFHLEtBQU0sVUFFVEEsRUFBR3BSLEdBR2RvUixFQUFHLEtBQU1ySixFQUFJcXZCIiwiZmlsZSI6InNjYXR0ZXJqcy1wbHVnaW4td2ViMy5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTQyKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiLCJtb2R1bGUuZXhwb3J0cyA9IFNjYXR0ZXJKUzsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG57XG4gIC8vIGF2b2lkIHNjb3BlIGNyZWVwLCB0aGUga2V5cyBhcnJheSBjYW4gdGhlbiBiZSBjb2xsZWN0ZWRcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gdGhlIG5vLWhhbGYtb3BlbiBlbmZvcmNlclxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIGlmIHdlIGFsbG93IGhhbGYtb3BlbiBzdGF0ZSwgb3IgaWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsXG4gIC8vIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLmFsbG93SGFsZk9wZW4gfHwgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuO1xuXG4gIC8vIG5vIG1vcmUgZGF0YSBjYW4gYmUgd3JpdHRlbi5cbiAgLy8gQnV0IGFsbG93IG1vcmUgd3JpdGVzIHRvIGhhcHBlbiBpbiB0aGlzIHRpY2suXG4gIHBuYS5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cblxuZnVuY3Rpb24gb25FbmROVChzZWxmKSB7XG4gIHNlbGYuZW5kKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbkR1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIHRoaXMuZW5kKCk7XG5cbiAgcG5hLm5leHRUaWNrKGNiLCBlcnIpO1xufTsiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gJGdldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gJGdldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9ICRnZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBSZWZsZWN0QXBwbHkodGhpcy5saXN0ZW5lciwgdGhpcy50YXJnZXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiIsIihmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBVdGlsc1xuICBmdW5jdGlvbiBhc3NlcnQgKHZhbCwgbXNnKSB7XG4gICAgaWYgKCF2YWwpIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbiAgfVxuXG4gIC8vIENvdWxkIHVzZSBgaW5oZXJpdHNgIG1vZHVsZSwgYnV0IGRvbid0IHdhbnQgdG8gbW92ZSBmcm9tIHNpbmdsZSBmaWxlXG4gIC8vIGFyY2hpdGVjdHVyZSB5ZXQuXG4gIGZ1bmN0aW9uIGluaGVyaXRzIChjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlO1xuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yO1xuICB9XG5cbiAgLy8gQk5cblxuICBmdW5jdGlvbiBCTiAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAoQk4uaXNCTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIHRoaXMud29yZHMgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIC8vIFJlZHVjdGlvbiBjb250ZXh0XG4gICAgdGhpcy5yZWQgPSBudWxsO1xuXG4gICAgaWYgKG51bWJlciAhPT0gbnVsbCkge1xuICAgICAgaWYgKGJhc2UgPT09ICdsZScgfHwgYmFzZSA9PT0gJ2JlJykge1xuICAgICAgICBlbmRpYW4gPSBiYXNlO1xuICAgICAgICBiYXNlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXQobnVtYmVyIHx8IDAsIGJhc2UgfHwgMTAsIGVuZGlhbiB8fCAnYmUnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCTjtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJOID0gQk47XG4gIH1cblxuICBCTi5CTiA9IEJOO1xuICBCTi53b3JkU2l6ZSA9IDI2O1xuXG4gIHZhciBCdWZmZXI7XG4gIHRyeSB7XG4gICAgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cblxuICBCTi5pc0JOID0gZnVuY3Rpb24gaXNCTiAobnVtKSB7XG4gICAgaWYgKG51bSBpbnN0YW5jZW9mIEJOKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIHR5cGVvZiBudW0gPT09ICdvYmplY3QnICYmXG4gICAgICBudW0uY29uc3RydWN0b3Iud29yZFNpemUgPT09IEJOLndvcmRTaXplICYmIEFycmF5LmlzQXJyYXkobnVtLndvcmRzKTtcbiAgfTtcblxuICBCTi5tYXggPSBmdW5jdGlvbiBtYXggKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA+IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5taW4gPSBmdW5jdGlvbiBtaW4gKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA8IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsIGJhc2UsIGVuZGlhbik7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBiYXNlID0gMTY7XG4gICAgfVxuICAgIGFzc2VydChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTtcblxuICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICBzdGFydCsrO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgdGhpcy5fcGFyc2VIZXgobnVtYmVyLCBzdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlQmFzZShudW1iZXIsIGJhc2UsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyWzBdID09PSAnLScpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXROdW1iZXIgPSBmdW5jdGlvbiBfaW5pdE51bWJlciAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICBudW1iZXIgPSAtbnVtYmVyO1xuICAgIH1cbiAgICBpZiAobnVtYmVyIDwgMHg0MDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyBudW1iZXIgJiAweDNmZmZmZmYgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKG51bWJlci5sZW5ndGggLyAzKTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIHZhciBvZmYgPSAwO1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxLCBqID0gMDsgaSA+PSAwOyBpIC09IDMpIHtcbiAgICAgICAgdyA9IG51bWJlcltpXSB8IChudW1iZXJbaSAtIDFdIDw8IDgpIHwgKG51bWJlcltpIC0gMl0gPDwgMTYpO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAgIHRoaXMud29yZHNbaiArIDFdID0gKHcgPj4+ICgyNiAtIG9mZikpICYgMHgzZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjQ7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgKyAxXSA8PCA4KSB8IChudW1iZXJbaSArIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlSGV4IChzdHIsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciA8PD0gNDtcblxuICAgICAgLy8gJ2EnIC0gJ2YnXG4gICAgICBpZiAoYyA+PSA0OSAmJiBjIDw9IDU0KSB7XG4gICAgICAgIHIgfD0gYyAtIDQ5ICsgMHhhO1xuXG4gICAgICAvLyAnQScgLSAnRidcbiAgICAgIH0gZWxzZSBpZiAoYyA+PSAxNyAmJiBjIDw9IDIyKSB7XG4gICAgICAgIHIgfD0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgfD0gYyAmIDB4ZjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlSGV4ID0gZnVuY3Rpb24gX3BhcnNlSGV4IChudW1iZXIsIHN0YXJ0KSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGosIHc7XG4gICAgLy8gU2NhbiAyNC1iaXQgY2h1bmtzIGFuZCBhZGQgdGhlbSB0byB0aGUgbnVtYmVyXG4gICAgdmFyIG9mZiA9IDA7XG4gICAgZm9yIChpID0gbnVtYmVyLmxlbmd0aCAtIDYsIGogPSAwOyBpID49IHN0YXJ0OyBpIC09IDYpIHtcbiAgICAgIHcgPSBwYXJzZUhleChudW1iZXIsIGksIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIC8vIE5PVEU6IGAweDNmZmZmZmAgaXMgaW50ZW50aW9uYWwgaGVyZSwgMjZiaXRzIG1heCBzaGlmdCArIDI0Yml0IGhleCBsaW1iXG4gICAgICB0aGlzLndvcmRzW2ogKyAxXSB8PSB3ID4+PiAoMjYgLSBvZmYpICYgMHgzZmZmZmY7XG4gICAgICBvZmYgKz0gMjQ7XG4gICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSArIDYgIT09IHN0YXJ0KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBzdGFydCwgaSArIDYpO1xuICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICByICs9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgciArPSBjIC0gMTcgKyAweGE7XG5cbiAgICAgIC8vICcwJyAtICc5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciArPSBjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlID0gZnVuY3Rpb24gX3BhcnNlQmFzZSAobnVtYmVyLCBiYXNlLCBzdGFydCkge1xuICAgIC8vIEluaXRpYWxpemUgYXMgemVyb1xuICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uIF9leHBhbmQgKHNpemUpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBzaXplKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgYDBgIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwICgpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiAxICYmIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgdGhpcy5sZW5ndGgtLTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9ub3JtU2lnbiA9IGZ1bmN0aW9uIF9ub3JtU2lnbiAoKSB7XG4gICAgLy8gLTAgPSAwXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9O1xuXG4gIC8qXG5cbiAgdmFyIHplcm9zID0gW107XG4gIHZhciBncm91cFNpemVzID0gW107XG4gIHZhciBncm91cEJhc2VzID0gW107XG5cbiAgdmFyIHMgPSAnJztcbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IEJOLndvcmRTaXplKSB7XG4gICAgemVyb3NbaV0gPSBzO1xuICAgIHMgKz0gJzAnO1xuICB9XG4gIGdyb3VwU2l6ZXNbMF0gPSAwO1xuICBncm91cFNpemVzWzFdID0gMDtcbiAgZ3JvdXBCYXNlc1swXSA9IDA7XG4gIGdyb3VwQmFzZXNbMV0gPSAwO1xuICB2YXIgYmFzZSA9IDIgLSAxO1xuICB3aGlsZSAoKytiYXNlIDwgMzYgKyAxKSB7XG4gICAgdmFyIGdyb3VwU2l6ZSA9IDA7XG4gICAgdmFyIGdyb3VwQmFzZSA9IDE7XG4gICAgd2hpbGUgKGdyb3VwQmFzZSA8ICgxIDw8IEJOLndvcmRTaXplKSAvIGJhc2UpIHtcbiAgICAgIGdyb3VwQmFzZSAqPSBiYXNlO1xuICAgICAgZ3JvdXBTaXplICs9IDE7XG4gICAgfVxuICAgIGdyb3VwU2l6ZXNbYmFzZV0gPSBncm91cFNpemU7XG4gICAgZ3JvdXBCYXNlc1tiYXNlXSA9IGdyb3VwQmFzZTtcbiAgfVxuXG4gICovXG5cbiAgdmFyIHplcm9zID0gW1xuICAgICcnLFxuICAgICcwJyxcbiAgICAnMDAnLFxuICAgICcwMDAnLFxuICAgICcwMDAwJyxcbiAgICAnMDAwMDAnLFxuICAgICcwMDAwMDAnLFxuICAgICcwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICBdO1xuXG4gIHZhciBncm91cFNpemVzID0gW1xuICAgIDAsIDAsXG4gICAgMjUsIDE2LCAxMiwgMTEsIDEwLCA5LCA4LFxuICAgIDgsIDcsIDcsIDcsIDcsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDVcbiAgXTtcblxuICB2YXIgZ3JvdXBCYXNlcyA9IFtcbiAgICAwLCAwLFxuICAgIDMzNTU0NDMyLCA0MzA0NjcyMSwgMTY3NzcyMTYsIDQ4ODI4MTI1LCA2MDQ2NjE3NiwgNDAzNTM2MDcsIDE2Nzc3MjE2LFxuICAgIDQzMDQ2NzIxLCAxMDAwMDAwMCwgMTk0ODcxNzEsIDM1ODMxODA4LCA2Mjc0ODUxNywgNzUyOTUzNiwgMTEzOTA2MjUsXG4gICAgMTY3NzcyMTYsIDI0MTM3NTY5LCAzNDAxMjIyNCwgNDcwNDU4ODEsIDY0MDAwMDAwLCA0MDg0MTAxLCA1MTUzNjMyLFxuICAgIDY0MzYzNDMsIDc5NjI2MjQsIDk3NjU2MjUsIDExODgxMzc2LCAxNDM0ODkwNywgMTcyMTAzNjgsIDIwNTExMTQ5LFxuICAgIDI0MzAwMDAwLCAyODYyOTE1MSwgMzM1NTQ0MzIsIDM5MTM1MzkzLCA0NTQzNTQyNCwgNTI1MjE4NzUsIDYwNDY2MTc2XG4gIF07XG5cbiAgQk4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGJhc2UsIHBhZGRpbmcpIHtcbiAgICBiYXNlID0gYmFzZSB8fCAxMDtcbiAgICBwYWRkaW5nID0gcGFkZGluZyB8IDAgfHwgMTtcblxuICAgIHZhciBvdXQ7XG4gICAgaWYgKGJhc2UgPT09IDE2IHx8IGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBvZmYgPSAwO1xuICAgICAgdmFyIGNhcnJ5ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV07XG4gICAgICAgIHZhciB3b3JkID0gKCgodyA8PCBvZmYpIHwgY2FycnkpICYgMHhmZmZmZmYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY2FycnkgPSAodyA+Pj4gKDI0IC0gb2ZmKSkgJiAweGZmZmZmZjtcbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmICs9IDI7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgICAgb3V0ID0gY2FycnkudG9TdHJpbmcoMTYpICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09IChiYXNlIHwgMCkgJiYgYmFzZSA+PSAyICYmIGJhc2UgPD0gMzYpIHtcbiAgICAgIC8vIHZhciBncm91cFNpemUgPSBNYXRoLmZsb29yKEJOLndvcmRTaXplICogTWF0aC5MTjIgLyBNYXRoLmxvZyhiYXNlKSk7XG4gICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tiYXNlXTtcbiAgICAgIC8vIHZhciBncm91cEJhc2UgPSBNYXRoLnBvdyhiYXNlLCBncm91cFNpemUpO1xuICAgICAgdmFyIGdyb3VwQmFzZSA9IGdyb3VwQmFzZXNbYmFzZV07XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBjID0gdGhpcy5jbG9uZSgpO1xuICAgICAgYy5uZWdhdGl2ZSA9IDA7XG4gICAgICB3aGlsZSAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgdmFyIHIgPSBjLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIHRvQnVmZmVyIChlbmRpYW4sIGxlbmd0aCkge1xuICAgIGFzc2VydCh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5IChlbmRpYW4sIGxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCgpO1xuICAgIHZhciByZXFMZW5ndGggPSBsZW5ndGggfHwgTWF0aC5tYXgoMSwgYnl0ZUxlbmd0aCk7XG4gICAgYXNzZXJ0KGJ5dGVMZW5ndGggPD0gcmVxTGVuZ3RoLCAnYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgIGFzc2VydChyZXFMZW5ndGggPiAwLCAnUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwJyk7XG5cbiAgICB0aGlzLnN0cmlwKCk7XG4gICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbiA9PT0gJ2xlJztcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5VHlwZShyZXFMZW5ndGgpO1xuXG4gICAgdmFyIGIsIGk7XG4gICAgdmFyIHEgPSB0aGlzLmNsb25lKCk7XG4gICAgaWYgKCFsaXR0bGVFbmRpYW4pIHtcbiAgICAgIC8vIEFzc3VtZSBiaWctZW5kaWFuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxTGVuZ3RoIC0gYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7ICFxLmlzWmVybygpOyBpKyspIHtcbiAgICAgICAgYiA9IHEuYW5kbG4oMHhmZik7XG4gICAgICAgIHEuaXVzaHJuKDgpO1xuXG4gICAgICAgIHJlc1tyZXFMZW5ndGggLSBpIC0gMV0gPSBiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbaV0gPSBiO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJlcUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gJiAoMSA8PCB3Yml0KSkgPj4+IHdiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvLyBOdW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzXG4gIEJOLnByb3RvdHlwZS56ZXJvQml0cyA9IGZ1bmN0aW9uIHplcm9CaXRzICgpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIDA7XG5cbiAgICB2YXIgciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO1xuICAgICAgciArPSBiO1xuICAgICAgaWYgKGIgIT09IDI2KSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGggPSBmdW5jdGlvbiBieXRlTGVuZ3RoICgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkgLyA4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9Ud29zID0gZnVuY3Rpb24gdG9Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21Ud29zID0gZnVuY3Rpb24gZnJvbVR3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMudGVzdG4od2lkdGggLSAxKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uIGlzTmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZSAhPT0gMDtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5lZygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbmVnID0gZnVuY3Rpb24gaW5lZyAoKSB7XG4gICAgaWYgKCF0aGlzLmlzWmVybygpKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1b3IgPSBmdW5jdGlvbiBpdW9yIChudW0pIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV0gfCBudW0ud29yZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYW5kID0gZnVuY3Rpb24gaWFuZCAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVhbmQobnVtKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhbmQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVhbmQgPSBmdW5jdGlvbiB1YW5kIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1YW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1YW5kKHRoaXMpO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXV4b3IgPSBmdW5jdGlvbiBpdXhvciAobnVtKSB7XG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhO1xuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV0gXiBiLndvcmRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0aGlzICE9PSBhKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLml4b3IgPSBmdW5jdGlvbiBpeG9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXhvcihudW0pO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYFxuICBCTi5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXhvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXhvciA9IGZ1bmN0aW9uIHV4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXV4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXV4b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gTm90IGBgdGhpc2BgIHdpdGggYGB3aWR0aGBgIGJpdHdpZHRoXG4gIEJOLnByb3RvdHlwZS5pbm90biA9IGZ1bmN0aW9uIGlub3RuICh3aWR0aCkge1xuICAgIGFzc2VydCh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInICYmIHdpZHRoID49IDApO1xuXG4gICAgdmFyIGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKHdpZHRoIC8gMjYpIHwgMDtcbiAgICB2YXIgYml0c0xlZnQgPSB3aWR0aCAlIDI2O1xuXG4gICAgLy8gRXh0ZW5kIHRoZSBidWZmZXIgd2l0aCBsZWFkaW5nIHplcm9lc1xuICAgIHRoaXMuX2V4cGFuZChieXRlc05lZWRlZCk7XG5cbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICBieXRlc05lZWRlZC0tO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb21wbGV0ZSB3b3Jkc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgcmVzaWR1ZVxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmICgweDNmZmZmZmYgPj4gKDI2IC0gYml0c0xlZnQpKTtcbiAgICB9XG5cbiAgICAvLyBBbmQgcmVtb3ZlIGxlYWRpbmcgemVyb2VzXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubm90biA9IGZ1bmN0aW9uIG5vdG4gKHdpZHRoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCk7XG4gIH07XG5cbiAgLy8gU2V0IGBiaXRgIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc2V0biA9IGZ1bmN0aW9uIHNldG4gKGJpdCwgdmFsKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcblxuICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgdGhpcy5fZXhwYW5kKG9mZiArIDEpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdIHwgKDEgPDwgd2JpdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSAmIH4oMSA8PCB3Yml0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChudW0pIHtcbiAgICB2YXIgcjtcblxuICAgIC8vIG5lZ2F0aXZlICsgcG9zaXRpdmVcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG5cbiAgICAvLyBwb3NpdGl2ZSArIG5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBhLmxlbmd0aCA+IGIubGVuZ3RoXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGhdID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIC8vIENvcHkgdGhlIHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgfSBlbHNlIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChudW0pIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDAgJiYgdGhpcy5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IHRoaXMuc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmIChudW0ubmVnYXRpdmUgPT09IDAgJiYgdGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSBudW0uc3ViKHRoaXMpO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZChudW0pO1xuXG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhZGQodGhpcyk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChudW0pIHtcbiAgICAvLyB0aGlzIC0gKC1udW0pID0gdGhpcyArIG51bVxuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICB2YXIgciA9IHRoaXMuaWFkZChudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gLXRoaXMgLSBudW0gPSAtKHRoaXMgKyBudW0pXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZChudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmVcbiAgICB2YXIgY21wID0gdGhpcy5jbXAobnVtKTtcblxuICAgIC8vIE9wdGltaXphdGlvbiAtIHplcm9pZnlcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gYSA+IGJcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoY21wID4gMCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApIC0gKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIENvcHkgcmVzdCBvZiB0aGUgd29yZHNcbiAgICBpZiAoY2FycnkgPT09IDAgJiYgaSA8IGEubGVuZ3RoICYmIGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpKTtcblxuICAgIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNtYWxsTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICB2YXIgbGVuID0gKHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aCkgfCAwO1xuICAgIG91dC5sZW5ndGggPSBsZW47XG4gICAgbGVuID0gKGxlbiAtIDEpIHwgMDtcblxuICAgIC8vIFBlZWwgb25lIGl0ZXJhdGlvbiAoY29tcGlsZXIgY2FuJ3QgZG8gaXQsIGJlY2F1c2Ugb2YgY29kZSBjb21wbGV4aXR5KVxuICAgIHZhciBhID0gc2VsZi53b3Jkc1swXSB8IDA7XG4gICAgdmFyIGIgPSBudW0ud29yZHNbMF0gfCAwO1xuICAgIHZhciByID0gYSAqIGI7XG5cbiAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgIHZhciBjYXJyeSA9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgb3V0LndvcmRzWzBdID0gbG87XG5cbiAgICBmb3IgKHZhciBrID0gMTsgayA8IGxlbjsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGNhcnJ5ID4+PiAyNjtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gKGsgLSBqKSB8IDA7XG4gICAgICAgIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHIgPSBhICogYiArIHJ3b3JkO1xuICAgICAgICBuY2FycnkgKz0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgICAgcndvcmQgPSByICYgMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQgfCAwO1xuICAgICAgY2FycnkgPSBuY2FycnkgfCAwO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5IHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuc3RyaXAoKTtcbiAgfVxuXG4gIC8vIFRPRE8oaW5kdXRueSk6IGl0IG1heSBiZSByZWFzb25hYmxlIHRvIG9taXQgaXQgZm9yIHVzZXJzIHdobyBkb24ndCBuZWVkXG4gIC8vIHRvIHdvcmsgd2l0aCAyNTYtYml0IG51bWJlcnMsIG90aGVyd2lzZSBpdCBnaXZlcyAyMCUgaW1wcm92ZW1lbnQgZm9yIDI1Ni1iaXRcbiAgLy8gbXVsdGlwbGljYXRpb24gKGxpa2UgZWxsaXB0aWMgc2VjcDI1NmsxKS5cbiAgdmFyIGNvbWIxME11bFRvID0gZnVuY3Rpb24gY29tYjEwTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgdmFyIGEgPSBzZWxmLndvcmRzO1xuICAgIHZhciBiID0gbnVtLndvcmRzO1xuICAgIHZhciBvID0gb3V0LndvcmRzO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgbG87XG4gICAgdmFyIG1pZDtcbiAgICB2YXIgaGk7XG4gICAgdmFyIGEwID0gYVswXSB8IDA7XG4gICAgdmFyIGFsMCA9IGEwICYgMHgxZmZmO1xuICAgIHZhciBhaDAgPSBhMCA+Pj4gMTM7XG4gICAgdmFyIGExID0gYVsxXSB8IDA7XG4gICAgdmFyIGFsMSA9IGExICYgMHgxZmZmO1xuICAgIHZhciBhaDEgPSBhMSA+Pj4gMTM7XG4gICAgdmFyIGEyID0gYVsyXSB8IDA7XG4gICAgdmFyIGFsMiA9IGEyICYgMHgxZmZmO1xuICAgIHZhciBhaDIgPSBhMiA+Pj4gMTM7XG4gICAgdmFyIGEzID0gYVszXSB8IDA7XG4gICAgdmFyIGFsMyA9IGEzICYgMHgxZmZmO1xuICAgIHZhciBhaDMgPSBhMyA+Pj4gMTM7XG4gICAgdmFyIGE0ID0gYVs0XSB8IDA7XG4gICAgdmFyIGFsNCA9IGE0ICYgMHgxZmZmO1xuICAgIHZhciBhaDQgPSBhNCA+Pj4gMTM7XG4gICAgdmFyIGE1ID0gYVs1XSB8IDA7XG4gICAgdmFyIGFsNSA9IGE1ICYgMHgxZmZmO1xuICAgIHZhciBhaDUgPSBhNSA+Pj4gMTM7XG4gICAgdmFyIGE2ID0gYVs2XSB8IDA7XG4gICAgdmFyIGFsNiA9IGE2ICYgMHgxZmZmO1xuICAgIHZhciBhaDYgPSBhNiA+Pj4gMTM7XG4gICAgdmFyIGE3ID0gYVs3XSB8IDA7XG4gICAgdmFyIGFsNyA9IGE3ICYgMHgxZmZmO1xuICAgIHZhciBhaDcgPSBhNyA+Pj4gMTM7XG4gICAgdmFyIGE4ID0gYVs4XSB8IDA7XG4gICAgdmFyIGFsOCA9IGE4ICYgMHgxZmZmO1xuICAgIHZhciBhaDggPSBhOCA+Pj4gMTM7XG4gICAgdmFyIGE5ID0gYVs5XSB8IDA7XG4gICAgdmFyIGFsOSA9IGE5ICYgMHgxZmZmO1xuICAgIHZhciBhaDkgPSBhOSA+Pj4gMTM7XG4gICAgdmFyIGIwID0gYlswXSB8IDA7XG4gICAgdmFyIGJsMCA9IGIwICYgMHgxZmZmO1xuICAgIHZhciBiaDAgPSBiMCA+Pj4gMTM7XG4gICAgdmFyIGIxID0gYlsxXSB8IDA7XG4gICAgdmFyIGJsMSA9IGIxICYgMHgxZmZmO1xuICAgIHZhciBiaDEgPSBiMSA+Pj4gMTM7XG4gICAgdmFyIGIyID0gYlsyXSB8IDA7XG4gICAgdmFyIGJsMiA9IGIyICYgMHgxZmZmO1xuICAgIHZhciBiaDIgPSBiMiA+Pj4gMTM7XG4gICAgdmFyIGIzID0gYlszXSB8IDA7XG4gICAgdmFyIGJsMyA9IGIzICYgMHgxZmZmO1xuICAgIHZhciBiaDMgPSBiMyA+Pj4gMTM7XG4gICAgdmFyIGI0ID0gYls0XSB8IDA7XG4gICAgdmFyIGJsNCA9IGI0ICYgMHgxZmZmO1xuICAgIHZhciBiaDQgPSBiNCA+Pj4gMTM7XG4gICAgdmFyIGI1ID0gYls1XSB8IDA7XG4gICAgdmFyIGJsNSA9IGI1ICYgMHgxZmZmO1xuICAgIHZhciBiaDUgPSBiNSA+Pj4gMTM7XG4gICAgdmFyIGI2ID0gYls2XSB8IDA7XG4gICAgdmFyIGJsNiA9IGI2ICYgMHgxZmZmO1xuICAgIHZhciBiaDYgPSBiNiA+Pj4gMTM7XG4gICAgdmFyIGI3ID0gYls3XSB8IDA7XG4gICAgdmFyIGJsNyA9IGI3ICYgMHgxZmZmO1xuICAgIHZhciBiaDcgPSBiNyA+Pj4gMTM7XG4gICAgdmFyIGI4ID0gYls4XSB8IDA7XG4gICAgdmFyIGJsOCA9IGI4ICYgMHgxZmZmO1xuICAgIHZhciBiaDggPSBiOCA+Pj4gMTM7XG4gICAgdmFyIGI5ID0gYls5XSB8IDA7XG4gICAgdmFyIGJsOSA9IGI5ICYgMHgxZmZmO1xuICAgIHZhciBiaDkgPSBiOSA+Pj4gMTM7XG5cbiAgICBvdXQubmVnYXRpdmUgPSBzZWxmLm5lZ2F0aXZlIF4gbnVtLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSAxOTtcbiAgICAvKiBrID0gMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwwLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgwLCBiaDApO1xuICAgIHZhciB3MCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzAgPj4+IDI2KSkgfCAwO1xuICAgIHcwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwxLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgxLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMSkpIHwgMDtcbiAgICB2YXIgdzEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxID4+PiAyNikpIHwgMDtcbiAgICB3MSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDIsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgyKSkgfCAwO1xuICAgIHZhciB3MiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzIgPj4+IDI2KSkgfCAwO1xuICAgIHcyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwzLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgzLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgzKSkgfCAwO1xuICAgIHZhciB3MyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzMgPj4+IDI2KSkgfCAwO1xuICAgIHczICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw0LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg0LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNCkpIHwgMDtcbiAgICB2YXIgdzQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc0ID4+PiAyNikpIHwgMDtcbiAgICB3NCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDUsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg1KSkgfCAwO1xuICAgIHZhciB3NSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzUgPj4+IDI2KSkgfCAwO1xuICAgIHc1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw2LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg2LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg2KSkgfCAwO1xuICAgIHZhciB3NiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzYgPj4+IDI2KSkgfCAwO1xuICAgIHc2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw3LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg3LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNykpIHwgMDtcbiAgICB2YXIgdzcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc3ID4+PiAyNikpIHwgMDtcbiAgICB3NyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDgsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg4KSkgfCAwO1xuICAgIHZhciB3OCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzggPj4+IDI2KSkgfCAwO1xuICAgIHc4ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg5KSkgfCAwO1xuICAgIHZhciB3OSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzkgPj4+IDI2KSkgfCAwO1xuICAgIHc5ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgxKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwxKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgxKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMCA+Pj4gMjYpKSB8IDA7XG4gICAgdzEwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgyKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwyKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgyKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzExID4+PiAyNikpIHwgMDtcbiAgICB3MTEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwzKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDMpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDMpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDMpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMiA+Pj4gMjYpKSB8IDA7XG4gICAgdzEyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg0KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw0KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg0KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMyA+Pj4gMjYpKSB8IDA7XG4gICAgdzEzICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg1KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw1KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg1KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE0ID4+PiAyNikpIHwgMDtcbiAgICB3MTQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw2KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDYpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDYpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDYpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNSA+Pj4gMjYpKSB8IDA7XG4gICAgdzE1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg3KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw3KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg3KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNiA+Pj4gMjYpKSB8IDA7XG4gICAgdzE2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg4KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw4KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg4KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE3ID4+PiAyNikpIHwgMDtcbiAgICB3MTcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw5KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDkpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDkpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDkpO1xuICAgIHZhciB3MTggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxOCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE4ICY9IDB4M2ZmZmZmZjtcbiAgICBvWzBdID0gdzA7XG4gICAgb1sxXSA9IHcxO1xuICAgIG9bMl0gPSB3MjtcbiAgICBvWzNdID0gdzM7XG4gICAgb1s0XSA9IHc0O1xuICAgIG9bNV0gPSB3NTtcbiAgICBvWzZdID0gdzY7XG4gICAgb1s3XSA9IHc3O1xuICAgIG9bOF0gPSB3ODtcbiAgICBvWzldID0gdzk7XG4gICAgb1sxMF0gPSB3MTA7XG4gICAgb1sxMV0gPSB3MTE7XG4gICAgb1sxMl0gPSB3MTI7XG4gICAgb1sxM10gPSB3MTM7XG4gICAgb1sxNF0gPSB3MTQ7XG4gICAgb1sxNV0gPSB3MTU7XG4gICAgb1sxNl0gPSB3MTY7XG4gICAgb1sxN10gPSB3MTc7XG4gICAgb1sxOF0gPSB3MTg7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgIG9bMTldID0gYztcbiAgICAgIG91dC5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvLyBQb2x5ZmlsbCBjb21iXG4gIGlmICghTWF0aC5pbXVsKSB7XG4gICAgY29tYjEwTXVsVG8gPSBzbWFsbE11bFRvO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICB2YXIgaG5jYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBvdXQubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgICBobmNhcnJ5ID0gMDtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gayAtIGo7XG4gICAgICAgIHZhciBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIHZhciBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgdmFyIHIgPSBhICogYjtcblxuICAgICAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKChyIC8gMHg0MDAwMDAwKSB8IDApKSB8IDA7XG4gICAgICAgIGxvID0gKGxvICsgcndvcmQpIHwgMDtcbiAgICAgICAgcndvcmQgPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArIChsbyA+Pj4gMjYpKSB8IDA7XG5cbiAgICAgICAgaG5jYXJyeSArPSBuY2FycnkgPj4+IDI2O1xuICAgICAgICBuY2FycnkgJj0gMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQ7XG4gICAgICBjYXJyeSA9IG5jYXJyeTtcbiAgICAgIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2Fycnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1ib011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBmZnRtID0gbmV3IEZGVE0oKTtcbiAgICByZXR1cm4gZmZ0bS5tdWxwKHNlbGYsIG51bSwgb3V0KTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5tdWxUbyA9IGZ1bmN0aW9uIG11bFRvIChudW0sIG91dCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aDtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEwICYmIG51bS5sZW5ndGggPT09IDEwKSB7XG4gICAgICByZXMgPSBjb21iMTBNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCA2Mykge1xuICAgICAgcmVzID0gc21hbGxNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCAxMDI0KSB7XG4gICAgICByZXMgPSBiaWdNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBmb3IgRkZUXG4gIC8vIHNsaWdodGx5IHJldmlzaXRlZCB0byByZWx5IG9uIGxvb3BpbmcgaW5zdGVhZCBvZiByZWN1cnNpb25cblxuICBmdW5jdGlvbiBGRlRNICh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgRkZUTS5wcm90b3R5cGUubWFrZVJCVCA9IGZ1bmN0aW9uIG1ha2VSQlQgKE4pIHtcbiAgICB2YXIgdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbCA9IEJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pIC0gMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdFtpXSA9IHRoaXMucmV2QmluKGksIGwsIE4pO1xuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYmluYXJ5LXJldmVyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGB4YFxuICBGRlRNLnByb3RvdHlwZS5yZXZCaW4gPSBmdW5jdGlvbiByZXZCaW4gKHgsIGwsIE4pIHtcbiAgICBpZiAoeCA9PT0gMCB8fCB4ID09PSBOIC0gMSkgcmV0dXJuIHg7XG5cbiAgICB2YXIgcmIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICByYiB8PSAoeCAmIDEpIDw8IChsIC0gaSAtIDEpO1xuICAgICAgeCA+Pj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmI7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgXCJ0d2VlZGxpbmdcIiBwaGFzZSwgdGhlcmVmb3JlICdlbXVsYXRpbmcnXG4gIC8vIGJlaGF2aW91ciBvZiB0aGUgcmVjdXJzaXZlIGFsZ29yaXRobVxuICBGRlRNLnByb3RvdHlwZS5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZSAocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBydHdzW2ldID0gcndzW3JidFtpXV07XG4gICAgICBpdHdzW2ldID0gaXdzW3JidFtpXV07XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSAocndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4sIHJidCkge1xuICAgIHRoaXMucGVybXV0ZShyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKTtcblxuICAgIGZvciAodmFyIHMgPSAxOyBzIDwgTjsgcyA8PD0gMSkge1xuICAgICAgdmFyIGwgPSBzIDw8IDE7XG5cbiAgICAgIHZhciBydHdkZiA9IE1hdGguY29zKDIgKiBNYXRoLlBJIC8gbCk7XG4gICAgICB2YXIgaXR3ZGYgPSBNYXRoLnNpbigyICogTWF0aC5QSSAvIGwpO1xuXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IE47IHAgKz0gbCkge1xuICAgICAgICB2YXIgcnR3ZGZfID0gcnR3ZGY7XG4gICAgICAgIHZhciBpdHdkZl8gPSBpdHdkZjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHM7IGorKykge1xuICAgICAgICAgIHZhciByZSA9IHJ0d3NbcCArIGpdO1xuICAgICAgICAgIHZhciBpZSA9IGl0d3NbcCArIGpdO1xuXG4gICAgICAgICAgdmFyIHJvID0gcnR3c1twICsgaiArIHNdO1xuICAgICAgICAgIHZhciBpbyA9IGl0d3NbcCArIGogKyBzXTtcblxuICAgICAgICAgIHZhciByeCA9IHJ0d2RmXyAqIHJvIC0gaXR3ZGZfICogaW87XG5cbiAgICAgICAgICBpbyA9IHJ0d2RmXyAqIGlvICsgaXR3ZGZfICogcm87XG4gICAgICAgICAgcm8gPSByeDtcblxuICAgICAgICAgIHJ0d3NbcCArIGpdID0gcmUgKyBybztcbiAgICAgICAgICBpdHdzW3AgKyBqXSA9IGllICsgaW87XG5cbiAgICAgICAgICBydHdzW3AgKyBqICsgc10gPSByZSAtIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGogKyBzXSA9IGllIC0gaW87XG5cbiAgICAgICAgICAvKiBqc2hpbnQgbWF4ZGVwdGggOiBmYWxzZSAqL1xuICAgICAgICAgIGlmIChqICE9PSBsKSB7XG4gICAgICAgICAgICByeCA9IHJ0d2RmICogcnR3ZGZfIC0gaXR3ZGYgKiBpdHdkZl87XG5cbiAgICAgICAgICAgIGl0d2RmXyA9IHJ0d2RmICogaXR3ZGZfICsgaXR3ZGYgKiBydHdkZl87XG4gICAgICAgICAgICBydHdkZl8gPSByeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2IgPSBmdW5jdGlvbiBndWVzc0xlbjEzYiAobiwgbSkge1xuICAgIHZhciBOID0gTWF0aC5tYXgobSwgbikgfCAxO1xuICAgIHZhciBvZGQgPSBOICYgMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yIChOID0gTiAvIDIgfCAwOyBOOyBOID0gTiA+Pj4gMSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAxIDw8IGkgKyAxICsgb2RkO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIGNvbmp1Z2F0ZSAocndzLCBpd3MsIE4pIHtcbiAgICBpZiAoTiA8PSAxKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB0ID0gcndzW2ldO1xuXG4gICAgICByd3NbaV0gPSByd3NbTiAtIGkgLSAxXTtcbiAgICAgIHJ3c1tOIC0gaSAtIDFdID0gdDtcblxuICAgICAgdCA9IGl3c1tpXTtcblxuICAgICAgaXdzW2ldID0gLWl3c1tOIC0gaSAtIDFdO1xuICAgICAgaXdzW04gLSBpIC0gMV0gPSAtdDtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiID0gZnVuY3Rpb24gbm9ybWFsaXplMTNiICh3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdyA9IE1hdGgucm91bmQod3NbMiAqIGkgKyAxXSAvIE4pICogMHgyMDAwICtcbiAgICAgICAgTWF0aC5yb3VuZCh3c1syICogaV0gLyBOKSArXG4gICAgICAgIGNhcnJ5O1xuXG4gICAgICB3c1tpXSA9IHcgJiAweDNmZmZmZmY7XG5cbiAgICAgIGlmICh3IDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gdyAvIDB4NDAwMDAwMCB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdzO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2IgPSBmdW5jdGlvbiBjb252ZXJ0MTNiICh3cywgbGVuLCByd3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhcnJ5ID0gY2FycnkgKyAod3NbaV0gfCAwKTtcblxuICAgICAgcndzWzIgKiBpXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICAgIHJ3c1syICogaSArIDFdID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgIH1cblxuICAgIC8vIFBhZCB3aXRoIHplcm9lc1xuICAgIGZvciAoaSA9IDIgKiBsZW47IGkgPCBOOyArK2kpIHtcbiAgICAgIHJ3c1tpXSA9IDA7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAwKTtcbiAgICBhc3NlcnQoKGNhcnJ5ICYgfjB4MWZmZikgPT09IDApO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnN0dWIgPSBmdW5jdGlvbiBzdHViIChOKSB7XG4gICAgdmFyIHBoID0gbmV3IEFycmF5KE4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBwaFtpXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBoO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm11bHAgPSBmdW5jdGlvbiBtdWxwICh4LCB5LCBvdXQpIHtcbiAgICB2YXIgTiA9IDIgKiB0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLCB5Lmxlbmd0aCk7XG5cbiAgICB2YXIgcmJ0ID0gdGhpcy5tYWtlUkJUKE4pO1xuXG4gICAgdmFyIF8gPSB0aGlzLnN0dWIoTik7XG5cbiAgICB2YXIgcndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciByd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBpd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIG5yd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5yd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBuaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBybXdzID0gb3V0LndvcmRzO1xuICAgIHJtd3MubGVuZ3RoID0gTjtcblxuICAgIHRoaXMuY29udmVydDEzYih4LndvcmRzLCB4Lmxlbmd0aCwgcndzLCBOKTtcbiAgICB0aGlzLmNvbnZlcnQxM2IoeS53b3JkcywgeS5sZW5ndGgsIG5yd3MsIE4pO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0ocndzLCBfLCByd3N0LCBpd3N0LCBOLCByYnQpO1xuICAgIHRoaXMudHJhbnNmb3JtKG5yd3MsIF8sIG5yd3N0LCBuaXdzdCwgTiwgcmJ0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB2YXIgcnggPSByd3N0W2ldICogbnJ3c3RbaV0gLSBpd3N0W2ldICogbml3c3RbaV07XG4gICAgICBpd3N0W2ldID0gcndzdFtpXSAqIG5pd3N0W2ldICsgaXdzdFtpXSAqIG5yd3N0W2ldO1xuICAgICAgcndzdFtpXSA9IHJ4O1xuICAgIH1cblxuICAgIHRoaXMuY29uanVnYXRlKHJ3c3QsIGl3c3QsIE4pO1xuICAgIHRoaXMudHJhbnNmb3JtKHJ3c3QsIGl3c3QsIHJtd3MsIF8sIE4sIHJidCk7XG4gICAgdGhpcy5jb25qdWdhdGUocm13cywgXywgTik7XG4gICAgdGhpcy5ub3JtYWxpemUxM2Iocm13cywgTik7XG5cbiAgICBvdXQubmVnYXRpdmUgPSB4Lm5lZ2F0aXZlIF4geS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0geC5sZW5ndGggKyB5Lmxlbmd0aDtcbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgYHRoaXNgIGJ5IGBudW1gXG4gIEJOLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMubXVsVG8obnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGVtcGxveWluZyBGRlRcbiAgQk4ucHJvdG90eXBlLm11bGYgPSBmdW5jdGlvbiBtdWxmIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBNdWx0aXBsaWNhdGlvblxuICBCTi5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLCB0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW11bG4gPSBmdW5jdGlvbiBpbXVsbiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcblxuICAgIC8vIENhcnJ5XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSAqIG51bTtcbiAgICAgIHZhciBsbyA9ICh3ICYgMHgzZmZmZmZmKSArIChjYXJyeSAmIDB4M2ZmZmZmZik7XG4gICAgICBjYXJyeSA+Pj0gMjY7XG4gICAgICBjYXJyeSArPSAodyAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgLy8gTk9URTogbG8gaXMgMjdiaXQgbWF4aW11bVxuICAgICAgY2FycnkgKz0gbG8gPj4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubXVsbiA9IGZ1bmN0aW9uIG11bG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKHRoaXMpO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKTtcbiAgfTtcblxuICAvLyBNYXRoLnBvdyhgdGhpc2AsIGBudW1gKVxuICBCTi5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChudW0pIHtcbiAgICB2YXIgdyA9IHRvQml0QXJyYXkobnVtKTtcbiAgICBpZiAody5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQk4oMSk7XG5cbiAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzXG4gICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3Lmxlbmd0aDsgaSsrLCByZXMgPSByZXMuc3FyKCkpIHtcbiAgICAgIGlmICh3W2ldICE9PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoKytpIDwgdy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIHEgPSByZXMuc3FyKCk7IGkgPCB3Lmxlbmd0aDsgaSsrLCBxID0gcS5zcXIoKSkge1xuICAgICAgICBpZiAod1tpXSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gcmVzLm11bChxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnQgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1c2hsbiA9IGZ1bmN0aW9uIGl1c2hsbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcbiAgICB2YXIgY2FycnlNYXNrID0gKDB4M2ZmZmZmZiA+Pj4gKDI2IC0gcikpIDw8ICgyNiAtIHIpO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZXdDYXJyeSA9IHRoaXMud29yZHNbaV0gJiBjYXJyeU1hc2s7XG4gICAgICAgIHZhciBjID0gKCh0aGlzLndvcmRzW2ldIHwgMCkgLSBuZXdDYXJyeSkgPDwgcjtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGMgfCBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBuZXdDYXJyeSA+Pj4gKDI2IC0gcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXJyeSkge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMgIT09IDApIHtcbiAgICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgc10gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCArPSBzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaGxuID0gZnVuY3Rpb24gaXNobG4gKGJpdHMpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0IGluLXBsYWNlXG4gIC8vIE5PVEU6IGBoaW50YCBpcyBhIGxvd2VzdCBiaXQgYmVmb3JlIHRyYWlsaW5nIHplcm9lc1xuICAvLyBOT1RFOiBpZiBgZXh0ZW5kZWRgIGlzIHByZXNlbnQgLSBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGRlc3Ryb3llZCBiaXRzXG4gIEJOLnByb3RvdHlwZS5pdXNocm4gPSBmdW5jdGlvbiBpdXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciBoO1xuICAgIGlmIChoaW50KSB7XG4gICAgICBoID0gKGhpbnQgLSAoaGludCAlIDI2KSkgLyAyNjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSBNYXRoLm1pbigoYml0cyAtIHIpIC8gMjYsIHRoaXMubGVuZ3RoKTtcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICB2YXIgbWFza2VkV29yZHMgPSBleHRlbmRlZDtcblxuICAgIGggLT0gcztcbiAgICBoID0gTWF0aC5tYXgoMCwgaCk7XG5cbiAgICAvLyBFeHRlbmRlZCBtb2RlLCBjb3B5IG1hc2tlZCBwYXJ0XG4gICAgaWYgKG1hc2tlZFdvcmRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICBtYXNrZWRXb3Jkcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG4gICAgICBtYXNrZWRXb3Jkcy5sZW5ndGggPSBzO1xuICAgIH1cblxuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAvLyBOby1vcCwgd2Ugc2hvdWxkIG5vdCBtb3ZlIGFueXRoaW5nIGF0IGFsbFxuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiBzKSB7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaSArIHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIChjYXJyeSAhPT0gMCB8fCBpID49IGgpOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKGNhcnJ5IDw8ICgyNiAtIHIpKSB8ICh3b3JkID4+PiByKTtcbiAgICAgIGNhcnJ5ID0gd29yZCAmIG1hc2s7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBjYXJyaWVkIGJpdHMgYXMgYSBtYXNrXG4gICAgaWYgKG1hc2tlZFdvcmRzICYmIGNhcnJ5ICE9PSAwKSB7XG4gICAgICBtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaHJuID0gZnVuY3Rpb24gaXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hybihiaXRzLCBoaW50LCBleHRlbmRlZCk7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdFxuICBCTi5wcm90b3R5cGUuc2hsbiA9IGZ1bmN0aW9uIHNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hsbiA9IGZ1bmN0aW9uIHVzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHRcbiAgQk4ucHJvdG90eXBlLnNocm4gPSBmdW5jdGlvbiBzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNocm4gPSBmdW5jdGlvbiB1c2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFRlc3QgaWYgbiBiaXQgaXMgc2V0XG4gIEJOLnByb3RvdHlwZS50ZXN0biA9IGZ1bmN0aW9uIHRlc3RuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGJpdCBhbmQgcmV0dXJuXG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3NdO1xuXG4gICAgcmV0dXJuICEhKHcgJiBxKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gb25seSBsb3dlcnMgYml0cyBvZiBudW1iZXIgKGluLXBsYWNlKVxuICBCTi5wcm90b3R5cGUuaW1hc2tuID0gZnVuY3Rpb24gaW1hc2tuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMnKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPCBudW0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSA9IG51bSAtICh0aGlzLndvcmRzWzBdIHwgMCk7XG4gICAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlzdWJuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRob3V0IGNoZWNrc1xuICAgIHJldHVybiB0aGlzLl9pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faWFkZG4gPSBmdW5jdGlvbiBfaWFkZG4gKG51bSkge1xuICAgIHRoaXMud29yZHNbMF0gKz0gbnVtO1xuXG4gICAgLy8gQ2FycnlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPj0gMHg0MDAwMDAwOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gLT0gMHg0MDAwMDAwO1xuICAgICAgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpICsgMSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBwbGFpbiBudW1iZXIgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlzdWJuID0gZnVuY3Rpb24gaXN1Ym4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlhZGRuKC1udW0pO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkbihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndvcmRzWzBdIC09IG51bTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdIDwgMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IC10aGlzLndvcmRzWzBdO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhcnJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPCAwOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSArPSAweDQwMDAwMDA7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdIC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5zdHJpcCgpO1xuXG4gICAgLy8gU3VidHJhY3Rpb24gb3ZlcmZsb3dcbiAgICBhc3NlcnQoY2FycnkgPT09IC0xKTtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAtKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX3dvcmREaXYgPSBmdW5jdGlvbiBfd29yZERpdiAobnVtLCBtb2RlKSB7XG4gICAgdmFyIHNoaWZ0ID0gdGhpcy5sZW5ndGggLSBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW07XG5cbiAgICAvLyBOb3JtYWxpemVcbiAgICB2YXIgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB2YXIgYmhpQml0cyA9IHRoaXMuX2NvdW50Qml0cyhiaGkpO1xuICAgIHNoaWZ0ID0gMjYgLSBiaGlCaXRzO1xuICAgIGlmIChzaGlmdCAhPT0gMCkge1xuICAgICAgYiA9IGIudXNobG4oc2hpZnQpO1xuICAgICAgYS5pdXNobG4oc2hpZnQpO1xuICAgICAgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50XG4gICAgdmFyIG0gPSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICAgIHZhciBxO1xuXG4gICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICBxID0gbmV3IEJOKG51bGwpO1xuICAgICAgcS5sZW5ndGggPSBtICsgMTtcbiAgICAgIHEud29yZHMgPSBuZXcgQXJyYXkocS5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHEud29yZHNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWZmID0gYS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLCAxLCBtKTtcbiAgICBpZiAoZGlmZi5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgYSA9IGRpZmY7XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW21dID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gbSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICB2YXIgcWogPSAoYS53b3Jkc1tiLmxlbmd0aCArIGpdIHwgMCkgKiAweDQwMDAwMDAgK1xuICAgICAgICAoYS53b3Jkc1tiLmxlbmd0aCArIGogLSAxXSB8IDApO1xuXG4gICAgICAvLyBOT1RFOiAocWogLyBiaGkpIGlzICgweDNmZmZmZmYgKiAweDQwMDAwMDAgKyAweDNmZmZmZmYpIC8gMHgyMDAwMDAwIG1heFxuICAgICAgLy8gKDB4N2ZmZmZmZilcbiAgICAgIHFqID0gTWF0aC5taW4oKHFqIC8gYmhpKSB8IDAsIDB4M2ZmZmZmZik7XG5cbiAgICAgIGEuX2lzaGxuc3VibXVsKGIsIHFqLCBqKTtcbiAgICAgIHdoaWxlIChhLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIHFqLS07XG4gICAgICAgIGEubmVnYXRpdmUgPSAwO1xuICAgICAgICBhLl9pc2hsbnN1Ym11bChiLCAxLCBqKTtcbiAgICAgICAgaWYgKCFhLmlzWmVybygpKSB7XG4gICAgICAgICAgYS5uZWdhdGl2ZSBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW2pdID0gcWo7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxKSB7XG4gICAgICBxLnN0cmlwKCk7XG4gICAgfVxuICAgIGEuc3RyaXAoKTtcblxuICAgIC8vIERlbm9ybWFsaXplXG4gICAgaWYgKG1vZGUgIT09ICdkaXYnICYmIHNoaWZ0ICE9PSAwKSB7XG4gICAgICBhLml1c2hybihzaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogcSB8fCBudWxsLFxuICAgICAgbW9kOiBhXG4gICAgfTtcbiAgfTtcblxuICAvLyBOT1RFOiAxKSBgbW9kZWAgY2FuIGJlIHNldCB0byBgbW9kYCB0byByZXF1ZXN0IG1vZCBvbmx5LFxuICAvLyAgICAgICB0byBgZGl2YCB0byByZXF1ZXN0IGRpdiBvbmx5LCBvciBiZSBhYnNlbnQgdG9cbiAgLy8gICAgICAgcmVxdWVzdCBib3RoIGRpdiAmIG1vZFxuICAvLyAgICAgICAyKSBgcG9zaXRpdmVgIGlzIHRydWUgaWYgdW5zaWduZWQgbW9kIGlzIHJlcXVlc3RlZFxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogbmV3IEJOKDApLFxuICAgICAgICBtb2Q6IG5ldyBCTigwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGl2LCBtb2QsIHJlcztcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSAhPT0gJ2RpdicpIHtcbiAgICAgICAgbW9kID0gcmVzLm1vZC5uZWcoKTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIG1vZC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICAgIG1vZC5pYWRkKG51bSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBkaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICAgIGRpdiA9IHJlcy5kaXYubmVnKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IHJlcy5tb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiB0aGlzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcnkgc2hvcnQgcmVkdWN0aW9uXG4gICAgaWYgKG51bS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChtb2RlID09PSAnZGl2Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgICAgbW9kOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSAnbW9kJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogbnVsbCxcbiAgICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiB0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxcbiAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IHIyID09PSAxICYmIGNtcCA9PT0gMCkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwXG4gICAgcmV0dXJuIGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLmRpdi5pc3VibigxKSA6IGRtLmRpdi5pYWRkbigxKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmFicygpO1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiB0aGlzLmFicygpO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW0uY2xvbmUoKTtcbiAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICBiLm5lZ2F0aXZlID0gMDtcblxuICAgIC8vIFJlbW92ZSBjb21tb24gZmFjdG9yIG9mIHR3b1xuICAgIGZvciAodmFyIHNoaWZ0ID0gMDsgYS5pc0V2ZW4oKSAmJiBiLmlzRXZlbigpOyBzaGlmdCsrKSB7XG4gICAgICBhLml1c2hybigxKTtcbiAgICAgIGIuaXVzaHJuKDEpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHdoaWxlIChhLmlzRXZlbigpKSB7XG4gICAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGIuaXNFdmVuKCkpIHtcbiAgICAgICAgYi5pdXNocm4oMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gYS5jbXAoYik7XG4gICAgICBpZiAociA8IDApIHtcbiAgICAgICAgLy8gU3dhcCBgYWAgYW5kIGBiYCB0byBtYWtlIGBhYCBhbHdheXMgYmlnZ2VyIHRoYW4gYGJgXG4gICAgICAgIHZhciB0ID0gYTtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGIgPSB0O1xuICAgICAgfSBlbHNlIGlmIChyID09PSAwIHx8IGIuY21wbigxKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYS5pc3ViKGIpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgcmV0dXJuIGIuaXVzaGxuKHNoaWZ0KTtcbiAgfTtcblxuICAvLyBJbnZlcnQgbnVtYmVyIGluIHRoZSBmaWVsZCBGKG51bSlcbiAgQk4ucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQgKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAxO1xuICB9O1xuXG4gIC8vIEFuZCBmaXJzdCB3b3JkIGFuZCBudW1cbiAgQk4ucHJvdG90eXBlLmFuZGxuID0gZnVuY3Rpb24gYW5kbG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLndvcmRzWzBdICYgbnVtO1xuICB9O1xuXG4gIC8vIEluY3JlbWVudCBhdCB0aGUgYml0IHBvc2l0aW9uIGluLWxpbmVcbiAgQk4ucHJvdG90eXBlLmJpbmNuID0gZnVuY3Rpb24gYmluY24gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgdGhpcy5fZXhwYW5kKHMgKyAxKTtcbiAgICAgIHRoaXMud29yZHNbc10gfD0gcTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBiaXQgYW5kIHByb3BhZ2F0ZSwgaWYgbmVlZGVkXG4gICAgdmFyIGNhcnJ5ID0gcTtcbiAgICBmb3IgKHZhciBpID0gczsgY2FycnkgIT09IDAgJiYgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB3ICs9IGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+PiAyNjtcbiAgICAgIHcgJj0gMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHc7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNtcG4gPSBmdW5jdGlvbiBjbXBuIChudW0pIHtcbiAgICB2YXIgbmVnYXRpdmUgPSBudW0gPCAwO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgIW5lZ2F0aXZlKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbmVnYXRpdmUpIHJldHVybiAxO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgbnVtID0gLW51bTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYsICdOdW1iZXIgaXMgdG9vIGJpZycpO1xuXG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbMF0gfCAwO1xuICAgICAgcmVzID0gdyA9PT0gbnVtID8gMCA6IHcgPCBudW0gPyAtMSA6IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gVW5zaWduZWQgY29tcGFyaXNvblxuICBCTi5wcm90b3R5cGUudWNtcCA9IGZ1bmN0aW9uIHVjbXAgKG51bSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUgc2lnblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHJldHVybiAtMTtcblxuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgYSA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdmFyIGIgPSBudW0ud29yZHNbaV0gfCAwO1xuXG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmVzID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJlcyA9IDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RuID0gZnVuY3Rpb24gZ3RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ID0gZnVuY3Rpb24gZ3QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGVuID0gZnVuY3Rpb24gZ3RlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZSA9IGZ1bmN0aW9uIGd0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRuID0gZnVuY3Rpb24gbHRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdCA9IGZ1bmN0aW9uIGx0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZW4gPSBmdW5jdGlvbiBsdGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlID0gZnVuY3Rpb24gbHRlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcW4gPSBmdW5jdGlvbiBlcW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDA7XG4gIH07XG5cbiAgLy9cbiAgLy8gQSByZWR1Y2UgY29udGV4dCwgY291bGQgYmUgdXNpbmcgbW9udGdvbWVyeSBvciBzb21ldGhpbmcgYmV0dGVyLCBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIGBtYCBpdHNlbGYuXG4gIC8vXG4gIEJOLnJlZCA9IGZ1bmN0aW9uIHJlZCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWQobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9SZWQgPSBmdW5jdGlvbiB0b1JlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgcmV0dXJuIGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21SZWQgPSBmdW5jdGlvbiBmcm9tUmVkICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fZm9yY2VSZWQgPSBmdW5jdGlvbiBfZm9yY2VSZWQgKGN0eCkge1xuICAgIHRoaXMucmVkID0gY3R4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mb3JjZVJlZCA9IGZ1bmN0aW9uIGZvcmNlUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRBZGQgPSBmdW5jdGlvbiByZWRBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElBZGQgPSBmdW5jdGlvbiByZWRJQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFN1YiA9IGZ1bmN0aW9uIHJlZFN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVN1YiA9IGZ1bmN0aW9uIHJlZElTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU2hsID0gZnVuY3Rpb24gcmVkU2hsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNobCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRNdWwgPSBmdW5jdGlvbiByZWRNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5tdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSU11bCA9IGZ1bmN0aW9uIHJlZElNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNxciA9IGZ1bmN0aW9uIHJlZFNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXIodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTcXIgPSBmdW5jdGlvbiByZWRJU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3FyKHRoaXMpO1xuICB9O1xuXG4gIC8vIFNxdWFyZSByb290IG92ZXIgcFxuICBCTi5wcm90b3R5cGUucmVkU3FydCA9IGZ1bmN0aW9uIHJlZFNxcnQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcnQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEludm0gPSBmdW5jdGlvbiByZWRJbnZtICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbnZtKHRoaXMpO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2AgJSBgcmVkIG1vZHVsb2BcbiAgQk4ucHJvdG90eXBlLnJlZE5lZyA9IGZ1bmN0aW9uIHJlZE5lZyAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5uZWcodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFBvdyA9IGZ1bmN0aW9uIHJlZFBvdyAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkICYmICFudW0ucmVkLCAncmVkUG93KG5vcm1hbE51bSknKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQucG93KHRoaXMsIG51bSk7XG4gIH07XG5cbiAgLy8gUHJpbWUgbnVtYmVycyB3aXRoIGVmZmljaWVudCByZWR1Y3Rpb25cbiAgdmFyIHByaW1lcyA9IHtcbiAgICBrMjU2OiBudWxsLFxuICAgIHAyMjQ6IG51bGwsXG4gICAgcDE5MjogbnVsbCxcbiAgICBwMjU1MTk6IG51bGxcbiAgfTtcblxuICAvLyBQc2V1ZG8tTWVyc2VubmUgcHJpbWVcbiAgZnVuY3Rpb24gTVByaW1lIChuYW1lLCBwKSB7XG4gICAgLy8gUCA9IDIgXiBOIC0gS1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wID0gbmV3IEJOKHAsIDE2KTtcbiAgICB0aGlzLm4gPSB0aGlzLnAuYml0TGVuZ3RoKCk7XG4gICAgdGhpcy5rID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKTtcblxuICAgIHRoaXMudG1wID0gdGhpcy5fdG1wKCk7XG4gIH1cblxuICBNUHJpbWUucHJvdG90eXBlLl90bXAgPSBmdW5jdGlvbiBfdG1wICgpIHtcbiAgICB2YXIgdG1wID0gbmV3IEJOKG51bGwpO1xuICAgIHRtcC53b3JkcyA9IG5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uIC8gMTMpKTtcbiAgICByZXR1cm4gdG1wO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZSA9IGZ1bmN0aW9uIGlyZWR1Y2UgKG51bSkge1xuICAgIC8vIEFzc3VtZXMgdGhhdCBgbnVtYCBpcyBsZXNzIHRoYW4gYFBeMmBcbiAgICAvLyBudW0gPSBISSAqICgyIF4gTiAtIEspICsgSEkgKiBLICsgTE8gPSBISSAqIEsgKyBMTyAobW9kIFApXG4gICAgdmFyIHIgPSBudW07XG4gICAgdmFyIHJsZW47XG5cbiAgICBkbyB7XG4gICAgICB0aGlzLnNwbGl0KHIsIHRoaXMudG1wKTtcbiAgICAgIHIgPSB0aGlzLmltdWxLKHIpO1xuICAgICAgciA9IHIuaWFkZCh0aGlzLnRtcCk7XG4gICAgICBybGVuID0gci5iaXRMZW5ndGgoKTtcbiAgICB9IHdoaWxlIChybGVuID4gdGhpcy5uKTtcblxuICAgIHZhciBjbXAgPSBybGVuIDwgdGhpcy5uID8gLTEgOiByLnVjbXAodGhpcy5wKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByLndvcmRzWzBdID0gMDtcbiAgICAgIHIubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIHIuaXN1Yih0aGlzLnApO1xuICAgIH0gZWxzZSB7XG4gICAgICByLnN0cmlwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0KSB7XG4gICAgaW5wdXQuaXVzaHJuKHRoaXMubiwgMCwgb3V0KTtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIHJldHVybiBudW0uaW11bCh0aGlzLmspO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEsyNTYgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdrMjU2JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicpO1xuICB9XG4gIGluaGVyaXRzKEsyNTYsIE1QcmltZSk7XG5cbiAgSzI1Ni5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dHB1dCkge1xuICAgIC8vIDI1NiA9IDkgKiAyNiArIDIyXG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZjtcblxuICAgIHZhciBvdXRMZW4gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIDkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspIHtcbiAgICAgIG91dHB1dC53b3Jkc1tpXSA9IGlucHV0LndvcmRzW2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3V0TGVuO1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSA5KSB7XG4gICAgICBpbnB1dC53b3Jkc1swXSA9IDA7XG4gICAgICBpbnB1dC5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNoaWZ0IGJ5IDkgbGltYnNcbiAgICB2YXIgcHJldiA9IGlucHV0LndvcmRzWzldO1xuICAgIG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdID0gcHJldiAmIG1hc2s7XG5cbiAgICBmb3IgKGkgPSAxMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IGlucHV0LndvcmRzW2ldIHwgMDtcbiAgICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSAoKG5leHQgJiBtYXNrKSA8PCA0KSB8IChwcmV2ID4+PiAyMik7XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgcHJldiA+Pj49IDIyO1xuICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSBwcmV2O1xuICAgIGlmIChwcmV2ID09PSAwICYmIGlucHV0Lmxlbmd0aCA+IDEwKSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSA5O1xuICAgIH1cbiAgfTtcblxuICBLMjU2LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxMDAwMDAzZDEgPSBbIDB4NDAsIDB4M2QxIF1cbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aF0gPSAwO1xuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoICsgMV0gPSAwO1xuICAgIG51bS5sZW5ndGggKz0gMjtcblxuICAgIC8vIGJvdW5kZWQgYXQ6IDB4NDAgKiAweDNmZmZmZmYgKyAweDNkMCA9IDB4MTAwMDAwMzkwXG4gICAgdmFyIGxvID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSBudW0ud29yZHNbaV0gfCAwO1xuICAgICAgbG8gKz0gdyAqIDB4M2QxO1xuICAgICAgbnVtLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICBsbyA9IHcgKiAweDQwICsgKChsbyAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICB9XG5cbiAgICAvLyBGYXN0IGxlbmd0aCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFAyMjQgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMjI0JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScpO1xuICB9XG4gIGluaGVyaXRzKFAyMjQsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDE5MiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AxOTInLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDE5MiwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMjU1MTkgKCkge1xuICAgIC8vIDIgXiAyNTUgLSAxOVxuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICcyNTUxOScsXG4gICAgICAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcpO1xuICB9XG4gIGluaGVyaXRzKFAyNTUxOSwgTVByaW1lKTtcblxuICBQMjU1MTkucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEzXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhpID0gKG51bS53b3Jkc1tpXSB8IDApICogMHgxMyArIGNhcnJ5O1xuICAgICAgdmFyIGxvID0gaGkgJiAweDNmZmZmZmY7XG4gICAgICBoaSA+Pj49IDI2O1xuXG4gICAgICBudW0ud29yZHNbaV0gPSBsbztcbiAgICAgIGNhcnJ5ID0gaGk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgbnVtLndvcmRzW251bS5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICAvLyBFeHBvcnRlZCBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBwbGFpbiBuYW1lIGluc3RlYWRcbiAgQk4uX3ByaW1lID0gZnVuY3Rpb24gcHJpbWUgKG5hbWUpIHtcbiAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiBwcmltZVxuICAgIGlmIChwcmltZXNbbmFtZV0pIHJldHVybiBwcmltZXNbbmFtZV07XG5cbiAgICB2YXIgcHJpbWU7XG4gICAgaWYgKG5hbWUgPT09ICdrMjU2Jykge1xuICAgICAgcHJpbWUgPSBuZXcgSzI1NigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyMjQnKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjI0KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDE5MicpIHtcbiAgICAgIHByaW1lID0gbmV3IFAxOTIoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjU1MTknKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjU1MTkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1lICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcHJpbWVzW25hbWVdID0gcHJpbWU7XG5cbiAgICByZXR1cm4gcHJpbWU7XG4gIH07XG5cbiAgLy9cbiAgLy8gQmFzZSByZWR1Y3Rpb24gZW5naW5lXG4gIC8vXG4gIGZ1bmN0aW9uIFJlZCAobSkge1xuICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBwcmltZSA9IEJOLl9wcmltZShtKTtcbiAgICAgIHRoaXMubSA9IHByaW1lLnA7XG4gICAgICB0aGlzLnByaW1lID0gcHJpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChtLmd0bigxKSwgJ21vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG4gICAgcmV0dXJuIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcbiAgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgdmFyIGRlc2NyaXB0b3JzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXNjcmlwdG9yc1trZXlzW2ldXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXlzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JzO1xuICB9O1xuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbnZhciBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbCgndXRpbC5wcm9taXNpZnkuY3VzdG9tJykgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydHMucHJvbWlzaWZ5ID0gZnVuY3Rpb24gcHJvbWlzaWZ5KG9yaWdpbmFsKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcblxuICBpZiAoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sICYmIG9yaWdpbmFsW2tDdXN0b21Qcm9taXNpZmllZFN5bWJvbF0pIHtcbiAgICB2YXIgZm4gPSBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdO1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwge1xuICAgICAgdmFsdWU6IGZuLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBmdW5jdGlvbiBmbigpIHtcbiAgICB2YXIgcHJvbWlzZVJlc29sdmUsIHByb21pc2VSZWplY3Q7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBwcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICBwcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChmdW5jdGlvbiAoZXJyLCB2YWx1ZSkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBwcm9taXNlUmVqZWN0KGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBwcm9taXNlUmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZm4sIE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpO1xuXG4gIGlmIChrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sLCB7XG4gICAgdmFsdWU6IGZuLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcbiAgICBmbixcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKVxuICApO1xufVxuXG5leHBvcnRzLnByb21pc2lmeS5jdXN0b20gPSBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xcblxuZnVuY3Rpb24gY2FsbGJhY2tpZnlPblJlamVjdGVkKHJlYXNvbiwgY2IpIHtcbiAgLy8gYCFyZWFzb25gIGd1YXJkIGluc3BpcmVkIGJ5IGJsdWViaXJkIChSZWY6IGh0dHBzOi8vZ29vLmdsL3Q1SVM2TSkuXG4gIC8vIEJlY2F1c2UgYG51bGxgIGlzIGEgc3BlY2lhbCBlcnJvciB2YWx1ZSBpbiBjYWxsYmFja3Mgd2hpY2ggbWVhbnMgXCJubyBlcnJvclxuICAvLyBvY2N1cnJlZFwiLCB3ZSBlcnJvci13cmFwIHNvIHRoZSBjYWxsYmFjayBjb25zdW1lciBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlblxuICAvLyBcInRoZSBwcm9taXNlIHJlamVjdGVkIHdpdGggbnVsbFwiIG9yIFwidGhlIHByb21pc2UgZnVsZmlsbGVkIHdpdGggdW5kZWZpbmVkXCIuXG4gIGlmICghcmVhc29uKSB7XG4gICAgdmFyIG5ld1JlYXNvbiA9IG5ldyBFcnJvcignUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlJyk7XG4gICAgbmV3UmVhc29uLnJlYXNvbiA9IHJlYXNvbjtcbiAgICByZWFzb24gPSBuZXdSZWFzb247XG4gIH1cbiAgcmV0dXJuIGNiKHJlYXNvbik7XG59XG5cbmZ1bmN0aW9uIGNhbGxiYWNraWZ5KG9yaWdpbmFsKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcmlnaW5hbFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICB9XG5cbiAgLy8gV2UgRE8gTk9UIHJldHVybiB0aGUgcHJvbWlzZSBhcyBpdCBnaXZlcyB0aGUgdXNlciBhIGZhbHNlIHNlbnNlIHRoYXRcbiAgLy8gdGhlIHByb21pc2UgaXMgYWN0dWFsbHkgc29tZWhvdyByZWxhdGVkIHRvIHRoZSBjYWxsYmFjaydzIGV4ZWN1dGlvblxuICAvLyBhbmQgdGhhdCB0aGUgY2FsbGJhY2sgdGhyb3dpbmcgd2lsbCByZWplY3QgdGhlIHByb21pc2UuXG4gIGZ1bmN0aW9uIGNhbGxiYWNraWZpZWQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgdmFyIG1heWJlQ2IgPSBhcmdzLnBvcCgpO1xuICAgIGlmICh0eXBlb2YgbWF5YmVDYiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBtYXliZUNiLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvLyBJbiB0cnVlIG5vZGUgc3R5bGUgd2UgcHJvY2VzcyB0aGUgY2FsbGJhY2sgb24gYG5leHRUaWNrYCB3aXRoIGFsbCB0aGVcbiAgICAvLyBpbXBsaWNhdGlvbnMgKHN0YWNrLCBgdW5jYXVnaHRFeGNlcHRpb25gLCBgYXN5bmNfaG9va3NgKVxuICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAudGhlbihmdW5jdGlvbihyZXQpIHsgcHJvY2Vzcy5uZXh0VGljayhjYiwgbnVsbCwgcmV0KSB9LFxuICAgICAgICAgICAgZnVuY3Rpb24ocmVqKSB7IHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2tpZnlPblJlamVjdGVkLCByZWosIGNiKSB9KTtcbiAgfVxuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihjYWxsYmFja2lmaWVkLCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY2FsbGJhY2tpZmllZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCkpO1xuICByZXR1cm4gY2FsbGJhY2tpZmllZDtcbn1cbmV4cG9ydHMuY2FsbGJhY2tpZnkgPSBjYWxsYmFja2lmeTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVsbGlwdGljID0gZXhwb3J0cztcblxuZWxsaXB0aWMudmVyc2lvbiA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5lbGxpcHRpYy51dGlscyA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvdXRpbHMnKTtcbmVsbGlwdGljLnJhbmQgPSByZXF1aXJlKCdicm9yYW5kJyk7XG5lbGxpcHRpYy5jdXJ2ZSA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvY3VydmUnKTtcbmVsbGlwdGljLmN1cnZlcyA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvY3VydmVzJyk7XG5cbi8vIFByb3RvY29sc1xuZWxsaXB0aWMuZWMgPSByZXF1aXJlKCcuL2VsbGlwdGljL2VjJyk7XG5lbGxpcHRpYy5lZGRzYSA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvZWRkc2EnKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbiAgfVxuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcjtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5pbmhlcml0cyA9IGluaGVyaXRzO1xuXG5mdW5jdGlvbiBpc1N1cnJvZ2F0ZVBhaXIobXNnLCBpKSB7XG4gIGlmICgobXNnLmNoYXJDb2RlQXQoaSkgJiAweEZDMDApICE9PSAweEQ4MDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGkgPCAwIHx8IGkgKyAxID49IG1zZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChtc2cuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDA7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWVuYykge1xuICAgICAgLy8gSW5zcGlyZWQgYnkgc3RyaW5nVG9VdGY4Qnl0ZUFycmF5KCkgaW4gY2xvc3VyZS1saWJyYXJ5IGJ5IEdvb2dsZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi84NTk4ZDg3MjQyYWY1OWFhYzIzMzI3MDc0MmM4OTg0ZTJiMmJkYmUwL2Nsb3N1cmUvZ29vZy9jcnlwdC9jcnlwdC5qcyNMMTE3LUwxNDNcbiAgICAgIC8vIEFwYWNoZSBMaWNlbnNlIDIuMFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICAgICAgdmFyIHAgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IGM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8IDIwNDgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDYpIHwgMTkyO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkpIHtcbiAgICAgICAgICBjID0gMHgxMDAwMCArICgoYyAmIDB4MDNGRikgPDwgMTApICsgKG1zZy5jaGFyQ29kZUF0KCsraSkgJiAweDAzRkYpO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTgpIHwgMjQwO1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDEyKSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTIpIHwgMjI0O1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDYpICYgNjMpIHwgMTI4O1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbmV4cG9ydHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleDMyID0gdG9IZXgzMjtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5qb2luMzIgPSBqb2luMzI7XG5cbmZ1bmN0aW9uIHNwbGl0MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShtc2cubGVuZ3RoICogNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIG0gPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICAgIHJlc1trXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDNdID0gbSAmIDB4ZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trICsgM10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2tdID0gbSAmIDB4ZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG5leHBvcnRzLnJvdGwzMiA9IHJvdGwzMjtcblxuZnVuY3Rpb24gc3VtMzIoYSwgYikge1xuICByZXR1cm4gKGEgKyBiKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl80ID0gc3VtMzJfNDtcblxuZnVuY3Rpb24gc3VtMzJfNShhLCBiLCBjLCBkLCBlKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCArIGUpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gc3VtNjQoYnVmLCBwb3MsIGFoLCBhbCkge1xuICB2YXIgYmggPSBidWZbcG9zXTtcbiAgdmFyIGJsID0gYnVmW3BvcyArIDFdO1xuXG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICBidWZbcG9zXSA9IGhpID4+PiAwO1xuICBidWZbcG9zICsgMV0gPSBsbztcbn1cbmV4cG9ydHMuc3VtNjQgPSBzdW02NDtcblxuZnVuY3Rpb24gc3VtNjRfaGkoYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzRfaGkgPSBzdW02NF80X2hpO1xuXG5mdW5jdGlvbiBzdW02NF80X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfbG8gPSBzdW02NF81X2xvO1xuXG5mdW5jdGlvbiByb3RyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWwgPDwgKDMyIC0gbnVtKSkgfCAoYWggPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59XG5leHBvcnRzLnNocjY0X2hpID0gc2hyNjRfaGk7XG5cbmZ1bmN0aW9uIHNocjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHsgbmV4dFRpY2s6IG5leHRUaWNrIH07XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3Ncbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuaW5oZXJpdHMoU3RyZWFtLCBFRSk7XG5TdHJlYW0uUmVhZGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMnKTtcblN0cmVhbS5Xcml0YWJsZSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS93cml0YWJsZS5qcycpO1xuU3RyZWFtLkR1cGxleCA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9kdXBsZXguanMnKTtcblN0cmVhbS5UcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzJyk7XG5TdHJlYW0uUGFzc1Rocm91Z2ggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMnKTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC40LnhcblN0cmVhbS5TdHJlYW0gPSBTdHJlYW07XG5cblxuXG4vLyBvbGQtc3R5bGUgc3RyZWFtcy4gIE5vdGUgdGhhdCB0aGUgcGlwZSBtZXRob2QgKHRoZSBvbmx5IHJlbGV2YW50XG4vLyBwYXJ0IG9mIHRoaXMgY2xhc3MpIGlzIG92ZXJyaWRkZW4gaW4gdGhlIFJlYWRhYmxlIGNsYXNzLlxuXG5mdW5jdGlvbiBTdHJlYW0oKSB7XG4gIEVFLmNhbGwodGhpcyk7XG59XG5cblN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgdmFyIHNvdXJjZSA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgaWYgKGRlc3Qud3JpdGFibGUpIHtcbiAgICAgIGlmIChmYWxzZSA9PT0gZGVzdC53cml0ZShjaHVuaykgJiYgc291cmNlLnBhdXNlKSB7XG4gICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZGF0YScsIG9uZGF0YSk7XG5cbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc291cmNlLnJlYWRhYmxlICYmIHNvdXJjZS5yZXN1bWUpIHtcbiAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICB9XG4gIH1cblxuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIC8vIElmIHRoZSAnZW5kJyBvcHRpb24gaXMgbm90IHN1cHBsaWVkLCBkZXN0LmVuZCgpIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgLy8gc291cmNlIGdldHMgdGhlICdlbmQnIG9yICdjbG9zZScgZXZlbnRzLiAgT25seSBkZXN0LmVuZCgpIG9uY2UuXG4gIGlmICghZGVzdC5faXNTdGRpbyAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbmQgIT09IGZhbHNlKSkge1xuICAgIHNvdXJjZS5vbignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5vbignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfVxuXG4gIHZhciBkaWRPbkVuZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSBkZXN0LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vIGRvbid0IGxlYXZlIGRhbmdsaW5nIHBpcGVzIHdoZW4gdGhlcmUgYXJlIGVycm9ycy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudCh0aGlzLCAnZXJyb3InKSA9PT0gMCkge1xuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCBzdHJlYW0gZXJyb3IgaW4gcGlwZS5cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIGRlc3Qub24oJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gcmVtb3ZlIGFsbCB0aGUgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZC5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgY2xlYW51cCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApO1xuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcbiAgfVxuXG4gIHNvdXJjZS5vbignZW5kJywgY2xlYW51cCk7XG4gIHNvdXJjZS5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0Lm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3QuZW1pdCgncGlwZScsIHNvdXJjZSk7XG5cbiAgLy8gQWxsb3cgZm9yIHVuaXgtbGlrZSB1c2FnZTogQS5waXBlKEIpLnBpcGUoQylcbiAgcmV0dXJuIGRlc3Q7XG59O1xuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzO1xuZXhwb3J0cy5SZWFkYWJsZSA9IGV4cG9ydHM7XG5leHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuZXhwb3J0cy5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcycpO1xuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qIDxyZXBsYWNlbWVudD4gKi9cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cbmZ1bmN0aW9uIENvcmtlZFJlcXVlc3Qoc3RhdGUpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcG5hLm5leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcblxudXRpbC5pbmhlcml0cyhXcml0YWJsZSwgU3RyZWFtKTtcblxuZnVuY3Rpb24gbm9wKCkge31cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgd3JpdGFibGVId20gPSBvcHRpb25zLndyaXRhYmxlSGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcblxuICBpZiAoaHdtIHx8IGh3bSA9PT0gMCkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtO2Vsc2UgaWYgKGlzRHVwbGV4ICYmICh3cml0YWJsZUh3bSB8fCB3cml0YWJsZUh3bSA9PT0gMCkpIHRoaXMuaGlnaFdhdGVyTWFyayA9IHdyaXRhYmxlSHdtO2Vsc2UgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IE1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKTtcblxuICAvLyBpZiBfZmluYWwgaGFzIGJlZW4gY2FsbGVkXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTtcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHJlYWxIYXNJbnN0YW5jZS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHRoaXMgIT09IFdyaXRhYmxlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZScpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIHBuYS5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgdmFsaWQgPSB0cnVlO1xuICB2YXIgZXIgPSBmYWxzZTtcblxuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIHBuYS5uZXh0VGljayhjYiwgZXIpO1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgcmV0ID0gZmFsc2U7XG4gIHZhciBpc0J1ZiA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIF9pc1VpbnQ4QXJyYXkoY2h1bmspO1xuXG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoY2h1bmsgIT09IG5ld0NodW5rKSB7XG4gICAgICBpc0J1ZiA9IHRydWU7XG4gICAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICAgICAgY2h1bmsgPSBuZXdDaHVuaztcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gIHN0YXRlLmxlbmd0aCArPSBsZW47XG5cbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IHtcbiAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgIGVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgIGlzQnVmOiBpc0J1ZixcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHdyaXRldiwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICBzdGF0ZS53cml0ZWNiID0gY2I7XG4gIHN0YXRlLndyaXRpbmcgPSB0cnVlO1xuICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgaWYgKHdyaXRldikgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO2Vsc2Ugc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpO1xuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG5cbiAgaWYgKHN5bmMpIHtcbiAgICAvLyBkZWZlciB0aGUgY2FsbGJhY2sgaWYgd2UgYXJlIGJlaW5nIGNhbGxlZCBzeW5jaHJvbm91c2x5XG4gICAgLy8gdG8gYXZvaWQgcGlsaW5nIHVwIHRoaW5ncyBvbiB0aGUgc3RhY2tcbiAgICBwbmEubmV4dFRpY2soY2IsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYW5kIGl0IHdpbGwgYWx3YXlzIGhhcHBlblxuICAgIC8vIGFmdGVyIGVycm9yXG4gICAgcG5hLm5leHRUaWNrKGZpbmlzaE1heWJlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGNhbGxlciBleHBlY3QgdGhpcyB0byBoYXBwZW4gYmVmb3JlIGlmXG4gICAgLy8gaXQgaXMgYXN5bmNcbiAgICBjYihlcik7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBidXQgZmluaXNoIG11c3RcbiAgICAvLyBhbHdheXMgZm9sbG93IGVycm9yXG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcblxuICBpZiAoZXIpIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpO2Vsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG5cbiAgICBpZiAoIWZpbmlzaGVkICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgLyo8cmVwbGFjZW1lbnQ+Ki9cbiAgICAgIGFzeW5jV3JpdGUoYWZ0ZXJXcml0ZSwgc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICAgIC8qPC9yZXBsYWNlbWVudD4qL1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcblxuICBpZiAoc3RyZWFtLl93cml0ZXYgJiYgZW50cnkgJiYgZW50cnkubmV4dCkge1xuICAgIC8vIEZhc3QgY2FzZSwgd3JpdGUgZXZlcnl0aGluZyB1c2luZyBfd3JpdGV2KClcbiAgICB2YXIgbCA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50O1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobCk7XG4gICAgdmFyIGhvbGRlciA9IHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZTtcbiAgICBob2xkZXIuZW50cnkgPSBlbnRyeTtcblxuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIGFsbEJ1ZmZlcnMgPSB0cnVlO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgaWYgKCFlbnRyeS5pc0J1ZikgYWxsQnVmZmVycyA9IGZhbHNlO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgYnVmZmVyLmFsbEJ1ZmZlcnMgPSBhbGxCdWZmZXJzO1xuXG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tO1xuICAgICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cblxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobmV3IEVycm9yKCdfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGw7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCkgdGhpcy53cml0ZShjaHVuaywgZW5jb2RpbmcpO1xuXG4gIC8vIC5lbmQoKSBmdWxseSB1bmNvcmtzXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQgPSAxO1xuICAgIHRoaXMudW5jb3JrKCk7XG4gIH1cblxuICAvLyBpZ25vcmUgdW5uZWNlc3NhcnkgZW5kKCkgY2FsbHMuXG4gIGlmICghc3RhdGUuZW5kaW5nICYmICFzdGF0ZS5maW5pc2hlZCkgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID09PSBudWxsICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZztcbn1cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIHN0cmVhbS5fZmluYWwoZnVuY3Rpb24gKGVycikge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfVxuICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcG5hLm5leHRUaWNrKGNhbGxGaW5hbCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuICBpZiAobmVlZCkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwbmEubmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBjYihlcnIpO1xuICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgfVxuICBpZiAoc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlKSB7XG4gICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGNvcmtSZXE7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuV3JpdGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5Xcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLmVuZCgpO1xuICBjYihlcnIpO1xufTsiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS4gSWYgYW4gaW52YWxpZCBieXRlIGlzIGRldGVjdGVkLCAtMiBpcyByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8vIENoZWNrcyBhdCBtb3N0IDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIEJ1ZmZlciBpbiBvcmRlciB0byBkZXRlY3QgYW5cbi8vIGluY29tcGxldGUgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIuIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgKDIsIDMsIG9yIDQpXG4vLyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIFVURi04IGNoYXJhY3RlciAoaWYgYXBwbGljYWJsZSkgYXJlIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrSW5jb21wbGV0ZShzZWxmLCBidWYsIGkpIHtcbiAgdmFyIGogPSBidWYubGVuZ3RoIC0gMTtcbiAgaWYgKGogPCBpKSByZXR1cm4gMDtcbiAgdmFyIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDE7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIGEgc2luZ2xlIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlciAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJztcbiAgfVxuICBpZiAoc2VsZi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoKGJ1ZlsxXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICBzZWxmLmxhc3ROZWVkID0gMTtcbiAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbi8vIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IGFzc2VydDtcblxuZnVuY3Rpb24gYXNzZXJ0KHZhbCwgbXNnKSB7XG4gIGlmICghdmFsKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbn1cblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gYXNzZXJ0RXF1YWwobCwgciwgbXNnKSB7XG4gIGlmIChsICE9IHIpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAoJ0Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBsICsgJyAhPSAnICsgcikpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0FzeW5jID0gdW5kZWZpbmVkO1xuXG52YXIgX2FzeW5jaWZ5ID0gcmVxdWlyZSgnLi4vYXN5bmNpZnknKTtcblxudmFyIF9hc3luY2lmeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY2lmeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdXBwb3J0c1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGlzQXN5bmMoZm4pIHtcbiAgICByZXR1cm4gc3VwcG9ydHNTeW1ib2wgJiYgZm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiB3cmFwQXN5bmMoYXN5bmNGbikge1xuICAgIHJldHVybiBpc0FzeW5jKGFzeW5jRm4pID8gKDAsIF9hc3luY2lmeTIuZGVmYXVsdCkoYXN5bmNGbikgOiBhc3luY0ZuO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSB3cmFwQXN5bmM7XG5leHBvcnRzLmlzQXN5bmMgPSBpc0FzeW5jOyIsInZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG4vLyBwcm90b3R5cGUgY2xhc3MgZm9yIGhhc2ggZnVuY3Rpb25zXG5mdW5jdGlvbiBIYXNoIChibG9ja1NpemUsIGZpbmFsU2l6ZSkge1xuICB0aGlzLl9ibG9jayA9IEJ1ZmZlci5hbGxvYyhibG9ja1NpemUpXG4gIHRoaXMuX2ZpbmFsU2l6ZSA9IGZpbmFsU2l6ZVxuICB0aGlzLl9ibG9ja1NpemUgPSBibG9ja1NpemVcbiAgdGhpcy5fbGVuID0gMFxufVxuXG5IYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBlbmMgfHwgJ3V0ZjgnXG4gICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuYylcbiAgfVxuXG4gIHZhciBibG9jayA9IHRoaXMuX2Jsb2NrXG4gIHZhciBibG9ja1NpemUgPSB0aGlzLl9ibG9ja1NpemVcbiAgdmFyIGxlbmd0aCA9IGRhdGEubGVuZ3RoXG4gIHZhciBhY2N1bSA9IHRoaXMuX2xlblxuXG4gIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbmd0aDspIHtcbiAgICB2YXIgYXNzaWduZWQgPSBhY2N1bSAlIGJsb2NrU2l6ZVxuICAgIHZhciByZW1haW5kZXIgPSBNYXRoLm1pbihsZW5ndGggLSBvZmZzZXQsIGJsb2NrU2l6ZSAtIGFzc2lnbmVkKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1haW5kZXI7IGkrKykge1xuICAgICAgYmxvY2tbYXNzaWduZWQgKyBpXSA9IGRhdGFbb2Zmc2V0ICsgaV1cbiAgICB9XG5cbiAgICBhY2N1bSArPSByZW1haW5kZXJcbiAgICBvZmZzZXQgKz0gcmVtYWluZGVyXG5cbiAgICBpZiAoKGFjY3VtICUgYmxvY2tTaXplKSA9PT0gMCkge1xuICAgICAgdGhpcy5fdXBkYXRlKGJsb2NrKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuX2xlbiArPSBsZW5ndGhcbiAgcmV0dXJuIHRoaXNcbn1cblxuSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKGVuYykge1xuICB2YXIgcmVtID0gdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplXG5cbiAgdGhpcy5fYmxvY2tbcmVtXSA9IDB4ODBcblxuICAvLyB6ZXJvIChyZW0gKyAxKSB0cmFpbGluZyBiaXRzLCB3aGVyZSAocmVtICsgMSkgaXMgdGhlIHNtYWxsZXN0XG4gIC8vIG5vbi1uZWdhdGl2ZSBzb2x1dGlvbiB0byB0aGUgZXF1YXRpb24gKGxlbmd0aCArIDEgKyAocmVtICsgMSkpID09PSBmaW5hbFNpemUgbW9kIGJsb2NrU2l6ZVxuICB0aGlzLl9ibG9jay5maWxsKDAsIHJlbSArIDEpXG5cbiAgaWYgKHJlbSA+PSB0aGlzLl9maW5hbFNpemUpIHtcbiAgICB0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spXG4gICAgdGhpcy5fYmxvY2suZmlsbCgwKVxuICB9XG5cbiAgdmFyIGJpdHMgPSB0aGlzLl9sZW4gKiA4XG5cbiAgLy8gdWludDMyXG4gIGlmIChiaXRzIDw9IDB4ZmZmZmZmZmYpIHtcbiAgICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGJpdHMsIHRoaXMuX2Jsb2NrU2l6ZSAtIDQpXG5cbiAgLy8gdWludDY0XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxvd0JpdHMgPSAoYml0cyAmIDB4ZmZmZmZmZmYpID4+PiAwXG4gICAgdmFyIGhpZ2hCaXRzID0gKGJpdHMgLSBsb3dCaXRzKSAvIDB4MTAwMDAwMDAwXG5cbiAgICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGhpZ2hCaXRzLCB0aGlzLl9ibG9ja1NpemUgLSA4KVxuICAgIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUobG93Qml0cywgdGhpcy5fYmxvY2tTaXplIC0gNClcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaylcbiAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoKClcblxuICByZXR1cm4gZW5jID8gaGFzaC50b1N0cmluZyhlbmMpIDogaGFzaFxufVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ191cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaFxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIE91clVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcbmZ1bmN0aW9uIF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNodW5rKTtcbn1cbmZ1bmN0aW9uIF9pc1VpbnQ4QXJyYXkob2JqKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBPdXJVaW50OEFycmF5O1xufVxuXG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcbnZhciBTdHJpbmdEZWNvZGVyO1xuXG51dGlsLmluaGVyaXRzKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIga1Byb3h5RXZlbnRzID0gWydlcnJvcicsICdjbG9zZScsICdkZXN0cm95JywgJ3BhdXNlJywgJ3Jlc3VtZSddO1xuXG5mdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGZuKSB7XG4gIC8vIFNhZGx5IHRoaXMgaXMgbm90IGNhY2hlYWJsZSBhcyBzb21lIGxpYnJhcmllcyBidW5kbGUgdGhlaXIgb3duXG4gIC8vIGV2ZW50IGVtaXR0ZXIgaW1wbGVtZW50YXRpb24gd2l0aCB0aGVtLlxuICBpZiAodHlwZW9mIGVtaXR0ZXIucHJlcGVuZExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcblxuICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1tldmVudF0pIGVtaXR0ZXIub24oZXZlbnQsIGZuKTtlbHNlIGlmIChpc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO2Vsc2UgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbiwgZW1pdHRlci5fZXZlbnRzW2V2ZW50XV07XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciByZWFkYWJsZUh3bSA9IG9wdGlvbnMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuXG4gIGlmIChod20gfHwgaHdtID09PSAwKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod207ZWxzZSBpZiAoaXNEdXBsZXggJiYgKHJlYWRhYmxlSHdtIHx8IHJlYWRhYmxlSHdtID09PSAwKSkgdGhpcy5oaWdoV2F0ZXJNYXJrID0gcmVhZGFibGVId207ZWxzZSB0aGlzLmhpZ2hXYXRlck1hcmsgPSBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gTWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBldmVudCAncmVhZGFibGUnLydkYXRhJyBpcyBlbWl0dGVkXG4gIC8vIGltbWVkaWF0ZWx5LCBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlXG4gIC8vIGFueSBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCByZWFkIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBoYXMgaXQgYmVlbiBkZXN0cm95ZWRcbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICB0aGlzLnB1c2gobnVsbCk7XG4gIGNiKGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHNraXBDaHVua0NoZWNrO1xuXG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlLCBza2lwQ2h1bmtDaGVjayk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rICYmIGNodW5rLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihjaHVuaykgIT09IEJ1ZmZlci5wcm90b3R5cGUpIHtcbiAgICAgICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQnKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH1cbiAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuaykge1xuICB2YXIgZXI7XG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rJyk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICAvLyBlbWl0ICdyZWFkYWJsZScgbm93IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIHBpY2tlZCB1cC5cbiAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG59XG5cbi8vIERvbid0IGVtaXQgcmVhZGFibGUgcmlnaHQgYXdheSBpbiBzeW5jIG1vZGUsIGJlY2F1c2UgdGhpcyBjYW4gdHJpZ2dlclxuLy8gYW5vdGhlciByZWFkKCkgY2FsbCA9PiBzdGFjayBvdmVyZmxvdy4gIFRoaXMgd2F5LCBpdCBtaWdodCB0cmlnZ2VyXG4vLyBhIG5leHRUaWNrIHJlY3Vyc2lvbiB3YXJuaW5nLCBidXQgdGhhdCdzIG5vdCBzbyBiYWQuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLmZsb3dpbmcpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnN5bmMpIHBuYS5uZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO2Vsc2UgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGRlYnVnKCdlbWl0IHJlYWRhYmxlJyk7XG4gIHN0cmVhbS5lbWl0KCdyZWFkYWJsZScpO1xuICBmbG93KHN0cmVhbSk7XG59XG5cbi8vIGF0IHRoaXMgcG9pbnQsIHRoZSB1c2VyIGhhcyBwcmVzdW1hYmx5IHNlZW4gdGhlICdyZWFkYWJsZScgZXZlbnQsXG4vLyBhbmQgY2FsbGVkIHJlYWQoKSB0byBjb25zdW1lIHNvbWUgZGF0YS4gIHRoYXQgbWF5IGhhdmUgdHJpZ2dlcmVkXG4vLyBpbiB0dXJuIGFub3RoZXIgX3JlYWQobikgY2FsbCwgaW4gd2hpY2ggY2FzZSByZWFkaW5nID0gdHJ1ZSBpZlxuLy8gaXQncyBpbiBwcm9ncmVzcy5cbi8vIEhvd2V2ZXIsIGlmIHdlJ3JlIG5vdCBlbmRlZCwgb3IgcmVhZGluZywgYW5kIHRoZSBsZW5ndGggPCBod20sXG4vLyB0aGVuIGdvIGFoZWFkIGFuZCB0cnkgdG8gcmVhZCBzb21lIG1vcmUgcHJlZW1wdGl2ZWx5LlxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIGRlYnVnKCdtYXliZVJlYWRNb3JlIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICAgIGlmIChsZW4gPT09IHN0YXRlLmxlbmd0aClcbiAgICAgIC8vIGRpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztlbHNlIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgfVxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufVxuXG4vLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblJlYWRhYmxlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ19yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgc3dpdGNoIChzdGF0ZS5waXBlc0NvdW50KSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhdGUucGlwZXMgPSBkZXN0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhdGUucGlwZXMgPSBbc3RhdGUucGlwZXMsIGRlc3RdO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuICBzdGF0ZS5waXBlc0NvdW50ICs9IDE7XG4gIGRlYnVnKCdwaXBlIGNvdW50PSVkIG9wdHM9JWonLCBzdGF0ZS5waXBlc0NvdW50LCBwaXBlT3B0cyk7XG5cbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcblxuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcG5hLm5leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHVucGlwZUluZm8uaGFzVW5waXBlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcblxuICAgIGNsZWFuZWRVcCA9IHRydWU7XG5cbiAgICAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIG9uZHJhaW4oKTtcbiAgfVxuXG4gIC8vIElmIHRoZSB1c2VyIHB1c2hlcyBtb3JlIGRhdGEgd2hpbGUgd2UncmUgd3JpdGluZyB0byBkZXN0IHRoZW4gd2UnbGwgZW5kIHVwXG4gIC8vIGluIG9uZGF0YSBhZ2Fpbi4gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGluY3JlYXNlIGF3YWl0RHJhaW4gb25jZSBiZWNhdXNlXG4gIC8vIGRlc3Qgd2lsbCBvbmx5IGVtaXQgb25lICdkcmFpbicgZXZlbnQgZm9yIHRoZSBtdWx0aXBsZSB3cml0ZXMuXG4gIC8vID0+IEludHJvZHVjZSBhIGd1YXJkIG9uIGluY3JlYXNpbmcgYXdhaXREcmFpbi5cbiAgdmFyIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgZGVidWcoJ29uZGF0YScpO1xuICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgaWYgKGZhbHNlID09PSByZXQgJiYgIWluY3JlYXNlZEF3YWl0RHJhaW4pIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgICAgLy8gdG8gZ2V0IHN0dWNrIGluIGEgcGVybWFuZW50bHkgcGF1c2VkIHN0YXRlIGlmIHRoYXQgd3JpdGVcbiAgICAgIC8vIGFsc28gcmV0dXJuZWQgZmFsc2UuXG4gICAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICAgIGlmICgoc3RhdGUucGlwZXNDb3VudCA9PT0gMSAmJiBzdGF0ZS5waXBlcyA9PT0gZGVzdCB8fCBzdGF0ZS5waXBlc0NvdW50ID4gMSAmJiBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KSAhPT0gLTEpICYmICFjbGVhbmVkVXApIHtcbiAgICAgICAgZGVidWcoJ2ZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZScsIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKztcbiAgICAgICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgZGVzdCBoYXMgYW4gZXJyb3IsIHRoZW4gc3RvcCBwaXBpbmcgaW50byBpdC5cbiAgLy8gaG93ZXZlciwgZG9uJ3Qgc3VwcHJlc3MgdGhlIHRocm93aW5nIGJlaGF2aW9yIGZvciB0aGlzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgZGVidWcoJ29uZXJyb3InLCBlcik7XG4gICAgdW5waXBlKCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBpZiAoRUVsaXN0ZW5lckNvdW50KGRlc3QsICdlcnJvcicpID09PSAwKSBkZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfVxuXG4gIC8vIHRlbGwgdGhlIGRlc3QgdGhhdCBpdCdzIGJlaW5nIHBpcGVkIHRvXG4gIGRlc3QuZW1pdCgncGlwZScsIHNyYyk7XG5cbiAgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGlwZSByZXN1bWUnKTtcbiAgICBzcmMucmVzdW1lKCk7XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluID09PSAwICYmIEVFbGlzdGVuZXJDb3VudChzcmMsICdkYXRhJykpIHtcbiAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgICAgZmxvdyhzcmMpO1xuICAgIH1cbiAgfTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uIChkZXN0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB1bnBpcGVJbmZvID0geyBoYXNVbnBpcGVkOiBmYWxzZSB9O1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHVucGlwZUluZm8pO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcG5hLm5leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5mdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYpIHtcbiAgZGVidWcoJ3JlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCcpO1xuICBzZWxmLnJlYWQoMCk7XG59XG5cbi8vIHBhdXNlKCkgYW5kIHJlc3VtZSgpIGFyZSByZW1uYW50cyBvZiB0aGUgbGVnYWN5IHJlYWRhYmxlIHN0cmVhbSBBUElcbi8vIElmIHRoZSB1c2VyIHVzZXMgdGhlbSwgdGhlbiBzd2l0Y2ggaW50byBvbGQgbW9kZS5cblJlYWRhYmxlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdyZXN1bWUnKTtcbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxuXG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKGZhbHNlICE9PSB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpIHt9XG59XG5cbi8vIHdyYXAgYW4gb2xkLXN0eWxlIHN0cmVhbSBhcyB0aGUgYXN5bmMgZGF0YSBzb3VyY2UuXG4vLyBUaGlzIGlzICpub3QqIHBhcnQgb2YgdGhlIHJlYWRhYmxlIHN0cmVhbSBpbnRlcmZhY2UuXG4vLyBJdCBpcyBhbiB1Z2x5IHVuZm9ydHVuYXRlIG1lc3Mgb2YgaGlzdG9yeS5cblJlYWRhYmxlLnByb3RvdHlwZS53cmFwID0gZnVuY3Rpb24gKHN0cmVhbSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBfdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBzdHJlYW1bbWV0aG9kXS5hcHBseShzdHJlYW0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3h5IGNlcnRhaW4gaW1wb3J0YW50IGV2ZW50cy5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgdHJ5IHRvIGNvbnN1bWUgc29tZSBtb3JlIGJ5dGVzLCBzaW1wbHkgdW5wYXVzZSB0aGVcbiAgLy8gdW5kZXJseWluZyBzdHJlYW0uXG4gIHRoaXMuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIGRlYnVnKCd3cmFwcGVkIF9yZWFkJywgbik7XG4gICAgaWYgKHBhdXNlZCkge1xuICAgICAgcGF1c2VkID0gZmFsc2U7XG4gICAgICBzdHJlYW0ucmVzdW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHAuZGF0YS5jb3B5KHJldCk7XG4gIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgYnVmLmNvcHkocmV0LCByZXQubGVuZ3RoIC0gbiwgMCwgbmIpO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gYnVmLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIElmIHdlIGdldCBoZXJlIGJlZm9yZSBjb25zdW1pbmcgYWxsIHRoZSBieXRlcywgdGhlbiB0aGF0IGlzIGFcbiAgLy8gYnVnIGluIG5vZGUuICBTaG91bGQgbmV2ZXIgaGFwcGVuLlxuICBpZiAoc3RhdGUubGVuZ3RoID4gMCkgdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1xuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgc3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIHBuYSA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLy8gdW5kb2N1bWVudGVkIGNiKCkgQVBJLCBuZWVkZWQgZm9yIGNvcmUsIG5vdCBmb3IgcHVibGljIEFQSVxuZnVuY3Rpb24gZGVzdHJveShlcnIsIGNiKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJlYWRhYmxlRGVzdHJveWVkID0gdGhpcy5fcmVhZGFibGVTdGF0ZSAmJiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgdmFyIHdyaXRhYmxlRGVzdHJveWVkID0gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcblxuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIgJiYgKCF0aGlzLl93cml0YWJsZVN0YXRlIHx8ICF0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCkpIHtcbiAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBwbmEubmV4dFRpY2soZW1pdEVycm9yTlQsIF90aGlzLCBlcnIpO1xuICAgICAgaWYgKF90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3lcbn07IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gYWZ0ZXJUcmFuc2Zvcm0oZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCd3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKSk7XG4gIH1cblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgdGhpcy5wdXNoKGRhdGEpO1xuXG4gIGNiKGVyKTtcblxuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0ge1xuICAgIGFmdGVyVHJhbnNmb3JtOiBhZnRlclRyYW5zZm9ybS5iaW5kKHRoaXMpLFxuICAgIG5lZWRUcmFuc2Zvcm06IGZhbHNlLFxuICAgIHRyYW5zZm9ybWluZzogZmFsc2UsXG4gICAgd3JpdGVjYjogbnVsbCxcbiAgICB3cml0ZWNodW5rOiBudWxsLFxuICAgIHdyaXRlZW5jb2Rpbmc6IG51bGxcbiAgfTtcblxuICAvLyBzdGFydCBvdXQgYXNraW5nIGZvciBhIHJlYWRhYmxlIGV2ZW50IG9uY2UgZGF0YSBpcyB0cmFuc2Zvcm1lZC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gIC8vIHdlIGhhdmUgaW1wbGVtZW50ZWQgdGhlIF9yZWFkIG1ldGhvZCwgYW5kIGRvbmUgdGhlIG90aGVyIHRoaW5nc1xuICAvLyB0aGF0IFJlYWRhYmxlIHdhbnRzIGJlZm9yZSB0aGUgZmlyc3QgX3JlYWQgY2FsbCwgc28gdW5zZXQgdGhlXG4gIC8vIHN5bmMgZ3VhcmQgZmxhZy5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gICAgX3RoaXMyLmVtaXQoJ2Nsb3NlJyk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICBpZiAoc3RyZWFtLl93cml0YWJsZVN0YXRlLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAoc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEJsb2NrSGFzaCgpIHtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nVG90YWwgPSAwO1xuICB0aGlzLmJsb2NrU2l6ZSA9IHRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplO1xuICB0aGlzLm91dFNpemUgPSB0aGlzLmNvbnN0cnVjdG9yLm91dFNpemU7XG4gIHRoaXMuaG1hY1N0cmVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGg7XG4gIHRoaXMucGFkTGVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGggLyA4O1xuICB0aGlzLmVuZGlhbiA9ICdiaWcnO1xuXG4gIHRoaXMuX2RlbHRhOCA9IHRoaXMuYmxvY2tTaXplIC8gODtcbiAgdGhpcy5fZGVsdGEzMiA9IHRoaXMuYmxvY2tTaXplIC8gMzI7XG59XG5leHBvcnRzLkJsb2NrSGFzaCA9IEJsb2NrSGFzaDtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBlbmMpIHtcbiAgLy8gQ29udmVydCBtZXNzYWdlIHRvIGFycmF5LCBwYWQgaXQsIGFuZCBqb2luIGludG8gMzJiaXQgYmxvY2tzXG4gIG1zZyA9IHV0aWxzLnRvQXJyYXkobXNnLCBlbmMpO1xuICBpZiAoIXRoaXMucGVuZGluZylcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2c7XG4gIGVsc2VcbiAgICB0aGlzLnBlbmRpbmcgPSB0aGlzLnBlbmRpbmcuY29uY2F0KG1zZyk7XG4gIHRoaXMucGVuZGluZ1RvdGFsICs9IG1zZy5sZW5ndGg7XG5cbiAgLy8gRW5vdWdoIGRhdGEsIHRyeSB1cGRhdGluZ1xuICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA+PSB0aGlzLl9kZWx0YTgpIHtcbiAgICBtc2cgPSB0aGlzLnBlbmRpbmc7XG5cbiAgICAvLyBQcm9jZXNzIHBlbmRpbmcgZGF0YSBpbiBibG9ja3NcbiAgICB2YXIgciA9IG1zZy5sZW5ndGggJSB0aGlzLl9kZWx0YTg7XG4gICAgdGhpcy5wZW5kaW5nID0gbXNnLnNsaWNlKG1zZy5sZW5ndGggLSByLCBtc2cubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMucGVuZGluZyA9IG51bGw7XG5cbiAgICBtc2cgPSB1dGlscy5qb2luMzIobXNnLCAwLCBtc2cubGVuZ3RoIC0gciwgdGhpcy5lbmRpYW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSB0aGlzLl9kZWx0YTMyKVxuICAgICAgdGhpcy5fdXBkYXRlKG1zZywgaSwgaSArIHRoaXMuX2RlbHRhMzIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpO1xuICBhc3NlcnQodGhpcy5wZW5kaW5nID09PSBudWxsKTtcblxuICByZXR1cm4gdGhpcy5fZGlnZXN0KGVuYyk7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLl9wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBsZW4gPSB0aGlzLnBlbmRpbmdUb3RhbDtcbiAgdmFyIGJ5dGVzID0gdGhpcy5fZGVsdGE4O1xuICB2YXIgayA9IGJ5dGVzIC0gKChsZW4gKyB0aGlzLnBhZExlbmd0aCkgJSBieXRlcyk7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkoayArIHRoaXMucGFkTGVuZ3RoKTtcbiAgcmVzWzBdID0gMHg4MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBrOyBpKyspXG4gICAgcmVzW2ldID0gMDtcblxuICAvLyBBcHBlbmQgbGVuZ3RoXG4gIGxlbiA8PD0gMztcbiAgaWYgKHRoaXMuZW5kaWFuID09PSAnYmlnJykge1xuICAgIGZvciAodmFyIHQgPSA4OyB0IDwgdGhpcy5wYWRMZW5ndGg7IHQrKylcbiAgICAgIHJlc1tpKytdID0gMDtcblxuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgfSBlbHNlIHtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG5cbiAgICBmb3IgKHQgPSA4OyB0IDwgdGhpcy5wYWRMZW5ndGg7IHQrKylcbiAgICAgIHJlc1tpKytdID0gMDtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwiY29uc3QgZ2V0UmFuZG9tSWQgPSByZXF1aXJlKCcuL3JhbmRvbS1pZC5qcycpXG5jb25zdCBleHRlbmQgPSByZXF1aXJlKCd4dGVuZCcpXG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUGF5bG9hZFxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVBheWxvYWQoZGF0YSl7XG4gIHJldHVybiBleHRlbmQoe1xuICAgIC8vIGRlZmF1bHRzXG4gICAgaWQ6IGdldFJhbmRvbUlkKCksXG4gICAganNvbnJwYzogJzIuMCcsXG4gICAgcGFyYW1zOiBbXSxcbiAgICAvLyB1c2VyLXNwZWNpZmllZFxuICB9LCBkYXRhKVxufVxuIiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IGV4cG9ydHM7XG5cbmN1cnZlLmJhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcbmN1cnZlLnNob3J0ID0gcmVxdWlyZSgnLi9zaG9ydCcpO1xuY3VydmUubW9udCA9IHJlcXVpcmUoJy4vbW9udCcpO1xuY3VydmUuZWR3YXJkcyA9IHJlcXVpcmUoJy4vZWR3YXJkcycpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmRcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciB0YXJnZXQgPSB7fVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXVxuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHNsaWNlO1xuZnVuY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCkge1xuICAgIHN0YXJ0ID0gc3RhcnQgfCAwO1xuICAgIHZhciBuZXdMZW4gPSBNYXRoLm1heChhcnJheUxpa2UubGVuZ3RoIC0gc3RhcnQsIDApO1xuICAgIHZhciBuZXdBcnIgPSBBcnJheShuZXdMZW4pO1xuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG5ld0xlbjsgaWR4KyspIHtcbiAgICAgICAgbmV3QXJyW2lkeF0gPSBhcnJheUxpa2Vbc3RhcnQgKyBpZHhdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBjb3B5QnVmZmVyKHNyYywgdGFyZ2V0LCBvZmZzZXQpIHtcbiAgc3JjLmNvcHkodGFyZ2V0LCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG5cbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2godikge1xuICAgIHZhciBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogbnVsbCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICArK3RoaXMubGVuZ3RoO1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgdGhpcy50YWlsID0gZW50cnk7XG4gICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgICAtLXRoaXMubGVuZ3RoO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihzKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICB9cmV0dXJuIHJldDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQobikge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHJldHVybiB0aGlzLmhlYWQuZGF0YTtcbiAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAocCkge1xuICAgICAgY29weUJ1ZmZlcihwLmRhdGEsIHJldCwgaSk7XG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICBwID0gcC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpO1xuXG5pZiAodXRpbCAmJiB1dGlsLmluc3BlY3QgJiYgdXRpbC5pbnNwZWN0LmN1c3RvbSkge1xuICBtb2R1bGUuZXhwb3J0cy5wcm90b3R5cGVbdXRpbC5pbnNwZWN0LmN1c3RvbV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHV0aWwuaW5zcGVjdCh7IGxlbmd0aDogdGhpcy5sZW5ndGggfSk7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArICcgJyArIG9iajtcbiAgfTtcbn0iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJcbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBkZXByZWNhdGU7XG5cbi8qKlxuICogTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAqIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS5ub0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50aHJvd0RlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIHRocm93IGFuIEVycm9yIHdoZW4gaW52b2tlZC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRyYWNlRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgaW52b2tlIGBjb25zb2xlLnRyYWNlKClgIGluc3RlYWQgb2YgYGNvbnNvbGUuZXJyb3IoKWAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSB0aGUgZnVuY3Rpb24gdG8gZGVwcmVjYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gbXNnIC0gdGhlIHN0cmluZyB0byBwcmludCB0byB0aGUgY29uc29sZSB3aGVuIGBmbmAgaXMgaW52b2tlZFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBhIG5ldyBcImRlcHJlY2F0ZWRcIiB2ZXJzaW9uIG9mIGBmbmBcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVwcmVjYXRlIChmbiwgbXNnKSB7XG4gIGlmIChjb25maWcoJ25vRGVwcmVjYXRpb24nKSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKGNvbmZpZygndGhyb3dEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcoJ3RyYWNlRGVwcmVjYXRpb24nKSkge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGBsb2NhbFN0b3JhZ2VgIGZvciBib29sZWFuIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGBuYW1lYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb25maWcgKG5hbWUpIHtcbiAgLy8gYWNjZXNzaW5nIGdsb2JhbC5sb2NhbFN0b3JhZ2UgY2FuIHRyaWdnZXIgYSBET01FeGNlcHRpb24gaW4gc2FuZGJveGVkIGlmcmFtZXNcbiAgdHJ5IHtcbiAgICBpZiAoIWdsb2JhbC5sb2NhbFN0b3JhZ2UpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdmFsID0gZ2xvYmFsLmxvY2FsU3RvcmFnZVtuYW1lXTtcbiAgaWYgKG51bGwgPT0gdmFsKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKS5UcmFuc2Zvcm1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIGNyZWF0ZUtlY2Nha0hhc2ggPSByZXF1aXJlKCdrZWNjYWsnKTtcbnZhciBzZWNwMjU2azEgPSByZXF1aXJlKCdzZWNwMjU2azEnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBybHAgPSByZXF1aXJlKCdybHAnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIHJlcXVpcmUoJ2V0aGpzLXV0aWwnKSk7XG5cbi8qKlxuICogdGhlIG1heCBpbnRlZ2VyIHRoYXQgdGhpcyBWTSBjYW4gaGFuZGxlIChhIGBgYEJOYGBgKVxuICogQHZhciB7Qk59IE1BWF9JTlRFR0VSXG4gKi9cbmV4cG9ydHMuTUFYX0lOVEVHRVIgPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLCAxNik7XG5cbi8qKlxuICogMl4yNTYgKGEgYGBgQk5gYGApXG4gKiBAdmFyIHtCTn0gVFdPX1BPVzI1NlxuICovXG5leHBvcnRzLlRXT19QT1cyNTYgPSBuZXcgQk4oJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgMTYpO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsIChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X05VTExfU1xuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9OVUxMX1MgPSAnYzVkMjQ2MDE4NmY3MjMzYzkyN2U3ZGIyZGNjNzAzYzBlNTAwYjY1M2NhODIyNzNiN2JmYWQ4MDQ1ZDg1YTQ3MCc7XG5leHBvcnRzLlNIQTNfTlVMTF9TID0gZXhwb3J0cy5LRUNDQUsyNTZfTlVMTF9TO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsIChhIGBgYEJ1ZmZlcmBgYClcbiAqIEB2YXIge0J1ZmZlcn0gS0VDQ0FLMjU2X05VTExcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfTlVMTCA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X05VTExfUywgJ2hleCcpO1xuZXhwb3J0cy5TSEEzX05VTEwgPSBleHBvcnRzLktFQ0NBSzI1Nl9OVUxMO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgb2YgYW4gUkxQIG9mIGFuIGVtcHR5IGFycmF5IChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X1JMUF9BUlJBWV9TXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TID0gJzFkY2M0ZGU4ZGVjNzVkN2FhYjg1YjU2N2I2Y2NkNDFhZDMxMjQ1MWI5NDhhNzQxM2YwYTE0MmZkNDBkNDkzNDcnO1xuZXhwb3J0cy5TSEEzX1JMUF9BUlJBWV9TID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZX1M7XG5cbi8qKlxuICogS2VjY2FrLTI1NiBvZiBhbiBSTFAgb2YgYW4gZW1wdHkgYXJyYXkgKGEgYGBgQnVmZmVyYGBgKVxuICogQHZhciB7QnVmZmVyfSBLRUNDQUsyNTZfUkxQX0FSUkFZXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWSA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TLCAnaGV4Jyk7XG5leHBvcnRzLlNIQTNfUkxQX0FSUkFZID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiB0aGUgUkxQIG9mIG51bGwgIChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X1JMUF9TXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9TID0gJzU2ZTgxZjE3MWJjYzU1YTZmZjgzNDVlNjkyYzBmODZlNWI0OGUwMWI5OTZjYWRjMDAxNjIyZmI1ZTM2M2I0MjEnO1xuZXhwb3J0cy5TSEEzX1JMUF9TID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1M7XG5cbi8qKlxuICogS2VjY2FrLTI1NiBoYXNoIG9mIHRoZSBSTFAgb2YgbnVsbCAoYSBgYGBCdWZmZXJgYGApXG4gKiBAdmFyIHtCdWZmZXJ9IEtFQ0NBSzI1Nl9STFBcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQID0gQnVmZmVyLmZyb20oZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1MsICdoZXgnKTtcbmV4cG9ydHMuU0hBM19STFAgPSBleHBvcnRzLktFQ0NBSzI1Nl9STFA7XG5cbi8qKlxuICogW2BCTmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2JuLmpzKVxuICogQHZhciB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydHMuQk4gPSBCTjtcblxuLyoqXG4gKiBbYHJscGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bWpzL3JscClcbiAqIEB2YXIge0Z1bmN0aW9ufVxuICovXG5leHBvcnRzLnJscCA9IHJscDtcblxuLyoqXG4gKiBbYHNlY3AyNTZrMWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jb2luanMvc2VjcDI1NmsxLW5vZGUvKVxuICogQHZhciB7T2JqZWN0fVxuICovXG5leHBvcnRzLnNlY3AyNTZrMSA9IHNlY3AyNTZrMTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYnVmZmVyIGZpbGxlZCB3aXRoIDBzXG4gKiBAbWV0aG9kIHplcm9zXG4gKiBAcGFyYW0ge051bWJlcn0gYnl0ZXMgIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGJ1ZmZlciBzaG91bGQgYmVcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy56ZXJvcyA9IGZ1bmN0aW9uIChieXRlcykge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKGJ5dGVzKS5maWxsKDApO1xufTtcblxuLyoqXG4gICogUmV0dXJucyBhIHplcm8gYWRkcmVzc1xuICAqIEBtZXRob2QgemVyb0FkZHJlc3NcbiAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICovXG5leHBvcnRzLnplcm9BZGRyZXNzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWRkcmVzc0xlbmd0aCA9IDIwO1xuICB2YXIgemVyb0FkZHJlc3MgPSBleHBvcnRzLnplcm9zKGFkZHJlc3NMZW5ndGgpO1xuICByZXR1cm4gZXhwb3J0cy5idWZmZXJUb0hleCh6ZXJvQWRkcmVzcyk7XG59O1xuXG4vKipcbiAqIExlZnQgUGFkcyBhbiBgQXJyYXlgIG9yIGBCdWZmZXJgIHdpdGggbGVhZGluZyB6ZXJvcyB0aWxsIGl0IGhhcyBgbGVuZ3RoYCBieXRlcy5cbiAqIE9yIGl0IHRydW5jYXRlcyB0aGUgYmVnaW5uaW5nIGlmIGl0IGV4Y2VlZHMuXG4gKiBAbWV0aG9kIGxzZXRMZW5ndGhcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fSBtc2cgdGhlIHZhbHVlIHRvIHBhZFxuICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBvdXRwdXQgc2hvdWxkIGJlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtyaWdodD1mYWxzZV0gd2hldGhlciB0byBzdGFydCBwYWRkaW5nIGZvcm0gdGhlIGxlZnQgb3IgcmlnaHRcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheX1cbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhMZWZ0ID0gZXhwb3J0cy5zZXRMZW5ndGggPSBmdW5jdGlvbiAobXNnLCBsZW5ndGgsIHJpZ2h0KSB7XG4gIHZhciBidWYgPSBleHBvcnRzLnplcm9zKGxlbmd0aCk7XG4gIG1zZyA9IGV4cG9ydHMudG9CdWZmZXIobXNnKTtcbiAgaWYgKHJpZ2h0KSB7XG4gICAgaWYgKG1zZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIG1zZy5jb3B5KGJ1Zik7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gbXNnLnNsaWNlKDAsIGxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1zZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIG1zZy5jb3B5KGJ1ZiwgbGVuZ3RoIC0gbXNnLmxlbmd0aCk7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gbXNnLnNsaWNlKC1sZW5ndGgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJpZ2h0IFBhZHMgYW4gYEFycmF5YCBvciBgQnVmZmVyYCB3aXRoIGxlYWRpbmcgemVyb3MgdGlsbCBpdCBoYXMgYGxlbmd0aGAgYnl0ZXMuXG4gKiBPciBpdCB0cnVuY2F0ZXMgdGhlIGJlZ2lubmluZyBpZiBpdCBleGNlZWRzLlxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl9IG1zZyB0aGUgdmFsdWUgdG8gcGFkXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIG91dHB1dCBzaG91bGQgYmVcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheX1cbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhSaWdodCA9IGZ1bmN0aW9uIChtc2csIGxlbmd0aCkge1xuICByZXR1cm4gZXhwb3J0cy5zZXRMZW5ndGgobXNnLCBsZW5ndGgsIHRydWUpO1xufTtcblxuLyoqXG4gKiBUcmltcyBsZWFkaW5nIHplcm9zIGZyb20gYSBgQnVmZmVyYCBvciBhbiBgQXJyYXlgXG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd9IGFcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheXxTdHJpbmd9XG4gKi9cbmV4cG9ydHMudW5wYWQgPSBleHBvcnRzLnN0cmlwWmVyb3MgPSBmdW5jdGlvbiAoYSkge1xuICBhID0gZXhwb3J0cy5zdHJpcEhleFByZWZpeChhKTtcbiAgdmFyIGZpcnN0ID0gYVswXTtcbiAgd2hpbGUgKGEubGVuZ3RoID4gMCAmJiBmaXJzdC50b1N0cmluZygpID09PSAnMCcpIHtcbiAgICBhID0gYS5zbGljZSgxKTtcbiAgICBmaXJzdCA9IGFbMF07XG4gIH1cbiAgcmV0dXJuIGE7XG59O1xuLyoqXG4gKiBBdHRlbXB0cyB0byB0dXJuIGEgdmFsdWUgaW50byBhIGBCdWZmZXJgLiBBcyBpbnB1dCBpdCBzdXBwb3J0cyBgQnVmZmVyYCwgYFN0cmluZ2AsIGBOdW1iZXJgLCBudWxsL3VuZGVmaW5lZCwgYEJOYCBhbmQgb3RoZXIgb2JqZWN0cyB3aXRoIGEgYHRvQXJyYXkoKWAgbWV0aG9kLlxuICogQHBhcmFtIHsqfSB2IHRoZSB2YWx1ZVxuICovXG5leHBvcnRzLnRvQnVmZmVyID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgdiA9IEJ1ZmZlci5mcm9tKHYpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZXhwb3J0cy5pc0hleFN0cmluZyh2KSkge1xuICAgICAgICB2ID0gQnVmZmVyLmZyb20oZXhwb3J0cy5wYWRUb0V2ZW4oZXhwb3J0cy5zdHJpcEhleFByZWZpeCh2KSksICdoZXgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSBCdWZmZXIuZnJvbSh2KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgdiA9IGV4cG9ydHMuaW50VG9CdWZmZXIodik7XG4gICAgfSBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKTtcbiAgICB9IGVsc2UgaWYgKEJOLmlzQk4odikpIHtcbiAgICAgIHYgPSB2LnRvQXJyYXlMaWtlKEJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmICh2LnRvQXJyYXkpIHtcbiAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgIHYgPSBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB0eXBlJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIHRvIGEgYE51bWJlcmBcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEB0aHJvd3MgSWYgdGhlIGlucHV0IG51bWJlciBleGNlZWRzIDUzIGJpdHMuXG4gKi9cbmV4cG9ydHMuYnVmZmVyVG9JbnQgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIHJldHVybiBuZXcgQk4oZXhwb3J0cy50b0J1ZmZlcihidWYpKS50b051bWJlcigpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIGludG8gYSBoZXggYFN0cmluZ2BcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy5idWZmZXJUb0hleCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgYnVmID0gZXhwb3J0cy50b0J1ZmZlcihidWYpO1xuICByZXR1cm4gJzB4JyArIGJ1Zi50b1N0cmluZygnaGV4Jyk7XG59O1xuXG4vKipcbiAqIEludGVycHJldHMgYSBgQnVmZmVyYCBhcyBhIHNpZ25lZCBpbnRlZ2VyIGFuZCByZXR1cm5zIGEgYEJOYC4gQXNzdW1lcyAyNTYtYml0IG51bWJlcnMuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbnVtXG4gKiBAcmV0dXJuIHtCTn1cbiAqL1xuZXhwb3J0cy5mcm9tU2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbmV3IEJOKG51bSkuZnJvbVR3b3MoMjU2KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBgQk5gIHRvIGFuIHVuc2lnbmVkIGludGVnZXIgYW5kIHJldHVybnMgaXQgYXMgYSBgQnVmZmVyYC4gQXNzdW1lcyAyNTYtYml0IG51bWJlcnMuXG4gKiBAcGFyYW0ge0JOfSBudW1cbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy50b1Vuc2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20obnVtLnRvVHdvcygyNTYpLnRvQXJyYXkoKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgS2VjY2FrIGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcGFyYW0ge051bWJlcn0gW2JpdHM9MjU2XSB0aGUgS2VjY2FrIHdpZHRoXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMua2VjY2FrID0gZnVuY3Rpb24gKGEsIGJpdHMpIHtcbiAgYSA9IGV4cG9ydHMudG9CdWZmZXIoYSk7XG4gIGlmICghYml0cykgYml0cyA9IDI1NjtcblxuICByZXR1cm4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrJyArIGJpdHMpLnVwZGF0ZShhKS5kaWdlc3QoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBLZWNjYWstMjU2IGhhc2ggb2YgdGhlIGlucHV0LCBhbGlhcyBmb3Iga2VjY2FrKGEsIDI1NilcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXJ9IGEgdGhlIGlucHV0IGRhdGFcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5rZWNjYWsyNTYgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gZXhwb3J0cy5rZWNjYWsoYSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBLTMgKEtlY2NhaykgaGFzaCBvZiB0aGUgaW5wdXQgW09CU09MRVRFXVxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl8U3RyaW5nfE51bWJlcn0gYSB0aGUgaW5wdXQgZGF0YVxuICogQHBhcmFtIHtOdW1iZXJ9IFtiaXRzPTI1Nl0gdGhlIFNIQS0zIHdpZHRoXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuc2hhMyA9IGV4cG9ydHMua2VjY2FrO1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBMjU2IGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuc2hhMjU2ID0gZnVuY3Rpb24gKGEpIHtcbiAgYSA9IGV4cG9ydHMudG9CdWZmZXIoYSk7XG4gIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYSkuZGlnZXN0KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgUklQRU1EMTYwIGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHBhZGRlZCB3aGV0aGVyIGl0IHNob3VsZCBiZSBwYWRkZWQgdG8gMjU2IGJpdHMgb3Igbm90XG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMucmlwZW1kMTYwID0gZnVuY3Rpb24gKGEsIHBhZGRlZCkge1xuICBhID0gZXhwb3J0cy50b0J1ZmZlcihhKTtcbiAgdmFyIGhhc2ggPSBjcmVhdGVIYXNoKCdybWQxNjAnKS51cGRhdGUoYSkuZGlnZXN0KCk7XG4gIGlmIChwYWRkZWQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5zZXRMZW5ndGgoaGFzaCwgMzIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBoYXNoO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBLTMgaGFzaCBvZiB0aGUgUkxQIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXJ9IGEgdGhlIGlucHV0IGRhdGFcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5ybHBoYXNoID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIGV4cG9ydHMua2VjY2FrKHJscC5lbmNvZGUoYSkpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByaXZhdGUga2V5IHNhdGlzZmllcyB0aGUgcnVsZXMgb2YgdGhlIGN1cnZlIHNlY3AyNTZrMS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcml2YXRlS2V5XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRQcml2YXRlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgcmV0dXJuIHNlY3AyNTZrMS5wcml2YXRlS2V5VmVyaWZ5KHByaXZhdGVLZXkpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHB1YmxpYyBrZXkgc2F0aXNmaWVzIHRoZSBydWxlcyBvZiB0aGUgY3VydmUgc2VjcDI1NmsxXG4gKiBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiBFdGhlcmV1bS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwdWJsaWNLZXkgVGhlIHR3byBwb2ludHMgb2YgYW4gdW5jb21wcmVzc2VkIGtleSwgdW5sZXNzIHNhbml0aXplIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Nhbml0aXplPWZhbHNlXSBBY2NlcHQgcHVibGljIGtleXMgaW4gb3RoZXIgZm9ybWF0c1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc1ZhbGlkUHVibGljID0gZnVuY3Rpb24gKHB1YmxpY0tleSwgc2FuaXRpemUpIHtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggPT09IDY0KSB7XG4gICAgLy8gQ29udmVydCB0byBTRUMxIGZvciBzZWNwMjU2azFcbiAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleVZlcmlmeShCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbNF0pLCBwdWJsaWNLZXldKSk7XG4gIH1cblxuICBpZiAoIXNhbml0aXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkocHVibGljS2V5KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXRoZXJldW0gYWRkcmVzcyBvZiBhIGdpdmVuIHB1YmxpYyBrZXkuXG4gKiBBY2NlcHRzIFwiRXRoZXJldW0gcHVibGljIGtleXNcIiBhbmQgU0VDMSBlbmNvZGVkIGtleXMuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHViS2V5IFRoZSB0d28gcG9pbnRzIG9mIGFuIHVuY29tcHJlc3NlZCBrZXksIHVubGVzcyBzYW5pdGl6ZSBpcyBlbmFibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzYW5pdGl6ZT1mYWxzZV0gQWNjZXB0IHB1YmxpYyBrZXlzIGluIG90aGVyIGZvcm1hdHNcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5wdWJUb0FkZHJlc3MgPSBleHBvcnRzLnB1YmxpY1RvQWRkcmVzcyA9IGZ1bmN0aW9uIChwdWJLZXksIHNhbml0aXplKSB7XG4gIHB1YktleSA9IGV4cG9ydHMudG9CdWZmZXIocHViS2V5KTtcbiAgaWYgKHNhbml0aXplICYmIHB1YktleS5sZW5ndGggIT09IDY0KSB7XG4gICAgcHViS2V5ID0gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQocHViS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG4gIH1cbiAgYXNzZXJ0KHB1YktleS5sZW5ndGggPT09IDY0KTtcbiAgLy8gT25seSB0YWtlIHRoZSBsb3dlciAxNjBiaXRzIG9mIHRoZSBoYXNoXG4gIHJldHVybiBleHBvcnRzLmtlY2NhayhwdWJLZXkpLnNsaWNlKC0yMCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIHB1YmxpYyBrZXkgb2YgYSBnaXZlbiBwcml2YXRlIGtleVxuICogQHBhcmFtIHtCdWZmZXJ9IHByaXZhdGVLZXkgQSBwcml2YXRlIGtleSBtdXN0IGJlIDI1NiBiaXRzIHdpZGVcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xudmFyIHByaXZhdGVUb1B1YmxpYyA9IGV4cG9ydHMucHJpdmF0ZVRvUHVibGljID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgcHJpdmF0ZUtleSA9IGV4cG9ydHMudG9CdWZmZXIocHJpdmF0ZUtleSk7XG4gIC8vIHNraXAgdGhlIHR5cGUgZmxhZyBhbmQgdXNlIHRoZSBYLCBZIHBvaW50c1xuICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNyZWF0ZShwcml2YXRlS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcHVibGljIGtleSB0byB0aGUgRXRoZXJldW0gZm9ybWF0LlxuICogQHBhcmFtIHtCdWZmZXJ9IHB1YmxpY0tleVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLmltcG9ydFB1YmxpYyA9IGZ1bmN0aW9uIChwdWJsaWNLZXkpIHtcbiAgcHVibGljS2V5ID0gZXhwb3J0cy50b0J1ZmZlcihwdWJsaWNLZXkpO1xuICBpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICBwdWJsaWNLZXkgPSBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChwdWJsaWNLZXksIGZhbHNlKS5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gcHVibGljS2V5O1xufTtcblxuLyoqXG4gKiBFQ0RTQSBzaWduXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXNnSGFzaFxuICogQHBhcmFtIHtCdWZmZXJ9IHByaXZhdGVLZXlcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0cy5lY3NpZ24gPSBmdW5jdGlvbiAobXNnSGFzaCwgcHJpdmF0ZUtleSkge1xuICB2YXIgc2lnID0gc2VjcDI1NmsxLnNpZ24obXNnSGFzaCwgcHJpdmF0ZUtleSk7XG5cbiAgdmFyIHJldCA9IHt9O1xuICByZXQuciA9IHNpZy5zaWduYXR1cmUuc2xpY2UoMCwgMzIpO1xuICByZXQucyA9IHNpZy5zaWduYXR1cmUuc2xpY2UoMzIsIDY0KTtcbiAgcmV0LnYgPSBzaWcucmVjb3ZlcnkgKyAyNztcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUga2VjY2FrLTI1NiBoYXNoIG9mIGBtZXNzYWdlYCwgcHJlZml4ZWQgd2l0aCB0aGUgaGVhZGVyIHVzZWQgYnkgdGhlIGBldGhfc2lnbmAgUlBDIGNhbGwuXG4gKiBUaGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGZlZCBpbnRvIGBlY3NpZ25gIHRvIHByb2R1Y2UgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBgZXRoX3NpZ25gXG4gKiBjYWxsIGZvciBhIGdpdmVuIGBtZXNzYWdlYCwgb3IgZmVkIHRvIGBlY3JlY292ZXJgIGFsb25nIHdpdGggYSBzaWduYXR1cmUgdG8gcmVjb3ZlciB0aGUgcHVibGljIGtleVxuICogdXNlZCB0byBwcm9kdWNlIHRoZSBzaWduYXR1cmUuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnMge0J1ZmZlcn0gaGFzaFxuICovXG5leHBvcnRzLmhhc2hQZXJzb25hbE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICB2YXIgcHJlZml4ID0gZXhwb3J0cy50b0J1ZmZlcignXFx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4nICsgbWVzc2FnZS5sZW5ndGgudG9TdHJpbmcoKSk7XG4gIHJldHVybiBleHBvcnRzLmtlY2NhayhCdWZmZXIuY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKSk7XG59O1xuXG4vKipcbiAqIEVDRFNBIHB1YmxpYyBrZXkgcmVjb3ZlcnkgZnJvbSBzaWduYXR1cmVcbiAqIEBwYXJhbSB7QnVmZmVyfSBtc2dIYXNoXG4gKiBAcGFyYW0ge051bWJlcn0gdlxuICogQHBhcmFtIHtCdWZmZXJ9IHJcbiAqIEBwYXJhbSB7QnVmZmVyfSBzXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHB1YmxpY0tleVxuICovXG5leHBvcnRzLmVjcmVjb3ZlciA9IGZ1bmN0aW9uIChtc2dIYXNoLCB2LCByLCBzKSB7XG4gIHZhciBzaWduYXR1cmUgPSBCdWZmZXIuY29uY2F0KFtleHBvcnRzLnNldExlbmd0aChyLCAzMiksIGV4cG9ydHMuc2V0TGVuZ3RoKHMsIDMyKV0sIDY0KTtcbiAgdmFyIHJlY292ZXJ5ID0gdiAtIDI3O1xuICBpZiAocmVjb3ZlcnkgIT09IDAgJiYgcmVjb3ZlcnkgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIHYgdmFsdWUnKTtcbiAgfVxuICB2YXIgc2VuZGVyUHViS2V5ID0gc2VjcDI1NmsxLnJlY292ZXIobXNnSGFzaCwgc2lnbmF0dXJlLCByZWNvdmVyeSk7XG4gIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChzZW5kZXJQdWJLZXksIGZhbHNlKS5zbGljZSgxKTtcbn07XG5cbi8qKlxuICogQ29udmVydCBzaWduYXR1cmUgcGFyYW1ldGVycyBpbnRvIHRoZSBmb3JtYXQgb2YgYGV0aF9zaWduYCBSUEMgbWV0aG9kXG4gKiBAcGFyYW0ge051bWJlcn0gdlxuICogQHBhcmFtIHtCdWZmZXJ9IHJcbiAqIEBwYXJhbSB7QnVmZmVyfSBzXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHNpZ1xuICovXG5leHBvcnRzLnRvUnBjU2lnID0gZnVuY3Rpb24gKHYsIHIsIHMpIHtcbiAgLy8gTk9URTogd2l0aCBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIGNoYWluSWQgdGhpcyBtaWdodCBuZWVkIHRvIGJlIHVwZGF0ZWRcbiAgaWYgKHYgIT09IDI3ICYmIHYgIT09IDI4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY292ZXJ5IGlkJyk7XG4gIH1cblxuICAvLyBnZXRoIChhbmQgdGhlIFJQQyBldGhfc2lnbiBtZXRob2QpIHVzZXMgdGhlIDY1IGJ5dGUgZm9ybWF0IHVzZWQgYnkgQml0Y29pblxuICAvLyBGSVhNRTogdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9nby1ldGhlcmV1bS9pc3N1ZXMvMjA1M1xuICByZXR1cm4gZXhwb3J0cy5idWZmZXJUb0hleChCdWZmZXIuY29uY2F0KFtleHBvcnRzLnNldExlbmd0aExlZnQociwgMzIpLCBleHBvcnRzLnNldExlbmd0aExlZnQocywgMzIpLCBleHBvcnRzLnRvQnVmZmVyKHYgLSAyNyldKSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgc2lnbmF0dXJlIGZvcm1hdCBvZiB0aGUgYGV0aF9zaWduYCBSUEMgbWV0aG9kIHRvIHNpZ25hdHVyZSBwYXJhbWV0ZXJzXG4gKiBOT1RFOiBhbGwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBnZXRoOiBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW0vZ28tZXRoZXJldW0vaXNzdWVzLzIwNTNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzaWdcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0cy5mcm9tUnBjU2lnID0gZnVuY3Rpb24gKHNpZykge1xuICBzaWcgPSBleHBvcnRzLnRvQnVmZmVyKHNpZyk7XG5cbiAgLy8gTk9URTogd2l0aCBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIGNoYWluSWQgdGhpcyBtaWdodCBuZWVkIHRvIGJlIHVwZGF0ZWRcbiAgaWYgKHNpZy5sZW5ndGggIT09IDY1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciB2ID0gc2lnWzY0XTtcbiAgLy8gc3VwcG9ydCBib3RoIHZlcnNpb25zIG9mIGBldGhfc2lnbmAgcmVzcG9uc2VzXG4gIGlmICh2IDwgMjcpIHtcbiAgICB2ICs9IDI3O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2OiB2LFxuICAgIHI6IHNpZy5zbGljZSgwLCAzMiksXG4gICAgczogc2lnLnNsaWNlKDMyLCA2NClcbiAgfTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXRoZXJldW0gYWRkcmVzcyBvZiBhIGdpdmVuIHByaXZhdGUga2V5XG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJpdmF0ZUtleSBBIHByaXZhdGUga2V5IG11c3QgYmUgMjU2IGJpdHMgd2lkZVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLnByaXZhdGVUb0FkZHJlc3MgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICByZXR1cm4gZXhwb3J0cy5wdWJsaWNUb0FkZHJlc3MocHJpdmF0ZVRvUHVibGljKHByaXZhdGVLZXkpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBhZGRyZXNzIGlzIGEgdmFsaWQuIEFjY2VwdHMgY2hlY2tzdW1tZWQgYWRkcmVzc2VzIHRvb1xuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNWYWxpZEFkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICByZXR1cm4gKC9eMHhbMC05YS1mQS1GXXs0MH0kLy50ZXN0KGFkZHJlc3MpXG4gICk7XG59O1xuXG4vKipcbiAgKiBDaGVja3MgaWYgYSBnaXZlbiBhZGRyZXNzIGlzIGEgemVybyBhZGRyZXNzXG4gICogQG1ldGhvZCBpc1plcm9BZGRyZXNzXG4gICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAqL1xuZXhwb3J0cy5pc1plcm9BZGRyZXNzID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgdmFyIHplcm9BZGRyZXNzID0gZXhwb3J0cy56ZXJvQWRkcmVzcygpO1xuICByZXR1cm4gemVyb0FkZHJlc3MgPT09IGV4cG9ydHMuYWRkSGV4UHJlZml4KGFkZHJlc3MpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2hlY2tzdW1tZWQgYWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0NoZWNrc3VtQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gIGFkZHJlc3MgPSBleHBvcnRzLnN0cmlwSGV4UHJlZml4KGFkZHJlc3MpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBoYXNoID0gZXhwb3J0cy5rZWNjYWsoYWRkcmVzcykudG9TdHJpbmcoJ2hleCcpO1xuICB2YXIgcmV0ID0gJzB4JztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocGFyc2VJbnQoaGFzaFtpXSwgMTYpID49IDgpIHtcbiAgICAgIHJldCArPSBhZGRyZXNzW2ldLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCArPSBhZGRyZXNzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWRkcmVzcyBpcyBhIHZhbGlkIGNoZWNrc3VtbWVkIGFkZHJlc3NcbiAqIEBwYXJhbSB7QnVmZmVyfSBhZGRyZXNzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDaGVja3N1bUFkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICByZXR1cm4gZXhwb3J0cy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSAmJiBleHBvcnRzLnRvQ2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpID09PSBhZGRyZXNzO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWRkcmVzcyBvZiBhIG5ld2x5IGNyZWF0ZWQgY29udHJhY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBmcm9tIHRoZSBhZGRyZXNzIHdoaWNoIGlzIGNyZWF0aW5nIHRoaXMgbmV3IGFkZHJlc3NcbiAqIEBwYXJhbSB7QnVmZmVyfSBub25jZSB0aGUgbm9uY2Ugb2YgdGhlIGZyb20gYWNjb3VudFxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdlbmVyYXRlQWRkcmVzcyA9IGZ1bmN0aW9uIChmcm9tLCBub25jZSkge1xuICBmcm9tID0gZXhwb3J0cy50b0J1ZmZlcihmcm9tKTtcbiAgbm9uY2UgPSBuZXcgQk4obm9uY2UpO1xuXG4gIGlmIChub25jZS5pc1plcm8oKSkge1xuICAgIC8vIGluIFJMUCB3ZSB3YW50IHRvIGVuY29kZSBudWxsIGluIHRoZSBjYXNlIG9mIHplcm8gbm9uY2VcbiAgICAvLyByZWFkIHRoZSBSTFAgZG9jdW1lbnRhdGlvbiBmb3IgYW4gYW5zd2VyIGlmIHlvdSBkYXJlXG4gICAgbm9uY2UgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIG5vbmNlID0gQnVmZmVyLmZyb20obm9uY2UudG9BcnJheSgpKTtcbiAgfVxuXG4gIC8vIE9ubHkgdGFrZSB0aGUgbG93ZXIgMTYwYml0cyBvZiB0aGUgaGFzaFxuICByZXR1cm4gZXhwb3J0cy5ybHBoYXNoKFtmcm9tLCBub25jZV0pLnNsaWNlKC0yMCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYWRkcmVzcyBiZWxvbmdzIHRvIGEgcHJlY29tcGlsZWQgYWNjb3VudCAoQnl6YW50aXVtKVxuICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBhZGRyZXNzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzUHJlY29tcGlsZWQgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICB2YXIgYSA9IGV4cG9ydHMudW5wYWQoYWRkcmVzcyk7XG4gIHJldHVybiBhLmxlbmd0aCA9PT0gMSAmJiBhWzBdID49IDEgJiYgYVswXSA8PSA4O1xufTtcblxuLyoqXG4gKiBBZGRzIFwiMHhcIiB0byBhIGdpdmVuIGBTdHJpbmdgIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgc3RhcnQgd2l0aCBcIjB4XCJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy5hZGRIZXhQcmVmaXggPSBmdW5jdGlvbiAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy5pc0hleFByZWZpeGVkKHN0cikgPyBzdHIgOiAnMHgnICsgc3RyO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBFQ0RTQSBzaWduYXR1cmVcbiAqIEBtZXRob2QgaXNWYWxpZFNpZ25hdHVyZVxuICogQHBhcmFtIHtCdWZmZXJ9IHZcbiAqIEBwYXJhbSB7QnVmZmVyfSByXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc1xuICogQHBhcmFtIHtCb29sZWFufSBbaG9tZXN0ZWFkPXRydWVdXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNWYWxpZFNpZ25hdHVyZSA9IGZ1bmN0aW9uICh2LCByLCBzLCBob21lc3RlYWQpIHtcbiAgdmFyIFNFQ1AyNTZLMV9OX0RJVl8yID0gbmV3IEJOKCc3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVkNTc2ZTczNTdhNDUwMWRkZmU5MmY0NjY4MWIyMGEwJywgMTYpO1xuICB2YXIgU0VDUDI1NksxX04gPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDEnLCAxNik7XG5cbiAgaWYgKHIubGVuZ3RoICE9PSAzMiB8fCBzLmxlbmd0aCAhPT0gMzIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodiAhPT0gMjcgJiYgdiAhPT0gMjgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByID0gbmV3IEJOKHIpO1xuICBzID0gbmV3IEJOKHMpO1xuXG4gIGlmIChyLmlzWmVybygpIHx8IHIuZ3QoU0VDUDI1NksxX04pIHx8IHMuaXNaZXJvKCkgfHwgcy5ndChTRUNQMjU2SzFfTikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaG9tZXN0ZWFkID09PSBmYWxzZSAmJiBuZXcgQk4ocykuY21wKFNFQ1AyNTZLMV9OX0RJVl8yKSA9PT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIG9yIGBBcnJheWAgdG8gSlNPTlxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl9IGJhXG4gKiBAcmV0dXJuIHtBcnJheXxTdHJpbmd8bnVsbH1cbiAqL1xuZXhwb3J0cy5iYVRvSlNPTiA9IGZ1bmN0aW9uIChiYSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJhKSkge1xuICAgIHJldHVybiAnMHgnICsgYmEudG9TdHJpbmcoJ2hleCcpO1xuICB9IGVsc2UgaWYgKGJhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKGV4cG9ydHMuYmFUb0pTT04oYmFbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59O1xuXG4vKipcbiAqIERlZmluZXMgcHJvcGVydGllcyBvbiBhIGBPYmplY3RgLiBJdCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdW5kZXJseWluZyBkYXRhIGlzIGJpbmFyeS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWxmIHRoZSBgT2JqZWN0YCB0byBkZWZpbmUgcHJvcGVydGllcyBvblxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIGFuIGFycmF5IGZpZWxkcyB0byBkZWZpbmUuIEZpZWxkcyBjYW4gY29udGFpbjpcbiAqICogYG5hbWVgIC0gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXNcbiAqICogYGxlbmd0aGAgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBmaWVsZCBjYW4gaGF2ZVxuICogKiBgYWxsb3dMZXNzYCAtIGlmIHRoZSBmaWVsZCBjYW4gYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGhcbiAqICogYGFsbG93RW1wdHlgXG4gKiBAcGFyYW0geyp9IGRhdGEgZGF0YSB0byBiZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0cy5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHNlbGYsIGZpZWxkcywgZGF0YSkge1xuICBzZWxmLnJhdyA9IFtdO1xuICBzZWxmLl9maWVsZHMgPSBbXTtcblxuICAvLyBhdHRhY2ggdGhlIGB0b0pTT05gXG4gIHNlbGYudG9KU09OID0gZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBzZWxmLl9maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgb2JqW2ZpZWxkXSA9ICcweCcgKyBzZWxmW2ZpZWxkXS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBleHBvcnRzLmJhVG9KU09OKHRoaXMucmF3KTtcbiAgfTtcblxuICBzZWxmLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gcmxwLmVuY29kZShzZWxmLnJhdyk7XG4gIH07XG5cbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkLCBpKSB7XG4gICAgc2VsZi5fZmllbGRzLnB1c2goZmllbGQubmFtZSk7XG4gICAgZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgcmV0dXJuIHNlbGYucmF3W2ldO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR0ZXIodikge1xuICAgICAgdiA9IGV4cG9ydHMudG9CdWZmZXIodik7XG5cbiAgICAgIGlmICh2LnRvU3RyaW5nKCdoZXgnKSA9PT0gJzAwJyAmJiAhZmllbGQuYWxsb3daZXJvKSB7XG4gICAgICAgIHYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5hbGxvd0xlc3MgJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgIHYgPSBleHBvcnRzLnN0cmlwWmVyb3Modik7XG4gICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPj0gdi5sZW5ndGgsICdUaGUgZmllbGQgJyArIGZpZWxkLm5hbWUgKyAnIG11c3Qgbm90IGhhdmUgbW9yZSAnICsgZmllbGQubGVuZ3RoICsgJyBieXRlcycpO1xuICAgICAgfSBlbHNlIGlmICghKGZpZWxkLmFsbG93WmVybyAmJiB2Lmxlbmd0aCA9PT0gMCkgJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPT09IHYubGVuZ3RoLCAnVGhlIGZpZWxkICcgKyBmaWVsZC5uYW1lICsgJyBtdXN0IGhhdmUgYnl0ZSBsZW5ndGggb2YgJyArIGZpZWxkLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYucmF3W2ldID0gdjtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQubmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgc2V0OiBzZXR0ZXJcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5kZWZhdWx0KSB7XG4gICAgICBzZWxmW2ZpZWxkLm5hbWVdID0gZmllbGQuZGVmYXVsdDtcbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggYWxpYXNcbiAgICBpZiAoZmllbGQuYWxpYXMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBmaWVsZC5hbGlhcywge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gaWYgdGhlIGNvbnN0dWN0b3IgaXMgcGFzc2VkIGRhdGFcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZXhwb3J0cy5zdHJpcEhleFByZWZpeChkYXRhKSwgJ2hleCcpO1xuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBybHAuZGVjb2RlKGRhdGEpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiBzZWxmLl9maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBpbiBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBhbGwgdGhlIGl0ZW1zIGFyZSBidWZmZXJzXG4gICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgc2VsZltzZWxmLl9maWVsZHNbaV1dID0gZXhwb3J0cy50b0J1ZmZlcihkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihkYXRhKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGlmIChrZXlzLmluZGV4T2YoZmllbGQubmFtZSkgIT09IC0xKSBzZWxmW2ZpZWxkLm5hbWVdID0gZGF0YVtmaWVsZC5uYW1lXTtcbiAgICAgICAgaWYgKGtleXMuaW5kZXhPZihmaWVsZC5hbGlhcykgIT09IC0xKSBzZWxmW2ZpZWxkLmFsaWFzXSA9IGRhdGFbZmllbGQuYWxpYXNdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkYXRhJyk7XG4gICAgfVxuICB9XG59OyIsIid1c2Ugc3RyaWN0J1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIE1ENSA9IHJlcXVpcmUoJ21kNS5qcycpXG52YXIgUklQRU1EMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxudmFyIEJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG5cbmZ1bmN0aW9uIEhhc2ggKGhhc2gpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2ggPSBoYXNoXG59XG5cbmluaGVyaXRzKEhhc2gsIEJhc2UpXG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxufVxuXG5IYXNoLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSGFzaCAoYWxnKSB7XG4gIGFsZyA9IGFsZy50b0xvd2VyQ2FzZSgpXG4gIGlmIChhbGcgPT09ICdtZDUnKSByZXR1cm4gbmV3IE1ENSgpXG4gIGlmIChhbGcgPT09ICdybWQxNjAnIHx8IGFsZyA9PT0gJ3JpcGVtZDE2MCcpIHJldHVybiBuZXcgUklQRU1EMTYwKClcblxuICByZXR1cm4gbmV3IEhhc2goc2hhKGFsZykpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0hleFByZWZpeGVkID0gcmVxdWlyZSgnaXMtaGV4LXByZWZpeGVkJyk7XG52YXIgc3RyaXBIZXhQcmVmaXggPSByZXF1aXJlKCdzdHJpcC1oZXgtcHJlZml4Jyk7XG5cbi8qKlxuICogUGFkcyBhIGBTdHJpbmdgIHRvIGhhdmUgYW4gZXZlbiBsZW5ndGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3RyaW5nfSBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gcGFkVG9FdmVuKHZhbHVlKSB7XG4gIHZhciBhID0gdmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBpZiAodHlwZW9mIGEgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gd2hpbGUgcGFkZGluZyB0byBldmVuLCB2YWx1ZSBtdXN0IGJlIHN0cmluZywgaXMgY3VycmVudGx5ICcgKyB0eXBlb2YgYSArICcsIHdoaWxlIHBhZFRvRXZlbi4nKTtcbiAgfVxuXG4gIGlmIChhLmxlbmd0aCAlIDIpIHtcbiAgICBhID0gJzAnICsgYTtcbiAgfVxuXG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYE51bWJlcmAgaW50byBhIGhleCBgU3RyaW5nYFxuICogQHBhcmFtIHtOdW1iZXJ9IGlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW50VG9IZXgoaSkge1xuICB2YXIgaGV4ID0gaS50b1N0cmluZygxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICByZXR1cm4gJzB4JyArIGhleDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBgTnVtYmVyYCB0byBhIGBCdWZmZXJgXG4gKiBAcGFyYW0ge051bWJlcn0gaVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBpbnRUb0J1ZmZlcihpKSB7XG4gIHZhciBoZXggPSBpbnRUb0hleChpKTtcblxuICByZXR1cm4gbmV3IEJ1ZmZlcihwYWRUb0V2ZW4oaGV4LnNsaWNlKDIpKSwgJ2hleCcpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYmluYXJ5IHNpemUgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0QmluYXJ5U2l6ZShzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gd2hpbGUgZ2V0dGluZyBiaW5hcnkgc2l6ZSwgbWV0aG9kIGdldEJpbmFyeVNpemUgcmVxdWlyZXMgaW5wdXQgXFwnc3RyXFwnIHRvIGJlIHR5cGUgU3RyaW5nLCBnb3QgXFwnJyArIHR5cGVvZiBzdHIgKyAnXFwnLicpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0ciwgJ3V0ZjgnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGZpcnN0IHNwZWNpZmllZCBhcnJheSBjb250YWlucyBhbGwgZWxlbWVudHNcbiAqIGZyb20gdGhlIHNlY29uZCBvbmUuIEZBTFNFIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBzdXBlcnNldFxuICogQHBhcmFtIHthcnJheX0gc3Vic2V0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFycmF5Q29udGFpbnNBcnJheShzdXBlcnNldCwgc3Vic2V0LCBzb21lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHN1cGVyc2V0KSAhPT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW2V0aGpzLXV0aWxdIG1ldGhvZCBhcnJheUNvbnRhaW5zQXJyYXkgcmVxdWlyZXMgaW5wdXQgXFwnc3VwZXJzZXRcXCcgdG8gYmUgYW4gYXJyYXkgZ290IHR5cGUgXFwnJyArIHR5cGVvZiBzdXBlcnNldCArICdcXCcnKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShzdWJzZXQpICE9PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGFycmF5Q29udGFpbnNBcnJheSByZXF1aXJlcyBpbnB1dCBcXCdzdWJzZXRcXCcgdG8gYmUgYW4gYXJyYXkgZ290IHR5cGUgXFwnJyArIHR5cGVvZiBzdWJzZXQgKyAnXFwnJyk7XG4gIH1cblxuICByZXR1cm4gc3Vic2V0W0Jvb2xlYW4oc29tZSkgJiYgJ3NvbWUnIHx8ICdldmVyeSddKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlcnNldC5pbmRleE9mKHZhbHVlKSA+PSAwO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTaG91bGQgYmUgY2FsbGVkIHRvIGdldCB1dGY4IGZyb20gaXQncyBoZXggcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAbWV0aG9kIHRvVXRmOFxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBpbiBoZXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGFzY2lpIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBoZXggdmFsdWVcbiAqL1xuZnVuY3Rpb24gdG9VdGY4KGhleCkge1xuICB2YXIgYnVmZmVyVmFsdWUgPSBuZXcgQnVmZmVyKHBhZFRvRXZlbihzdHJpcEhleFByZWZpeChoZXgpLnJlcGxhY2UoL14wK3wwKyQvZywgJycpKSwgJ2hleCcpO1xuXG4gIHJldHVybiBidWZmZXJWYWx1ZS50b1N0cmluZygndXRmOCcpO1xufVxuXG4vKipcbiAqIFNob3VsZCBiZSBjYWxsZWQgdG8gZ2V0IGFzY2lpIGZyb20gaXQncyBoZXggcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAbWV0aG9kIHRvQXNjaWlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgaW4gaGV4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBhc2NpaSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaGV4IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRvQXNjaWkoaGV4KSB7XG4gIHZhciBzdHIgPSAnJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB2YXIgaSA9IDAsXG4gICAgICBsID0gaGV4Lmxlbmd0aDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGlmIChoZXguc3Vic3RyaW5nKDAsIDIpID09PSAnMHgnKSB7XG4gICAgaSA9IDI7XG4gIH1cblxuICBmb3IgKDsgaSA8IGw7IGkgKz0gMikge1xuICAgIHZhciBjb2RlID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpLCAyKSwgMTYpO1xuICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBTaG91bGQgYmUgY2FsbGVkIHRvIGdldCBoZXggcmVwcmVzZW50YXRpb24gKHByZWZpeGVkIGJ5IDB4KSBvZiB1dGY4IHN0cmluZ1xuICpcbiAqIEBtZXRob2QgZnJvbVV0ZjhcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25hbCBwYWRkaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBoZXggcmVwcmVzZW50YXRpb24gb2YgaW5wdXQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGZyb21VdGY4KHN0cmluZ1ZhbHVlKSB7XG4gIHZhciBzdHIgPSBuZXcgQnVmZmVyKHN0cmluZ1ZhbHVlLCAndXRmOCcpO1xuXG4gIHJldHVybiAnMHgnICsgcGFkVG9FdmVuKHN0ci50b1N0cmluZygnaGV4JykpLnJlcGxhY2UoL14wK3wwKyQvZywgJycpO1xufVxuXG4vKipcbiAqIFNob3VsZCBiZSBjYWxsZWQgdG8gZ2V0IGhleCByZXByZXNlbnRhdGlvbiAocHJlZml4ZWQgYnkgMHgpIG9mIGFzY2lpIHN0cmluZ1xuICpcbiAqIEBtZXRob2QgZnJvbUFzY2lpXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gb3B0aW9uYWwgcGFkZGluZ1xuICogQHJldHVybnMge1N0cmluZ30gaGV4IHJlcHJlc2VudGF0aW9uIG9mIGlucHV0IHN0cmluZ1xuICovXG5mdW5jdGlvbiBmcm9tQXNjaWkoc3RyaW5nVmFsdWUpIHtcbiAgdmFyIGhleCA9ICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIGNvZGUgPSBzdHJpbmdWYWx1ZS5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBuID0gY29kZS50b1N0cmluZygxNik7XG4gICAgaGV4ICs9IG4ubGVuZ3RoIDwgMiA/ICcwJyArIG4gOiBuO1xuICB9XG5cbiAgcmV0dXJuICcweCcgKyBoZXg7XG59XG5cbi8qKlxuICogZ2V0S2V5cyhbe2E6IDEsIGI6IDJ9LCB7YTogMywgYjogNH1dLCAnYScpID0+IFsxLCAzXVxuICpcbiAqIEBtZXRob2QgZ2V0S2V5cyBnZXQgc3BlY2lmaWMga2V5IGZyb20gaW5uZXIgb2JqZWN0IGFycmF5IG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWxsb3dFbXB0eVxuICogQHJldHVybnMge0FycmF5fSBvdXRwdXQganVzdCBhIHNpbXBsZSBhcnJheSBvZiBvdXRwdXQga2V5c1xuICovXG5mdW5jdGlvbiBnZXRLZXlzKHBhcmFtcywga2V5LCBhbGxvd0VtcHR5KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGdldEtleXMgZXhwZWN0aW5nIHR5cGUgQXJyYXkgYXMgXFwncGFyYW1zXFwnIGlucHV0LCBnb3QgXFwnJyArIHR5cGVvZiBwYXJhbXMgKyAnXFwnJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGdldEtleXMgZXhwZWN0aW5nIHR5cGUgU3RyaW5nIGZvciBpbnB1dCBcXCdrZXlcXCcgZ290IFxcJycgKyB0eXBlb2Yga2V5ICsgJ1xcJy4nKTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciB2YWx1ZSA9IHBhcmFtc1tpXVtrZXldOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgaWYgKGFsbG93RW1wdHkgJiYgIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFiaScpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIElzIHRoZSBzdHJpbmcgYSBoZXggc3RyaW5nLlxuICpcbiAqIEBtZXRob2QgY2hlY2sgaWYgc3RyaW5nIGlzIGhleCBzdHJpbmcgb2Ygc3BlY2lmaWMgbGVuZ3RoXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm5zIHtCb29sZWFufSBvdXRwdXQgdGhlIHN0cmluZyBpcyBhIGhleCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNIZXhTdHJpbmcodmFsdWUsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUubWF0Y2goL14weFswLTlBLUZhLWZdKiQvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChsZW5ndGggJiYgdmFsdWUubGVuZ3RoICE9PSAyICsgMiAqIGxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXJyYXlDb250YWluc0FycmF5OiBhcnJheUNvbnRhaW5zQXJyYXksXG4gIGludFRvQnVmZmVyOiBpbnRUb0J1ZmZlcixcbiAgZ2V0QmluYXJ5U2l6ZTogZ2V0QmluYXJ5U2l6ZSxcbiAgaXNIZXhQcmVmaXhlZDogaXNIZXhQcmVmaXhlZCxcbiAgc3RyaXBIZXhQcmVmaXg6IHN0cmlwSGV4UHJlZml4LFxuICBwYWRUb0V2ZW46IHBhZFRvRXZlbixcbiAgaW50VG9IZXg6IGludFRvSGV4LFxuICBmcm9tQXNjaWk6IGZyb21Bc2NpaSxcbiAgZnJvbVV0Zjg6IGZyb21VdGY4LFxuICB0b0FzY2lpOiB0b0FzY2lpLFxuICB0b1V0Zjg6IHRvVXRmOCxcbiAgZ2V0S2V5czogZ2V0S2V5cyxcbiAgaXNIZXhTdHJpbmc6IGlzSGV4U3RyaW5nXG59OyIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gb25jZTtcbmZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZm4gPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgdmFyIGNhbGxGbiA9IGZuO1xuICAgICAgICBmbiA9IG51bGw7XG4gICAgICAgIGNhbGxGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBvbmx5T25jZTtcbmZ1bmN0aW9uIG9ubHlPbmNlKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGZuID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO1xuICAgICAgICB2YXIgY2FsbEZuID0gZm47XG4gICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHR2YXIgc3RyQ2xhc3MgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcbn07XG4iLCJjb25zdCBjcmVhdGVQYXlsb2FkID0gcmVxdWlyZSgnLi4vdXRpbC9jcmVhdGUtcGF5bG9hZC5qcycpXG5cbm1vZHVsZS5leHBvcnRzID0gU3ViUHJvdmlkZXJcblxuLy8gdGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYSBzdWJwcm92aWRlciAtLSBtb3N0bHkgaGVscGVyc1xuXG5cbmZ1bmN0aW9uIFN1YlByb3ZpZGVyKCkge1xuXG59XG5cblN1YlByb3ZpZGVyLnByb3RvdHlwZS5zZXRFbmdpbmUgPSBmdW5jdGlvbihlbmdpbmUpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZW5naW5lKSByZXR1cm5cbiAgc2VsZi5lbmdpbmUgPSBlbmdpbmVcbiAgZW5naW5lLm9uKCdibG9jaycsIGZ1bmN0aW9uKGJsb2NrKSB7XG4gICAgc2VsZi5jdXJyZW50QmxvY2sgPSBibG9ja1xuICB9KVxuXG4gIGVuZ2luZS5vbignc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5zdGFydCgpXG4gIH0pXG5cbiAgZW5naW5lLm9uKCdzdG9wJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuc3RvcCgpXG4gIH0pXG59XG5cblN1YlByb3ZpZGVyLnByb3RvdHlwZS5oYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocGF5bG9hZCwgbmV4dCwgZW5kKSB7XG4gIHRocm93IG5ldyBFcnJvcignU3VicHJvdmlkZXJzIHNob3VsZCBvdmVycmlkZSBgaGFuZGxlUmVxdWVzdGAuJylcbn1cblxuU3ViUHJvdmlkZXIucHJvdG90eXBlLmVtaXRQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCwgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmVuZ2luZS5zZW5kQXN5bmMoY3JlYXRlUGF5bG9hZChwYXlsb2FkKSwgY2IpXG59XG5cbi8vIGR1bW1pZXMgZm9yIG92ZXJyaWRpbmdcblxuU3ViUHJvdmlkZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7fVxuXG5TdWJQcm92aWRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7fVxuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9jaGVja3MnKTsiLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXBpJykocmVxdWlyZSgnLi9saWIva2VjY2FrJykpXG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKShyZXF1aXJlKCcuL2xpYi9lbGxpcHRpYycpKVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxuZnVuY3Rpb24gdGhyb3dJZk5vdFN0cmluZ09yQnVmZmVyICh2YWwsIHByZWZpeCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih2YWwpICYmIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcmVmaXggKyAnIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICB9XG59XG5cbmZ1bmN0aW9uIEhhc2hCYXNlIChibG9ja1NpemUpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcblxuICB0aGlzLl9ibG9jayA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja1NpemUpXG4gIHRoaXMuX2Jsb2NrU2l6ZSA9IGJsb2NrU2l6ZVxuICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgdGhpcy5fbGVuZ3RoID0gWzAsIDAsIDAsIDBdXG5cbiAgdGhpcy5fZmluYWxpemVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoSGFzaEJhc2UsIFRyYW5zZm9ybSlcblxuSGFzaEJhc2UucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgZXJyb3IgPSBudWxsXG4gIHRyeSB7XG4gICAgdGhpcy51cGRhdGUoY2h1bmssIGVuY29kaW5nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIGVycm9yID0gbnVsbFxuICB0cnkge1xuICAgIHRoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcpIHtcbiAgdGhyb3dJZk5vdFN0cmluZ09yQnVmZmVyKGRhdGEsICdEYXRhJylcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuY29kaW5nKVxuXG4gIC8vIGNvbnN1bWUgZGF0YVxuICB2YXIgYmxvY2sgPSB0aGlzLl9ibG9ja1xuICB2YXIgb2Zmc2V0ID0gMFxuICB3aGlsZSAodGhpcy5fYmxvY2tPZmZzZXQgKyBkYXRhLmxlbmd0aCAtIG9mZnNldCA+PSB0aGlzLl9ibG9ja1NpemUpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5fYmxvY2tPZmZzZXQ7IGkgPCB0aGlzLl9ibG9ja1NpemU7KSBibG9ja1tpKytdID0gZGF0YVtvZmZzZXQrK11cbiAgICB0aGlzLl91cGRhdGUoKVxuICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gMFxuICB9XG4gIHdoaWxlIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK10gPSBkYXRhW29mZnNldCsrXVxuXG4gIC8vIHVwZGF0ZSBsZW5ndGhcbiAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gZGF0YS5sZW5ndGggKiA4OyBjYXJyeSA+IDA7ICsraikge1xuICAgIHRoaXMuX2xlbmd0aFtqXSArPSBjYXJyeVxuICAgIGNhcnJ5ID0gKHRoaXMuX2xlbmd0aFtqXSAvIDB4MDEwMDAwMDAwMCkgfCAwXG4gICAgaWYgKGNhcnJ5ID4gMCkgdGhpcy5fbGVuZ3RoW2pdIC09IDB4MDEwMDAwMDAwMCAqIGNhcnJ5XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5IYXNoQmFzZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCcpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgdmFyIGRpZ2VzdCA9IHRoaXMuX2RpZ2VzdCgpXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkaWdlc3QgPSBkaWdlc3QudG9TdHJpbmcoZW5jb2RpbmcpXG5cbiAgLy8gcmVzZXQgc3RhdGVcbiAgdGhpcy5fYmxvY2suZmlsbCgwKVxuICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHRoaXMuX2xlbmd0aFtpXSA9IDBcblxuICByZXR1cm4gZGlnZXN0XG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ19kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoQmFzZVxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgSyA9IFtcbiAgMHg0MjhBMkY5OCwgMHg3MTM3NDQ5MSwgMHhCNUMwRkJDRiwgMHhFOUI1REJBNSxcbiAgMHgzOTU2QzI1QiwgMHg1OUYxMTFGMSwgMHg5MjNGODJBNCwgMHhBQjFDNUVENSxcbiAgMHhEODA3QUE5OCwgMHgxMjgzNUIwMSwgMHgyNDMxODVCRSwgMHg1NTBDN0RDMyxcbiAgMHg3MkJFNUQ3NCwgMHg4MERFQjFGRSwgMHg5QkRDMDZBNywgMHhDMTlCRjE3NCxcbiAgMHhFNDlCNjlDMSwgMHhFRkJFNDc4NiwgMHgwRkMxOURDNiwgMHgyNDBDQTFDQyxcbiAgMHgyREU5MkM2RiwgMHg0QTc0ODRBQSwgMHg1Q0IwQTlEQywgMHg3NkY5ODhEQSxcbiAgMHg5ODNFNTE1MiwgMHhBODMxQzY2RCwgMHhCMDAzMjdDOCwgMHhCRjU5N0ZDNyxcbiAgMHhDNkUwMEJGMywgMHhENUE3OTE0NywgMHgwNkNBNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN0I3MEE4NSwgMHgyRTFCMjEzOCwgMHg0RDJDNkRGQywgMHg1MzM4MEQxMyxcbiAgMHg2NTBBNzM1NCwgMHg3NjZBMEFCQiwgMHg4MUMyQzkyRSwgMHg5MjcyMkM4NSxcbiAgMHhBMkJGRThBMSwgMHhBODFBNjY0QiwgMHhDMjRCOEI3MCwgMHhDNzZDNTFBMyxcbiAgMHhEMTkyRTgxOSwgMHhENjk5MDYyNCwgMHhGNDBFMzU4NSwgMHgxMDZBQTA3MCxcbiAgMHgxOUE0QzExNiwgMHgxRTM3NkMwOCwgMHgyNzQ4Nzc0QywgMHgzNEIwQkNCNSxcbiAgMHgzOTFDMENCMywgMHg0RUQ4QUE0QSwgMHg1QjlDQ0E0RiwgMHg2ODJFNkZGMyxcbiAgMHg3NDhGODJFRSwgMHg3OEE1NjM2RiwgMHg4NEM4NzgxNCwgMHg4Q0M3MDIwOCxcbiAgMHg5MEJFRkZGQSwgMHhBNDUwNkNFQiwgMHhCRUY5QTNGNywgMHhDNjcxNzhGMlxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjU2ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjU2LCBIYXNoKVxuXG5TaGEyNTYucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDZhMDllNjY3XG4gIHRoaXMuX2IgPSAweGJiNjdhZTg1XG4gIHRoaXMuX2MgPSAweDNjNmVmMzcyXG4gIHRoaXMuX2QgPSAweGE1NGZmNTNhXG4gIHRoaXMuX2UgPSAweDUxMGU1MjdmXG4gIHRoaXMuX2YgPSAweDliMDU2ODhjXG4gIHRoaXMuX2cgPSAweDFmODNkOWFiXG4gIHRoaXMuX2ggPSAweDViZTBjZDE5XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gY2ggKHgsIHksIHopIHtcbiAgcmV0dXJuIHogXiAoeCAmICh5IF4geikpXG59XG5cbmZ1bmN0aW9uIG1haiAoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSlcbn1cblxuZnVuY3Rpb24gc2lnbWEwICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gMiB8IHggPDwgMzApIF4gKHggPj4+IDEzIHwgeCA8PCAxOSkgXiAoeCA+Pj4gMjIgfCB4IDw8IDEwKVxufVxuXG5mdW5jdGlvbiBzaWdtYTEgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiA2IHwgeCA8PCAyNikgXiAoeCA+Pj4gMTEgfCB4IDw8IDIxKSBeICh4ID4+PiAyNSB8IHggPDwgNylcbn1cblxuZnVuY3Rpb24gZ2FtbWEwICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gNyB8IHggPDwgMjUpIF4gKHggPj4+IDE4IHwgeCA8PCAxNCkgXiAoeCA+Pj4gMylcbn1cblxuZnVuY3Rpb24gZ2FtbWExICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gMTcgfCB4IDw8IDE1KSBeICh4ID4+PiAxOSB8IHggPDwgMTMpIF4gKHggPj4+IDEwKVxufVxuXG5TaGEyNTYucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYSA9IHRoaXMuX2EgfCAwXG4gIHZhciBiID0gdGhpcy5fYiB8IDBcbiAgdmFyIGMgPSB0aGlzLl9jIHwgMFxuICB2YXIgZCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlID0gdGhpcy5fZSB8IDBcbiAgdmFyIGYgPSB0aGlzLl9mIHwgMFxuICB2YXIgZyA9IHRoaXMuX2cgfCAwXG4gIHZhciBoID0gdGhpcy5faCB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICBmb3IgKDsgaSA8IDY0OyArK2kpIFdbaV0gPSAoZ2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgZ2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl0pIHwgMFxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgNjQ7ICsraikge1xuICAgIHZhciBUMSA9IChoICsgc2lnbWExKGUpICsgY2goZSwgZiwgZykgKyBLW2pdICsgV1tqXSkgfCAwXG4gICAgdmFyIFQyID0gKHNpZ21hMChhKSArIG1haihhLCBiLCBjKSkgfCAwXG5cbiAgICBoID0gZ1xuICAgIGcgPSBmXG4gICAgZiA9IGVcbiAgICBlID0gKGQgKyBUMSkgfCAwXG4gICAgZCA9IGNcbiAgICBjID0gYlxuICAgIGIgPSBhXG4gICAgYSA9IChUMSArIFQyKSB8IDBcbiAgfVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbiAgdGhpcy5fZiA9IChmICsgdGhpcy5fZikgfCAwXG4gIHRoaXMuX2cgPSAoZyArIHRoaXMuX2cpIHwgMFxuICB0aGlzLl9oID0gKGggKyB0aGlzLl9oKSB8IDBcbn1cblxuU2hhMjU2LnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBCdWZmZXIuYWxsb2NVbnNhZmUoMzIpXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYywgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsIDE2KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9mLCAyMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZywgMjQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2gsIDI4KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMjU2XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoMTYwKVxuXG5mdW5jdGlvbiBTaGE1MTIgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCAxMjgsIDExMilcbn1cblxuaW5oZXJpdHMoU2hhNTEyLCBIYXNoKVxuXG5TaGE1MTIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iaCA9IDB4YmI2N2FlODVcbiAgdGhpcy5fY2ggPSAweDNjNmVmMzcyXG4gIHRoaXMuX2RoID0gMHhhNTRmZjUzYVxuICB0aGlzLl9laCA9IDB4NTEwZTUyN2ZcbiAgdGhpcy5fZmggPSAweDliMDU2ODhjXG4gIHRoaXMuX2doID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oaCA9IDB4NWJlMGNkMTlcblxuICB0aGlzLl9hbCA9IDB4ZjNiY2M5MDhcbiAgdGhpcy5fYmwgPSAweDg0Y2FhNzNiXG4gIHRoaXMuX2NsID0gMHhmZTk0ZjgyYlxuICB0aGlzLl9kbCA9IDB4NWYxZDM2ZjFcbiAgdGhpcy5fZWwgPSAweGFkZTY4MmQxXG4gIHRoaXMuX2ZsID0gMHgyYjNlNmMxZlxuICB0aGlzLl9nbCA9IDB4ZmI0MWJkNmJcbiAgdGhpcy5faGwgPSAweDEzN2UyMTc5XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gQ2ggKHgsIHksIHopIHtcbiAgcmV0dXJuIHogXiAoeCAmICh5IF4geikpXG59XG5cbmZ1bmN0aW9uIG1haiAoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSlcbn1cblxuZnVuY3Rpb24gc2lnbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDI4IHwgeGwgPDwgNCkgXiAoeGwgPj4+IDIgfCB4IDw8IDMwKSBeICh4bCA+Pj4gNyB8IHggPDwgMjUpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxNCB8IHhsIDw8IDE4KSBeICh4ID4+PiAxOCB8IHhsIDw8IDE0KSBeICh4bCA+Pj4gOSB8IHggPDwgMjMpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNylcbn1cblxuZnVuY3Rpb24gR2FtbWEwbCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNyB8IHhsIDw8IDI1KVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2KVxufVxuXG5mdW5jdGlvbiBHYW1tYTFsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE5IHwgeGwgPDwgMTMpIF4gKHhsID4+PiAyOSB8IHggPDwgMykgXiAoeCA+Pj4gNiB8IHhsIDw8IDI2KVxufVxuXG5mdW5jdGlvbiBnZXRDYXJyeSAoYSwgYikge1xuICByZXR1cm4gKGEgPj4+IDApIDwgKGIgPj4+IDApID8gMSA6IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGFoID0gdGhpcy5fYWggfCAwXG4gIHZhciBiaCA9IHRoaXMuX2JoIHwgMFxuICB2YXIgY2ggPSB0aGlzLl9jaCB8IDBcbiAgdmFyIGRoID0gdGhpcy5fZGggfCAwXG4gIHZhciBlaCA9IHRoaXMuX2VoIHwgMFxuICB2YXIgZmggPSB0aGlzLl9maCB8IDBcbiAgdmFyIGdoID0gdGhpcy5fZ2ggfCAwXG4gIHZhciBoaCA9IHRoaXMuX2hoIHwgMFxuXG4gIHZhciBhbCA9IHRoaXMuX2FsIHwgMFxuICB2YXIgYmwgPSB0aGlzLl9ibCB8IDBcbiAgdmFyIGNsID0gdGhpcy5fY2wgfCAwXG4gIHZhciBkbCA9IHRoaXMuX2RsIHwgMFxuICB2YXIgZWwgPSB0aGlzLl9lbCB8IDBcbiAgdmFyIGZsID0gdGhpcy5fZmwgfCAwXG4gIHZhciBnbCA9IHRoaXMuX2dsIHwgMFxuICB2YXIgaGwgPSB0aGlzLl9obCB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpICs9IDIpIHtcbiAgICBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgICBXW2kgKyAxXSA9IE0ucmVhZEludDMyQkUoaSAqIDQgKyA0KVxuICB9XG4gIGZvciAoOyBpIDwgMTYwOyBpICs9IDIpIHtcbiAgICB2YXIgeGggPSBXW2kgLSAxNSAqIDJdXG4gICAgdmFyIHhsID0gV1tpIC0gMTUgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWEwID0gR2FtbWEwKHhoLCB4bClcbiAgICB2YXIgZ2FtbWEwbCA9IEdhbW1hMGwoeGwsIHhoKVxuXG4gICAgeGggPSBXW2kgLSAyICogMl1cbiAgICB4bCA9IFdbaSAtIDIgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWExID0gR2FtbWExKHhoLCB4bClcbiAgICB2YXIgZ2FtbWExbCA9IEdhbW1hMWwoeGwsIHhoKVxuXG4gICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG4gICAgdmFyIFdpN2ggPSBXW2kgLSA3ICogMl1cbiAgICB2YXIgV2k3bCA9IFdbaSAtIDcgKiAyICsgMV1cblxuICAgIHZhciBXaTE2aCA9IFdbaSAtIDE2ICogMl1cbiAgICB2YXIgV2kxNmwgPSBXW2kgLSAxNiAqIDIgKyAxXVxuXG4gICAgdmFyIFdpbCA9IChnYW1tYTBsICsgV2k3bCkgfCAwXG4gICAgdmFyIFdpaCA9IChnYW1tYTAgKyBXaTdoICsgZ2V0Q2FycnkoV2lsLCBnYW1tYTBsKSkgfCAwXG4gICAgV2lsID0gKFdpbCArIGdhbW1hMWwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBnYW1tYTEgKyBnZXRDYXJyeShXaWwsIGdhbW1hMWwpKSB8IDBcbiAgICBXaWwgPSAoV2lsICsgV2kxNmwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBXaTE2aCArIGdldENhcnJ5KFdpbCwgV2kxNmwpKSB8IDBcblxuICAgIFdbaV0gPSBXaWhcbiAgICBXW2kgKyAxXSA9IFdpbFxuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjA7IGogKz0gMikge1xuICAgIFdpaCA9IFdbal1cbiAgICBXaWwgPSBXW2ogKyAxXVxuXG4gICAgdmFyIG1hamggPSBtYWooYWgsIGJoLCBjaClcbiAgICB2YXIgbWFqbCA9IG1haihhbCwgYmwsIGNsKVxuXG4gICAgdmFyIHNpZ21hMGggPSBzaWdtYTAoYWgsIGFsKVxuICAgIHZhciBzaWdtYTBsID0gc2lnbWEwKGFsLCBhaClcbiAgICB2YXIgc2lnbWExaCA9IHNpZ21hMShlaCwgZWwpXG4gICAgdmFyIHNpZ21hMWwgPSBzaWdtYTEoZWwsIGVoKVxuXG4gICAgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2pdICsgV1tqXVxuICAgIHZhciBLaWggPSBLW2pdXG4gICAgdmFyIEtpbCA9IEtbaiArIDFdXG5cbiAgICB2YXIgY2hoID0gQ2goZWgsIGZoLCBnaClcbiAgICB2YXIgY2hsID0gQ2goZWwsIGZsLCBnbClcblxuICAgIHZhciB0MWwgPSAoaGwgKyBzaWdtYTFsKSB8IDBcbiAgICB2YXIgdDFoID0gKGhoICsgc2lnbWExaCArIGdldENhcnJ5KHQxbCwgaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgY2hsKSB8IDBcbiAgICB0MWggPSAodDFoICsgY2hoICsgZ2V0Q2FycnkodDFsLCBjaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgS2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgS2loICsgZ2V0Q2FycnkodDFsLCBLaWwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgV2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgV2loICsgZ2V0Q2FycnkodDFsLCBXaWwpKSB8IDBcblxuICAgIC8vIHQyID0gc2lnbWEwICsgbWFqXG4gICAgdmFyIHQybCA9IChzaWdtYTBsICsgbWFqbCkgfCAwXG4gICAgdmFyIHQyaCA9IChzaWdtYTBoICsgbWFqaCArIGdldENhcnJ5KHQybCwgc2lnbWEwbCkpIHwgMFxuXG4gICAgaGggPSBnaFxuICAgIGhsID0gZ2xcbiAgICBnaCA9IGZoXG4gICAgZ2wgPSBmbFxuICAgIGZoID0gZWhcbiAgICBmbCA9IGVsXG4gICAgZWwgPSAoZGwgKyB0MWwpIHwgMFxuICAgIGVoID0gKGRoICsgdDFoICsgZ2V0Q2FycnkoZWwsIGRsKSkgfCAwXG4gICAgZGggPSBjaFxuICAgIGRsID0gY2xcbiAgICBjaCA9IGJoXG4gICAgY2wgPSBibFxuICAgIGJoID0gYWhcbiAgICBibCA9IGFsXG4gICAgYWwgPSAodDFsICsgdDJsKSB8IDBcbiAgICBhaCA9ICh0MWggKyB0MmggKyBnZXRDYXJyeShhbCwgdDFsKSkgfCAwXG4gIH1cblxuICB0aGlzLl9hbCA9ICh0aGlzLl9hbCArIGFsKSB8IDBcbiAgdGhpcy5fYmwgPSAodGhpcy5fYmwgKyBibCkgfCAwXG4gIHRoaXMuX2NsID0gKHRoaXMuX2NsICsgY2wpIHwgMFxuICB0aGlzLl9kbCA9ICh0aGlzLl9kbCArIGRsKSB8IDBcbiAgdGhpcy5fZWwgPSAodGhpcy5fZWwgKyBlbCkgfCAwXG4gIHRoaXMuX2ZsID0gKHRoaXMuX2ZsICsgZmwpIHwgMFxuICB0aGlzLl9nbCA9ICh0aGlzLl9nbCArIGdsKSB8IDBcbiAgdGhpcy5faGwgPSAodGhpcy5faGwgKyBobCkgfCAwXG5cbiAgdGhpcy5fYWggPSAodGhpcy5fYWggKyBhaCArIGdldENhcnJ5KHRoaXMuX2FsLCBhbCkpIHwgMFxuICB0aGlzLl9iaCA9ICh0aGlzLl9iaCArIGJoICsgZ2V0Q2FycnkodGhpcy5fYmwsIGJsKSkgfCAwXG4gIHRoaXMuX2NoID0gKHRoaXMuX2NoICsgY2ggKyBnZXRDYXJyeSh0aGlzLl9jbCwgY2wpKSB8IDBcbiAgdGhpcy5fZGggPSAodGhpcy5fZGggKyBkaCArIGdldENhcnJ5KHRoaXMuX2RsLCBkbCkpIHwgMFxuICB0aGlzLl9laCA9ICh0aGlzLl9laCArIGVoICsgZ2V0Q2FycnkodGhpcy5fZWwsIGVsKSkgfCAwXG4gIHRoaXMuX2ZoID0gKHRoaXMuX2ZoICsgZmggKyBnZXRDYXJyeSh0aGlzLl9mbCwgZmwpKSB8IDBcbiAgdGhpcy5fZ2ggPSAodGhpcy5fZ2ggKyBnaCArIGdldENhcnJ5KHRoaXMuX2dsLCBnbCkpIHwgMFxuICB0aGlzLl9oaCA9ICh0aGlzLl9oaCArIGhoICsgZ2V0Q2FycnkodGhpcy5faGwsIGhsKSkgfCAwXG59XG5cblNoYTUxMi5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gQnVmZmVyLmFsbG9jVW5zYWZlKDY0KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2doLCB0aGlzLl9nbCwgNDgpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9oaCwgdGhpcy5faGwsIDU2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhNTEyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyAhPT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICAgIHJlc1tpXSA9IG1zZ1tpXSB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoZW5jID09PSAnaGV4Jykge1xuICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgbXNnID0gJzAnICsgbXNnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgcmVzLnB1c2gocGFyc2VJbnQobXNnW2ldICsgbXNnW2kgKyAxXSwgMTYpKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgIHZhciBoaSA9IGMgPj4gODtcbiAgICAgIHZhciBsbyA9IGMgJiAweGZmO1xuICAgICAgaWYgKGhpKVxuICAgICAgICByZXMucHVzaChoaSwgbG8pO1xuICAgICAgZWxzZVxuICAgICAgICByZXMucHVzaChsbyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4ID0gdG9IZXg7XG5cbnV0aWxzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShhcnIsIGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdG9IZXgoYXJyKTtcbiAgZWxzZVxuICAgIHJldHVybiBhcnI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIHJvdHIzMiA9IHV0aWxzLnJvdHIzMjtcblxuZnVuY3Rpb24gZnRfMShzLCB4LCB5LCB6KSB7XG4gIGlmIChzID09PSAwKVxuICAgIHJldHVybiBjaDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMSB8fCBzID09PSAzKVxuICAgIHJldHVybiBwMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAyKVxuICAgIHJldHVybiBtYWozMih4LCB5LCB6KTtcbn1cbmV4cG9ydHMuZnRfMSA9IGZ0XzE7XG5cbmZ1bmN0aW9uIGNoMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICgofngpICYgeik7XG59XG5leHBvcnRzLmNoMzIgPSBjaDMyO1xuXG5mdW5jdGlvbiBtYWozMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKHggJiB6KSBeICh5ICYgeik7XG59XG5leHBvcnRzLm1hajMyID0gbWFqMzI7XG5cbmZ1bmN0aW9uIHAzMih4LCB5LCB6KSB7XG4gIHJldHVybiB4IF4geSBeIHo7XG59XG5leHBvcnRzLnAzMiA9IHAzMjtcblxuZnVuY3Rpb24gczBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAyKSBeIHJvdHIzMih4LCAxMykgXiByb3RyMzIoeCwgMjIpO1xufVxuZXhwb3J0cy5zMF8yNTYgPSBzMF8yNTY7XG5cbmZ1bmN0aW9uIHMxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNikgXiByb3RyMzIoeCwgMTEpIF4gcm90cjMyKHgsIDI1KTtcbn1cbmV4cG9ydHMuczFfMjU2ID0gczFfMjU2O1xuXG5mdW5jdGlvbiBnMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDcpIF4gcm90cjMyKHgsIDE4KSBeICh4ID4+PiAzKTtcbn1cbmV4cG9ydHMuZzBfMjU2ID0gZzBfMjU2O1xuXG5mdW5jdGlvbiBnMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDE3KSBeIHJvdHIzMih4LCAxOSkgXiAoeCA+Pj4gMTApO1xufVxuZXhwb3J0cy5nMV8yNTYgPSBnMV8yNTY7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGNoMzIgPSBzaGFDb21tb24uY2gzMjtcbnZhciBtYWozMiA9IHNoYUNvbW1vbi5tYWozMjtcbnZhciBzMF8yNTYgPSBzaGFDb21tb24uczBfMjU2O1xudmFyIHMxXzI1NiA9IHNoYUNvbW1vbi5zMV8yNTY7XG52YXIgZzBfMjU2ID0gc2hhQ29tbW9uLmcwXzI1NjtcbnZhciBnMV8yNTYgPSBzaGFDb21tb24uZzFfMjU2O1xuXG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTI1Nl9LID0gW1xuICAweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LFxuICAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LFxuICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLFxuICAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNhMWNjLFxuICAweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhLFxuICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LFxuICAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLFxuICAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAweGM3NmM1MWEzLFxuICAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLFxuICAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LFxuICAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRmLCAweDY4MmU2ZmYzLFxuICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LFxuICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dO1xuXG5mdW5jdGlvbiBTSEEyNTYoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyNTYpKVxuICAgIHJldHVybiBuZXcgU0hBMjU2KCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDZhMDllNjY3LCAweGJiNjdhZTg1LCAweDNjNmVmMzcyLCAweGE1NGZmNTNhLFxuICAgIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTlcbiAgXTtcbiAgdGhpcy5rID0gc2hhMjU2X0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg2NCk7XG59XG51dGlscy5pbmhlcml0cyhTSEEyNTYsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTI1NjtcblxuU0hBMjU2LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTI1Ni5vdXRTaXplID0gMjU2O1xuU0hBMjU2LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTI1Ni5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gc3VtMzJfNChnMV8yNTYoV1tpIC0gMl0pLCBXW2kgLSA3XSwgZzBfMjU2KFdbaSAtIDE1XSksIFdbaSAtIDE2XSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuICB2YXIgZiA9IHRoaXMuaFs1XTtcbiAgdmFyIGcgPSB0aGlzLmhbNl07XG4gIHZhciBoID0gdGhpcy5oWzddO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIFQxID0gc3VtMzJfNShoLCBzMV8yNTYoZSksIGNoMzIoZSwgZiwgZyksIHRoaXMua1tpXSwgV1tpXSk7XG4gICAgdmFyIFQyID0gc3VtMzIoczBfMjU2KGEpLCBtYWozMihhLCBiLCBjKSk7XG4gICAgaCA9IGc7XG4gICAgZyA9IGY7XG4gICAgZiA9IGU7XG4gICAgZSA9IHN1bTMyKGQsIFQxKTtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gc3VtMzIoVDEsIFQyKTtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG4gIHRoaXMuaFs1XSA9IHN1bTMyKHRoaXMuaFs1XSwgZik7XG4gIHRoaXMuaFs2XSA9IHN1bTMyKHRoaXMuaFs2XSwgZyk7XG4gIHRoaXMuaFs3XSA9IHN1bTMyKHRoaXMuaFs3XSwgaCk7XG59O1xuXG5TSEEyNTYucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxudmFyIHJvdHI2NF9oaSA9IHV0aWxzLnJvdHI2NF9oaTtcbnZhciByb3RyNjRfbG8gPSB1dGlscy5yb3RyNjRfbG87XG52YXIgc2hyNjRfaGkgPSB1dGlscy5zaHI2NF9oaTtcbnZhciBzaHI2NF9sbyA9IHV0aWxzLnNocjY0X2xvO1xudmFyIHN1bTY0ID0gdXRpbHMuc3VtNjQ7XG52YXIgc3VtNjRfaGkgPSB1dGlscy5zdW02NF9oaTtcbnZhciBzdW02NF9sbyA9IHV0aWxzLnN1bTY0X2xvO1xudmFyIHN1bTY0XzRfaGkgPSB1dGlscy5zdW02NF80X2hpO1xudmFyIHN1bTY0XzRfbG8gPSB1dGlscy5zdW02NF80X2xvO1xudmFyIHN1bTY0XzVfaGkgPSB1dGlscy5zdW02NF81X2hpO1xudmFyIHN1bTY0XzVfbG8gPSB1dGlscy5zdW02NF81X2xvO1xuXG52YXIgQmxvY2tIYXNoID0gY29tbW9uLkJsb2NrSGFzaDtcblxudmFyIHNoYTUxMl9LID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG5mdW5jdGlvbiBTSEE1MTIoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEE1MTIpKVxuICAgIHJldHVybiBuZXcgU0hBNTEyKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDZhMDllNjY3LCAweGYzYmNjOTA4LFxuICAgIDB4YmI2N2FlODUsIDB4ODRjYWE3M2IsXG4gICAgMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYixcbiAgICAweGE1NGZmNTNhLCAweDVmMWQzNmYxLFxuICAgIDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEsXG4gICAgMHg5YjA1Njg4YywgMHgyYjNlNmMxZixcbiAgICAweDFmODNkOWFiLCAweGZiNDFiZDZiLFxuICAgIDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkgXTtcbiAgdGhpcy5rID0gc2hhNTEyX0s7XG4gIHRoaXMuVyA9IG5ldyBBcnJheSgxNjApO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBNTEyLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEE1MTI7XG5cblNIQTUxMi5ibG9ja1NpemUgPSAxMDI0O1xuU0hBNTEyLm91dFNpemUgPSA1MTI7XG5TSEE1MTIuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBNTEyLnBhZExlbmd0aCA9IDEyODtcblxuU0hBNTEyLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrID0gZnVuY3Rpb24gX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIC8vIDMyIHggMzJiaXQgd29yZHNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gZzFfNTEyX2hpKFdbaSAtIDRdLCBXW2kgLSAzXSk7ICAvLyBpIC0gMlxuICAgIHZhciBjMF9sbyA9IGcxXzUxMl9sbyhXW2kgLSA0XSwgV1tpIC0gM10pO1xuICAgIHZhciBjMV9oaSA9IFdbaSAtIDE0XTsgIC8vIGkgLSA3XG4gICAgdmFyIGMxX2xvID0gV1tpIC0gMTNdO1xuICAgIHZhciBjMl9oaSA9IGcwXzUxMl9oaShXW2kgLSAzMF0sIFdbaSAtIDI5XSk7ICAvLyBpIC0gMTVcbiAgICB2YXIgYzJfbG8gPSBnMF81MTJfbG8oV1tpIC0gMzBdLCBXW2kgLSAyOV0pO1xuICAgIHZhciBjM19oaSA9IFdbaSAtIDMyXTsgIC8vIGkgLSAxNlxuICAgIHZhciBjM19sbyA9IFdbaSAtIDMxXTtcblxuICAgIFdbaV0gPSBzdW02NF80X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgICBXW2kgKyAxXSA9IHN1bTY0XzRfbG8oXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8pO1xuICB9XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdGhpcy5fcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpO1xuXG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIHZhciBhaCA9IHRoaXMuaFswXTtcbiAgdmFyIGFsID0gdGhpcy5oWzFdO1xuICB2YXIgYmggPSB0aGlzLmhbMl07XG4gIHZhciBibCA9IHRoaXMuaFszXTtcbiAgdmFyIGNoID0gdGhpcy5oWzRdO1xuICB2YXIgY2wgPSB0aGlzLmhbNV07XG4gIHZhciBkaCA9IHRoaXMuaFs2XTtcbiAgdmFyIGRsID0gdGhpcy5oWzddO1xuICB2YXIgZWggPSB0aGlzLmhbOF07XG4gIHZhciBlbCA9IHRoaXMuaFs5XTtcbiAgdmFyIGZoID0gdGhpcy5oWzEwXTtcbiAgdmFyIGZsID0gdGhpcy5oWzExXTtcbiAgdmFyIGdoID0gdGhpcy5oWzEyXTtcbiAgdmFyIGdsID0gdGhpcy5oWzEzXTtcbiAgdmFyIGhoID0gdGhpcy5oWzE0XTtcbiAgdmFyIGhsID0gdGhpcy5oWzE1XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBoaDtcbiAgICB2YXIgYzBfbG8gPSBobDtcbiAgICB2YXIgYzFfaGkgPSBzMV81MTJfaGkoZWgsIGVsKTtcbiAgICB2YXIgYzFfbG8gPSBzMV81MTJfbG8oZWgsIGVsKTtcbiAgICB2YXIgYzJfaGkgPSBjaDY0X2hpKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjMl9sbyA9IGNoNjRfbG8oZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMzX2hpID0gdGhpcy5rW2ldO1xuICAgIHZhciBjM19sbyA9IHRoaXMua1tpICsgMV07XG4gICAgdmFyIGM0X2hpID0gV1tpXTtcbiAgICB2YXIgYzRfbG8gPSBXW2kgKyAxXTtcblxuICAgIHZhciBUMV9oaSA9IHN1bTY0XzVfaGkoXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8sXG4gICAgICBjNF9oaSwgYzRfbG8pO1xuICAgIHZhciBUMV9sbyA9IHN1bTY0XzVfbG8oXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8sXG4gICAgICBjNF9oaSwgYzRfbG8pO1xuXG4gICAgYzBfaGkgPSBzMF81MTJfaGkoYWgsIGFsKTtcbiAgICBjMF9sbyA9IHMwXzUxMl9sbyhhaCwgYWwpO1xuICAgIGMxX2hpID0gbWFqNjRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG4gICAgYzFfbG8gPSBtYWo2NF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcblxuICAgIHZhciBUMl9oaSA9IHN1bTY0X2hpKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcbiAgICB2YXIgVDJfbG8gPSBzdW02NF9sbyhjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG5cbiAgICBoaCA9IGdoO1xuICAgIGhsID0gZ2w7XG5cbiAgICBnaCA9IGZoO1xuICAgIGdsID0gZmw7XG5cbiAgICBmaCA9IGVoO1xuICAgIGZsID0gZWw7XG5cbiAgICBlaCA9IHN1bTY0X2hpKGRoLCBkbCwgVDFfaGksIFQxX2xvKTtcbiAgICBlbCA9IHN1bTY0X2xvKGRsLCBkbCwgVDFfaGksIFQxX2xvKTtcblxuICAgIGRoID0gY2g7XG4gICAgZGwgPSBjbDtcblxuICAgIGNoID0gYmg7XG4gICAgY2wgPSBibDtcblxuICAgIGJoID0gYWg7XG4gICAgYmwgPSBhbDtcblxuICAgIGFoID0gc3VtNjRfaGkoVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICAgIGFsID0gc3VtNjRfbG8oVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICB9XG5cbiAgc3VtNjQodGhpcy5oLCAwLCBhaCwgYWwpO1xuICBzdW02NCh0aGlzLmgsIDIsIGJoLCBibCk7XG4gIHN1bTY0KHRoaXMuaCwgNCwgY2gsIGNsKTtcbiAgc3VtNjQodGhpcy5oLCA2LCBkaCwgZGwpO1xuICBzdW02NCh0aGlzLmgsIDgsIGVoLCBlbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTAsIGZoLCBmbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTIsIGdoLCBnbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTQsIGhoLCBobCk7XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBjaDY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICgofnhoKSAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBjaDY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoKH54bCkgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKHhoICYgemgpIF4gKHloICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoeGwgJiB6bCkgXiAoeWwgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDgpO1xuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcwXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDgpO1xuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDcpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfaGkgPSBzaHI2NF9oaSh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGcxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTkpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCAyOSk7ICAvLyA2MVxuICB2YXIgYzJfbG8gPSBzaHI2NF9sbyh4aCwgeGwsIDYpO1xuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIGNvbXBhcmUgYW5kIGlzQnVmZmVyIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvYmxvYi82ODBlOWU1ZTQ4OGYyMmFhYzI3NTk5YTU3ZGM4NDRhNjMxNTkyOGRkL2luZGV4LmpzXG4vLyBvcmlnaW5hbCBub3RpY2U6XG5cbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHggPSBhLmxlbmd0aDtcbiAgdmFyIHkgPSBiLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXTtcbiAgICAgIHkgPSBiW2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gaXNCdWZmZXIoYikge1xuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiB0eXBlb2YgZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGIpO1xuICB9XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpO1xufVxuXG4vLyBiYXNlZCBvbiBub2RlIGFzc2VydCwgb3JpZ2luYWwgbm90aWNlOlxuLy8gTkI6IFRoZSBVUkwgdG8gdGhlIENvbW1vbkpTIHNwZWMgaXMga2VwdCBqdXN0IGZvciB0cmFkaXRpb24uXG4vLyAgICAgbm9kZS1hc3NlcnQgaGFzIGV2b2x2ZWQgYSBsb3Qgc2luY2UgdGhlbiwgYm90aCBpbiBBUEkgYW5kIGJlaGF2aW9yLlxuXG4vLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsLycpO1xudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb28oKSB7fS5uYW1lID09PSAnZm9vJztcbn0oKSk7XG5mdW5jdGlvbiBwVG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5mdW5jdGlvbiBpc1ZpZXcoYXJyYnVmKSB7XG4gIGlmIChpc0J1ZmZlcihhcnJidWYpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnJidWYpO1xuICB9XG4gIGlmICghYXJyYnVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnJidWYgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhcnJidWYuYnVmZmVyICYmIGFycmJ1Zi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIDEuIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcblxuLy8gMi4gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gYXNzZXJ0LlxuLy8gbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6IG1lc3NhZ2UsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWwsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pXG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2Jsb2IvYWRlZWVlYzhiZmNjNjA2OGIxODdkN2Q5ZmIzZDViYjFkM2EzMDg5OS9pbXBsZW1lbnRhdGlvbi5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmdW5jKSB7XG4gIGlmICghdXRpbC5pc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcbiAgICByZXR1cm4gZnVuYy5uYW1lO1xuICB9XG4gIHZhciBzdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIHZhciBtYXRjaCA9IHN0ci5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn1cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgdGhpcy5hY3R1YWwgPSBvcHRpb25zLmFjdHVhbDtcbiAgdGhpcy5leHBlY3RlZCA9IG9wdGlvbnMuZXhwZWN0ZWQ7XG4gIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yO1xuICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWVzc2FnZSA9IGdldE1lc3NhZ2UodGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTtcbiAgfVxuICB2YXIgc3RhY2tTdGFydEZ1bmN0aW9uID0gb3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb24gfHwgZmFpbDtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBub24gdjggYnJvd3NlcnMgc28gd2UgY2FuIGhhdmUgYSBzdGFja3RyYWNlXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7XG5cbiAgICAgIC8vIHRyeSB0byBzdHJpcCB1c2VsZXNzIGZyYW1lc1xuICAgICAgdmFyIGZuX25hbWUgPSBnZXROYW1lKHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7XG4gIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc3BlY3Qoc29tZXRoaW5nKSB7XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMgfHwgIXV0aWwuaXNGdW5jdGlvbihzb21ldGhpbmcpKSB7XG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChzb21ldGhpbmcpO1xuICB9XG4gIHZhciByYXduYW1lID0gZ2V0TmFtZShzb21ldGhpbmcpO1xuICB2YXIgbmFtZSA9IHJhd25hbWUgPyAnOiAnICsgcmF3bmFtZSA6ICcnO1xuICByZXR1cm4gJ1tGdW5jdGlvbicgKyAgbmFtZSArICddJztcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZikge1xuICByZXR1cm4gdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmFjdHVhbCksIDEyOCkgKyAnICcgK1xuICAgICAgICAgc2VsZi5vcGVyYXRvciArICcgJyArXG4gICAgICAgICB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuZXhwZWN0ZWQpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwRXF1YWwnLCBhc3NlcnQuZGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBTdHJpY3RFcXVhbCcsIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAmJiBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSA9PT0gMDtcblxuICAvLyA3LjIuIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIERhdGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBzYW1lIHRpbWUuXG4gIH0gZWxzZSBpZiAodXRpbC5pc0RhdGUoYWN0dWFsKSAmJiB1dGlsLmlzRGF0ZShleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMyBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIFJlZ0V4cCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kXG4gIC8vIHByb3BlcnRpZXMgKGBnbG9iYWxgLCBgbXVsdGlsaW5lYCwgYGxhc3RJbmRleGAsIGBpZ25vcmVDYXNlYCkuXG4gIH0gZWxzZSBpZiAodXRpbC5pc1JlZ0V4cChhY3R1YWwpICYmIHV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJlxuICAgICAgICAgICBhY3R1YWwuZ2xvYmFsID09PSBleHBlY3RlZC5nbG9iYWwgJiZcbiAgICAgICAgICAgYWN0dWFsLm11bHRpbGluZSA9PT0gZXhwZWN0ZWQubXVsdGlsaW5lICYmXG4gICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJlxuICAgICAgICAgICBhY3R1YWwuaWdub3JlQ2FzZSA9PT0gZXhwZWN0ZWQuaWdub3JlQ2FzZTtcblxuICAvLyA3LjQuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JykgJiZcbiAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IG51bGwgfHwgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyBJZiBib3RoIHZhbHVlcyBhcmUgaW5zdGFuY2VzIG9mIHR5cGVkIGFycmF5cywgd3JhcCB0aGVpciB1bmRlcmx5aW5nXG4gIC8vIEFycmF5QnVmZmVycyBpbiBhIEJ1ZmZlciBlYWNoIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlXG4gIC8vIFRoaXMgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHRoZSBhcnJheXMgdG8gaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGNoZWNrZWQgYnlcbiAgLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoYWthIHBUb1N0cmluZykuIE5ldmVyIHBlcmZvcm0gYmluYXJ5XG4gIC8vIGNvbXBhcmlzb25zIGZvciBGbG9hdCpBcnJheXMsIHRob3VnaCwgc2luY2UgZS5nLiArMCA9PT0gLTAgYnV0IHRoZWlyXG4gIC8vIGJpdCBwYXR0ZXJucyBhcmUgbm90IGlkZW50aWNhbC5cbiAgfSBlbHNlIGlmIChpc1ZpZXcoYWN0dWFsKSAmJiBpc1ZpZXcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgcFRvU3RyaW5nKGFjdHVhbCkgPT09IHBUb1N0cmluZyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICAhKGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgICAgICAgICAgICAgYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSkge1xuICAgIHJldHVybiBjb21wYXJlKG5ldyBVaW50OEFycmF5KGFjdHVhbC5idWZmZXIpLFxuICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGV4cGVjdGVkLmJ1ZmZlcikpID09PSAwO1xuXG4gIC8vIDcuNSBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAhPT0gaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIG1lbW9zID0gbWVtb3MgfHwge2FjdHVhbDogW10sIGV4cGVjdGVkOiBbXX07XG5cbiAgICB2YXIgYWN0dWFsSW5kZXggPSBtZW1vcy5hY3R1YWwuaW5kZXhPZihhY3R1YWwpO1xuICAgIGlmIChhY3R1YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gbWVtb3MuZXhwZWN0ZWQuaW5kZXhPZihleHBlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb3MuYWN0dWFsLnB1c2goYWN0dWFsKTtcbiAgICBtZW1vcy5leHBlY3RlZC5wdXNoKGV4cGVjdGVkKTtcblxuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSB7XG4gIGlmIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSBudWxsIHx8IGIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoc3RyaWN0ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKTtcbiAgdmFyIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYiwgc3RyaWN0KTtcbiAgfVxuICB2YXIga2EgPSBvYmplY3RLZXlzKGEpO1xuICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB2YXIga2V5LCBpO1xuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIV9kZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyA4LiBUaGUgbm9uLWVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBmb3IgYW55IGRlZXAgaW5lcXVhbGl0eS5cbi8vIGFzc2VydC5ub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gbm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5mdW5jdGlvbiBub3REZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBTdHJpY3RFcXVhbCcsIG5vdERlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn1cblxuXG4vLyA5LiBUaGUgc3RyaWN0IGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzdHJpY3QgZXF1YWxpdHksIGFzIGRldGVybWluZWQgYnkgPT09LlxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09PScsIGFzc2VydC5zdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDEwLiBUaGUgc3RyaWN0IG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHN0cmljdCBpbmVxdWFsaXR5LCBhc1xuLy8gZGV0ZXJtaW5lZCBieSAhPT0uICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT09JywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlLiAgVGhlIGluc3RhbmNlb2YgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBhcnJvdyBmdW5jdGlvbnMuXG4gIH1cblxuICBpZiAoRXJyb3IuaXNQcm90b3R5cGVPZihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXhwZWN0ZWQuY2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3RyeUJsb2NrKGJsb2NrKSB7XG4gIHZhciBlcnJvcjtcbiAgdHJ5IHtcbiAgICBibG9jaygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHR5cGVvZiBibG9jayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIGFjdHVhbCA9IF90cnlCbG9jayhibG9jayk7XG5cbiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArXG4gICAgICAgICAgICAobWVzc2FnZSA/ICcgJyArIG1lc3NhZ2UgOiAnLicpO1xuXG4gIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICB2YXIgdXNlclByb3ZpZGVkTWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJztcbiAgdmFyIGlzVW53YW50ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgdXRpbC5pc0Vycm9yKGFjdHVhbCk7XG4gIHZhciBpc1VuZXhwZWN0ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmICFleHBlY3RlZDtcblxuICBpZiAoKGlzVW53YW50ZWRFeGNlcHRpb24gJiZcbiAgICAgIHVzZXJQcm92aWRlZE1lc3NhZ2UgJiZcbiAgICAgIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fFxuICAgICAgaXNVbmV4cGVjdGVkRXhjZXB0aW9uKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnR290IHVud2FudGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICgoc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmIGV4cGVjdGVkICYmXG4gICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkge1xuICAgIHRocm93IGFjdHVhbDtcbiAgfVxufVxuXG4vLyAxMS4gRXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3I6XG4vLyBhc3NlcnQudGhyb3dzKGJsb2NrLCBFcnJvcl9vcHQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKHRydWUsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyhmYWxzZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHRocm93IGVycjsgfTtcblxuLy8gRXhwb3NlIGEgc3RyaWN0IG9ubHkgdmFyaWFudCBvZiBhc3NlcnRcbmZ1bmN0aW9uIHN0cmljdCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBzdHJpY3QpO1xufVxuYXNzZXJ0LnN0cmljdCA9IG9iamVjdEFzc2lnbihzdHJpY3QsIGFzc2VydCwge1xuICBlcXVhbDogYXNzZXJ0LnN0cmljdEVxdWFsLFxuICBkZWVwRXF1YWw6IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwsXG4gIG5vdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gIG5vdERlZXBFcXVhbDogYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbFxufSk7XG5hc3NlcnQuc3RyaWN0LnN0cmljdCA9IGFzc2VydC5zdHJpY3Q7XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG4vKipcbiAqIFJMUCBFbmNvZGluZyBiYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL3dpa2kvd2lraS8lNUJFbmdsaXNoJTVELVJMUFxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIGRhdGEsIGNvbnZlcnQgaXQgdG8gYnVmZmVyIGlmIG5vdCwgYW5kIGEgbGVuZ3RoIGZvciByZWN1cnNpb25cbiAqIEBwYXJhbSBpbnB1dCAtIHdpbGwgYmUgY29udmVydGVkIHRvIGJ1ZmZlclxuICogQHJldHVybnMgcmV0dXJucyBidWZmZXIgb2YgZW5jb2RlZCBkYXRhXG4gKiovXG5mdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChlbmNvZGUoaW5wdXRbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdChvdXRwdXQpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbZW5jb2RlTGVuZ3RoKGJ1Zi5sZW5ndGgsIDE5MiksIGJ1Zl0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGlucHV0QnVmID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXRCdWYubGVuZ3RoID09PSAxICYmIGlucHV0QnVmWzBdIDwgMTI4XG4gICAgICAgICAgICA/IGlucHV0QnVmXG4gICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQoW2VuY29kZUxlbmd0aChpbnB1dEJ1Zi5sZW5ndGgsIDEyOCksIGlucHV0QnVmXSk7XG4gICAgfVxufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG4vKipcbiAqIFBhcnNlIGludGVnZXJzLiBDaGVjayBpZiB0aGVyZSBpcyBubyBsZWFkaW5nIHplcm9zXG4gKiBAcGFyYW0gdiBUaGUgdmFsdWUgdG8gcGFyc2VcbiAqIEBwYXJhbSBiYXNlIFRoZSBiYXNlIHRvIHBhcnNlIHRoZSBpbnRlZ2VyIGludG9cbiAqL1xuZnVuY3Rpb24gc2FmZVBhcnNlSW50KHYsIGJhc2UpIHtcbiAgICBpZiAodi5zbGljZSgwLCAyKSA9PT0gJzAwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgUkxQOiBleHRyYSB6ZXJvcycpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodiwgYmFzZSk7XG59XG5mdW5jdGlvbiBlbmNvZGVMZW5ndGgobGVuLCBvZmZzZXQpIHtcbiAgICBpZiAobGVuIDwgNTYpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtsZW4gKyBvZmZzZXRdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBoZXhMZW5ndGggPSBpbnRUb0hleChsZW4pO1xuICAgICAgICB2YXIgbExlbmd0aCA9IGhleExlbmd0aC5sZW5ndGggLyAyO1xuICAgICAgICB2YXIgZmlyc3RCeXRlID0gaW50VG9IZXgob2Zmc2V0ICsgNTUgKyBsTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGZpcnN0Qnl0ZSArIGhleExlbmd0aCwgJ2hleCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCwgc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbSA9PT0gdm9pZCAwKSB7IHN0cmVhbSA9IGZhbHNlOyB9XG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICB9XG4gICAgdmFyIGlucHV0QnVmZmVyID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgIHZhciBkZWNvZGVkID0gX2RlY29kZShpbnB1dEJ1ZmZlcik7XG4gICAgaWYgKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICB9XG4gICAgaWYgKGRlY29kZWQucmVtYWluZGVyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVtYWluZGVyJyk7XG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVkLmRhdGE7XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbi8qKlxuICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIFJMUCBpbnB1dFxuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBvciBhbiBlbXB0eSBCdWZmZXIgaWYgbm8gaW5wdXRcbiAqL1xuZnVuY3Rpb24gZ2V0TGVuZ3RoKGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICB9XG4gICAgdmFyIGlucHV0QnVmZmVyID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgIHZhciBmaXJzdEJ5dGUgPSBpbnB1dEJ1ZmZlclswXTtcbiAgICBpZiAoZmlyc3RCeXRlIDw9IDB4N2YpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyLmxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmlyc3RCeXRlIDw9IDB4YjcpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Qnl0ZSAtIDB4N2Y7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGJmKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEJ5dGUgLSAweGI2O1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdEJ5dGUgPD0gMHhmNykge1xuICAgICAgICAvLyBhIGxpc3QgYmV0d2VlbiAgMC01NSBieXRlcyBsb25nXG4gICAgICAgIHJldHVybiBmaXJzdEJ5dGUgLSAweGJmO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gYSBsaXN0ICBvdmVyIDU1IGJ5dGVzIGxvbmdcbiAgICAgICAgdmFyIGxsZW5ndGggPSBmaXJzdEJ5dGUgLSAweGY2O1xuICAgICAgICB2YXIgbGVuZ3RoID0gc2FmZVBhcnNlSW50KGlucHV0QnVmZmVyLnNsaWNlKDEsIGxsZW5ndGgpLnRvU3RyaW5nKCdoZXgnKSwgMTYpO1xuICAgICAgICByZXR1cm4gbGxlbmd0aCArIGxlbmd0aDtcbiAgICB9XG59XG5leHBvcnRzLmdldExlbmd0aCA9IGdldExlbmd0aDtcbi8qKiBEZWNvZGUgYW4gaW5wdXQgd2l0aCBSTFAgKi9cbmZ1bmN0aW9uIF9kZWNvZGUoaW5wdXQpIHtcbiAgICB2YXIgbGVuZ3RoLCBsbGVuZ3RoLCBkYXRhLCBpbm5lclJlbWFpbmRlciwgZDtcbiAgICB2YXIgZGVjb2RlZCA9IFtdO1xuICAgIHZhciBmaXJzdEJ5dGUgPSBpbnB1dFswXTtcbiAgICBpZiAoZmlyc3RCeXRlIDw9IDB4N2YpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBpbiB0aGUgWzB4MDAsIDB4N2ZdIHJhbmdlLCB0aGF0IGJ5dGUgaXMgaXRzIG93biBSTFAgZW5jb2RpbmcuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5zbGljZSgwLCAxKSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UoMSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGI3KSB7XG4gICAgICAgIC8vIHN0cmluZyBpcyAwLTU1IGJ5dGVzIGxvbmcuIEEgc2luZ2xlIGJ5dGUgd2l0aCB2YWx1ZSAweDgwIHBsdXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmdcbiAgICAgICAgLy8gVGhlIHJhbmdlIG9mIHRoZSBmaXJzdCBieXRlIGlzIFsweDgwLCAweGI3XVxuICAgICAgICBsZW5ndGggPSBmaXJzdEJ5dGUgLSAweDdmO1xuICAgICAgICAvLyBzZXQgMHg4MCBudWxsIHRvIDBcbiAgICAgICAgaWYgKGZpcnN0Qnl0ZSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBpbnB1dC5zbGljZSgxLCBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW5ndGggPT09IDIgJiYgZGF0YVswXSA8IDB4ODApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBybHAgZW5jb2Rpbmc6IGJ5dGUgbXVzdCBiZSBsZXNzIDB4ODAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UobGVuZ3RoKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmlyc3RCeXRlIDw9IDB4YmYpIHtcbiAgICAgICAgbGxlbmd0aCA9IGZpcnN0Qnl0ZSAtIDB4YjY7XG4gICAgICAgIGxlbmd0aCA9IHNhZmVQYXJzZUludChpbnB1dC5zbGljZSgxLCBsbGVuZ3RoKS50b1N0cmluZygnaGV4JyksIDE2KTtcbiAgICAgICAgZGF0YSA9IGlucHV0LnNsaWNlKGxsZW5ndGgsIGxlbmd0aCArIGxsZW5ndGgpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBSTFAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UobGVuZ3RoICsgbGxlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGY3KSB7XG4gICAgICAgIC8vIGEgbGlzdCBiZXR3ZWVuICAwLTU1IGJ5dGVzIGxvbmdcbiAgICAgICAgbGVuZ3RoID0gZmlyc3RCeXRlIC0gMHhiZjtcbiAgICAgICAgaW5uZXJSZW1haW5kZXIgPSBpbnB1dC5zbGljZSgxLCBsZW5ndGgpO1xuICAgICAgICB3aGlsZSAoaW5uZXJSZW1haW5kZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBkID0gX2RlY29kZShpbm5lclJlbWFpbmRlcik7XG4gICAgICAgICAgICBkZWNvZGVkLnB1c2goZC5kYXRhKTtcbiAgICAgICAgICAgIGlubmVyUmVtYWluZGVyID0gZC5yZW1haW5kZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IGRlY29kZWQsXG4gICAgICAgICAgICByZW1haW5kZXI6IGlucHV0LnNsaWNlKGxlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBhIGxpc3QgIG92ZXIgNTUgYnl0ZXMgbG9uZ1xuICAgICAgICBsbGVuZ3RoID0gZmlyc3RCeXRlIC0gMHhmNjtcbiAgICAgICAgbGVuZ3RoID0gc2FmZVBhcnNlSW50KGlucHV0LnNsaWNlKDEsIGxsZW5ndGgpLnRvU3RyaW5nKCdoZXgnKSwgMTYpO1xuICAgICAgICB2YXIgdG90YWxMZW5ndGggPSBsbGVuZ3RoICsgbGVuZ3RoO1xuICAgICAgICBpZiAodG90YWxMZW5ndGggPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBybHA6IHRvdGFsIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIGlubmVyUmVtYWluZGVyID0gaW5wdXQuc2xpY2UobGxlbmd0aCwgdG90YWxMZW5ndGgpO1xuICAgICAgICBpZiAoaW5uZXJSZW1haW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmxwLCBMaXN0IGhhcyBhIGludmFsaWQgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGlubmVyUmVtYWluZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgZCA9IF9kZWNvZGUoaW5uZXJSZW1haW5kZXIpO1xuICAgICAgICAgICAgZGVjb2RlZC5wdXNoKGQuZGF0YSk7XG4gICAgICAgICAgICBpbm5lclJlbWFpbmRlciA9IGQucmVtYWluZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBkZWNvZGVkLFxuICAgICAgICAgICAgcmVtYWluZGVyOiBpbnB1dC5zbGljZSh0b3RhbExlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqIENoZWNrIGlmIGEgc3RyaW5nIGlzIHByZWZpeGVkIGJ5IDB4ICovXG5mdW5jdGlvbiBpc0hleFByZWZpeGVkKHN0cikge1xuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgMikgPT09ICcweCc7XG59XG4vKiogUmVtb3ZlcyAweCBmcm9tIGEgZ2l2ZW4gU3RyaW5nICovXG5mdW5jdGlvbiBzdHJpcEhleFByZWZpeChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIGlzSGV4UHJlZml4ZWQoc3RyKSA/IHN0ci5zbGljZSgyKSA6IHN0cjtcbn1cbi8qKiBUcmFuc2Zvcm0gYW4gaW50ZWdlciBpbnRvIGl0cyBoZXhhZGVjaW1hbCB2YWx1ZSAqL1xuZnVuY3Rpb24gaW50VG9IZXgoaW50ZWdlcikge1xuICAgIGlmIChpbnRlZ2VyIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50ZWdlciBhcyBhcmd1bWVudCwgbXVzdCBiZSB1bnNpZ25lZCEnKTtcbiAgICB9XG4gICAgdmFyIGhleCA9IGludGVnZXIudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoICUgMiA/IFwiMFwiICsgaGV4IDogaGV4O1xufVxuLyoqIFBhZCBhIHN0cmluZyB0byBiZSBldmVuICovXG5mdW5jdGlvbiBwYWRUb0V2ZW4oYSkge1xuICAgIHJldHVybiBhLmxlbmd0aCAlIDIgPyBcIjBcIiArIGEgOiBhO1xufVxuLyoqIFRyYW5zZm9ybSBhbiBpbnRlZ2VyIGludG8gYSBCdWZmZXIgKi9cbmZ1bmN0aW9uIGludFRvQnVmZmVyKGludGVnZXIpIHtcbiAgICB2YXIgaGV4ID0gaW50VG9IZXgoaW50ZWdlcik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpO1xufVxuLyoqIFRyYW5zZm9ybSBhbnl0aGluZyBpbnRvIGEgQnVmZmVyICovXG5mdW5jdGlvbiB0b0J1ZmZlcih2KSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGlzSGV4UHJlZml4ZWQodikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20ocGFkVG9FdmVuKHN0cmlwSGV4UHJlZml4KHYpKSwgJ2hleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRUb0J1ZmZlcih2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEJOLmlzQk4odikpIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBSZXR1cm5zIGEgYEJvb2xlYW5gIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBhIGBTdHJpbmdgIHN0YXJ0cyB3aXRoICcweCdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyBpbnB1dCB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn0gYSBib29sZWFuIGlmIGl0IGlzIG9yIGlzIG5vdCBoZXggcHJlZml4ZWRcbiAqIEB0aHJvd3MgaWYgdGhlIHN0ciBpbnB1dCBpcyBub3QgYSBzdHJpbmdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0hleFByZWZpeGVkKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbaXMtaGV4LXByZWZpeGVkXSB2YWx1ZSBtdXN0IGJlIHR5cGUgJ3N0cmluZycsIGlzIGN1cnJlbnRseSB0eXBlIFwiICsgKHR5cGVvZiBzdHIpICsgXCIsIHdoaWxlIGNoZWNraW5nIGlzSGV4UHJlZml4ZWQuXCIpO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZSgwLCAyKSA9PT0gJzB4Jztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGVhY2hPZkltcGxlbWVudGF0aW9uID0gKDAsIF9pc0FycmF5TGlrZTIuZGVmYXVsdCkoY29sbCkgPyBlYWNoT2ZBcnJheUxpa2UgOiBlYWNoT2ZHZW5lcmljO1xuICAgIGVhY2hPZkltcGxlbWVudGF0aW9uKGNvbGwsICgwLCBfd3JhcEFzeW5jMi5kZWZhdWx0KShpdGVyYXRlZSksIGNhbGxiYWNrKTtcbn07XG5cbnZhciBfaXNBcnJheUxpa2UgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheUxpa2UnKTtcblxudmFyIF9pc0FycmF5TGlrZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0FycmF5TGlrZSk7XG5cbnZhciBfYnJlYWtMb29wID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9icmVha0xvb3AnKTtcblxudmFyIF9icmVha0xvb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnJlYWtMb29wKTtcblxudmFyIF9lYWNoT2ZMaW1pdCA9IHJlcXVpcmUoJy4vZWFjaE9mTGltaXQnKTtcblxudmFyIF9lYWNoT2ZMaW1pdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lYWNoT2ZMaW1pdCk7XG5cbnZhciBfZG9MaW1pdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvZG9MaW1pdCcpO1xuXG52YXIgX2RvTGltaXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZG9MaW1pdCk7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoJ2xvZGFzaC9ub29wJyk7XG5cbnZhciBfbm9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ub29wKTtcblxudmFyIF9vbmNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9vbmNlJyk7XG5cbnZhciBfb25jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vbmNlKTtcblxudmFyIF9vbmx5T25jZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvb25seU9uY2UnKTtcblxudmFyIF9vbmx5T25jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vbmx5T25jZSk7XG5cbnZhciBfd3JhcEFzeW5jID0gcmVxdWlyZSgnLi9pbnRlcm5hbC93cmFwQXN5bmMnKTtcblxudmFyIF93cmFwQXN5bmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd3JhcEFzeW5jKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gZWFjaE9mIGltcGxlbWVudGF0aW9uIG9wdGltaXplZCBmb3IgYXJyYXktbGlrZXNcbmZ1bmN0aW9uIGVhY2hPZkFycmF5TGlrZShjb2xsLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9ICgwLCBfb25jZTIuZGVmYXVsdCkoY2FsbGJhY2sgfHwgX25vb3AyLmRlZmF1bHQpO1xuICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgIGNvbXBsZXRlZCA9IDAsXG4gICAgICAgIGxlbmd0aCA9IGNvbGwubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXRlcmF0b3JDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoKytjb21wbGV0ZWQgPT09IGxlbmd0aCB8fCB2YWx1ZSA9PT0gX2JyZWFrTG9vcDIuZGVmYXVsdCkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaXRlcmF0ZWUoY29sbFtpbmRleF0sIGluZGV4LCAoMCwgX29ubHlPbmNlMi5kZWZhdWx0KShpdGVyYXRvckNhbGxiYWNrKSk7XG4gICAgfVxufVxuXG4vLyBhIGdlbmVyaWMgdmVyc2lvbiBvZiBlYWNoT2Ygd2hpY2ggY2FuIGhhbmRsZSBhcnJheSwgb2JqZWN0LCBhbmQgaXRlcmF0b3IgY2FzZXMuXG52YXIgZWFjaE9mR2VuZXJpYyA9ICgwLCBfZG9MaW1pdDIuZGVmYXVsdCkoX2VhY2hPZkxpbWl0Mi5kZWZhdWx0LCBJbmZpbml0eSk7XG5cbi8qKlxuICogTGlrZSBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0sIGV4Y2VwdCB0aGF0IGl0IHBhc3NlcyB0aGUga2V5IChvciBpbmRleCkgYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuICogdG8gdGhlIGl0ZXJhdGVlLlxuICpcbiAqIEBuYW1lIGVhY2hPZlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICogQG1ldGhvZFxuICogQGFsaWFzIGZvckVhY2hPZlxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBzZWUgW2FzeW5jLmVhY2hde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofVxuICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEEgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICogaXRlbSBpbiBgY29sbGAuXG4gKiBUaGUgYGtleWAgaXMgdGhlIGl0ZW0ncyBrZXksIG9yIGluZGV4IGluIHRoZSBjYXNlIG9mIGFuIGFycmF5LlxuICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmogPSB7ZGV2OiBcIi9kZXYuanNvblwiLCB0ZXN0OiBcIi90ZXN0Lmpzb25cIiwgcHJvZDogXCIvcHJvZC5qc29uXCJ9O1xuICogdmFyIGNvbmZpZ3MgPSB7fTtcbiAqXG4gKiBhc3luYy5mb3JFYWNoT2Yob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSwgY2FsbGJhY2spIHtcbiAqICAgICBmcy5yZWFkRmlsZShfX2Rpcm5hbWUgKyB2YWx1ZSwgXCJ1dGY4XCIsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAqICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gKiAgICAgICAgIHRyeSB7XG4gKiAgICAgICAgICAgICBjb25maWdzW2tleV0gPSBKU09OLnBhcnNlKGRhdGEpO1xuICogICAgICAgICB9IGNhdGNoIChlKSB7XG4gKiAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gKiAgICAgICAgIH1cbiAqICAgICAgICAgY2FsbGJhY2soKTtcbiAqICAgICB9KTtcbiAqIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgICBpZiAoZXJyKSBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAqICAgICAvLyBjb25maWdzIGlzIG5vdyBhIG1hcCBvZiBKU09OIGRhdGFcbiAqICAgICBkb1NvbWV0aGluZ1dpdGgoY29uZmlncyk7XG4gKiB9KTtcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG4vLyBBIHRlbXBvcmFyeSB2YWx1ZSB1c2VkIHRvIGlkZW50aWZ5IGlmIHRoZSBsb29wIHNob3VsZCBiZSBicm9rZW4uXG4vLyBTZWUgIzEwNjQsICMxMjkzXG5leHBvcnRzLmRlZmF1bHQgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBfZWFjaE9mTGltaXQ7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoJ2xvZGFzaC9ub29wJyk7XG5cbnZhciBfbm9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ub29wKTtcblxudmFyIF9vbmNlID0gcmVxdWlyZSgnLi9vbmNlJyk7XG5cbnZhciBfb25jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vbmNlKTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoJy4vaXRlcmF0b3InKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfb25seU9uY2UgPSByZXF1aXJlKCcuL29ubHlPbmNlJyk7XG5cbnZhciBfb25seU9uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25seU9uY2UpO1xuXG52YXIgX2JyZWFrTG9vcCA9IHJlcXVpcmUoJy4vYnJlYWtMb29wJyk7XG5cbnZhciBfYnJlYWtMb29wMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JyZWFrTG9vcCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9lYWNoT2ZMaW1pdChsaW1pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX29uY2UyLmRlZmF1bHQpKGNhbGxiYWNrIHx8IF9ub29wMi5kZWZhdWx0KTtcbiAgICAgICAgaWYgKGxpbWl0IDw9IDAgfHwgIW9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXh0RWxlbSA9ICgwLCBfaXRlcmF0b3IyLmRlZmF1bHQpKG9iaik7XG4gICAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICAgIHZhciBydW5uaW5nID0gMDtcbiAgICAgICAgdmFyIGxvb3BpbmcgPSBmYWxzZTtcblxuICAgICAgICBmdW5jdGlvbiBpdGVyYXRlZUNhbGxiYWNrKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJ1bm5pbmcgLT0gMTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gX2JyZWFrTG9vcDIuZGVmYXVsdCB8fCBkb25lICYmIHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxvb3BpbmcpIHtcbiAgICAgICAgICAgICAgICByZXBsZW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxlbmlzaCgpIHtcbiAgICAgICAgICAgIGxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gbmV4dEVsZW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBydW5uaW5nICs9IDE7XG4gICAgICAgICAgICAgICAgaXRlcmF0ZWUoZWxlbS52YWx1ZSwgZWxlbS5rZXksICgwLCBfb25seU9uY2UyLmRlZmF1bHQpKGl0ZXJhdGVlQ2FsbGJhY2spKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcGxlbmlzaCgpO1xuICAgIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRvTGltaXQ7XG5mdW5jdGlvbiBkb0xpbWl0KGZuLCBsaW1pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoaXRlcmFibGUsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZm4oaXRlcmFibGUsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spO1xuICAgIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEVTID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvZXM1Jyk7XG52YXIgcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgbGVmdFdoaXRlc3BhY2UgPSAvXltcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKy87XG52YXIgcmlnaHRXaGl0ZXNwYWNlID0gL1tcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkZdKyQvO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyaW0oKSB7XG5cdHZhciBTID0gRVMuVG9TdHJpbmcoRVMuQ2hlY2tPYmplY3RDb2VyY2libGUodGhpcykpO1xuXHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKFMsIGxlZnRXaGl0ZXNwYWNlLCAnJyksIHJpZ2h0V2hpdGVzcGFjZSwgJycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsc1xuXHRTZXQsXG5cdE1hcCxcblx0V2Vha1NldCxcblx0V2Vha01hcCxcblxuXHRQcm9taXNlLFxuXG5cdFN5bWJvbCxcblx0UHJveHksXG5cblx0QXRvbWljcyxcblx0U2hhcmVkQXJyYXlCdWZmZXIsXG5cblx0QXJyYXlCdWZmZXIsXG5cdERhdGFWaWV3LFxuXHRVaW50OEFycmF5LFxuXHRGbG9hdDMyQXJyYXksXG5cdEZsb2F0NjRBcnJheSxcblx0SW50OEFycmF5LFxuXHRJbnQxNkFycmF5LFxuXHRJbnQzMkFycmF5LFxuXHRVaW50OENsYW1wZWRBcnJheSxcblx0VWludDE2QXJyYXksXG5cdFVpbnQzMkFycmF5LFxuKi9cblxudmFyIHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xuXG52YXIgVGhyb3dUeXBlRXJyb3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG5cdD8gKGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0OyB9KCkpXG5cdDogZnVuY3Rpb24gKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IH07XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgZ2VuZXJhdG9yOyAvLyA9IGZ1bmN0aW9uICogKCkge307XG52YXIgZ2VuZXJhdG9yRnVuY3Rpb24gPSBnZW5lcmF0b3IgPyBnZXRQcm90byhnZW5lcmF0b3IpIDogdW5kZWZpbmVkO1xudmFyIGFzeW5jRm47IC8vIGFzeW5jIGZ1bmN0aW9uKCkge307XG52YXIgYXN5bmNGdW5jdGlvbiA9IGFzeW5jRm4gPyBhc3luY0ZuLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xudmFyIGFzeW5jR2VuOyAvLyBhc3luYyBmdW5jdGlvbiAqICgpIHt9O1xudmFyIGFzeW5jR2VuRnVuY3Rpb24gPSBhc3luY0dlbiA/IGdldFByb3RvKGFzeW5jR2VuKSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlbkl0ZXJhdG9yID0gYXN5bmNHZW4gPyBhc3luY0dlbigpIDogdW5kZWZpbmVkO1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyQgJUFycmF5JSc6IEFycmF5LFxuXHQnJCAlQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJCAlQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLnByb3RvdHlwZSxcblx0JyQgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCckICVBcnJheVByb3RvdHlwZSUnOiBBcnJheS5wcm90b3R5cGUsXG5cdCckICVBcnJheVByb3RvX2VudHJpZXMlJzogQXJyYXkucHJvdG90eXBlLmVudHJpZXMsXG5cdCckICVBcnJheVByb3RvX2ZvckVhY2glJzogQXJyYXkucHJvdG90eXBlLmZvckVhY2gsXG5cdCckICVBcnJheVByb3RvX2tleXMlJzogQXJyYXkucHJvdG90eXBlLmtleXMsXG5cdCckICVBcnJheVByb3RvX3ZhbHVlcyUnOiBBcnJheS5wcm90b3R5cGUudmFsdWVzLFxuXHQnJCAlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jRnVuY3Rpb24lJzogYXN5bmNGdW5jdGlvbixcblx0JyQgJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogYXN5bmNGdW5jdGlvbiA/IGFzeW5jRnVuY3Rpb24ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlQXN5bmNHZW5lcmF0b3IlJzogYXN5bmNHZW4gPyBnZXRQcm90byhhc3luY0dlbkl0ZXJhdG9yKSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogYXN5bmNHZW5GdW5jdGlvbixcblx0JyQgJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IGFzeW5jR2VuRnVuY3Rpb24gPyBhc3luY0dlbkZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcblx0JyQgJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogYXN5bmNHZW5JdGVyYXRvciAmJiBoYXNTeW1ib2xzICYmIFN5bWJvbC5hc3luY0l0ZXJhdG9yID8gYXN5bmNHZW5JdGVyYXRvcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSA6IHVuZGVmaW5lZCxcblx0JyQgJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyQgJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyQgJUJvb2xlYW5Qcm90b3R5cGUlJzogQm9vbGVhbi5wcm90b3R5cGUsXG5cdCckICVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCckICVEYXRhVmlld1Byb3RvdHlwZSUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcucHJvdG90eXBlLFxuXHQnJCAlRGF0ZSUnOiBEYXRlLFxuXHQnJCAlRGF0ZVByb3RvdHlwZSUnOiBEYXRlLnByb3RvdHlwZSxcblx0JyQgJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCckICVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJCAlZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyQgJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCckICVFcnJvciUnOiBFcnJvcixcblx0JyQgJUVycm9yUHJvdG90eXBlJSc6IEVycm9yLnByb3RvdHlwZSxcblx0JyQgJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCckICVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJCAlRXZhbEVycm9yUHJvdG90eXBlJSc6IEV2YWxFcnJvci5wcm90b3R5cGUsXG5cdCckICVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCckICVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJCAlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LnByb3RvdHlwZSxcblx0JyQgJUZ1bmN0aW9uJSc6IEZ1bmN0aW9uLFxuXHQnJCAlRnVuY3Rpb25Qcm90b3R5cGUlJzogRnVuY3Rpb24ucHJvdG90eXBlLFxuXHQnJCAlR2VuZXJhdG9yJSc6IGdlbmVyYXRvciA/IGdldFByb3RvKGdlbmVyYXRvcigpKSA6IHVuZGVmaW5lZCxcblx0JyQgJUdlbmVyYXRvckZ1bmN0aW9uJSc6IGdlbmVyYXRvckZ1bmN0aW9uLFxuXHQnJCAlR2VuZXJhdG9yUHJvdG90eXBlJSc6IGdlbmVyYXRvckZ1bmN0aW9uID8gZ2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuXHQnJCAlSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJCAlSW50OEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyQgJUludDE2QXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LnByb3RvdHlwZSxcblx0JyQgJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyQgJUludDMyQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheS5wcm90b3R5cGUsXG5cdCckICVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyQgJWlzTmFOJSc6IGlzTmFOLFxuXHQnJCAlSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJCAlSlNPTiUnOiBKU09OLFxuXHQnJCAlSlNPTlBhcnNlJSc6IEpTT04ucGFyc2UsXG5cdCckICVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCckICVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJCAlTWFwUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLnByb3RvdHlwZSxcblx0JyQgJU1hdGglJzogTWF0aCxcblx0JyQgJU51bWJlciUnOiBOdW1iZXIsXG5cdCckICVOdW1iZXJQcm90b3R5cGUlJzogTnVtYmVyLnByb3RvdHlwZSxcblx0JyQgJU9iamVjdCUnOiBPYmplY3QsXG5cdCckICVPYmplY3RQcm90b3R5cGUlJzogT2JqZWN0LnByb3RvdHlwZSxcblx0JyQgJU9ialByb3RvX3RvU3RyaW5nJSc6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG5cdCckICVPYmpQcm90b192YWx1ZU9mJSc6IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZixcblx0JyQgJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyQgJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJCAlUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJCAlUHJvbWlzZVByb3RvdHlwZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLnByb3RvdHlwZSxcblx0JyQgJVByb21pc2VQcm90b190aGVuJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UucHJvdG90eXBlLnRoZW4sXG5cdCckICVQcm9taXNlX2FsbCUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLmFsbCxcblx0JyQgJVByb21pc2VfcmVqZWN0JSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UucmVqZWN0LFxuXHQnJCAlUHJvbWlzZV9yZXNvbHZlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UucmVzb2x2ZSxcblx0JyQgJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyQgJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyQgJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogUmFuZ2VFcnJvci5wcm90b3R5cGUsXG5cdCckICVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyQgJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFJlZmVyZW5jZUVycm9yLnByb3RvdHlwZSxcblx0JyQgJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyQgJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCckICVSZWdFeHBQcm90b3R5cGUlJzogUmVnRXhwLnByb3RvdHlwZSxcblx0JyQgJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyQgJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCckICVTZXRQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQucHJvdG90eXBlLFxuXHQnJCAlU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJCAlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLnByb3RvdHlwZSxcblx0JyQgJVN0cmluZyUnOiBTdHJpbmcsXG5cdCckICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyQgJVN0cmluZ1Byb3RvdHlwZSUnOiBTdHJpbmcucHJvdG90eXBlLFxuXHQnJCAlU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCckICVTeW1ib2xQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVTeW50YXhFcnJvciUnOiBTeW50YXhFcnJvcixcblx0JyQgJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFN5bnRheEVycm9yLnByb3RvdHlwZSxcblx0JyQgJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJCAlVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJCAlVHlwZWRBcnJheVByb3RvdHlwZSUnOiBUeXBlZEFycmF5ID8gVHlwZWRBcnJheS5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG5cdCckICVUeXBlRXJyb3IlJzogVHlwZUVycm9yLFxuXHQnJCAlVHlwZUVycm9yUHJvdG90eXBlJSc6IFR5cGVFcnJvci5wcm90b3R5cGUsXG5cdCckICVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCckICVVaW50OEFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJCAlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcblx0JyQgJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyQgJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheS5wcm90b3R5cGUsXG5cdCckICVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCckICVVaW50MzJBcnJheVByb3RvdHlwZSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXkucHJvdG90eXBlLFxuXHQnJCAlVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCckICVVUklFcnJvclByb3RvdHlwZSUnOiBVUklFcnJvci5wcm90b3R5cGUsXG5cdCckICVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCckICVXZWFrTWFwUHJvdG90eXBlJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAucHJvdG90eXBlLFxuXHQnJCAlV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0LFxuXHQnJCAlV2Vha1NldFByb3RvdHlwZSUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0LnByb3RvdHlwZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIga2V5ID0gJyQgJyArIG5hbWU7XG5cdGlmICghKGtleSBpbiBJTlRSSU5TSUNTKSkge1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcblx0fVxuXG5cdC8vIGlzdGFuYnVsIGlnbm9yZSBpZiAvLyBob3BlZnVsbHkgdGhpcyBpcyBpbXBvc3NpYmxlIHRvIHRlc3QgOi0pXG5cdGlmICh0eXBlb2YgSU5UUklOU0lDU1trZXldID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0fVxuXHRyZXR1cm4gSU5UUklOU0lDU1trZXldO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBiJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSAmJiB6ZXJvV2lkdGhTcGFjZS50cmltKCkgPT09IHplcm9XaWR0aFNwYWNlKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbTtcblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiLy8gICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aGlldSBUdXJjb3R0ZVxuLy8gICAgICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBwcmVjb25kID0gcmVxdWlyZSgncHJlY29uZCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8vIEEgY2xhc3MgdG8gaG9sZCB0aGUgc3RhdGUgb2YgYSBiYWNrb2ZmIG9wZXJhdGlvbi4gQWNjZXB0cyBhIGJhY2tvZmYgc3RyYXRlZ3lcbi8vIHRvIGdlbmVyYXRlIHRoZSBiYWNrb2ZmIGRlbGF5cy5cbmZ1bmN0aW9uIEJhY2tvZmYoYmFja29mZlN0cmF0ZWd5KSB7XG4gICAgZXZlbnRzLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5iYWNrb2ZmU3RyYXRlZ3lfID0gYmFja29mZlN0cmF0ZWd5O1xuICAgIHRoaXMubWF4TnVtYmVyT2ZSZXRyeV8gPSAtMTtcbiAgICB0aGlzLmJhY2tvZmZOdW1iZXJfID0gMDtcbiAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSAwO1xuICAgIHRoaXMudGltZW91dElEXyA9IC0xO1xuXG4gICAgdGhpcy5oYW5kbGVycyA9IHtcbiAgICAgICAgYmFja29mZjogdGhpcy5vbkJhY2tvZmZfLmJpbmQodGhpcylcbiAgICB9O1xufVxudXRpbC5pbmhlcml0cyhCYWNrb2ZmLCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuLy8gU2V0cyBhIGxpbWl0LCBncmVhdGVyIHRoYW4gMCwgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhY2tvZmZzLiBBICdmYWlsJ1xuLy8gZXZlbnQgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG5CYWNrb2ZmLnByb3RvdHlwZS5mYWlsQWZ0ZXIgPSBmdW5jdGlvbihtYXhOdW1iZXJPZlJldHJ5KSB7XG4gICAgcHJlY29uZC5jaGVja0FyZ3VtZW50KG1heE51bWJlck9mUmV0cnkgPiAwLFxuICAgICAgICAnRXhwZWN0ZWQgYSBtYXhpbXVtIG51bWJlciBvZiByZXRyeSBncmVhdGVyIHRoYW4gMCBidXQgZ290ICVzLicsXG4gICAgICAgIG1heE51bWJlck9mUmV0cnkpO1xuXG4gICAgdGhpcy5tYXhOdW1iZXJPZlJldHJ5XyA9IG1heE51bWJlck9mUmV0cnk7XG59O1xuXG4vLyBTdGFydHMgYSBiYWNrb2ZmIG9wZXJhdGlvbi4gQWNjZXB0cyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gbGV0IHRoZVxuLy8gbGlzdGVuZXJzIGtub3cgd2h5IHRoZSBiYWNrb2ZmIG9wZXJhdGlvbiB3YXMgc3RhcnRlZC5cbkJhY2tvZmYucHJvdG90eXBlLmJhY2tvZmYgPSBmdW5jdGlvbihlcnIpIHtcbiAgICBwcmVjb25kLmNoZWNrU3RhdGUodGhpcy50aW1lb3V0SURfID09PSAtMSwgJ0JhY2tvZmYgaW4gcHJvZ3Jlc3MuJyk7XG5cbiAgICBpZiAodGhpcy5iYWNrb2ZmTnVtYmVyXyA9PT0gdGhpcy5tYXhOdW1iZXJPZlJldHJ5Xykge1xuICAgICAgICB0aGlzLmVtaXQoJ2ZhaWwnLCBlcnIpO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iYWNrb2ZmRGVsYXlfID0gdGhpcy5iYWNrb2ZmU3RyYXRlZ3lfLm5leHQoKTtcbiAgICAgICAgdGhpcy50aW1lb3V0SURfID0gc2V0VGltZW91dCh0aGlzLmhhbmRsZXJzLmJhY2tvZmYsIHRoaXMuYmFja29mZkRlbGF5Xyk7XG4gICAgICAgIHRoaXMuZW1pdCgnYmFja29mZicsIHRoaXMuYmFja29mZk51bWJlcl8sIHRoaXMuYmFja29mZkRlbGF5XywgZXJyKTtcbiAgICB9XG59O1xuXG4vLyBIYW5kbGVzIHRoZSBiYWNrb2ZmIHRpbWVvdXQgY29tcGxldGlvbi5cbkJhY2tvZmYucHJvdG90eXBlLm9uQmFja29mZl8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRpbWVvdXRJRF8gPSAtMTtcbiAgICB0aGlzLmVtaXQoJ3JlYWR5JywgdGhpcy5iYWNrb2ZmTnVtYmVyXywgdGhpcy5iYWNrb2ZmRGVsYXlfKTtcbiAgICB0aGlzLmJhY2tvZmZOdW1iZXJfKys7XG59O1xuXG4vLyBTdG9wcyBhbnkgYmFja29mZiBvcGVyYXRpb24gYW5kIHJlc2V0cyB0aGUgYmFja29mZiBkZWxheSB0byBpdHMgaW5pdGFsIHZhbHVlLlxuQmFja29mZi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJhY2tvZmZOdW1iZXJfID0gMDtcbiAgICB0aGlzLmJhY2tvZmZTdHJhdGVneV8ucmVzZXQoKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SURfKTtcbiAgICB0aGlzLnRpbWVvdXRJRF8gPSAtMTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja29mZjtcbiIsIi8vICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIE1hdGhpZXUgVHVyY290dGVcbi8vICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gaXNEZWYodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuLy8gQWJzdHJhY3QgY2xhc3MgZGVmaW5pbmcgdGhlIHNrZWxldG9uIGZvciB0aGUgYmFja29mZiBzdHJhdGVnaWVzLiBBY2NlcHRzIGFuXG4vLyBvYmplY3QgaG9sZGluZyB0aGUgb3B0aW9ucyBmb3IgdGhlIGJhY2tvZmYgc3RyYXRlZ3k6XG4vL1xuLy8gICogYHJhbmRvbWlzYXRpb25GYWN0b3JgOiBUaGUgcmFuZG9taXNhdGlvbiBmYWN0b3Igd2hpY2ggbXVzdCBiZSBiZXR3ZWVuIDBcbi8vICAgICBhbmQgMSB3aGVyZSAxIGVxdWF0ZXMgdG8gYSByYW5kb21pemF0aW9uIGZhY3RvciBvZiAxMDAlIGFuZCAwIHRvIG5vXG4vLyAgICAgcmFuZG9taXphdGlvbi5cbi8vICAqIGBpbml0aWFsRGVsYXlgOiBUaGUgYmFja29mZiBpbml0aWFsIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbi8vICAqIGBtYXhEZWxheWA6IFRoZSBiYWNrb2ZmIG1heGltYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuZnVuY3Rpb24gQmFja29mZlN0cmF0ZWd5KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGlmIChpc0RlZihvcHRpb25zLmluaXRpYWxEZWxheSkgJiYgb3B0aW9ucy5pbml0aWFsRGVsYXkgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGluaXRpYWwgdGltZW91dCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLicpO1xuICAgIH0gZWxzZSBpZiAoaXNEZWYob3B0aW9ucy5tYXhEZWxheSkgJiYgb3B0aW9ucy5tYXhEZWxheSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWF4aW1hbCB0aW1lb3V0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsRGVsYXlfID0gb3B0aW9ucy5pbml0aWFsRGVsYXkgfHwgMTAwO1xuICAgIHRoaXMubWF4RGVsYXlfID0gb3B0aW9ucy5tYXhEZWxheSB8fCAxMDAwMDtcblxuICAgIGlmICh0aGlzLm1heERlbGF5XyA8PSB0aGlzLmluaXRpYWxEZWxheV8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbWF4aW1hbCBiYWNrb2ZmIGRlbGF5IG11c3QgYmUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JlYXRlciB0aGFuIHRoZSBpbml0aWFsIGJhY2tvZmYgZGVsYXkuJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGVmKG9wdGlvbnMucmFuZG9taXNhdGlvbkZhY3RvcikgJiZcbiAgICAgICAgKG9wdGlvbnMucmFuZG9taXNhdGlvbkZhY3RvciA8IDAgfHwgb3B0aW9ucy5yYW5kb21pc2F0aW9uRmFjdG9yID4gMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmFuZG9taXNhdGlvbiBmYWN0b3IgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yYW5kb21pc2F0aW9uRmFjdG9yXyA9IG9wdGlvbnMucmFuZG9taXNhdGlvbkZhY3RvciB8fCAwO1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbWFsIGJhY2tvZmYgZGVsYXkuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLmdldE1heERlbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF4RGVsYXlfO1xufTtcblxuLy8gR2V0cyB0aGUgaW5pdGlhbCBiYWNrb2ZmIGRlbGF5LlxuQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5nZXRJbml0aWFsRGVsYXkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsRGVsYXlfO1xufTtcblxuLy8gVGVtcGxhdGUgbWV0aG9kIHRoYXQgY29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIG5leHQgYmFja29mZiBkZWxheSBpblxuLy8gbWlsbGlzZWNvbmRzLlxuQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJhY2tvZmZEZWxheSA9IHRoaXMubmV4dF8oKTtcbiAgICB2YXIgcmFuZG9taXNhdGlvbk11bHRpcGxlID0gMSArIE1hdGgucmFuZG9tKCkgKiB0aGlzLnJhbmRvbWlzYXRpb25GYWN0b3JfO1xuICAgIHZhciByYW5kb21pemVkRGVsYXkgPSBNYXRoLnJvdW5kKGJhY2tvZmZEZWxheSAqIHJhbmRvbWlzYXRpb25NdWx0aXBsZSk7XG4gICAgcmV0dXJuIHJhbmRvbWl6ZWREZWxheTtcbn07XG5cbi8vIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBuZXh0IGJhY2tvZmYgZGVsYXkuIEludGVuZGVkIHRvIGJlIG92ZXJyaWRkZW4gYnlcbi8vIHN1YmNsYXNzZXMuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLm5leHRfID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYWNrb2ZmU3RyYXRlZ3kubmV4dF8oKSB1bmltcGxlbWVudGVkLicpO1xufTtcblxuLy8gVGVtcGxhdGUgbWV0aG9kIHRoYXQgcmVzZXRzIHRoZSBiYWNrb2ZmIGRlbGF5IHRvIGl0cyBpbml0aWFsIHZhbHVlLlxuQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVzZXRfKCk7XG59O1xuXG4vLyBSZXNldHMgdGhlIGJhY2tvZmYgZGVsYXkgdG8gaXRzIGluaXRpYWwgdmFsdWUuIEludGVuZGVkIHRvIGJlIG92ZXJyaWRkZW4gYnlcbi8vIHN1YmNsYXNzZXMuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLnJlc2V0XyA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFja29mZlN0cmF0ZWd5LnJlc2V0XygpIHVuaW1wbGVtZW50ZWQuJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJhY2tvZmZTdHJhdGVneTtcbiIsIi8vICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIE1hdGhpZXUgVHVyY290dGVcbi8vICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIEJhY2tvZmZTdHJhdGVneSA9IHJlcXVpcmUoJy4vc3RyYXRlZ3knKTtcblxuLy8gRmlib25hY2NpIGJhY2tvZmYgc3RyYXRlZ3kuXG5mdW5jdGlvbiBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kob3B0aW9ucykge1xuICAgIEJhY2tvZmZTdHJhdGVneS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuYmFja29mZkRlbGF5XyA9IDA7XG4gICAgdGhpcy5uZXh0QmFja29mZkRlbGF5XyA9IHRoaXMuZ2V0SW5pdGlhbERlbGF5KCk7XG59XG51dGlsLmluaGVyaXRzKEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneSwgQmFja29mZlN0cmF0ZWd5KTtcblxuRmlib25hY2NpQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5uZXh0XyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBiYWNrb2ZmRGVsYXkgPSBNYXRoLm1pbih0aGlzLm5leHRCYWNrb2ZmRGVsYXlfLCB0aGlzLmdldE1heERlbGF5KCkpO1xuICAgIHRoaXMubmV4dEJhY2tvZmZEZWxheV8gKz0gdGhpcy5iYWNrb2ZmRGVsYXlfO1xuICAgIHRoaXMuYmFja29mZkRlbGF5XyA9IGJhY2tvZmZEZWxheTtcbiAgICByZXR1cm4gYmFja29mZkRlbGF5O1xufTtcblxuRmlib25hY2NpQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5yZXNldF8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm5leHRCYWNrb2ZmRGVsYXlfID0gdGhpcy5nZXRJbml0aWFsRGVsYXkoKTtcbiAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSAwO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3k7XG4iLCJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzXG5jb25zdCBldGhVdGlsID0gcmVxdWlyZSgnZXRoZXJldW1qcy11dGlsJylcbmNvbnN0IEV0aEJsb2NrVHJhY2tlciA9IHJlcXVpcmUoJ2V0aC1ibG9jay10cmFja2VyJylcbmNvbnN0IG1hcCA9IHJlcXVpcmUoJ2FzeW5jL21hcCcpXG5jb25zdCBlYWNoU2VyaWVzID0gcmVxdWlyZSgnYXN5bmMvZWFjaFNlcmllcycpXG5jb25zdCBTdG9wbGlnaHQgPSByZXF1aXJlKCcuL3V0aWwvc3RvcGxpZ2h0LmpzJylcbmNvbnN0IGNhY2hlVXRpbHMgPSByZXF1aXJlKCcuL3V0aWwvcnBjLWNhY2hlLXV0aWxzLmpzJylcbmNvbnN0IGNyZWF0ZVBheWxvYWQgPSByZXF1aXJlKCcuL3V0aWwvY3JlYXRlLXBheWxvYWQuanMnKVxuY29uc3Qgbm9vcCA9IGZ1bmN0aW9uKCl7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYjNQcm92aWRlckVuZ2luZVxuXG5cbmluaGVyaXRzKFdlYjNQcm92aWRlckVuZ2luZSwgRXZlbnRFbWl0dGVyKVxuXG5mdW5jdGlvbiBXZWIzUHJvdmlkZXJFbmdpbmUob3B0cykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBFdmVudEVtaXR0ZXIuY2FsbChzZWxmKVxuICBzZWxmLnNldE1heExpc3RlbmVycygzMClcbiAgLy8gcGFyc2Ugb3B0aW9uc1xuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIC8vIGJsb2NrIHBvbGxpbmdcbiAgY29uc3QgZGlyZWN0UHJvdmlkZXIgPSB7IHNlbmRBc3luYzogc2VsZi5faGFuZGxlQXN5bmMuYmluZChzZWxmKSB9XG4gIGNvbnN0IGJsb2NrVHJhY2tlclByb3ZpZGVyID0gb3B0cy5ibG9ja1RyYWNrZXJQcm92aWRlciB8fCBkaXJlY3RQcm92aWRlclxuICBzZWxmLl9ibG9ja1RyYWNrZXIgPSBvcHRzLmJsb2NrVHJhY2tlciB8fCBuZXcgRXRoQmxvY2tUcmFja2VyKHtcbiAgICBwcm92aWRlcjogYmxvY2tUcmFja2VyUHJvdmlkZXIsXG4gICAgcG9sbGluZ0ludGVydmFsOiBvcHRzLnBvbGxpbmdJbnRlcnZhbCB8fCA0MDAwLFxuICB9KVxuXG4gIC8vIGhhbmRsZSBuZXcgYmxvY2tcbiAgc2VsZi5fYmxvY2tUcmFja2VyLm9uKCdibG9jaycsIChqc29uQmxvY2spID0+IHtcbiAgICBjb25zdCBidWZmZXJCbG9jayA9IHRvQnVmZmVyQmxvY2soanNvbkJsb2NrKVxuICAgIHNlbGYuX3NldEN1cnJlbnRCbG9jayhidWZmZXJCbG9jaylcbiAgfSlcblxuICAvLyBlbWl0IGJsb2NrIGV2ZW50cyBmcm9tIHRoZSBibG9jayB0cmFja2VyXG4gIHNlbGYuX2Jsb2NrVHJhY2tlci5vbignYmxvY2snLCBzZWxmLmVtaXQuYmluZChzZWxmLCAncmF3QmxvY2snKSlcbiAgc2VsZi5fYmxvY2tUcmFja2VyLm9uKCdzeW5jJywgc2VsZi5lbWl0LmJpbmQoc2VsZiwgJ3N5bmMnKSlcbiAgc2VsZi5fYmxvY2tUcmFja2VyLm9uKCdsYXRlc3QnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAnbGF0ZXN0JykpXG5cbiAgLy8gc2V0IGluaXRpYWxpemF0aW9uIGJsb2NrZXJcbiAgc2VsZi5fcmVhZHkgPSBuZXcgU3RvcGxpZ2h0KClcbiAgLy8gdW5ibG9jayBpbml0aWFsaXphdGlvbiBhZnRlciBmaXJzdCBibG9ja1xuICBzZWxmLl9ibG9ja1RyYWNrZXIub25jZSgnYmxvY2snLCAoKSA9PiB7XG4gICAgc2VsZi5fcmVhZHkuZ28oKVxuICB9KVxuICAvLyBsb2NhbCBzdGF0ZVxuICBzZWxmLmN1cnJlbnRCbG9jayA9IG51bGxcbiAgc2VsZi5fcHJvdmlkZXJzID0gW11cbn1cblxuLy8gcHVibGljXG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihjYiA9IG5vb3Ape1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBzdGFydCBibG9jayBwb2xsaW5nXG4gIHNlbGYuX2Jsb2NrVHJhY2tlci5zdGFydCgpLnRoZW4oY2IpLmNhdGNoKGNiKVxuICBzZWxmLl9ydW5uaW5nID0gdHJ1ZVxuICBzZWxmLmVtaXQoJ3N0YXJ0Jylcbn1cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLy8gc3RvcCBibG9jayBwb2xsaW5nXG4gIHNlbGYuX2Jsb2NrVHJhY2tlci5zdG9wKClcbiAgc2VsZi5fcnVubmluZyA9IGZhbHNlXG4gIHNlbGYuZW1pdCgnc3RvcCcpXG59XG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuaXNSdW5uaW5nID0gZnVuY3Rpb24oKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHNlbGYuX3J1bm5pbmdcbn1cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5hZGRQcm92aWRlciA9IGZ1bmN0aW9uKHNvdXJjZSwgaW5kZXgpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBpZiAodHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJykge1xuICAgIHNlbGYuX3Byb3ZpZGVycy5zcGxpY2UoaW5kZXgsIDAsIHNvdXJjZSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmLl9wcm92aWRlcnMucHVzaChzb3VyY2UpXG4gIH1cbiAgc291cmNlLnNldEVuZ2luZSh0aGlzKVxufVxuXG5XZWIzUHJvdmlkZXJFbmdpbmUucHJvdG90eXBlLnJlbW92ZVByb3ZpZGVyID0gZnVuY3Rpb24oc291cmNlKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgaW5kZXggPSBzZWxmLl9wcm92aWRlcnMuaW5kZXhPZihzb3VyY2UpXG4gIGlmIChpbmRleCA8IDApIHRocm93IG5ldyBFcnJvcignUHJvdmlkZXIgbm90IGZvdW5kLicpXG4gIHNlbGYuX3Byb3ZpZGVycy5zcGxpY2UoaW5kZXgsIDEpXG59XG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKHBheWxvYWQpe1xuICB0aHJvdyBuZXcgRXJyb3IoJ1dlYjNQcm92aWRlckVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIHJlcXVlc3RzLicpXG59XG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuc2VuZEFzeW5jID0gZnVuY3Rpb24ocGF5bG9hZCwgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLl9yZWFkeS5hd2FpdChmdW5jdGlvbigpe1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcbiAgICAgIC8vIGhhbmRsZSBiYXRjaFxuICAgICAgbWFwKHBheWxvYWQsIHNlbGYuX2hhbmRsZUFzeW5jLmJpbmQoc2VsZiksIGNiKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYW5kbGUgc2luZ2xlXG4gICAgICBzZWxmLl9oYW5kbGVBc3luYyhwYXlsb2FkLCBjYilcbiAgICB9XG5cbiAgfSlcbn1cblxuLy8gcHJpdmF0ZVxuXG5XZWIzUHJvdmlkZXJFbmdpbmUucHJvdG90eXBlLl9oYW5kbGVBc3luYyA9IGZ1bmN0aW9uKHBheWxvYWQsIGZpbmlzaGVkKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgY3VycmVudFByb3ZpZGVyID0gLTFcbiAgdmFyIHJlc3VsdCA9IG51bGxcbiAgdmFyIGVycm9yID0gbnVsbFxuXG4gIHZhciBzdGFjayA9IFtdXG5cbiAgbmV4dCgpXG5cbiAgZnVuY3Rpb24gbmV4dChhZnRlcikge1xuICAgIGN1cnJlbnRQcm92aWRlciArPSAxXG4gICAgc3RhY2sudW5zaGlmdChhZnRlcilcblxuICAgIC8vIEJ1YmJsZWQgZG93biBhcyBmYXIgYXMgd2UgY291bGQgZ28sIGFuZCB0aGUgcmVxdWVzdCB3YXNuJ3RcbiAgICAvLyBoYW5kbGVkLiBSZXR1cm4gYW4gZXJyb3IuXG4gICAgaWYgKGN1cnJlbnRQcm92aWRlciA+PSBzZWxmLl9wcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICBlbmQobmV3IEVycm9yKCdSZXF1ZXN0IGZvciBtZXRob2QgXCInICsgcGF5bG9hZC5tZXRob2QgKyAnXCIgbm90IGhhbmRsZWQgYnkgYW55IHN1YnByb3ZpZGVyLiBQbGVhc2UgY2hlY2sgeW91ciBzdWJwcm92aWRlciBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSB0aGlzIG1ldGhvZCBpcyBoYW5kbGVkLicpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcHJvdmlkZXIgPSBzZWxmLl9wcm92aWRlcnNbY3VycmVudFByb3ZpZGVyXVxuICAgICAgICBwcm92aWRlci5oYW5kbGVSZXF1ZXN0KHBheWxvYWQsIG5leHQsIGVuZClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZW5kKGUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kKF9lcnJvciwgX3Jlc3VsdCkge1xuICAgIGVycm9yID0gX2Vycm9yXG4gICAgcmVzdWx0ID0gX3Jlc3VsdFxuXG4gICAgZWFjaFNlcmllcyhzdGFjaywgZnVuY3Rpb24oZm4sIGNhbGxiYWNrKSB7XG5cbiAgICAgIGlmIChmbikge1xuICAgICAgICBmbihlcnJvciwgcmVzdWx0LCBjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdDT01QTEVURUQ6JywgcGF5bG9hZClcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdSRVNVTFQ6ICcsIHJlc3VsdClcblxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHtcbiAgICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICAgIGpzb25ycGM6IHBheWxvYWQuanNvbnJwYyxcbiAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgcmVzdWx0T2JqLmVycm9yID0ge1xuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLnN0YWNrIHx8IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IsXG4gICAgICAgICAgY29kZTogLTMyMDAwXG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzcG9uZCB3aXRoIGJvdGggZXJyb3IgZm9ybWF0c1xuICAgICAgICBmaW5pc2hlZChlcnJvciwgcmVzdWx0T2JqKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluaXNoZWQobnVsbCwgcmVzdWx0T2JqKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLy9cbi8vIGZyb20gcmVtb3RlLWRhdGFcbi8vXG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuX3NldEN1cnJlbnRCbG9jayA9IGZ1bmN0aW9uKGJsb2NrKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgc2VsZi5jdXJyZW50QmxvY2sgPSBibG9ja1xuICBzZWxmLmVtaXQoJ2Jsb2NrJywgYmxvY2spXG59XG5cbi8vIHV0aWxcblxuZnVuY3Rpb24gdG9CdWZmZXJCbG9jayAoanNvbkJsb2NrKSB7XG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiAgICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2subnVtYmVyKSxcbiAgICBoYXNoOiAgICAgICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5oYXNoKSxcbiAgICBwYXJlbnRIYXNoOiAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5wYXJlbnRIYXNoKSxcbiAgICBub25jZTogICAgICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5ub25jZSksXG4gICAgbWl4SGFzaDogICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2subWl4SGFzaCksXG4gICAgc2hhM1VuY2xlczogICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2suc2hhM1VuY2xlcyksXG4gICAgbG9nc0Jsb29tOiAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2subG9nc0Jsb29tKSxcbiAgICB0cmFuc2FjdGlvbnNSb290OiBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay50cmFuc2FjdGlvbnNSb290KSxcbiAgICBzdGF0ZVJvb3Q6ICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5zdGF0ZVJvb3QpLFxuICAgIHJlY2VpcHRzUm9vdDogICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnJlY2VpcHRSb290IHx8IGpzb25CbG9jay5yZWNlaXB0c1Jvb3QpLFxuICAgIG1pbmVyOiAgICAgICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLm1pbmVyKSxcbiAgICBkaWZmaWN1bHR5OiAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5kaWZmaWN1bHR5KSxcbiAgICB0b3RhbERpZmZpY3VsdHk6ICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay50b3RhbERpZmZpY3VsdHkpLFxuICAgIHNpemU6ICAgICAgICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnNpemUpLFxuICAgIGV4dHJhRGF0YTogICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLmV4dHJhRGF0YSksXG4gICAgZ2FzTGltaXQ6ICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2suZ2FzTGltaXQpLFxuICAgIGdhc1VzZWQ6ICAgICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLmdhc1VzZWQpLFxuICAgIHRpbWVzdGFtcDogICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnRpbWVzdGFtcCksXG4gICAgdHJhbnNhY3Rpb25zOiAgICAganNvbkJsb2NrLnRyYW5zYWN0aW9ucyxcbiAgfVxufVxuIiwiY29uc3QgeGhyID0gcHJvY2Vzcy5icm93c2VyID8gcmVxdWlyZSgneGhyJykgOiByZXF1aXJlKCdyZXF1ZXN0JylcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzXG5jb25zdCBjcmVhdGVQYXlsb2FkID0gcmVxdWlyZSgnLi4vdXRpbC9jcmVhdGUtcGF5bG9hZC5qcycpXG5jb25zdCBTdWJwcm92aWRlciA9IHJlcXVpcmUoJy4vc3VicHJvdmlkZXIuanMnKVxuY29uc3QgSnNvblJwY0Vycm9yID0gcmVxdWlyZSgnanNvbi1ycGMtZXJyb3InKVxuXG5cbm1vZHVsZS5leHBvcnRzID0gUnBjU291cmNlXG5cbmluaGVyaXRzKFJwY1NvdXJjZSwgU3VicHJvdmlkZXIpXG5cbmZ1bmN0aW9uIFJwY1NvdXJjZShvcHRzKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYucnBjVXJsID0gb3B0cy5ycGNVcmxcbn1cblxuUnBjU291cmNlLnByb3RvdHlwZS5oYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocGF5bG9hZCwgbmV4dCwgZW5kKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgdGFyZ2V0VXJsID0gc2VsZi5ycGNVcmxcblxuICAvLyBvdmVyd3JpdGUgaWQgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBjb25jdXJyZW50IHVzZXJzXG4gIGxldCBuZXdQYXlsb2FkID0gY3JlYXRlUGF5bG9hZChwYXlsb2FkKVxuXG4gIHhocih7XG4gICAgdXJpOiB0YXJnZXRVcmwsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuZXdQYXlsb2FkKSxcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxuICAgIHRpbWVvdXQ6IDIwMDAwLFxuICB9LCBmdW5jdGlvbihlcnIsIHJlcywgYm9keSkge1xuICAgIGlmIChlcnIpIHJldHVybiBlbmQobmV3IEpzb25ScGNFcnJvci5JbnRlcm5hbEVycm9yKGVycikpXG5cbiAgICAvLyBjaGVjayBmb3IgZXJyb3IgY29kZVxuICAgIHN3aXRjaCAocmVzLnN0YXR1c0NvZGUpIHtcbiAgICAgIGNhc2UgNDA1OlxuICAgICAgICByZXR1cm4gZW5kKG5ldyBKc29uUnBjRXJyb3IuTWV0aG9kTm90Rm91bmQoKSlcbiAgICAgIGNhc2UgNTA0OiAvLyBHYXRld2F5IHRpbWVvdXRcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbigpe1xuICAgICAgICAgIGxldCBtc2cgPSBgR2F0ZXdheSB0aW1lb3V0LiBUaGUgcmVxdWVzdCB0b29rIHRvbyBsb25nIHRvIHByb2Nlc3MuIGBcbiAgICAgICAgICBtc2cgKz0gYFRoaXMgY2FuIGhhcHBlbiB3aGVuIHF1ZXJ5aW5nIGxvZ3Mgb3ZlciB0b28gd2lkZSBhIGJsb2NrIHJhbmdlLmBcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IobXNnKVxuICAgICAgICAgIHJldHVybiBlbmQobmV3IEpzb25ScGNFcnJvci5JbnRlcm5hbEVycm9yKGVycikpXG4gICAgICAgIH0pKClcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPSAyMDApIHtcbiAgICAgICAgICByZXR1cm4gZW5kKG5ldyBKc29uUnBjRXJyb3IuSW50ZXJuYWxFcnJvcihyZXMuYm9keSkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwYXJzZSByZXNwb25zZVxuICAgIGxldCBkYXRhXG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGJvZHkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjaylcbiAgICAgIHJldHVybiBlbmQobmV3IEpzb25ScGNFcnJvci5JbnRlcm5hbEVycm9yKGVycikpXG4gICAgfVxuICAgIGlmIChkYXRhLmVycm9yKSByZXR1cm4gZW5kKGRhdGEuZXJyb3IpXG5cbiAgICBlbmQobnVsbCwgZGF0YS5yZXN1bHQpXG4gIH0pXG5cbn1cbiIsImNvbnN0IEJhY2tvZmYgPSByZXF1aXJlKCdiYWNrb2ZmJylcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0c1xuY29uc3QgV2ViU29ja2V0ID0gZ2xvYmFsLldlYlNvY2tldCB8fCByZXF1aXJlKCd3cycpXG5jb25zdCBTdWJwcm92aWRlciA9IHJlcXVpcmUoJy4vc3VicHJvdmlkZXInKVxuY29uc3QgY3JlYXRlUGF5bG9hZCA9IHJlcXVpcmUoJy4uL3V0aWwvY3JlYXRlLXBheWxvYWQnKVxuXG5jbGFzcyBXZWJzb2NrZXRTdWJwcm92aWRlclxuIGV4dGVuZHMgU3VicHJvdmlkZXIge1xuICBjb25zdHJ1Y3Rvcih7IHJwY1VybCwgZGVidWcsIG9yaWdpbiB9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gaW5oZXJpdCBmcm9tIEV2ZW50RW1pdHRlclxuICAgIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG4gICAgICBfYmFja29mZjoge1xuICAgICAgICB2YWx1ZTogQmFja29mZi5leHBvbmVudGlhbCh7XG4gICAgICAgICAgcmFuZG9taXNhdGlvbkZhY3RvcjogMC4yLFxuICAgICAgICAgIG1heERlbGF5OiA1MDAwXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgX2Nvbm5lY3RUaW1lOiB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIF9sb2c6IHtcbiAgICAgICAgdmFsdWU6IGRlYnVnXG4gICAgICAgICAgPyAoLi4uYXJncykgPT4gY29uc29sZS5pbmZvLmFwcGx5KGNvbnNvbGUsIFsnW1dTUHJvdmlkZXJdJywgLi4uYXJnc10pXG4gICAgICAgICAgOiAoKSA9PiB7IH1cbiAgICAgIH0sXG4gICAgICBfb3JpZ2luOiB7XG4gICAgICAgIHZhbHVlOiBvcmlnaW5cbiAgICAgIH0sXG4gICAgICBfcGVuZGluZ1JlcXVlc3RzOiB7XG4gICAgICAgIHZhbHVlOiBuZXcgTWFwKClcbiAgICAgIH0sXG4gICAgICBfc29ja2V0OiB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIF91bmhhbmRsZWRSZXF1ZXN0czoge1xuICAgICAgICB2YWx1ZTogW11cbiAgICAgIH0sXG4gICAgICBfdXJsOiB7XG4gICAgICAgIHZhbHVlOiBycGNVcmxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5faGFuZGxlU29ja2V0Q2xvc2UgPSB0aGlzLl9oYW5kbGVTb2NrZXRDbG9zZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5faGFuZGxlU29ja2V0TWVzc2FnZSA9IHRoaXMuX2hhbmRsZVNvY2tldE1lc3NhZ2UuYmluZCh0aGlzKVxuICAgIHRoaXMuX2hhbmRsZVNvY2tldE9wZW4gPSB0aGlzLl9oYW5kbGVTb2NrZXRPcGVuLmJpbmQodGhpcylcblxuICAgIC8vIENhbGxlZCB3aGVuIGEgYmFja29mZiB0aW1lb3V0IGhhcyBmaW5pc2hlZC4gVGltZSB0byB0cnkgcmVjb25uZWN0aW5nLlxuICAgIHRoaXMuX2JhY2tvZmYub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgdGhpcy5fb3BlblNvY2tldCgpXG4gICAgfSlcblxuICAgIHRoaXMuX29wZW5Tb2NrZXQoKVxuICB9XG5cbiAgaGFuZGxlUmVxdWVzdChwYXlsb2FkLCBuZXh0LCBlbmQpIHtcbiAgICBpZiAoIXRoaXMuX3NvY2tldCB8fCB0aGlzLl9zb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMuX3VuaGFuZGxlZFJlcXVlc3RzLnB1c2goQXJyYXkuZnJvbShhcmd1bWVudHMpKVxuICAgICAgdGhpcy5fbG9nKCdTb2NrZXQgbm90IG9wZW4uIFJlcXVlc3QgcXVldWVkLicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nUmVxdWVzdHMuc2V0KHBheWxvYWQuaWQsIFtwYXlsb2FkLCBlbmRdKVxuXG4gICAgY29uc3QgbmV3UGF5bG9hZCA9IGNyZWF0ZVBheWxvYWQocGF5bG9hZClcbiAgICBkZWxldGUgbmV3UGF5bG9hZC5vcmlnaW5cblxuICAgIHRoaXMuX3NvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG5ld1BheWxvYWQpKVxuICAgIHRoaXMuX2xvZyhgU2VudDogJHtuZXdQYXlsb2FkLm1ldGhvZH0gIyR7bmV3UGF5bG9hZC5pZH1gKVxuICB9XG5cbiAgX2hhbmRsZVNvY2tldENsb3NlKHsgcmVhc29uLCBjb2RlIH0pIHtcbiAgICB0aGlzLl9sb2coYFNvY2tldCBjbG9zZWQsIGNvZGUgJHtjb2RlfSAoJHtyZWFzb24gfHwgJ25vIHJlYXNvbid9KWApXG4gICAgLy8gSWYgdGhlIHNvY2tldCBoYXMgYmVlbiBvcGVuIGZvciBsb25nZXIgdGhhbiA1IHNlY29uZHMsIHJlc2V0IHRoZSBiYWNrb2ZmXG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RUaW1lICYmIERhdGUubm93KCkgLSB0aGlzLl9jb25uZWN0VGltZSA+IDUwMDApIHtcbiAgICAgIHRoaXMuX2JhY2tvZmYucmVzZXQoKVxuICAgIH1cblxuICAgIHRoaXMuX3NvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuX2hhbmRsZVNvY2tldENsb3NlKVxuICAgIHRoaXMuX3NvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5faGFuZGxlU29ja2V0TWVzc2FnZSlcbiAgICB0aGlzLl9zb2NrZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuX2hhbmRsZVNvY2tldE9wZW4pXG5cbiAgICB0aGlzLl9zb2NrZXQgPSBudWxsXG4gICAgdGhpcy5fYmFja29mZi5iYWNrb2ZmKClcbiAgfVxuXG4gIF9oYW5kbGVTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICBsZXQgcGF5bG9hZFxuXG4gICAgdHJ5IHtcbiAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2coJ1JlY2VpdmVkIGEgbWVzc2FnZSB0aGF0IGlzIG5vdCB2YWxpZCBKU09OOicsIHBheWxvYWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBzZXJ2ZXItc2VudCBub3RpZmljYXRpb25cbiAgICBpZiAocGF5bG9hZC5pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0KCdkYXRhJywgbnVsbCwgcGF5bG9hZClcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgaWYgbWlzc2luZ1xuICAgIGlmICghdGhpcy5fcGVuZGluZ1JlcXVlc3RzLmhhcyhwYXlsb2FkLmlkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV0cmlldmUgcGF5bG9hZCArIGFyZ3VtZW50c1xuICAgIGNvbnN0IFtvcmlnaW5hbFJlcSwgZW5kXSA9IHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5nZXQocGF5bG9hZC5pZClcbiAgICB0aGlzLl9wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHBheWxvYWQuaWQpXG5cbiAgICB0aGlzLl9sb2coYFJlY2VpdmVkOiAke29yaWdpbmFsUmVxLm1ldGhvZH0gIyR7cGF5bG9hZC5pZH1gKVxuXG4gICAgLy8gZm9yd2FyZCByZXNwb25zZVxuICAgIGlmIChwYXlsb2FkLmVycm9yKSB7XG4gICAgICByZXR1cm4gZW5kKG5ldyBFcnJvcihwYXlsb2FkLmVycm9yLm1lc3NhZ2UpKVxuICAgIH1cbiAgICBlbmQobnVsbCwgcGF5bG9hZC5yZXN1bHQpXG4gIH1cblxuICBfaGFuZGxlU29ja2V0T3BlbigpIHtcbiAgICB0aGlzLl9sb2coJ1NvY2tldCBvcGVuLicpXG4gICAgdGhpcy5fY29ubmVjdFRpbWUgPSBEYXRlLm5vdygpXG5cbiAgICAvLyBBbnkgcGVuZGluZyByZXF1ZXN0cyBuZWVkIHRvIGJlIHJlc2VudCBiZWNhdXNlIG91ciBzZXNzaW9uIHdhcyBsb3N0XG4gICAgLy8gYW5kIHdpbGwgbm90IGdldCByZXNwb25zZXMgZm9yIHRoZW0gaW4gb3VyIG5ldyBzZXNzaW9uLlxuICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5mb3JFYWNoKChbcGF5bG9hZCwgZW5kXSkgPT4ge1xuICAgICAgdGhpcy5fdW5oYW5kbGVkUmVxdWVzdHMucHVzaChbcGF5bG9hZCwgbnVsbCwgZW5kXSlcbiAgICB9KVxuICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5jbGVhcigpXG5cbiAgICBjb25zdCB1bmhhbmRsZWRSZXF1ZXN0cyA9IHRoaXMuX3VuaGFuZGxlZFJlcXVlc3RzLnNwbGljZSgwLCB0aGlzLl91bmhhbmRsZWRSZXF1ZXN0cy5sZW5ndGgpXG4gICAgdW5oYW5kbGVkUmVxdWVzdHMuZm9yRWFjaChyZXF1ZXN0ID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdC5hcHBseSh0aGlzLCByZXF1ZXN0KVxuICAgIH0pXG4gIH1cblxuICBfb3BlblNvY2tldCgpIHtcbiAgICB0aGlzLl9sb2coJ09wZW5pbmcgc29ja2V0Li4uJylcbiAgICB0aGlzLl9zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHRoaXMuX3VybCwgW10sIHRoaXMuX29yaWdpbiA/IHtoZWFkZXJzOntvcmlnaW46IHRoaXMuX29yaWdpbn19IDoge30pXG4gICAgdGhpcy5fc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy5faGFuZGxlU29ja2V0Q2xvc2UpXG4gICAgdGhpcy5fc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVTb2NrZXRNZXNzYWdlKVxuICAgIHRoaXMuX3NvY2tldC5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlU29ja2V0T3BlbilcbiAgfVxufVxuXG4vLyBtdWx0aXBsZSBpbmhlcml0YW5jZVxuT2JqZWN0LmFzc2lnbihXZWJzb2NrZXRTdWJwcm92aWRlci5wcm90b3R5cGUsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUpXG5cbm1vZHVsZS5leHBvcnRzID0gV2Vic29ja2V0U3VicHJvdmlkZXJcbiIsIi8qXG4gKiBFbXVsYXRlICdldGhfYWNjb3VudHMnIC8gJ2V0aF9zZW5kVHJhbnNhY3Rpb24nIHVzaW5nICdldGhfc2VuZFJhd1RyYW5zYWN0aW9uJ1xuICpcbiAqIFRoZSB0d28gY2FsbGJhY2tzIGEgdXNlciBuZWVkcyB0byBpbXBsZW1lbnQgYXJlOlxuICogLSBnZXRBY2NvdW50cygpIC0tIGFycmF5IG9mIGFkZHJlc3NlcyBzdXBwb3J0ZWRcbiAqIC0gc2lnblRyYW5zYWN0aW9uKHR4KSAtLSBzaWduIGEgcmF3IHRyYW5zYWN0aW9uIG9iamVjdFxuICovXG5cbmNvbnN0IHdhdGVyZmFsbCA9IHJlcXVpcmUoJ2FzeW5jL3dhdGVyZmFsbCcpXG5jb25zdCBwYXJhbGxlbCA9IHJlcXVpcmUoJ2FzeW5jL3BhcmFsbGVsJylcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzXG5jb25zdCBldGhVdGlsID0gcmVxdWlyZSgnZXRoZXJldW1qcy11dGlsJylcbmNvbnN0IHNpZ1V0aWwgPSByZXF1aXJlKCdldGgtc2lnLXV0aWwnKVxuY29uc3QgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxuY29uc3QgU2VtYXBob3JlID0gcmVxdWlyZSgnc2VtYXBob3JlJylcbmNvbnN0IFN1YnByb3ZpZGVyID0gcmVxdWlyZSgnLi9zdWJwcm92aWRlci5qcycpXG5jb25zdCBlc3RpbWF0ZUdhcyA9IHJlcXVpcmUoJy4uL3V0aWwvZXN0aW1hdGUtZ2FzLmpzJylcbmNvbnN0IGhleFJlZ2V4ID0gL15bMC05QS1GYS1mXSskL2dcblxubW9kdWxlLmV4cG9ydHMgPSBIb29rZWRXYWxsZXRTdWJwcm92aWRlclxuXG4vLyBoYW5kbGVzIHRoZSBmb2xsb3dpbmcgUlBDIG1ldGhvZHM6XG4vLyAgIGV0aF9jb2luYmFzZVxuLy8gICBldGhfYWNjb3VudHNcbi8vICAgZXRoX3NlbmRUcmFuc2FjdGlvblxuLy8gICBldGhfc2lnblxuLy8gICBldGhfc2lnblR5cGVkRGF0YVxuLy8gICBwZXJzb25hbF9zaWduXG4vLyAgIHBlcnNvbmFsX2VjUmVjb3ZlclxuLy8gICBwYXJpdHlfcG9zdFRyYW5zYWN0aW9uXG4vLyAgIHBhcml0eV9jaGVja1JlcXVlc3Rcbi8vICAgcGFyaXR5X2RlZmF1bHRBY2NvdW50XG5cbi8vXG4vLyBUeCBTaWduYXR1cmUgRmxvd1xuLy9cbi8vIGhhbmRsZVJlcXVlc3Q6IGV0aF9zZW5kVHJhbnNhY3Rpb25cbi8vICAgdmFsaWRhdGVUcmFuc2FjdGlvbiAoYmFzaWMgdmFsaWRpdHkgY2hlY2spXG4vLyAgICAgdmFsaWRhdGVTZW5kZXIgKGNoZWNrcyB0aGF0IHNlbmRlciBpcyBpbiBhY2NvdW50cylcbi8vICAgcHJvY2Vzc1RyYW5zYWN0aW9uIChzaWduIHR4IGFuZCBzdWJtaXQgdG8gbmV0d29yaylcbi8vICAgICBhcHByb3ZlVHJhbnNhY3Rpb24gKFVJIGFwcHJvdmFsIGhvb2spXG4vLyAgICAgY2hlY2tBcHByb3ZhbFxuLy8gICAgIGZpbmFsaXplQW5kU3VibWl0VHggKHR4IHNpZ25pbmcpXG4vLyAgICAgICBub25jZUxvY2sudGFrZSAoYm90dGxlIG5lY2sgdG8gZW5zdXJlIGF0b21pYyBub25jZSlcbi8vICAgICAgICAgZmlsbEluVHhFeHRyYXMgKHNldCBmYWxsYmFjayBnYXNQcmljZSwgbm9uY2UsIGV0Yylcbi8vICAgICAgICAgc2lnblRyYW5zYWN0aW9uIChwZXJmb3JtIHRoZSBzaWduYXR1cmUpXG4vLyAgICAgICAgIHB1Ymxpc2hUcmFuc2FjdGlvbiAocHVibGlzaCBzaWduZWQgdHggdG8gbmV0d29yaylcbi8vXG5cblxuaW5oZXJpdHMoSG9va2VkV2FsbGV0U3VicHJvdmlkZXIsIFN1YnByb3ZpZGVyKVxuXG5mdW5jdGlvbiBIb29rZWRXYWxsZXRTdWJwcm92aWRlcihvcHRzKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLy8gY29udHJvbCBmbG93XG4gIHNlbGYubm9uY2VMb2NrID0gU2VtYXBob3JlKDEpXG5cbiAgLy8gZGF0YSBsb29rdXBcbiAgaWYgKG9wdHMuZ2V0QWNjb3VudHMpIHNlbGYuZ2V0QWNjb3VudHMgPSBvcHRzLmdldEFjY291bnRzXG4gIC8vIGhpZ2ggbGV2ZWwgb3ZlcnJpZGVcbiAgaWYgKG9wdHMucHJvY2Vzc1RyYW5zYWN0aW9uKSBzZWxmLnByb2Nlc3NUcmFuc2FjdGlvbiA9IG9wdHMucHJvY2Vzc1RyYW5zYWN0aW9uXG4gIGlmIChvcHRzLnByb2Nlc3NNZXNzYWdlKSBzZWxmLnByb2Nlc3NNZXNzYWdlID0gb3B0cy5wcm9jZXNzTWVzc2FnZVxuICBpZiAob3B0cy5wcm9jZXNzUGVyc29uYWxNZXNzYWdlKSBzZWxmLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2UgPSBvcHRzLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2VcbiAgaWYgKG9wdHMucHJvY2Vzc1R5cGVkTWVzc2FnZSkgc2VsZi5wcm9jZXNzVHlwZWRNZXNzYWdlID0gb3B0cy5wcm9jZXNzVHlwZWRNZXNzYWdlXG4gIC8vIGFwcHJvdmFsIGhvb2tzXG4gIHNlbGYuYXBwcm92ZVRyYW5zYWN0aW9uID0gb3B0cy5hcHByb3ZlVHJhbnNhY3Rpb24gfHwgc2VsZi5hdXRvQXBwcm92ZVxuICBzZWxmLmFwcHJvdmVNZXNzYWdlID0gb3B0cy5hcHByb3ZlTWVzc2FnZSB8fCBzZWxmLmF1dG9BcHByb3ZlXG4gIHNlbGYuYXBwcm92ZVBlcnNvbmFsTWVzc2FnZSA9IG9wdHMuYXBwcm92ZVBlcnNvbmFsTWVzc2FnZSB8fCBzZWxmLmF1dG9BcHByb3ZlXG4gIHNlbGYuYXBwcm92ZVR5cGVkTWVzc2FnZSA9IG9wdHMuYXBwcm92ZVR5cGVkTWVzc2FnZSB8fCBzZWxmLmF1dG9BcHByb3ZlXG4gIC8vIGFjdHVhbGx5IHBlcmZvcm0gdGhlIHNpZ25hdHVyZVxuICBpZiAob3B0cy5zaWduVHJhbnNhY3Rpb24pIHNlbGYuc2lnblRyYW5zYWN0aW9uID0gb3B0cy5zaWduVHJhbnNhY3Rpb24gIHx8IG11c3RQcm92aWRlSW5Db25zdHJ1Y3Rvcignc2lnblRyYW5zYWN0aW9uJylcbiAgaWYgKG9wdHMuc2lnbk1lc3NhZ2UpIHNlbGYuc2lnbk1lc3NhZ2UgPSBvcHRzLnNpZ25NZXNzYWdlICB8fCBtdXN0UHJvdmlkZUluQ29uc3RydWN0b3IoJ3NpZ25NZXNzYWdlJylcbiAgaWYgKG9wdHMuc2lnblBlcnNvbmFsTWVzc2FnZSkgc2VsZi5zaWduUGVyc29uYWxNZXNzYWdlID0gb3B0cy5zaWduUGVyc29uYWxNZXNzYWdlICB8fCBtdXN0UHJvdmlkZUluQ29uc3RydWN0b3IoJ3NpZ25QZXJzb25hbE1lc3NhZ2UnKVxuICBpZiAob3B0cy5zaWduVHlwZWRNZXNzYWdlKSBzZWxmLnNpZ25UeXBlZE1lc3NhZ2UgPSBvcHRzLnNpZ25UeXBlZE1lc3NhZ2UgIHx8IG11c3RQcm92aWRlSW5Db25zdHJ1Y3Rvcignc2lnblR5cGVkTWVzc2FnZScpXG4gIGlmIChvcHRzLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZSkgc2VsZi5yZWNvdmVyUGVyc29uYWxTaWduYXR1cmUgPSBvcHRzLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZVxuICAvLyBwdWJsaXNoIHRvIG5ldHdvcmtcbiAgaWYgKG9wdHMucHVibGlzaFRyYW5zYWN0aW9uKSBzZWxmLnB1Ymxpc2hUcmFuc2FjdGlvbiA9IG9wdHMucHVibGlzaFRyYW5zYWN0aW9uXG4gIC8vIGdhcyBvcHRpb25zXG4gIHNlbGYuZXN0aW1hdGVHYXMgPSBvcHRzLmVzdGltYXRlR2FzIHx8IHNlbGYuZXN0aW1hdGVHYXNcbiAgc2VsZi5nZXRHYXNQcmljZSA9IG9wdHMuZ2V0R2FzUHJpY2UgfHwgc2VsZi5nZXRHYXNQcmljZVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUuaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHBheWxvYWQsIG5leHQsIGVuZCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuX3Bhcml0eVJlcXVlc3RzID0ge31cbiAgc2VsZi5fcGFyaXR5UmVxdWVzdENvdW50ID0gMFxuXG4gIC8vIHN3aXRjaCBzdGF0ZW1lbnQgaXMgbm90IGJsb2NrIHNjb3BlZFxuICAvLyBzcCB3ZSBjYW50IHJlcGVhdCB2YXIgZGVjbGFyYXRpb25zXG4gIGxldCB0eFBhcmFtcywgbXNnUGFyYW1zLCBleHRyYVBhcmFtc1xuICBsZXQgbWVzc2FnZSwgYWRkcmVzc1xuXG4gIHN3aXRjaChwYXlsb2FkLm1ldGhvZCkge1xuXG4gICAgY2FzZSAnZXRoX2NvaW5iYXNlJzpcbiAgICAgIC8vIHByb2Nlc3Mgbm9ybWFsbHlcbiAgICAgIHNlbGYuZ2V0QWNjb3VudHMoZnVuY3Rpb24oZXJyLCBhY2NvdW50cyl7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBlbmQoZXJyKVxuICAgICAgICBsZXQgcmVzdWx0ID0gYWNjb3VudHNbMF0gfHwgbnVsbFxuICAgICAgICBlbmQobnVsbCwgcmVzdWx0KVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAnZXRoX2FjY291bnRzJzpcbiAgICAgIC8vIHByb2Nlc3Mgbm9ybWFsbHlcbiAgICAgIHNlbGYuZ2V0QWNjb3VudHMoZnVuY3Rpb24oZXJyLCBhY2NvdW50cyl7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBlbmQoZXJyKVxuICAgICAgICBlbmQobnVsbCwgYWNjb3VudHMpXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdldGhfc2VuZFRyYW5zYWN0aW9uJzpcbiAgICAgIHR4UGFyYW1zID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgIHdhdGVyZmFsbChbXG4gICAgICAgIChjYikgPT4gc2VsZi52YWxpZGF0ZVRyYW5zYWN0aW9uKHR4UGFyYW1zLCBjYiksXG4gICAgICAgIChjYikgPT4gc2VsZi5wcm9jZXNzVHJhbnNhY3Rpb24odHhQYXJhbXMsIGNiKSxcbiAgICAgIF0sIGVuZClcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAnZXRoX3NpZ25UcmFuc2FjdGlvbic6XG4gICAgICB0eFBhcmFtcyA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICB3YXRlcmZhbGwoW1xuICAgICAgICAoY2IpID0+IHNlbGYudmFsaWRhdGVUcmFuc2FjdGlvbih0eFBhcmFtcywgY2IpLFxuICAgICAgICAoY2IpID0+IHNlbGYucHJvY2Vzc1NpZ25UcmFuc2FjdGlvbih0eFBhcmFtcywgY2IpLFxuICAgICAgXSwgZW5kKVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdldGhfc2lnbic6XG4gICAgICAvLyBwcm9jZXNzIG5vcm1hbGx5XG4gICAgICBhZGRyZXNzID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgIG1lc3NhZ2UgPSBwYXlsb2FkLnBhcmFtc1sxXVxuICAgICAgLy8gbm9uLXN0YW5kYXJkIFwiZXh0cmFQYXJhbXNcIiB0byBiZSBhcHBlbmRlZCB0byBvdXIgXCJtc2dQYXJhbXNcIiBvYmpcbiAgICAgIC8vIGdvb2QgcGxhY2UgZm9yIG1ldGFkYXRhXG4gICAgICBleHRyYVBhcmFtcyA9IHBheWxvYWQucGFyYW1zWzJdIHx8IHt9XG4gICAgICBtc2dQYXJhbXMgPSBleHRlbmQoZXh0cmFQYXJhbXMsIHtcbiAgICAgICAgZnJvbTogYWRkcmVzcyxcbiAgICAgICAgZGF0YTogbWVzc2FnZSxcbiAgICAgIH0pXG4gICAgICB3YXRlcmZhbGwoW1xuICAgICAgICAoY2IpID0+IHNlbGYudmFsaWRhdGVNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICAgICAgICAoY2IpID0+IHNlbGYucHJvY2Vzc01lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgICBdLCBlbmQpXG4gICAgICByZXR1cm5cblxuICAgIGNhc2UgJ3BlcnNvbmFsX3NpZ24nOlxuICAgICAgcmV0dXJuIChmdW5jdGlvbigpe1xuICAgICAgICAvLyBwcm9jZXNzIG5vcm1hbGx5XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgICAgY29uc3Qgc2Vjb25kID0gcGF5bG9hZC5wYXJhbXNbMV1cblxuICAgICAgICAvLyBXZSBpbml0aWFsbHkgaW5jb3JyZWN0bHkgb3JkZXJlZCB0aGVzZSBwYXJhbWV0ZXJzLlxuICAgICAgICAvLyBUbyBncmFjZWZ1bGx5IHJlc3BlY3QgdXNlcnMgd2hvIGFkb3B0ZWQgdGhpcyBBUEkgZWFybHksXG4gICAgICAgIC8vIHdlIGFyZSBjdXJyZW50bHkgZ3JhY2VmdWxseSByZWNvdmVyaW5nIGZyb20gdGhlIHdyb25nIHBhcmFtIG9yZGVyXG4gICAgICAgIC8vIHdoZW4gaXQgaXMgY2xlYXJseSBpZGVudGlmaWFibGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoYXQgbWVhbnMgd2hlbiB0aGUgZmlyc3QgcGFyYW0gaXMgZGVmaW5pdGVseSBhbiBhZGRyZXNzLFxuICAgICAgICAvLyBhbmQgdGhlIHNlY29uZCBwYXJhbSBpcyBkZWZpbml0ZWx5IG5vdCwgYnV0IGlzIGhleC5cbiAgICAgICAgaWYgKHJlc2VtYmxlc0RhdGEoc2Vjb25kKSAmJiByZXNlbWJsZXNBZGRyZXNzKGZpcnN0KSkge1xuICAgICAgICAgIGxldCB3YXJuaW5nID0gYFRoZSBldGhfcGVyc29uYWxTaWduIG1ldGhvZCByZXF1aXJlcyBwYXJhbXMgb3JkZXJlZCBgXG4gICAgICAgICAgd2FybmluZyArPSBgW21lc3NhZ2UsIGFkZHJlc3NdLiBUaGlzIHdhcyBwcmV2aW91c2x5IGhhbmRsZWQgaW5jb3JyZWN0bHksIGBcbiAgICAgICAgICB3YXJuaW5nICs9IGBhbmQgaGFzIGJlZW4gY29ycmVjdGVkIGF1dG9tYXRpY2FsbHkuIGBcbiAgICAgICAgICB3YXJuaW5nICs9IGBQbGVhc2Ugc3dpdGNoIHRoaXMgcGFyYW0gb3JkZXIgZm9yIHNtb290aCBiZWhhdmlvciBpbiB0aGUgZnV0dXJlLmBcbiAgICAgICAgICBjb25zb2xlLndhcm4od2FybmluZylcblxuICAgICAgICAgIGFkZHJlc3MgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgICAgIG1lc3NhZ2UgPSBwYXlsb2FkLnBhcmFtc1sxXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2UgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgICAgIGFkZHJlc3MgPSBwYXlsb2FkLnBhcmFtc1sxXVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9uLXN0YW5kYXJkIFwiZXh0cmFQYXJhbXNcIiB0byBiZSBhcHBlbmRlZCB0byBvdXIgXCJtc2dQYXJhbXNcIiBvYmpcbiAgICAgICAgLy8gZ29vZCBwbGFjZSBmb3IgbWV0YWRhdGFcbiAgICAgICAgZXh0cmFQYXJhbXMgPSBwYXlsb2FkLnBhcmFtc1syXSB8fCB7fVxuICAgICAgICBtc2dQYXJhbXMgPSBleHRlbmQoZXh0cmFQYXJhbXMsIHtcbiAgICAgICAgICBmcm9tOiBhZGRyZXNzLFxuICAgICAgICAgIGRhdGE6IG1lc3NhZ2UsXG4gICAgICAgIH0pXG4gICAgICAgIHdhdGVyZmFsbChbXG4gICAgICAgICAgKGNiKSA9PiBzZWxmLnZhbGlkYXRlUGVyc29uYWxNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICAgICAgICAgIChjYikgPT4gc2VsZi5wcm9jZXNzUGVyc29uYWxNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICAgICAgICBdLCBlbmQpXG4gICAgICB9KSgpXG5cbiAgICBjYXNlICdwZXJzb25hbF9lY1JlY292ZXInOlxuICAgICAgcmV0dXJuIChmdW5jdGlvbigpeyAgICBcbiAgICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICAgIGxldCBzaWduYXR1cmUgPSBwYXlsb2FkLnBhcmFtc1sxXVxuICAgICAgICAvLyBub24tc3RhbmRhcmQgXCJleHRyYVBhcmFtc1wiIHRvIGJlIGFwcGVuZGVkIHRvIG91ciBcIm1zZ1BhcmFtc1wiIG9ialxuICAgICAgICAvLyBnb29kIHBsYWNlIGZvciBtZXRhZGF0YVxuICAgICAgICBleHRyYVBhcmFtcyA9IHBheWxvYWQucGFyYW1zWzJdIHx8IHt9XG4gICAgICAgIG1zZ1BhcmFtcyA9IGV4dGVuZChleHRyYVBhcmFtcywge1xuICAgICAgICAgIHNpZzogc2lnbmF0dXJlLFxuICAgICAgICAgIGRhdGE6IG1lc3NhZ2UsXG4gICAgICAgIH0pXG4gICAgICAgIHNlbGYucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlKG1zZ1BhcmFtcywgZW5kKVxuICAgICAgfSkoKVxuXG4gICAgY2FzZSAnZXRoX3NpZ25UeXBlZERhdGEnOlxuICAgICAgLy8gcHJvY2VzcyBub3JtYWxseVxuICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICBhZGRyZXNzID0gcGF5bG9hZC5wYXJhbXNbMV1cbiAgICAgIGV4dHJhUGFyYW1zID0gcGF5bG9hZC5wYXJhbXNbMl0gfHwge31cbiAgICAgIG1zZ1BhcmFtcyA9IGV4dGVuZChleHRyYVBhcmFtcywge1xuICAgICAgICBmcm9tOiBhZGRyZXNzLFxuICAgICAgICBkYXRhOiBtZXNzYWdlLFxuICAgICAgfSlcbiAgICAgIHdhdGVyZmFsbChbXG4gICAgICAgIChjYikgPT4gc2VsZi52YWxpZGF0ZVR5cGVkTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAgICAgKGNiKSA9PiBzZWxmLnByb2Nlc3NUeXBlZE1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgICBdLCBlbmQpXG4gICAgICByZXR1cm5cblxuICAgIGNhc2UgJ3Bhcml0eV9wb3N0VHJhbnNhY3Rpb24nOlxuICAgICAgdHhQYXJhbXMgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgc2VsZi5wYXJpdHlQb3N0VHJhbnNhY3Rpb24odHhQYXJhbXMsIGVuZClcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAncGFyaXR5X3Bvc3RTaWduJzpcbiAgICAgIGFkZHJlc3MgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzFdXG4gICAgICBzZWxmLnBhcml0eVBvc3RTaWduKGFkZHJlc3MsIG1lc3NhZ2UsIGVuZClcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAncGFyaXR5X2NoZWNrUmVxdWVzdCc6XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uKCl7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICAgIHNlbGYucGFyaXR5Q2hlY2tSZXF1ZXN0KHJlcXVlc3RJZCwgZW5kKVxuICAgICAgfSkoKVxuXG4gICAgY2FzZSAncGFyaXR5X2RlZmF1bHRBY2NvdW50JzpcbiAgICAgIHNlbGYuZ2V0QWNjb3VudHMoZnVuY3Rpb24oZXJyLCBhY2NvdW50cyl7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBlbmQoZXJyKVxuICAgICAgICBjb25zdCBhY2NvdW50ID0gYWNjb3VudHNbMF0gfHwgbnVsbFxuICAgICAgICBlbmQobnVsbCwgYWNjb3VudClcbiAgICAgIH0pXG4gICAgICByZXR1cm5cblxuICAgIGRlZmF1bHQ6XG4gICAgICBuZXh0KClcbiAgICAgIHJldHVyblxuXG4gIH1cbn1cblxuLy9cbi8vIGRhdGEgbG9va3VwXG4vL1xuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUuZ2V0QWNjb3VudHMgPSBmdW5jdGlvbihjYikge1xuICBjYihudWxsLCBbXSlcbn1cblxuXG4vL1xuLy8gXCJwcm9jZXNzXCIgaGlnaCBsZXZlbCBmbG93XG4vL1xuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucHJvY2Vzc1RyYW5zYWN0aW9uID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHdhdGVyZmFsbChbXG4gICAgKGNiKSA9PiBzZWxmLmFwcHJvdmVUcmFuc2FjdGlvbih0eFBhcmFtcywgY2IpLFxuICAgIChkaWRBcHByb3ZlLCBjYikgPT4gc2VsZi5jaGVja0FwcHJvdmFsKCd0cmFuc2FjdGlvbicsIGRpZEFwcHJvdmUsIGNiKSxcbiAgICAoY2IpID0+IHNlbGYuZmluYWxpemVBbmRTdWJtaXRUeCh0eFBhcmFtcywgY2IpLFxuICBdLCBjYilcbn1cblxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucHJvY2Vzc1NpZ25UcmFuc2FjdGlvbiA9IGZ1bmN0aW9uKHR4UGFyYW1zLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB3YXRlcmZhbGwoW1xuICAgIChjYikgPT4gc2VsZi5hcHByb3ZlVHJhbnNhY3Rpb24odHhQYXJhbXMsIGNiKSxcbiAgICAoZGlkQXBwcm92ZSwgY2IpID0+IHNlbGYuY2hlY2tBcHByb3ZhbCgndHJhbnNhY3Rpb24nLCBkaWRBcHByb3ZlLCBjYiksXG4gICAgKGNiKSA9PiBzZWxmLmZpbmFsaXplVHgodHhQYXJhbXMsIGNiKSxcbiAgXSwgY2IpXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wcm9jZXNzTWVzc2FnZSA9IGZ1bmN0aW9uKG1zZ1BhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgd2F0ZXJmYWxsKFtcbiAgICAoY2IpID0+IHNlbGYuYXBwcm92ZU1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgKGRpZEFwcHJvdmUsIGNiKSA9PiBzZWxmLmNoZWNrQXBwcm92YWwoJ21lc3NhZ2UnLCBkaWRBcHByb3ZlLCBjYiksXG4gICAgKGNiKSA9PiBzZWxmLnNpZ25NZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICBdLCBjYilcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2UgPSBmdW5jdGlvbihtc2dQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHdhdGVyZmFsbChbXG4gICAgKGNiKSA9PiBzZWxmLmFwcHJvdmVQZXJzb25hbE1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgKGRpZEFwcHJvdmUsIGNiKSA9PiBzZWxmLmNoZWNrQXBwcm92YWwoJ21lc3NhZ2UnLCBkaWRBcHByb3ZlLCBjYiksXG4gICAgKGNiKSA9PiBzZWxmLnNpZ25QZXJzb25hbE1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gIF0sIGNiKVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucHJvY2Vzc1R5cGVkTWVzc2FnZSA9IGZ1bmN0aW9uKG1zZ1BhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgd2F0ZXJmYWxsKFtcbiAgICAoY2IpID0+IHNlbGYuYXBwcm92ZVR5cGVkTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAoZGlkQXBwcm92ZSwgY2IpID0+IHNlbGYuY2hlY2tBcHByb3ZhbCgnbWVzc2FnZScsIGRpZEFwcHJvdmUsIGNiKSxcbiAgICAoY2IpID0+IHNlbGYuc2lnblR5cGVkTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgXSwgY2IpXG59XG5cbi8vXG4vLyBhcHByb3ZhbFxuLy9cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLmF1dG9BcHByb3ZlID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNiKG51bGwsIHRydWUpXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5jaGVja0FwcHJvdmFsID0gZnVuY3Rpb24odHlwZSwgZGlkQXBwcm92ZSwgY2IpIHtcbiAgY2IoIGRpZEFwcHJvdmUgPyBudWxsIDogbmV3IEVycm9yKCdVc2VyIGRlbmllZCAnK3R5cGUrJyBzaWduYXR1cmUuJykgKVxufVxuXG4vL1xuLy8gcGFyaXR5XG4vL1xuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucGFyaXR5UG9zdFRyYW5zYWN0aW9uID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgLy8gZ2V0IG5leHQgaWRcbiAgY29uc3QgY291bnQgPSBzZWxmLl9wYXJpdHlSZXF1ZXN0Q291bnRcbiAgY29uc3QgcmVxSWQgPSBgMHgke2NvdW50LnRvU3RyaW5nKDE2KX1gXG4gIHNlbGYuX3Bhcml0eVJlcXVlc3RDb3VudCsrXG5cbiAgc2VsZi5lbWl0UGF5bG9hZCh7XG4gICAgbWV0aG9kOiAnZXRoX3NlbmRUcmFuc2FjdGlvbicsXG4gICAgcGFyYW1zOiBbdHhQYXJhbXNdLFxuICB9LCBmdW5jdGlvbihlcnJvciwgcmVzKXtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHNlbGYuX3Bhcml0eVJlcXVlc3RzW3JlcUlkXSA9IHsgZXJyb3IgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHR4SGFzaCA9IHJlcy5yZXN1bHRcbiAgICBzZWxmLl9wYXJpdHlSZXF1ZXN0c1tyZXFJZF0gPSB0eEhhc2hcbiAgfSlcblxuICBjYihudWxsLCByZXFJZClcbn1cblxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucGFyaXR5UG9zdFNpZ24gPSBmdW5jdGlvbihhZGRyZXNzLCBtZXNzYWdlLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIC8vIGdldCBuZXh0IGlkXG4gIGNvbnN0IGNvdW50ID0gc2VsZi5fcGFyaXR5UmVxdWVzdENvdW50XG4gIGNvbnN0IHJlcUlkID0gYDB4JHtjb3VudC50b1N0cmluZygxNil9YFxuICBzZWxmLl9wYXJpdHlSZXF1ZXN0Q291bnQrK1xuXG4gIHNlbGYuZW1pdFBheWxvYWQoe1xuICAgIG1ldGhvZDogJ2V0aF9zaWduJyxcbiAgICBwYXJhbXM6IFthZGRyZXNzLCBtZXNzYWdlXSxcbiAgfSwgZnVuY3Rpb24oZXJyb3IsIHJlcyl7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBzZWxmLl9wYXJpdHlSZXF1ZXN0c1tyZXFJZF0gPSB7IGVycm9yIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSByZXMucmVzdWx0XG4gICAgc2VsZi5fcGFyaXR5UmVxdWVzdHNbcmVxSWRdID0gcmVzdWx0XG4gIH0pXG5cbiAgY2IobnVsbCwgcmVxSWQpXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wYXJpdHlDaGVja1JlcXVlc3QgPSBmdW5jdGlvbihyZXFJZCwgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgcmVzdWx0ID0gc2VsZi5fcGFyaXR5UmVxdWVzdHNbcmVxSWRdIHx8IG51bGxcbiAgLy8gdHggbm90IGhhbmRsZWQgeWV0XG4gIGlmICghcmVzdWx0KSByZXR1cm4gY2IobnVsbCwgbnVsbClcbiAgLy8gdHggd2FzIHJlamVjdGVkIChvciBvdGhlciBlcnJvcilcbiAgaWYgKHJlc3VsdC5lcnJvcikgcmV0dXJuIGNiKHJlc3VsdC5lcnJvcilcbiAgLy8gdHggc2VudFxuICBjYihudWxsLCByZXN1bHQpXG59XG5cbi8vXG4vLyBzaWduYXR1cmUgYW5kIHJlY292ZXJ5XG4vL1xuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlID0gZnVuY3Rpb24obXNnUGFyYW1zLCBjYikge1xuICBsZXQgc2VuZGVySGV4XG4gIHRyeSB7XG4gICAgc2VuZGVySGV4ID0gc2lnVXRpbC5yZWNvdmVyUGVyc29uYWxTaWduYXR1cmUobXNnUGFyYW1zKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gY2IoZXJyKVxuICB9XG4gIGNiKG51bGwsIHNlbmRlckhleClcbn1cblxuLy9cbi8vIHZhbGlkYXRpb25cbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS52YWxpZGF0ZVRyYW5zYWN0aW9uID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLy8gc2hvcnRjdXQ6IHVuZGVmaW5lZCBzZW5kZXIgaXMgaW52YWxpZFxuICBpZiAodHhQYXJhbXMuZnJvbSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmRlZmluZWQgYWRkcmVzcyAtIGZyb20gYWRkcmVzcyByZXF1aXJlZCB0byBzaWduIHRyYW5zYWN0aW9uLmApKVxuICBzZWxmLnZhbGlkYXRlU2VuZGVyKHR4UGFyYW1zLmZyb20sIGZ1bmN0aW9uKGVyciwgc2VuZGVySXNWYWxpZCl7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoIXNlbmRlcklzVmFsaWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIHRyYW5zYWN0aW9uIGZvciB0aGlzIGFkZHJlc3M6IFwiJHt0eFBhcmFtcy5mcm9tfVwiYCkpXG4gICAgY2IoKVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlID0gZnVuY3Rpb24obXNnUGFyYW1zLCBjYil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGlmIChtc2dQYXJhbXMuZnJvbSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmRlZmluZWQgYWRkcmVzcyAtIGZyb20gYWRkcmVzcyByZXF1aXJlZCB0byBzaWduIG1lc3NhZ2UuYCkpXG4gIHNlbGYudmFsaWRhdGVTZW5kZXIobXNnUGFyYW1zLmZyb20sIGZ1bmN0aW9uKGVyciwgc2VuZGVySXNWYWxpZCl7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoIXNlbmRlcklzVmFsaWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCIke21zZ1BhcmFtcy5mcm9tfVwiYCkpXG4gICAgY2IoKVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUudmFsaWRhdGVQZXJzb25hbE1lc3NhZ2UgPSBmdW5jdGlvbihtc2dQYXJhbXMsIGNiKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgaWYgKG1zZ1BhcmFtcy5mcm9tID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBhZGRyZXNzIC0gZnJvbSBhZGRyZXNzIHJlcXVpcmVkIHRvIHNpZ24gcGVyc29uYWwgbWVzc2FnZS5gKSlcbiAgaWYgKG1zZ1BhcmFtcy5kYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBtZXNzYWdlIC0gbWVzc2FnZSByZXF1aXJlZCB0byBzaWduIHBlcnNvbmFsIG1lc3NhZ2UuYCkpXG4gIGlmICghaXNWYWxpZEhleChtc2dQYXJhbXMuZGF0YSkpIHJldHVybiBjYihuZXcgRXJyb3IoYEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyIC0gdmFsaWRhdGVNZXNzYWdlIC0gbWVzc2FnZSB3YXMgbm90IGVuY29kZWQgYXMgaGV4LmApKVxuICBzZWxmLnZhbGlkYXRlU2VuZGVyKG1zZ1BhcmFtcy5mcm9tLCBmdW5jdGlvbihlcnIsIHNlbmRlcklzVmFsaWQpe1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKCFzZW5kZXJJc1ZhbGlkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmtub3duIGFkZHJlc3MgLSB1bmFibGUgdG8gc2lnbiBtZXNzYWdlIGZvciB0aGlzIGFkZHJlc3M6IFwiJHttc2dQYXJhbXMuZnJvbX1cImApKVxuICAgIGNiKClcbiAgfSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnZhbGlkYXRlVHlwZWRNZXNzYWdlID0gZnVuY3Rpb24obXNnUGFyYW1zLCBjYil7XG4gIGlmIChtc2dQYXJhbXMuZnJvbSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmRlZmluZWQgYWRkcmVzcyAtIGZyb20gYWRkcmVzcyByZXF1aXJlZCB0byBzaWduIHR5cGVkIGRhdGEuYCkpXG4gIGlmIChtc2dQYXJhbXMuZGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmRlZmluZWQgZGF0YSAtIG1lc3NhZ2UgcmVxdWlyZWQgdG8gc2lnbiB0eXBlZCBkYXRhLmApKVxuICB0aGlzLnZhbGlkYXRlU2VuZGVyKG1zZ1BhcmFtcy5mcm9tLCBmdW5jdGlvbihlcnIsIHNlbmRlcklzVmFsaWQpe1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKCFzZW5kZXJJc1ZhbGlkKSByZXR1cm4gY2IobmV3IEVycm9yKGBVbmtub3duIGFkZHJlc3MgLSB1bmFibGUgdG8gc2lnbiBtZXNzYWdlIGZvciB0aGlzIGFkZHJlc3M6IFwiJHttc2dQYXJhbXMuZnJvbX1cImApKVxuICAgIGNiKClcbiAgfSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnZhbGlkYXRlU2VuZGVyID0gZnVuY3Rpb24oc2VuZGVyQWRkcmVzcywgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBzaG9ydGN1dDogdW5kZWZpbmVkIHNlbmRlciBpcyBpbnZhbGlkXG4gIGlmICghc2VuZGVyQWRkcmVzcykgcmV0dXJuIGNiKG51bGwsIGZhbHNlKVxuICBzZWxmLmdldEFjY291bnRzKGZ1bmN0aW9uKGVyciwgYWNjb3VudHMpe1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3Qgc2VuZGVySXNWYWxpZCA9IChhY2NvdW50cy5tYXAodG9Mb3dlckNhc2UpLmluZGV4T2Yoc2VuZGVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpXG4gICAgY2IobnVsbCwgc2VuZGVySXNWYWxpZClcbiAgfSlcbn1cblxuLy9cbi8vIHR4IGhlbHBlcnNcbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5maW5hbGl6ZUFuZFN1Ym1pdFR4ID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8vIGNhbiBvbmx5IGFsbG93IG9uZSB0eCB0byBwYXNzIHRocm91Z2ggdGhpcyBmbG93IGF0IGEgdGltZVxuICAvLyBzbyB3ZSBjYW4gYXRvbWljYWxseSBjb25zdW1lIGEgbm9uY2VcbiAgc2VsZi5ub25jZUxvY2sudGFrZShmdW5jdGlvbigpe1xuICAgIHdhdGVyZmFsbChbXG4gICAgICBzZWxmLmZpbGxJblR4RXh0cmFzLmJpbmQoc2VsZiwgdHhQYXJhbXMpLFxuICAgICAgc2VsZi5zaWduVHJhbnNhY3Rpb24uYmluZChzZWxmKSxcbiAgICAgIHNlbGYucHVibGlzaFRyYW5zYWN0aW9uLmJpbmQoc2VsZiksXG4gICAgXSwgZnVuY3Rpb24oZXJyLCB0eEhhc2gpe1xuICAgICAgc2VsZi5ub25jZUxvY2subGVhdmUoKVxuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGNiKG51bGwsIHR4SGFzaClcbiAgICB9KVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUuZmluYWxpemVUeCA9IGZ1bmN0aW9uKHR4UGFyYW1zLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBjYW4gb25seSBhbGxvdyBvbmUgdHggdG8gcGFzcyB0aHJvdWdoIHRoaXMgZmxvdyBhdCBhIHRpbWVcbiAgLy8gc28gd2UgY2FuIGF0b21pY2FsbHkgY29uc3VtZSBhIG5vbmNlXG4gIHNlbGYubm9uY2VMb2NrLnRha2UoZnVuY3Rpb24oKXtcbiAgICB3YXRlcmZhbGwoW1xuICAgICAgc2VsZi5maWxsSW5UeEV4dHJhcy5iaW5kKHNlbGYsIHR4UGFyYW1zKSxcbiAgICAgIHNlbGYuc2lnblRyYW5zYWN0aW9uLmJpbmQoc2VsZiksXG4gICAgXSwgZnVuY3Rpb24oZXJyLCBzaWduZWRUeCl7XG4gICAgICBzZWxmLm5vbmNlTG9jay5sZWF2ZSgpXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgY2IobnVsbCwge3Jhdzogc2lnbmVkVHgsIHR4OiB0eFBhcmFtc30pXG4gICAgfSlcbiAgfSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnB1Ymxpc2hUcmFuc2FjdGlvbiA9IGZ1bmN0aW9uKHJhd1R4LCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmVtaXRQYXlsb2FkKHtcbiAgICBtZXRob2Q6ICdldGhfc2VuZFJhd1RyYW5zYWN0aW9uJyxcbiAgICBwYXJhbXM6IFtyYXdUeF0sXG4gIH0sIGZ1bmN0aW9uKGVyciwgcmVzKXtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNiKG51bGwsIHJlcy5yZXN1bHQpXG4gIH0pXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5lc3RpbWF0ZUdhcyA9IGZ1bmN0aW9uKHR4UGFyYW1zLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBlc3RpbWF0ZUdhcyhzZWxmLmVuZ2luZSwgdHhQYXJhbXMsIGNiKVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUuZ2V0R2FzUHJpY2UgPSBmdW5jdGlvbihjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmVtaXRQYXlsb2FkKHsgbWV0aG9kOiAnZXRoX2dhc1ByaWNlJywgcGFyYW1zOiBbXSB9LCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNiKG51bGwsIHJlcy5yZXN1bHQpXG4gIH0pXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5maWxsSW5UeEV4dHJhcyA9IGZ1bmN0aW9uKHR4UGFyYW1zLCBjYil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGNvbnN0IGFkZHJlc3MgPSB0eFBhcmFtcy5mcm9tXG4gIC8vIGNvbnNvbGUubG9nKCdmaWxsSW5UeEV4dHJhcyAtIGFkZHJlc3M6JywgYWRkcmVzcylcblxuICBjb25zdCB0YXNrcyA9IHt9XG5cbiAgaWYgKHR4UGFyYW1zLmdhc1ByaWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIm5lZWQgdG8gZ2V0IGdhc3ByaWNlXCIpXG4gICAgdGFza3MuZ2FzUHJpY2UgPSBzZWxmLmdldEdhc1ByaWNlLmJpbmQoc2VsZilcbiAgfVxuXG4gIGlmICh0eFBhcmFtcy5ub25jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJuZWVkIHRvIGdldCBub25jZVwiKVxuICAgIHRhc2tzLm5vbmNlID0gc2VsZi5lbWl0UGF5bG9hZC5iaW5kKHNlbGYsIHsgbWV0aG9kOiAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnLCBwYXJhbXM6IFthZGRyZXNzLCAncGVuZGluZyddIH0pXG4gIH1cblxuICBpZiAodHhQYXJhbXMuZ2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIm5lZWQgdG8gZ2V0IGdhc1wiKVxuICAgIHRhc2tzLmdhcyA9IHNlbGYuZXN0aW1hdGVHYXMuYmluZChzZWxmLCBjbG9uZVR4UGFyYW1zKHR4UGFyYW1zKSlcbiAgfVxuXG4gIHBhcmFsbGVsKHRhc2tzLCBmdW5jdGlvbihlcnIsIHRhc2tSZXN1bHRzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgaWYgKHRhc2tSZXN1bHRzLmdhc1ByaWNlKSByZXN1bHQuZ2FzUHJpY2UgPSB0YXNrUmVzdWx0cy5nYXNQcmljZVxuICAgIGlmICh0YXNrUmVzdWx0cy5ub25jZSkgcmVzdWx0Lm5vbmNlID0gdGFza1Jlc3VsdHMubm9uY2UucmVzdWx0XG4gICAgaWYgKHRhc2tSZXN1bHRzLmdhcykgcmVzdWx0LmdhcyA9IHRhc2tSZXN1bHRzLmdhc1xuXG4gICAgY2IobnVsbCwgZXh0ZW5kKHR4UGFyYW1zLCByZXN1bHQpKVxuICB9KVxufVxuXG4vLyB1dGlsXG5cbi8vIHdlIHVzZSB0aGlzIHRvIGNsZWFuIGFueSBjdXN0b20gcGFyYW1zIGZyb20gdGhlIHR4UGFyYW1zXG5mdW5jdGlvbiBjbG9uZVR4UGFyYW1zKHR4UGFyYW1zKXtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiB0eFBhcmFtcy5mcm9tLFxuICAgIHRvOiB0eFBhcmFtcy50byxcbiAgICB2YWx1ZTogdHhQYXJhbXMudmFsdWUsXG4gICAgZGF0YTogdHhQYXJhbXMuZGF0YSxcbiAgICBnYXM6IHR4UGFyYW1zLmdhcyxcbiAgICBnYXNQcmljZTogdHhQYXJhbXMuZ2FzUHJpY2UsXG4gICAgbm9uY2U6IHR4UGFyYW1zLm5vbmNlLFxuICB9XG59XG5cbmZ1bmN0aW9uIHRvTG93ZXJDYXNlKHN0cmluZyl7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiByZXNlbWJsZXNBZGRyZXNzIChzdHJpbmcpIHtcbiAgY29uc3QgZml4ZWQgPSBldGhVdGlsLmFkZEhleFByZWZpeChzdHJpbmcpXG4gIGNvbnN0IGlzVmFsaWQgPSBldGhVdGlsLmlzVmFsaWRBZGRyZXNzKGZpeGVkKVxuICByZXR1cm4gaXNWYWxpZFxufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgcmVzZW1ibGVzIGhleCBkYXRhXG4vLyBidXQgZGVmaW5pdGVseSBub3QgYSB2YWxpZCBhZGRyZXNzLlxuZnVuY3Rpb24gcmVzZW1ibGVzRGF0YSAoc3RyaW5nKSB7XG4gIGNvbnN0IGZpeGVkID0gZXRoVXRpbC5hZGRIZXhQcmVmaXgoc3RyaW5nKVxuICBjb25zdCBpc1ZhbGlkQWRkcmVzcyA9IGV0aFV0aWwuaXNWYWxpZEFkZHJlc3MoZml4ZWQpXG4gIHJldHVybiAhaXNWYWxpZEFkZHJlc3MgJiYgaXNWYWxpZEhleChzdHJpbmcpXG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRIZXgoZGF0YSkge1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICBpZiAoIWlzU3RyaW5nKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgaXNIZXhQcmVmaXhlZCA9IGRhdGEuc2xpY2UoMCwyKSA9PT0gJzB4J1xuICBpZiAoIWlzSGV4UHJlZml4ZWQpIHJldHVybiBmYWxzZVxuICBjb25zdCBub25QcmVmaXhlZCA9IGRhdGEuc2xpY2UoMilcbiAgY29uc3QgaXNWYWxpZCA9IG5vblByZWZpeGVkLm1hdGNoKGhleFJlZ2V4KVxuICByZXR1cm4gaXNWYWxpZFxufVxuXG5mdW5jdGlvbiBtdXN0UHJvdmlkZUluQ29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocGFyYW1zLCBjYikge1xuICAgIGNiKG5ldyBFcnJvcignUHJvdmlkZXJFbmdpbmUgLSBIb29rZWRXYWxsZXRTdWJwcm92aWRlciAtIE11c3QgcHJvdmlkZSBcIicgKyBtZXRob2ROYW1lICsgJ1wiIGZuIGluIGNvbnN0cnVjdG9yIG9wdGlvbnMnKSlcbiAgfVxufVxuIiwiaW1wb3J0IHtcclxuXHRQbHVnaW4sXHJcblx0UGx1Z2luVHlwZXMsXHJcblx0QmxvY2tjaGFpbnMsXHJcblx0TmV0d29yayxcclxuXHRTb2NrZXRTZXJ2aWNlXHJcbn0gZnJvbSAnQHNjYXR0ZXJqcy9jb3JlJztcclxuXHJcbmltcG9ydCBQcm92aWRlckVuZ2luZSBmcm9tICd3ZWIzLXByb3ZpZGVyLWVuZ2luZSc7XHJcbmltcG9ydCBScGNTdWJwcm92aWRlciBmcm9tICd3ZWIzLXByb3ZpZGVyLWVuZ2luZS9zdWJwcm92aWRlcnMvcnBjJztcclxuaW1wb3J0IFdlYnNvY2tldFN1YnByb3ZpZGVyIGZyb20gJ3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy93ZWJzb2NrZXQnO1xyXG5pbXBvcnQgSG9va2VkV2FsbGV0U3VicHJvdmlkZXIgZnJvbSBcIndlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy9ob29rZWQtd2FsbGV0XCI7XHJcblxyXG5cclxuXHJcbmxldCBldGhOZXR3b3JrLCBpZEdldHRlcjtcclxubGV0IHNvY2tldFNlcnZpY2UgPSBTb2NrZXRTZXJ2aWNlO1xyXG5cclxuXHJcbmNsYXNzIFNjYXR0ZXJFdGhlcmV1bVdhbGxldCB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudHMgPSB0aGlzLmdldEFjY291bnRzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaWduVHJhbnNhY3Rpb24gPSB0aGlzLnNpZ25UcmFuc2FjdGlvbi5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFjY291bnRzKGNhbGxiYWNrKSB7XHJcblx0ICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvY2tldFNlcnZpY2Uuc2VuZEFwaVJlcXVlc3Qoe1xyXG5cdFx0ICAgIHR5cGU6J2lkZW50aXR5RnJvbVBlcm1pc3Npb25zJyxcclxuXHRcdCAgICBwYXlsb2FkOnt9XHJcblx0ICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBhY2NvdW50cyA9ICFpZEdldHRlcigpID8gW10gOiBpZEdldHRlcigpLmFjY291bnRzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoYWNjb3VudCA9PiBhY2NvdW50LmJsb2NrY2hhaW4gPT09IEJsb2NrY2hhaW5zLkVUSClcclxuICAgICAgICAgICAgLm1hcChhY2NvdW50ID0+IGFjY291bnQuYWRkcmVzcyk7XHJcblxyXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGFjY291bnRzKTtcclxuICAgICAgICByZXR1cm4gYWNjb3VudHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKXtcclxuICAgICAgICBpZighZXRoTmV0d29yaykgdGhyb3cgRXJyb3Iubm9OZXR3b3JrKCk7XHJcblxyXG4gICAgICAgIC8vIEJhc2ljIHNldHRpbmdzXHJcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmdhcyAhPT0gdW5kZWZpbmVkKSB0cmFuc2FjdGlvbi5nYXNMaW1pdCA9IHRyYW5zYWN0aW9uLmdhcztcclxuICAgICAgICB0cmFuc2FjdGlvbi52YWx1ZSA9IHRyYW5zYWN0aW9uLnZhbHVlIHx8ICcweDAwJztcclxuICAgICAgICBpZih0cmFuc2FjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGF0YScpKSB0cmFuc2FjdGlvbi5kYXRhID0gJzB4Jyt0cmFuc2FjdGlvbi5kYXRhO1xyXG5cclxuICAgICAgICAvLyBSZXF1aXJlZCBGaWVsZHNcclxuICAgICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdyZXF1aXJlZEZpZWxkcycpID8gdHJhbnNhY3Rpb24ucmVxdWlyZWRGaWVsZHMgOiB7fTtcclxuXHJcbiAgICAgICAgLy8gQ29udHJhY3QgQUJJXHJcbiAgICAgICAgY29uc3QgYWJpID0gdHJhbnNhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2FiaScpID8gdHJhbnNhY3Rpb24uYWJpIDogbnVsbDtcclxuICAgICAgICBpZighYWJpICYmIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdkYXRhJykpXHJcbiAgICAgICAgICAgIHRocm93IEVycm9yLnNpZ25hdHVyZUVycm9yKCdub19hYmknLCAnWW91IG11c3QgcHJvdmlkZSBhIEpTT04gQUJJIGFsb25nIHdpdGggeW91ciB0cmFuc2FjdGlvbiBzbyB0aGF0IHVzZXJzIGNhbiByZWFkIHRoZSBjb250cmFjdCcpO1xyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmFzc2lnbih0cmFuc2FjdGlvbiwgeyBibG9ja2NoYWluOkJsb2NrY2hhaW5zLkVUSCwgbmV0d29yazpldGhOZXR3b3JrLCByZXF1aXJlZEZpZWxkcyB9KTtcclxuICAgICAgICBjb25zdCB7c2lnbmF0dXJlcywgcmV0dXJuZWRGaWVsZHN9ID0gYXdhaXQgc29ja2V0U2VydmljZS5zZW5kQXBpUmVxdWVzdCh7XHJcbiAgICAgICAgICAgIHR5cGU6J3JlcXVlc3RTaWduYXR1cmUnLFxyXG4gICAgICAgICAgICBwYXlsb2FkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmKHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdmaWVsZHNDYWxsYmFjaycpKVxyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbi5maWVsZHNDYWxsYmFjayhyZXR1cm5lZEZpZWxkcyk7XHJcblxyXG4gICAgICAgIHJldHVybiBzaWduYXR1cmVzWzBdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2F0dGVyRVRIIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKEJsb2NrY2hhaW5zLkVUSCwgUGx1Z2luVHlwZXMuQkxPQ0tDSEFJTl9TVVBQT1JUKTtcclxuICAgIH1cclxuXHJcblx0c2V0U29ja2V0U2VydmljZShfcyl7XHJcblx0XHRzb2NrZXRTZXJ2aWNlID0gX3M7XHJcblx0fVxyXG5cclxuICAgIGhvb2tQcm92aWRlcihuZXR3b3JrLCByZXF1aXJlZEZpZWxkcyA9IHt9KXtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V0aGVyZXVtIGhvb2sgcHJwJylcclxuICAgIH1cclxuXHJcbiAgICBzaWduYXR1cmVQcm92aWRlciguLi5hcmdzKXtcclxuICAgICAgICBpZEdldHRlciA9IGFyZ3NbMV07XHJcblxyXG4gICAgICAgIHJldHVybiAoX25ldHdvcmssIF93ZWIzKSA9PiB7XHJcbiAgICAgICAgICAgIGV0aE5ldHdvcmsgPSBOZXR3b3JrLmZyb21Kc29uKF9uZXR3b3JrKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJwY1VybCA9IGAke2V0aE5ldHdvcmsuZnVsbGhvc3QoKX1gO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZW5naW5lID0gbmV3IFByb3ZpZGVyRW5naW5lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdlYjMgPSBuZXcgX3dlYjMoZW5naW5lKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHdhbGxldFN1YnByb3ZpZGVyID0gbmV3IEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyKG5ldyBTY2F0dGVyRXRoZXJldW1XYWxsZXQoKSk7XHJcbiAgICAgICAgICAgIGVuZ2luZS5hZGRQcm92aWRlcih3YWxsZXRTdWJwcm92aWRlcik7XHJcblxyXG4gICAgICAgICAgICBpZihldGhOZXR3b3JrLnByb3RvY29sLmluZGV4T2YoJ2h0dHAnKSA+IC0xKSBlbmdpbmUuYWRkUHJvdmlkZXIobmV3IFJwY1N1YnByb3ZpZGVyKHtycGNVcmx9KSk7XHJcbiAgICAgICAgICAgIGVsc2UgZW5naW5lLmFkZFByb3ZpZGVyKG5ldyBXZWJzb2NrZXRTdWJwcm92aWRlcih7cnBjVXJsfSkpO1xyXG5cclxuICAgICAgICAgICAgZW5naW5lLnN0YXJ0KCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gd2ViMztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICB3aW5kb3cuU2NhdHRlckVUSCA9IFNjYXR0ZXJFVEg7XHJcbn1cclxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgY3JlYXRlS2VjY2FrID0gcmVxdWlyZSgnLi9rZWNjYWsnKVxudmFyIGNyZWF0ZVNoYWtlID0gcmVxdWlyZSgnLi9zaGFrZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtlY2Nha1N0YXRlKSB7XG4gIHZhciBLZWNjYWsgPSBjcmVhdGVLZWNjYWsoS2VjY2FrU3RhdGUpXG4gIHZhciBTaGFrZSA9IGNyZWF0ZVNoYWtlKEtlY2Nha1N0YXRlKVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYWxnb3JpdGhtLCBvcHRpb25zKSB7XG4gICAgdmFyIGhhc2ggPSB0eXBlb2YgYWxnb3JpdGhtID09PSAnc3RyaW5nJyA/IGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpIDogYWxnb3JpdGhtXG4gICAgc3dpdGNoIChoYXNoKSB7XG4gICAgICBjYXNlICdrZWNjYWsyMjQnOiByZXR1cm4gbmV3IEtlY2NhaygxMTUyLCA0NDgsIG51bGwsIDIyNCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ2tlY2NhazI1Nic6IHJldHVybiBuZXcgS2VjY2FrKDEwODgsIDUxMiwgbnVsbCwgMjU2LCBvcHRpb25zKVxuICAgICAgY2FzZSAna2VjY2FrMzg0JzogcmV0dXJuIG5ldyBLZWNjYWsoODMyLCA3NjgsIG51bGwsIDM4NCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ2tlY2NhazUxMic6IHJldHVybiBuZXcgS2VjY2FrKDU3NiwgMTAyNCwgbnVsbCwgNTEyLCBvcHRpb25zKVxuXG4gICAgICBjYXNlICdzaGEzLTIyNCc6IHJldHVybiBuZXcgS2VjY2FrKDExNTIsIDQ0OCwgMHgwNiwgMjI0LCBvcHRpb25zKVxuICAgICAgY2FzZSAnc2hhMy0yNTYnOiByZXR1cm4gbmV3IEtlY2NhaygxMDg4LCA1MTIsIDB4MDYsIDI1Niwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ3NoYTMtMzg0JzogcmV0dXJuIG5ldyBLZWNjYWsoODMyLCA3NjgsIDB4MDYsIDM4NCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ3NoYTMtNTEyJzogcmV0dXJuIG5ldyBLZWNjYWsoNTc2LCAxMDI0LCAweDA2LCA1MTIsIG9wdGlvbnMpXG5cbiAgICAgIGNhc2UgJ3NoYWtlMTI4JzogcmV0dXJuIG5ldyBTaGFrZSgxMzQ0LCAyNTYsIDB4MWYsIG9wdGlvbnMpXG4gICAgICBjYXNlICdzaGFrZTI1Nic6IHJldHVybiBuZXcgU2hha2UoMTA4OCwgNTEyLCAweDFmLCBvcHRpb25zKVxuXG4gICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsZCBhbGdvcml0aG06ICcgKyBhbGdvcml0aG0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLZWNjYWtTdGF0ZSkge1xuICBmdW5jdGlvbiBLZWNjYWsgKHJhdGUsIGNhcGFjaXR5LCBkZWxpbWl0ZWRTdWZmaXgsIGhhc2hCaXRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gICAgdGhpcy5fcmF0ZSA9IHJhdGVcbiAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5XG4gICAgdGhpcy5fZGVsaW1pdGVkU3VmZml4ID0gZGVsaW1pdGVkU3VmZml4XG4gICAgdGhpcy5faGFzaEJpdExlbmd0aCA9IGhhc2hCaXRMZW5ndGhcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgdGhpcy5fc3RhdGUgPSBuZXcgS2VjY2FrU3RhdGUoKVxuICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemUocmF0ZSwgY2FwYWNpdHkpXG4gICAgdGhpcy5fZmluYWxpemVkID0gZmFsc2VcbiAgfVxuXG4gIGluaGVyaXRzKEtlY2NhaywgVHJhbnNmb3JtKVxuXG4gIEtlY2Nhay5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGVycm9yID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICB0aGlzLnVwZGF0ZShjaHVuaywgZW5jb2RpbmcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVyclxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yKVxuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZXJyb3IgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG5cbiAgICBjYWxsYmFjayhlcnJvcilcbiAgfVxuXG4gIEtlY2Nhay5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHRocm93IG5ldyBFcnJvcignRGlnZXN0IGFscmVhZHkgY2FsbGVkJylcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuY29kaW5nKVxuXG4gICAgdGhpcy5fc3RhdGUuYWJzb3JiKGRhdGEpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZ2VzdCBhbHJlYWR5IGNhbGxlZCcpXG4gICAgdGhpcy5fZmluYWxpemVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2RlbGltaXRlZFN1ZmZpeCkgdGhpcy5fc3RhdGUuYWJzb3JiTGFzdEZld0JpdHModGhpcy5fZGVsaW1pdGVkU3VmZml4KVxuICAgIHZhciBkaWdlc3QgPSB0aGlzLl9zdGF0ZS5zcXVlZXplKHRoaXMuX2hhc2hCaXRMZW5ndGggLyA4KVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkaWdlc3QgPSBkaWdlc3QudG9TdHJpbmcoZW5jb2RpbmcpXG5cbiAgICB0aGlzLl9yZXNldFN0YXRlKClcblxuICAgIHJldHVybiBkaWdlc3RcbiAgfVxuXG4gIC8vIHJlbW92ZSByZXN1bHQgZnJvbSBtZW1vcnlcbiAgS2VjY2FrLnByb3RvdHlwZS5fcmVzZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHRoaXMuX3JhdGUsIHRoaXMuX2NhcGFjaXR5KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBiZWNhdXNlIHNvbWV0aW1lcyB3ZSBuZWVkIGhhc2ggcmlnaHQgbm93IGFuZCBsaXR0bGUgbGF0ZXJcbiAgS2VjY2FrLnByb3RvdHlwZS5fY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNsb25lID0gbmV3IEtlY2Nhayh0aGlzLl9yYXRlLCB0aGlzLl9jYXBhY2l0eSwgdGhpcy5fZGVsaW1pdGVkU3VmZml4LCB0aGlzLl9oYXNoQml0TGVuZ3RoLCB0aGlzLl9vcHRpb25zKVxuICAgIHRoaXMuX3N0YXRlLmNvcHkoY2xvbmUuX3N0YXRlKVxuICAgIGNsb25lLl9maW5hbGl6ZWQgPSB0aGlzLl9maW5hbGl6ZWRcblxuICAgIHJldHVybiBjbG9uZVxuICB9XG5cbiAgcmV0dXJuIEtlY2Nha1xufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS2VjY2FrU3RhdGUpIHtcbiAgZnVuY3Rpb24gU2hha2UgKHJhdGUsIGNhcGFjaXR5LCBkZWxpbWl0ZWRTdWZmaXgsIG9wdGlvbnMpIHtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gICAgdGhpcy5fcmF0ZSA9IHJhdGVcbiAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5XG4gICAgdGhpcy5fZGVsaW1pdGVkU3VmZml4ID0gZGVsaW1pdGVkU3VmZml4XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIHRoaXMuX3N0YXRlID0gbmV3IEtlY2Nha1N0YXRlKClcbiAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHJhdGUsIGNhcGFjaXR5KVxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG4gIH1cblxuICBpbmhlcml0cyhTaGFrZSwgVHJhbnNmb3JtKVxuXG4gIFNoYWtlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICB2YXIgZXJyb3IgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudXBkYXRlKGNodW5rLCBlbmNvZGluZylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyb3IpXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKCkge31cblxuICBTaGFrZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgIHRoaXMucHVzaCh0aGlzLnNxdWVlemUoc2l6ZSkpXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHRocm93IG5ldyBFcnJvcignU3F1ZWV6ZSBhbHJlYWR5IGNhbGxlZCcpXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBlbmNvZGluZylcblxuICAgIHRoaXMuX3N0YXRlLmFic29yYihkYXRhKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFNoYWtlLnByb3RvdHlwZS5zcXVlZXplID0gZnVuY3Rpb24gKGRhdGFCeXRlTGVuZ3RoLCBlbmNvZGluZykge1xuICAgIGlmICghdGhpcy5fZmluYWxpemVkKSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG4gICAgICB0aGlzLl9zdGF0ZS5hYnNvcmJMYXN0RmV3Qml0cyh0aGlzLl9kZWxpbWl0ZWRTdWZmaXgpXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9zdGF0ZS5zcXVlZXplKGRhdGFCeXRlTGVuZ3RoKVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkYXRhID0gZGF0YS50b1N0cmluZyhlbmNvZGluZylcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUuX3Jlc2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZSh0aGlzLl9yYXRlLCB0aGlzLl9jYXBhY2l0eSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgU2hha2UucHJvdG90eXBlLl9jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2xvbmUgPSBuZXcgU2hha2UodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlbGltaXRlZFN1ZmZpeCwgdGhpcy5fb3B0aW9ucylcbiAgICB0aGlzLl9zdGF0ZS5jb3B5KGNsb25lLl9zdGF0ZSlcbiAgICBjbG9uZS5fZmluYWxpemVkID0gdGhpcy5fZmluYWxpemVkXG5cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIHJldHVybiBTaGFrZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBrZWNjYWtTdGF0ZSA9IHJlcXVpcmUoJy4va2VjY2FrLXN0YXRlLXVucm9sbCcpXG5cbmZ1bmN0aW9uIEtlY2NhayAoKSB7XG4gIC8vIG11Y2ggZmFzdGVyIHRoYW4gYG5ldyBBcnJheSg1MClgXG4gIHRoaXMuc3RhdGUgPSBbXG4gICAgMCwgMCwgMCwgMCwgMCxcbiAgICAwLCAwLCAwLCAwLCAwLFxuICAgIDAsIDAsIDAsIDAsIDAsXG4gICAgMCwgMCwgMCwgMCwgMCxcbiAgICAwLCAwLCAwLCAwLCAwXG4gIF1cblxuICB0aGlzLmJsb2NrU2l6ZSA9IG51bGxcbiAgdGhpcy5jb3VudCA9IDBcbiAgdGhpcy5zcXVlZXppbmcgPSBmYWxzZVxufVxuXG5LZWNjYWsucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAocmF0ZSwgY2FwYWNpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB0aGlzLnN0YXRlW2ldID0gMFxuICB0aGlzLmJsb2NrU2l6ZSA9IHJhdGUgLyA4XG4gIHRoaXMuY291bnQgPSAwXG4gIHRoaXMuc3F1ZWV6aW5nID0gZmFsc2Vcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5hYnNvcmIgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICB0aGlzLnN0YXRlW35+KHRoaXMuY291bnQgLyA0KV0gXj0gZGF0YVtpXSA8PCAoOCAqICh0aGlzLmNvdW50ICUgNCkpXG4gICAgdGhpcy5jb3VudCArPSAxXG4gICAgaWYgKHRoaXMuY291bnQgPT09IHRoaXMuYmxvY2tTaXplKSB7XG4gICAgICBrZWNjYWtTdGF0ZS5wMTYwMCh0aGlzLnN0YXRlKVxuICAgICAgdGhpcy5jb3VudCA9IDBcbiAgICB9XG4gIH1cbn1cblxuS2VjY2FrLnByb3RvdHlwZS5hYnNvcmJMYXN0RmV3Qml0cyA9IGZ1bmN0aW9uIChiaXRzKSB7XG4gIHRoaXMuc3RhdGVbfn4odGhpcy5jb3VudCAvIDQpXSBePSBiaXRzIDw8ICg4ICogKHRoaXMuY291bnQgJSA0KSlcbiAgaWYgKChiaXRzICYgMHg4MCkgIT09IDAgJiYgdGhpcy5jb3VudCA9PT0gKHRoaXMuYmxvY2tTaXplIC0gMSkpIGtlY2Nha1N0YXRlLnAxNjAwKHRoaXMuc3RhdGUpXG4gIHRoaXMuc3RhdGVbfn4oKHRoaXMuYmxvY2tTaXplIC0gMSkgLyA0KV0gXj0gMHg4MCA8PCAoOCAqICgodGhpcy5ibG9ja1NpemUgLSAxKSAlIDQpKVxuICBrZWNjYWtTdGF0ZS5wMTYwMCh0aGlzLnN0YXRlKVxuICB0aGlzLmNvdW50ID0gMFxuICB0aGlzLnNxdWVlemluZyA9IHRydWVcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5zcXVlZXplID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuICBpZiAoIXRoaXMuc3F1ZWV6aW5nKSB0aGlzLmFic29yYkxhc3RGZXdCaXRzKDB4MDEpXG5cbiAgdmFyIG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBvdXRwdXRbaV0gPSAodGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50IC8gNCldID4+PiAoOCAqICh0aGlzLmNvdW50ICUgNCkpKSAmIDB4ZmZcbiAgICB0aGlzLmNvdW50ICs9IDFcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5ibG9ja1NpemUpIHtcbiAgICAgIGtlY2Nha1N0YXRlLnAxNjAwKHRoaXMuc3RhdGUpXG4gICAgICB0aGlzLmNvdW50ID0gMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSBkZXN0LnN0YXRlW2ldID0gdGhpcy5zdGF0ZVtpXVxuICBkZXN0LmJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplXG4gIGRlc3QuY291bnQgPSB0aGlzLmNvdW50XG4gIGRlc3Quc3F1ZWV6aW5nID0gdGhpcy5zcXVlZXppbmdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBLZWNjYWtcbiIsIid1c2Ugc3RyaWN0J1xudmFyIFAxNjAwX1JPVU5EX0NPTlNUQU5UUyA9IFsxLCAwLCAzMjg5OCwgMCwgMzI5MDYsIDIxNDc0ODM2NDgsIDIxNDc1MTY0MTYsIDIxNDc0ODM2NDgsIDMyOTA3LCAwLCAyMTQ3NDgzNjQ5LCAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLCAyMTQ3NDgzNjQ4LCAzMjc3MCwgMjE0NzQ4MzY0OCwgMTI4LCAyMTQ3NDgzNjQ4LCAzMjc3OCwgMCwgMjE0NzQ4MzY1OCwgMjE0NzQ4MzY0OCwgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdXG5cbmV4cG9ydHMucDE2MDAgPSBmdW5jdGlvbiAocykge1xuICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7ICsrcm91bmQpIHtcbiAgICAvLyB0aGV0YVxuICAgIHZhciBsbzAgPSBzWzBdIF4gc1sxMF0gXiBzWzIwXSBeIHNbMzBdIF4gc1s0MF1cbiAgICB2YXIgaGkwID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdXG4gICAgdmFyIGxvMSA9IHNbMl0gXiBzWzEyXSBeIHNbMjJdIF4gc1szMl0gXiBzWzQyXVxuICAgIHZhciBoaTEgPSBzWzNdIF4gc1sxM10gXiBzWzIzXSBeIHNbMzNdIF4gc1s0M11cbiAgICB2YXIgbG8yID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdXG4gICAgdmFyIGhpMiA9IHNbNV0gXiBzWzE1XSBeIHNbMjVdIF4gc1szNV0gXiBzWzQ1XVxuICAgIHZhciBsbzMgPSBzWzZdIF4gc1sxNl0gXiBzWzI2XSBeIHNbMzZdIF4gc1s0Nl1cbiAgICB2YXIgaGkzID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddXG4gICAgdmFyIGxvNCA9IHNbOF0gXiBzWzE4XSBeIHNbMjhdIF4gc1szOF0gXiBzWzQ4XVxuICAgIHZhciBoaTQgPSBzWzldIF4gc1sxOV0gXiBzWzI5XSBeIHNbMzldIF4gc1s0OV1cblxuICAgIHZhciBsbyA9IGxvNCBeIChsbzEgPDwgMSB8IGhpMSA+Pj4gMzEpXG4gICAgdmFyIGhpID0gaGk0IF4gKGhpMSA8PCAxIHwgbG8xID4+PiAzMSlcbiAgICB2YXIgdDFzbG8wID0gc1swXSBeIGxvXG4gICAgdmFyIHQxc2hpMCA9IHNbMV0gXiBoaVxuICAgIHZhciB0MXNsbzUgPSBzWzEwXSBeIGxvXG4gICAgdmFyIHQxc2hpNSA9IHNbMTFdIF4gaGlcbiAgICB2YXIgdDFzbG8xMCA9IHNbMjBdIF4gbG9cbiAgICB2YXIgdDFzaGkxMCA9IHNbMjFdIF4gaGlcbiAgICB2YXIgdDFzbG8xNSA9IHNbMzBdIF4gbG9cbiAgICB2YXIgdDFzaGkxNSA9IHNbMzFdIF4gaGlcbiAgICB2YXIgdDFzbG8yMCA9IHNbNDBdIF4gbG9cbiAgICB2YXIgdDFzaGkyMCA9IHNbNDFdIF4gaGlcbiAgICBsbyA9IGxvMCBeIChsbzIgPDwgMSB8IGhpMiA+Pj4gMzEpXG4gICAgaGkgPSBoaTAgXiAoaGkyIDw8IDEgfCBsbzIgPj4+IDMxKVxuICAgIHZhciB0MXNsbzEgPSBzWzJdIF4gbG9cbiAgICB2YXIgdDFzaGkxID0gc1szXSBeIGhpXG4gICAgdmFyIHQxc2xvNiA9IHNbMTJdIF4gbG9cbiAgICB2YXIgdDFzaGk2ID0gc1sxM10gXiBoaVxuICAgIHZhciB0MXNsbzExID0gc1syMl0gXiBsb1xuICAgIHZhciB0MXNoaTExID0gc1syM10gXiBoaVxuICAgIHZhciB0MXNsbzE2ID0gc1szMl0gXiBsb1xuICAgIHZhciB0MXNoaTE2ID0gc1szM10gXiBoaVxuICAgIHZhciB0MXNsbzIxID0gc1s0Ml0gXiBsb1xuICAgIHZhciB0MXNoaTIxID0gc1s0M10gXiBoaVxuICAgIGxvID0gbG8xIF4gKGxvMyA8PCAxIHwgaGkzID4+PiAzMSlcbiAgICBoaSA9IGhpMSBeIChoaTMgPDwgMSB8IGxvMyA+Pj4gMzEpXG4gICAgdmFyIHQxc2xvMiA9IHNbNF0gXiBsb1xuICAgIHZhciB0MXNoaTIgPSBzWzVdIF4gaGlcbiAgICB2YXIgdDFzbG83ID0gc1sxNF0gXiBsb1xuICAgIHZhciB0MXNoaTcgPSBzWzE1XSBeIGhpXG4gICAgdmFyIHQxc2xvMTIgPSBzWzI0XSBeIGxvXG4gICAgdmFyIHQxc2hpMTIgPSBzWzI1XSBeIGhpXG4gICAgdmFyIHQxc2xvMTcgPSBzWzM0XSBeIGxvXG4gICAgdmFyIHQxc2hpMTcgPSBzWzM1XSBeIGhpXG4gICAgdmFyIHQxc2xvMjIgPSBzWzQ0XSBeIGxvXG4gICAgdmFyIHQxc2hpMjIgPSBzWzQ1XSBeIGhpXG4gICAgbG8gPSBsbzIgXiAobG80IDw8IDEgfCBoaTQgPj4+IDMxKVxuICAgIGhpID0gaGkyIF4gKGhpNCA8PCAxIHwgbG80ID4+PiAzMSlcbiAgICB2YXIgdDFzbG8zID0gc1s2XSBeIGxvXG4gICAgdmFyIHQxc2hpMyA9IHNbN10gXiBoaVxuICAgIHZhciB0MXNsbzggPSBzWzE2XSBeIGxvXG4gICAgdmFyIHQxc2hpOCA9IHNbMTddIF4gaGlcbiAgICB2YXIgdDFzbG8xMyA9IHNbMjZdIF4gbG9cbiAgICB2YXIgdDFzaGkxMyA9IHNbMjddIF4gaGlcbiAgICB2YXIgdDFzbG8xOCA9IHNbMzZdIF4gbG9cbiAgICB2YXIgdDFzaGkxOCA9IHNbMzddIF4gaGlcbiAgICB2YXIgdDFzbG8yMyA9IHNbNDZdIF4gbG9cbiAgICB2YXIgdDFzaGkyMyA9IHNbNDddIF4gaGlcbiAgICBsbyA9IGxvMyBeIChsbzAgPDwgMSB8IGhpMCA+Pj4gMzEpXG4gICAgaGkgPSBoaTMgXiAoaGkwIDw8IDEgfCBsbzAgPj4+IDMxKVxuICAgIHZhciB0MXNsbzQgPSBzWzhdIF4gbG9cbiAgICB2YXIgdDFzaGk0ID0gc1s5XSBeIGhpXG4gICAgdmFyIHQxc2xvOSA9IHNbMThdIF4gbG9cbiAgICB2YXIgdDFzaGk5ID0gc1sxOV0gXiBoaVxuICAgIHZhciB0MXNsbzE0ID0gc1syOF0gXiBsb1xuICAgIHZhciB0MXNoaTE0ID0gc1syOV0gXiBoaVxuICAgIHZhciB0MXNsbzE5ID0gc1szOF0gXiBsb1xuICAgIHZhciB0MXNoaTE5ID0gc1szOV0gXiBoaVxuICAgIHZhciB0MXNsbzI0ID0gc1s0OF0gXiBsb1xuICAgIHZhciB0MXNoaTI0ID0gc1s0OV0gXiBoaVxuXG4gICAgLy8gcmhvICYgcGlcbiAgICB2YXIgdDJzbG8wID0gdDFzbG8wXG4gICAgdmFyIHQyc2hpMCA9IHQxc2hpMFxuICAgIHZhciB0MnNsbzE2ID0gKHQxc2hpNSA8PCA0IHwgdDFzbG81ID4+PiAyOClcbiAgICB2YXIgdDJzaGkxNiA9ICh0MXNsbzUgPDwgNCB8IHQxc2hpNSA+Pj4gMjgpXG4gICAgdmFyIHQyc2xvNyA9ICh0MXNsbzEwIDw8IDMgfCB0MXNoaTEwID4+PiAyOSlcbiAgICB2YXIgdDJzaGk3ID0gKHQxc2hpMTAgPDwgMyB8IHQxc2xvMTAgPj4+IDI5KVxuICAgIHZhciB0MnNsbzIzID0gKHQxc2hpMTUgPDwgOSB8IHQxc2xvMTUgPj4+IDIzKVxuICAgIHZhciB0MnNoaTIzID0gKHQxc2xvMTUgPDwgOSB8IHQxc2hpMTUgPj4+IDIzKVxuICAgIHZhciB0MnNsbzE0ID0gKHQxc2xvMjAgPDwgMTggfCB0MXNoaTIwID4+PiAxNClcbiAgICB2YXIgdDJzaGkxNCA9ICh0MXNoaTIwIDw8IDE4IHwgdDFzbG8yMCA+Pj4gMTQpXG4gICAgdmFyIHQyc2xvMTAgPSAodDFzbG8xIDw8IDEgfCB0MXNoaTEgPj4+IDMxKVxuICAgIHZhciB0MnNoaTEwID0gKHQxc2hpMSA8PCAxIHwgdDFzbG8xID4+PiAzMSlcbiAgICB2YXIgdDJzbG8xID0gKHQxc2hpNiA8PCAxMiB8IHQxc2xvNiA+Pj4gMjApXG4gICAgdmFyIHQyc2hpMSA9ICh0MXNsbzYgPDwgMTIgfCB0MXNoaTYgPj4+IDIwKVxuICAgIHZhciB0MnNsbzE3ID0gKHQxc2xvMTEgPDwgMTAgfCB0MXNoaTExID4+PiAyMilcbiAgICB2YXIgdDJzaGkxNyA9ICh0MXNoaTExIDw8IDEwIHwgdDFzbG8xMSA+Pj4gMjIpXG4gICAgdmFyIHQyc2xvOCA9ICh0MXNoaTE2IDw8IDEzIHwgdDFzbG8xNiA+Pj4gMTkpXG4gICAgdmFyIHQyc2hpOCA9ICh0MXNsbzE2IDw8IDEzIHwgdDFzaGkxNiA+Pj4gMTkpXG4gICAgdmFyIHQyc2xvMjQgPSAodDFzbG8yMSA8PCAyIHwgdDFzaGkyMSA+Pj4gMzApXG4gICAgdmFyIHQyc2hpMjQgPSAodDFzaGkyMSA8PCAyIHwgdDFzbG8yMSA+Pj4gMzApXG4gICAgdmFyIHQyc2xvMjAgPSAodDFzaGkyIDw8IDMwIHwgdDFzbG8yID4+PiAyKVxuICAgIHZhciB0MnNoaTIwID0gKHQxc2xvMiA8PCAzMCB8IHQxc2hpMiA+Pj4gMilcbiAgICB2YXIgdDJzbG8xMSA9ICh0MXNsbzcgPDwgNiB8IHQxc2hpNyA+Pj4gMjYpXG4gICAgdmFyIHQyc2hpMTEgPSAodDFzaGk3IDw8IDYgfCB0MXNsbzcgPj4+IDI2KVxuICAgIHZhciB0MnNsbzIgPSAodDFzaGkxMiA8PCAxMSB8IHQxc2xvMTIgPj4+IDIxKVxuICAgIHZhciB0MnNoaTIgPSAodDFzbG8xMiA8PCAxMSB8IHQxc2hpMTIgPj4+IDIxKVxuICAgIHZhciB0MnNsbzE4ID0gKHQxc2xvMTcgPDwgMTUgfCB0MXNoaTE3ID4+PiAxNylcbiAgICB2YXIgdDJzaGkxOCA9ICh0MXNoaTE3IDw8IDE1IHwgdDFzbG8xNyA+Pj4gMTcpXG4gICAgdmFyIHQyc2xvOSA9ICh0MXNoaTIyIDw8IDI5IHwgdDFzbG8yMiA+Pj4gMylcbiAgICB2YXIgdDJzaGk5ID0gKHQxc2xvMjIgPDwgMjkgfCB0MXNoaTIyID4+PiAzKVxuICAgIHZhciB0MnNsbzUgPSAodDFzbG8zIDw8IDI4IHwgdDFzaGkzID4+PiA0KVxuICAgIHZhciB0MnNoaTUgPSAodDFzaGkzIDw8IDI4IHwgdDFzbG8zID4+PiA0KVxuICAgIHZhciB0MnNsbzIxID0gKHQxc2hpOCA8PCAyMyB8IHQxc2xvOCA+Pj4gOSlcbiAgICB2YXIgdDJzaGkyMSA9ICh0MXNsbzggPDwgMjMgfCB0MXNoaTggPj4+IDkpXG4gICAgdmFyIHQyc2xvMTIgPSAodDFzbG8xMyA8PCAyNSB8IHQxc2hpMTMgPj4+IDcpXG4gICAgdmFyIHQyc2hpMTIgPSAodDFzaGkxMyA8PCAyNSB8IHQxc2xvMTMgPj4+IDcpXG4gICAgdmFyIHQyc2xvMyA9ICh0MXNsbzE4IDw8IDIxIHwgdDFzaGkxOCA+Pj4gMTEpXG4gICAgdmFyIHQyc2hpMyA9ICh0MXNoaTE4IDw8IDIxIHwgdDFzbG8xOCA+Pj4gMTEpXG4gICAgdmFyIHQyc2xvMTkgPSAodDFzaGkyMyA8PCAyNCB8IHQxc2xvMjMgPj4+IDgpXG4gICAgdmFyIHQyc2hpMTkgPSAodDFzbG8yMyA8PCAyNCB8IHQxc2hpMjMgPj4+IDgpXG4gICAgdmFyIHQyc2xvMTUgPSAodDFzbG80IDw8IDI3IHwgdDFzaGk0ID4+PiA1KVxuICAgIHZhciB0MnNoaTE1ID0gKHQxc2hpNCA8PCAyNyB8IHQxc2xvNCA+Pj4gNSlcbiAgICB2YXIgdDJzbG82ID0gKHQxc2xvOSA8PCAyMCB8IHQxc2hpOSA+Pj4gMTIpXG4gICAgdmFyIHQyc2hpNiA9ICh0MXNoaTkgPDwgMjAgfCB0MXNsbzkgPj4+IDEyKVxuICAgIHZhciB0MnNsbzIyID0gKHQxc2hpMTQgPDwgNyB8IHQxc2xvMTQgPj4+IDI1KVxuICAgIHZhciB0MnNoaTIyID0gKHQxc2xvMTQgPDwgNyB8IHQxc2hpMTQgPj4+IDI1KVxuICAgIHZhciB0MnNsbzEzID0gKHQxc2xvMTkgPDwgOCB8IHQxc2hpMTkgPj4+IDI0KVxuICAgIHZhciB0MnNoaTEzID0gKHQxc2hpMTkgPDwgOCB8IHQxc2xvMTkgPj4+IDI0KVxuICAgIHZhciB0MnNsbzQgPSAodDFzbG8yNCA8PCAxNCB8IHQxc2hpMjQgPj4+IDE4KVxuICAgIHZhciB0MnNoaTQgPSAodDFzaGkyNCA8PCAxNCB8IHQxc2xvMjQgPj4+IDE4KVxuXG4gICAgLy8gY2hpXG4gICAgc1swXSA9IHQyc2xvMCBeICh+dDJzbG8xICYgdDJzbG8yKVxuICAgIHNbMV0gPSB0MnNoaTAgXiAofnQyc2hpMSAmIHQyc2hpMilcbiAgICBzWzEwXSA9IHQyc2xvNSBeICh+dDJzbG82ICYgdDJzbG83KVxuICAgIHNbMTFdID0gdDJzaGk1IF4gKH50MnNoaTYgJiB0MnNoaTcpXG4gICAgc1syMF0gPSB0MnNsbzEwIF4gKH50MnNsbzExICYgdDJzbG8xMilcbiAgICBzWzIxXSA9IHQyc2hpMTAgXiAofnQyc2hpMTEgJiB0MnNoaTEyKVxuICAgIHNbMzBdID0gdDJzbG8xNSBeICh+dDJzbG8xNiAmIHQyc2xvMTcpXG4gICAgc1szMV0gPSB0MnNoaTE1IF4gKH50MnNoaTE2ICYgdDJzaGkxNylcbiAgICBzWzQwXSA9IHQyc2xvMjAgXiAofnQyc2xvMjEgJiB0MnNsbzIyKVxuICAgIHNbNDFdID0gdDJzaGkyMCBeICh+dDJzaGkyMSAmIHQyc2hpMjIpXG4gICAgc1syXSA9IHQyc2xvMSBeICh+dDJzbG8yICYgdDJzbG8zKVxuICAgIHNbM10gPSB0MnNoaTEgXiAofnQyc2hpMiAmIHQyc2hpMylcbiAgICBzWzEyXSA9IHQyc2xvNiBeICh+dDJzbG83ICYgdDJzbG84KVxuICAgIHNbMTNdID0gdDJzaGk2IF4gKH50MnNoaTcgJiB0MnNoaTgpXG4gICAgc1syMl0gPSB0MnNsbzExIF4gKH50MnNsbzEyICYgdDJzbG8xMylcbiAgICBzWzIzXSA9IHQyc2hpMTEgXiAofnQyc2hpMTIgJiB0MnNoaTEzKVxuICAgIHNbMzJdID0gdDJzbG8xNiBeICh+dDJzbG8xNyAmIHQyc2xvMTgpXG4gICAgc1szM10gPSB0MnNoaTE2IF4gKH50MnNoaTE3ICYgdDJzaGkxOClcbiAgICBzWzQyXSA9IHQyc2xvMjEgXiAofnQyc2xvMjIgJiB0MnNsbzIzKVxuICAgIHNbNDNdID0gdDJzaGkyMSBeICh+dDJzaGkyMiAmIHQyc2hpMjMpXG4gICAgc1s0XSA9IHQyc2xvMiBeICh+dDJzbG8zICYgdDJzbG80KVxuICAgIHNbNV0gPSB0MnNoaTIgXiAofnQyc2hpMyAmIHQyc2hpNClcbiAgICBzWzE0XSA9IHQyc2xvNyBeICh+dDJzbG84ICYgdDJzbG85KVxuICAgIHNbMTVdID0gdDJzaGk3IF4gKH50MnNoaTggJiB0MnNoaTkpXG4gICAgc1syNF0gPSB0MnNsbzEyIF4gKH50MnNsbzEzICYgdDJzbG8xNClcbiAgICBzWzI1XSA9IHQyc2hpMTIgXiAofnQyc2hpMTMgJiB0MnNoaTE0KVxuICAgIHNbMzRdID0gdDJzbG8xNyBeICh+dDJzbG8xOCAmIHQyc2xvMTkpXG4gICAgc1szNV0gPSB0MnNoaTE3IF4gKH50MnNoaTE4ICYgdDJzaGkxOSlcbiAgICBzWzQ0XSA9IHQyc2xvMjIgXiAofnQyc2xvMjMgJiB0MnNsbzI0KVxuICAgIHNbNDVdID0gdDJzaGkyMiBeICh+dDJzaGkyMyAmIHQyc2hpMjQpXG4gICAgc1s2XSA9IHQyc2xvMyBeICh+dDJzbG80ICYgdDJzbG8wKVxuICAgIHNbN10gPSB0MnNoaTMgXiAofnQyc2hpNCAmIHQyc2hpMClcbiAgICBzWzE2XSA9IHQyc2xvOCBeICh+dDJzbG85ICYgdDJzbG81KVxuICAgIHNbMTddID0gdDJzaGk4IF4gKH50MnNoaTkgJiB0MnNoaTUpXG4gICAgc1syNl0gPSB0MnNsbzEzIF4gKH50MnNsbzE0ICYgdDJzbG8xMClcbiAgICBzWzI3XSA9IHQyc2hpMTMgXiAofnQyc2hpMTQgJiB0MnNoaTEwKVxuICAgIHNbMzZdID0gdDJzbG8xOCBeICh+dDJzbG8xOSAmIHQyc2xvMTUpXG4gICAgc1szN10gPSB0MnNoaTE4IF4gKH50MnNoaTE5ICYgdDJzaGkxNSlcbiAgICBzWzQ2XSA9IHQyc2xvMjMgXiAofnQyc2xvMjQgJiB0MnNsbzIwKVxuICAgIHNbNDddID0gdDJzaGkyMyBeICh+dDJzaGkyNCAmIHQyc2hpMjApXG4gICAgc1s4XSA9IHQyc2xvNCBeICh+dDJzbG8wICYgdDJzbG8xKVxuICAgIHNbOV0gPSB0MnNoaTQgXiAofnQyc2hpMCAmIHQyc2hpMSlcbiAgICBzWzE4XSA9IHQyc2xvOSBeICh+dDJzbG81ICYgdDJzbG82KVxuICAgIHNbMTldID0gdDJzaGk5IF4gKH50MnNoaTUgJiB0MnNoaTYpXG4gICAgc1syOF0gPSB0MnNsbzE0IF4gKH50MnNsbzEwICYgdDJzbG8xMSlcbiAgICBzWzI5XSA9IHQyc2hpMTQgXiAofnQyc2hpMTAgJiB0MnNoaTExKVxuICAgIHNbMzhdID0gdDJzbG8xOSBeICh+dDJzbG8xNSAmIHQyc2xvMTYpXG4gICAgc1szOV0gPSB0MnNoaTE5IF4gKH50MnNoaTE1ICYgdDJzaGkxNilcbiAgICBzWzQ4XSA9IHQyc2xvMjQgXiAofnQyc2xvMjAgJiB0MnNsbzIxKVxuICAgIHNbNDldID0gdDJzaGkyNCBeICh+dDJzaGkyMCAmIHQyc2hpMjEpXG5cbiAgICAvLyBpb3RhXG4gICAgc1swXSBePSBQMTYwMF9ST1VORF9DT05TVEFOVFNbcm91bmQgKiAyXVxuICAgIHNbMV0gXj0gUDE2MDBfUk9VTkRfQ09OU1RBTlRTW3JvdW5kICogMiArIDFdXG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJy4vYXNzZXJ0JylcbnZhciBkZXIgPSByZXF1aXJlKCcuL2RlcicpXG52YXIgbWVzc2FnZXMgPSByZXF1aXJlKCcuL21lc3NhZ2VzLmpzb24nKVxuXG5mdW5jdGlvbiBpbml0Q29tcHJlc3NlZFZhbHVlICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbih2YWx1ZSwgbWVzc2FnZXMuQ09NUFJFU1NFRF9UWVBFX0lOVkFMSUQpXG4gIHJldHVybiB2YWx1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWNwMjU2azEpIHtcbiAgcmV0dXJuIHtcbiAgICBwcml2YXRlS2V5VmVyaWZ5OiBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIHJldHVybiBwcml2YXRlS2V5Lmxlbmd0aCA9PT0gMzIgJiYgc2VjcDI1NmsxLnByaXZhdGVLZXlWZXJpZnkocHJpdmF0ZUtleSlcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleUV4cG9ydDogZnVuY3Rpb24gKHByaXZhdGVLZXksIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuICAgICAgdmFyIHB1YmxpY0tleSA9IHNlY3AyNTZrMS5wcml2YXRlS2V5RXhwb3J0KHByaXZhdGVLZXksIGNvbXByZXNzZWQpXG5cbiAgICAgIHJldHVybiBkZXIucHJpdmF0ZUtleUV4cG9ydChwcml2YXRlS2V5LCBwdWJsaWNLZXksIGNvbXByZXNzZWQpXG4gICAgfSxcblxuICAgIHByaXZhdGVLZXlJbXBvcnQ6IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuXG4gICAgICBwcml2YXRlS2V5ID0gZGVyLnByaXZhdGVLZXlJbXBvcnQocHJpdmF0ZUtleSlcbiAgICAgIGlmIChwcml2YXRlS2V5ICYmIHByaXZhdGVLZXkubGVuZ3RoID09PSAzMiAmJiBzZWNwMjU2azEucHJpdmF0ZUtleVZlcmlmeShwcml2YXRlS2V5KSkgcmV0dXJuIHByaXZhdGVLZXlcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0lNUE9SVF9ERVJfRkFJTClcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleU5lZ2F0ZTogZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnByaXZhdGVLZXlOZWdhdGUocHJpdmF0ZUtleSlcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleU1vZEludmVyc2U6IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHByaXZhdGVLZXksIDMyLCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wcml2YXRlS2V5TW9kSW52ZXJzZShwcml2YXRlS2V5KVxuICAgIH0sXG5cbiAgICBwcml2YXRlS2V5VHdlYWtBZGQ6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChwcml2YXRlS2V5LCAzMiwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcih0d2VhaywgbWVzc2FnZXMuVFdFQUtfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHR3ZWFrLCAzMiwgbWVzc2FnZXMuVFdFQUtfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHJpdmF0ZUtleVR3ZWFrQWRkKHByaXZhdGVLZXksIHR3ZWFrKVxuICAgIH0sXG5cbiAgICBwcml2YXRlS2V5VHdlYWtNdWw6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChwcml2YXRlS2V5LCAzMiwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcih0d2VhaywgbWVzc2FnZXMuVFdFQUtfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHR3ZWFrLCAzMiwgbWVzc2FnZXMuVFdFQUtfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHJpdmF0ZUtleVR3ZWFrTXVsKHByaXZhdGVLZXksIHR3ZWFrKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlDcmVhdGU6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHByaXZhdGVLZXksIDMyLCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlDcmVhdGUocHJpdmF0ZUtleSwgY29tcHJlc3NlZClcbiAgICB9LFxuXG4gICAgcHVibGljS2V5Q29udmVydDogZnVuY3Rpb24gKHB1YmxpY0tleSwgY29tcHJlc3NlZCkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHB1YmxpY0tleSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgyKHB1YmxpY0tleSwgMzMsIDY1LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQocHVibGljS2V5LCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlWZXJpZnk6IGZ1bmN0aW9uIChwdWJsaWNLZXkpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkocHVibGljS2V5KVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlUd2Vha0FkZDogZnVuY3Rpb24gKHB1YmxpY0tleSwgdHdlYWssIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHR3ZWFrLCBtZXNzYWdlcy5UV0VBS19UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgodHdlYWssIDMyLCBtZXNzYWdlcy5UV0VBS19MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlUd2Vha0FkZChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlUd2Vha011bDogZnVuY3Rpb24gKHB1YmxpY0tleSwgdHdlYWssIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHR3ZWFrLCBtZXNzYWdlcy5UV0VBS19UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgodHdlYWssIDMyLCBtZXNzYWdlcy5UV0VBS19MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlUd2Vha011bChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlDb21iaW5lOiBmdW5jdGlvbiAocHVibGljS2V5cywgY29tcHJlc3NlZCkge1xuICAgICAgYXNzZXJ0LmlzQXJyYXkocHVibGljS2V5cywgbWVzc2FnZXMuRUNfUFVCTElDX0tFWVNfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTGVuZ3RoR1RaZXJvKHB1YmxpY0tleXMsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlTX0xFTkdUSF9JTlZBTElEKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdWJsaWNLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXlzW2ldLCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXlzW2ldLCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG4gICAgICB9XG5cbiAgICAgIGNvbXByZXNzZWQgPSBpbml0Q29tcHJlc3NlZFZhbHVlKGNvbXByZXNzZWQsIHRydWUpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5Q29tYmluZShwdWJsaWNLZXlzLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBzaWduYXR1cmVOb3JtYWxpemU6IGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihzaWduYXR1cmUsIG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgoc2lnbmF0dXJlLCA2NCwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnNpZ25hdHVyZU5vcm1hbGl6ZShzaWduYXR1cmUpXG4gICAgfSxcblxuICAgIHNpZ25hdHVyZUV4cG9ydDogZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHZhciBzaWdPYmogPSBzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHNpZ25hdHVyZSlcbiAgICAgIHJldHVybiBkZXIuc2lnbmF0dXJlRXhwb3J0KHNpZ09iailcbiAgICB9LFxuXG4gICAgc2lnbmF0dXJlSW1wb3J0OiBmdW5jdGlvbiAoc2lnKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIoc2lnLCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTGVuZ3RoR1RaZXJvKHNpZywgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICB2YXIgc2lnT2JqID0gZGVyLnNpZ25hdHVyZUltcG9ydChzaWcpXG4gICAgICBpZiAoc2lnT2JqKSByZXR1cm4gc2VjcDI1NmsxLnNpZ25hdHVyZUltcG9ydChzaWdPYmopXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwpXG4gICAgfSxcblxuICAgIHNpZ25hdHVyZUltcG9ydExheDogZnVuY3Rpb24gKHNpZykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZywgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0xlbmd0aEdUWmVybyhzaWcsIG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgdmFyIHNpZ09iaiA9IGRlci5zaWduYXR1cmVJbXBvcnRMYXgoc2lnKVxuICAgICAgaWYgKHNpZ09iaikgcmV0dXJuIHNlY3AyNTZrMS5zaWduYXR1cmVJbXBvcnQoc2lnT2JqKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0RFUl9GQUlMKVxuICAgIH0sXG5cbiAgICBzaWduOiBmdW5jdGlvbiAobWVzc2FnZSwgcHJpdmF0ZUtleSwgb3B0aW9ucykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKG1lc3NhZ2UsIG1lc3NhZ2VzLk1TRzMyX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChtZXNzYWdlLCAzMiwgbWVzc2FnZXMuTVNHMzJfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICB2YXIgZGF0YSA9IG51bGxcbiAgICAgIHZhciBub25jZWZuID0gbnVsbFxuICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnQuaXNPYmplY3Qob3B0aW9ucywgbWVzc2FnZXMuT1BUSU9OU19UWVBFX0lOVkFMSUQpXG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0LmlzQnVmZmVyKG9wdGlvbnMuZGF0YSwgbWVzc2FnZXMuT1BUSU9OU19EQVRBX1RZUEVfSU5WQUxJRClcbiAgICAgICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgob3B0aW9ucy5kYXRhLCAzMiwgbWVzc2FnZXMuT1BUSU9OU19EQVRBX0xFTkdUSF9JTlZBTElEKVxuICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm5vbmNlZm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc2VydC5pc0Z1bmN0aW9uKG9wdGlvbnMubm9uY2VmbiwgbWVzc2FnZXMuT1BUSU9OU19OT05DRUZOX1RZUEVfSU5WQUxJRClcbiAgICAgICAgICBub25jZWZuID0gb3B0aW9ucy5ub25jZWZuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5zaWduKG1lc3NhZ2UsIHByaXZhdGVLZXksIG5vbmNlZm4sIGRhdGEpXG4gICAgfSxcblxuICAgIHZlcmlmeTogZnVuY3Rpb24gKG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIobWVzc2FnZSwgbWVzc2FnZXMuTVNHMzJfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKG1lc3NhZ2UsIDMyLCBtZXNzYWdlcy5NU0czMl9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS52ZXJpZnkobWVzc2FnZSwgc2lnbmF0dXJlLCBwdWJsaWNLZXkpXG4gICAgfSxcblxuICAgIHJlY292ZXI6IGZ1bmN0aW9uIChtZXNzYWdlLCBzaWduYXR1cmUsIHJlY292ZXJ5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIobWVzc2FnZSwgbWVzc2FnZXMuTVNHMzJfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKG1lc3NhZ2UsIDMyLCBtZXNzYWdlcy5NU0czMl9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc051bWJlcihyZWNvdmVyeSwgbWVzc2FnZXMuUkVDT1ZFUllfSURfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTnVtYmVySW5JbnRlcnZhbChyZWNvdmVyeSwgLTEsIDQsIG1lc3NhZ2VzLlJFQ09WRVJZX0lEX1ZBTFVFX0lOVkFMSUQpXG5cbiAgICAgIGNvbXByZXNzZWQgPSBpbml0Q29tcHJlc3NlZFZhbHVlKGNvbXByZXNzZWQsIHRydWUpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucmVjb3ZlcihtZXNzYWdlLCBzaWduYXR1cmUsIHJlY292ZXJ5LCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBlY2RoOiBmdW5jdGlvbiAocHVibGljS2V5LCBwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHVibGljS2V5LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aDIocHVibGljS2V5LCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLmVjZGgocHVibGljS2V5LCBwcml2YXRlS2V5KVxuICAgIH0sXG5cbiAgICBlY2RoVW5zYWZlOiBmdW5jdGlvbiAocHVibGljS2V5LCBwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHVibGljS2V5LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aDIocHVibGljS2V5LCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLmVjZGhVbnNhZmUocHVibGljS2V5LCBwcml2YXRlS2V5LCBjb21wcmVzc2VkKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8vIFR5cGVFcnJvclxuZXhwb3J0cy5pc0FycmF5ID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IFR5cGVFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAodG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09ICdbb2JqZWN0IEJvb2xlYW5dJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB0aHJvdyBUeXBlRXJyb3IobWVzc2FnZSlcbn1cblxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgRnVuY3Rpb25dJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNOdW1iZXIgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBOdW1iZXJdJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNPYmplY3QgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBPYmplY3RdJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbi8vIFJhbmdlRXJyb3JcbmV4cG9ydHMuaXNCdWZmZXJMZW5ndGggPSBmdW5jdGlvbiAoYnVmZmVyLCBsZW5ndGgsIG1lc3NhZ2UpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzQnVmZmVyTGVuZ3RoMiA9IGZ1bmN0aW9uIChidWZmZXIsIGxlbmd0aDEsIGxlbmd0aDIsIG1lc3NhZ2UpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggIT09IGxlbmd0aDEgJiYgYnVmZmVyLmxlbmd0aCAhPT0gbGVuZ3RoMikgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzTGVuZ3RoR1RaZXJvID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHRocm93IFJhbmdlRXJyb3IobWVzc2FnZSlcbn1cblxuZXhwb3J0cy5pc051bWJlckluSW50ZXJ2YWwgPSBmdW5jdGlvbiAobnVtYmVyLCB4LCB5LCBtZXNzYWdlKSB7XG4gIGlmIChudW1iZXIgPD0geCB8fCBudW1iZXIgPj0geSkgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBiaXA2NiA9IHJlcXVpcmUoJ2JpcDY2JylcblxudmFyIEVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEID0gQnVmZmVyLmZyb20oW1xuICAvLyBiZWdpblxuICAweDMwLCAweDgxLCAweGQzLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDIwLFxuICAvLyBwcml2YXRlIGtleVxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAvLyBtaWRkbGVcbiAgMHhhMCwgMHg4MSwgMHg4NSwgMHgzMCwgMHg4MSwgMHg4MiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgzMCwgMHgyYywgMHgwNiwgMHgwNywgMHgyYSwgMHg4NiwgMHg0OCxcbiAgMHhjRSwgMHgzZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmRSwgMHhmZiwgMHhmZiwgMHhmYywgMHgyZiwgMHgzMCwgMHgwNiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwNywgMHgwNCxcbiAgMHgyMSwgMHgwMiwgMHg3OSwgMHhiRSwgMHg2NiwgMHg3RSwgMHhmOSwgMHhkYywgMHhiYiwgMHhhYywgMHg1NSwgMHhhMCwgMHg2MiwgMHg5NSwgMHhjRSwgMHg4NyxcbiAgMHgwYiwgMHgwNywgMHgwMiwgMHg5YiwgMHhmYywgMHhkYiwgMHgyZCwgMHhjRSwgMHgyOCwgMHhkOSwgMHg1OSwgMHhmMiwgMHg4MSwgMHg1YiwgMHgxNiwgMHhmOCxcbiAgMHgxNywgMHg5OCwgMHgwMiwgMHgyMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmRSwgMHhiYSwgMHhhRSwgMHhkYywgMHhFNiwgMHhhZiwgMHg0OCwgMHhhMCwgMHgzYiwgMHhiZiwgMHhkMiwgMHg1RSxcbiAgMHg4YywgMHhkMCwgMHgzNiwgMHg0MSwgMHg0MSwgMHgwMiwgMHgwMSwgMHgwMSwgMHhhMSwgMHgyNCwgMHgwMywgMHgyMiwgMHgwMCxcbiAgLy8gcHVibGljIGtleVxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwXG5dKVxuXG52YXIgRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRCA9IEJ1ZmZlci5mcm9tKFtcbiAgLy8gYmVnaW5cbiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgxMywgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgyMCxcbiAgLy8gcHJpdmF0ZSBrZXlcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgLy8gbWlkZGxlXG4gIDB4YTAsIDB4ODEsIDB4YTUsIDB4MzAsIDB4ODEsIDB4YTIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MzAsIDB4MmMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsXG4gIDB4Y0UsIDB4M2QsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZkUsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4MmYsIDB4MzAsIDB4MDYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDcsIDB4MDQsXG4gIDB4NDEsIDB4MDQsIDB4NzksIDB4YkUsIDB4NjYsIDB4N0UsIDB4ZjksIDB4ZGMsIDB4YmIsIDB4YWMsIDB4NTUsIDB4YTAsIDB4NjIsIDB4OTUsIDB4Y0UsIDB4ODcsXG4gIDB4MGIsIDB4MDcsIDB4MDIsIDB4OWIsIDB4ZmMsIDB4ZGIsIDB4MmQsIDB4Y0UsIDB4MjgsIDB4ZDksIDB4NTksIDB4ZjIsIDB4ODEsIDB4NWIsIDB4MTYsIDB4ZjgsXG4gIDB4MTcsIDB4OTgsIDB4NDgsIDB4M2EsIDB4ZGEsIDB4NzcsIDB4MjYsIDB4YTMsIDB4YzQsIDB4NjUsIDB4NWQsIDB4YTQsIDB4ZmIsIDB4ZmMsIDB4MEUsIDB4MTEsXG4gIDB4MDgsIDB4YTgsIDB4ZmQsIDB4MTcsIDB4YjQsIDB4NDgsIDB4YTYsIDB4ODUsIDB4NTQsIDB4MTksIDB4OWMsIDB4NDcsIDB4ZDAsIDB4OGYsIDB4ZmIsIDB4MTAsXG4gIDB4ZDQsIDB4YjgsIDB4MDIsIDB4MjEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZkUsIDB4YmEsIDB4YUUsIDB4ZGMsIDB4RTYsIDB4YWYsIDB4NDgsIDB4YTAsIDB4M2IsIDB4YmYsIDB4ZDIsIDB4NUUsXG4gIDB4OGMsIDB4ZDAsIDB4MzYsIDB4NDEsIDB4NDEsIDB4MDIsIDB4MDEsIDB4MDEsIDB4YTEsIDB4NDQsIDB4MDMsIDB4NDIsIDB4MDAsXG4gIC8vIHB1YmxpYyBrZXlcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMFxuXSlcblxuZXhwb3J0cy5wcml2YXRlS2V5RXhwb3J0ID0gZnVuY3Rpb24gKHByaXZhdGVLZXksIHB1YmxpY0tleSwgY29tcHJlc3NlZCkge1xuICB2YXIgcmVzdWx0ID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZCA/IEVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEIDogRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRClcbiAgcHJpdmF0ZUtleS5jb3B5KHJlc3VsdCwgY29tcHJlc3NlZCA/IDggOiA5KVxuICBwdWJsaWNLZXkuY29weShyZXN1bHQsIGNvbXByZXNzZWQgPyAxODEgOiAyMTQpXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5SW1wb3J0ID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGxlbmd0aCA9IHByaXZhdGVLZXkubGVuZ3RoXG5cbiAgLy8gc2VxdWVuY2UgaGVhZGVyXG4gIHZhciBpbmRleCA9IDBcbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgMSB8fCBwcml2YXRlS2V5W2luZGV4XSAhPT0gMHgzMCkgcmV0dXJuXG4gIGluZGV4ICs9IDFcblxuICAvLyBzZXF1ZW5jZSBsZW5ndGggY29uc3RydWN0b3JcbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgMSB8fCAhKHByaXZhdGVLZXlbaW5kZXhdICYgMHg4MCkpIHJldHVyblxuXG4gIHZhciBsZW5iID0gcHJpdmF0ZUtleVtpbmRleF0gJiAweDdmXG4gIGluZGV4ICs9IDFcbiAgaWYgKGxlbmIgPCAxIHx8IGxlbmIgPiAyKSByZXR1cm5cbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgbGVuYikgcmV0dXJuXG5cbiAgLy8gc2VxdWVuY2UgbGVuZ3RoXG4gIHZhciBsZW4gPSBwcml2YXRlS2V5W2luZGV4ICsgbGVuYiAtIDFdIHwgKGxlbmIgPiAxID8gcHJpdmF0ZUtleVtpbmRleCArIGxlbmIgLSAyXSA8PCA4IDogMClcbiAgaW5kZXggKz0gbGVuYlxuICBpZiAobGVuZ3RoIDwgaW5kZXggKyBsZW4pIHJldHVyblxuXG4gIC8vIHNlcXVlbmNlIGVsZW1lbnQgMDogdmVyc2lvbiBudW1iZXIgKD0xKVxuICBpZiAobGVuZ3RoIDwgaW5kZXggKyAzIHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4XSAhPT0gMHgwMiB8fFxuICAgICAgcHJpdmF0ZUtleVtpbmRleCArIDFdICE9PSAweDAxIHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4ICsgMl0gIT09IDB4MDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpbmRleCArPSAzXG5cbiAgLy8gc2VxdWVuY2UgZWxlbWVudCAxOiBvY3RldCBzdHJpbmcsIHVwIHRvIDMyIGJ5dGVzXG4gIGlmIChsZW5ndGggPCBpbmRleCArIDIgfHxcbiAgICAgIHByaXZhdGVLZXlbaW5kZXhdICE9PSAweDA0IHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4ICsgMV0gPiAweDIwIHx8XG4gICAgICBsZW5ndGggPCBpbmRleCArIDIgKyBwcml2YXRlS2V5W2luZGV4ICsgMV0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHJldHVybiBwcml2YXRlS2V5LnNsaWNlKGluZGV4ICsgMiwgaW5kZXggKyAyICsgcHJpdmF0ZUtleVtpbmRleCArIDFdKVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUV4cG9ydCA9IGZ1bmN0aW9uIChzaWdPYmopIHtcbiAgdmFyIHIgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMF0pLCBzaWdPYmoucl0pXG4gIGZvciAodmFyIGxlblIgPSAzMywgcG9zUiA9IDA7IGxlblIgPiAxICYmIHJbcG9zUl0gPT09IDB4MDAgJiYgIShyW3Bvc1IgKyAxXSAmIDB4ODApOyAtLWxlblIsICsrcG9zUik7XG5cbiAgdmFyIHMgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMF0pLCBzaWdPYmouc10pXG4gIGZvciAodmFyIGxlblMgPSAzMywgcG9zUyA9IDA7IGxlblMgPiAxICYmIHNbcG9zU10gPT09IDB4MDAgJiYgIShzW3Bvc1MgKyAxXSAmIDB4ODApOyAtLWxlblMsICsrcG9zUyk7XG5cbiAgcmV0dXJuIGJpcDY2LmVuY29kZShyLnNsaWNlKHBvc1IpLCBzLnNsaWNlKHBvc1MpKVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydCA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgdmFyIHIgPSBCdWZmZXIuYWxsb2MoMzIsIDApXG4gIHZhciBzID0gQnVmZmVyLmFsbG9jKDMyLCAwKVxuXG4gIHRyeSB7XG4gICAgdmFyIHNpZ09iaiA9IGJpcDY2LmRlY29kZShzaWcpXG4gICAgaWYgKHNpZ09iai5yLmxlbmd0aCA9PT0gMzMgJiYgc2lnT2JqLnJbMF0gPT09IDB4MDApIHNpZ09iai5yID0gc2lnT2JqLnIuc2xpY2UoMSlcbiAgICBpZiAoc2lnT2JqLnIubGVuZ3RoID4gMzIpIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgdG9vIGxvbmcnKVxuICAgIGlmIChzaWdPYmoucy5sZW5ndGggPT09IDMzICYmIHNpZ09iai5zWzBdID09PSAweDAwKSBzaWdPYmoucyA9IHNpZ09iai5zLnNsaWNlKDEpXG4gICAgaWYgKHNpZ09iai5zLmxlbmd0aCA+IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ1MgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBzaWdPYmouci5jb3B5KHIsIDMyIC0gc2lnT2JqLnIubGVuZ3RoKVxuICBzaWdPYmoucy5jb3B5KHMsIDMyIC0gc2lnT2JqLnMubGVuZ3RoKVxuXG4gIHJldHVybiB7IHI6IHIsIHM6IHMgfVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydExheCA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgdmFyIHIgPSBCdWZmZXIuYWxsb2MoMzIsIDApXG4gIHZhciBzID0gQnVmZmVyLmFsbG9jKDMyLCAwKVxuXG4gIHZhciBsZW5ndGggPSBzaWcubGVuZ3RoXG4gIHZhciBpbmRleCA9IDBcblxuICAvLyBzZXF1ZW5jZSB0YWcgYnl0ZVxuICBpZiAoc2lnW2luZGV4KytdICE9PSAweDMwKSByZXR1cm5cblxuICAvLyBzZXF1ZW5jZSBsZW5ndGggYnl0ZVxuICB2YXIgbGVuYnl0ZSA9IHNpZ1tpbmRleCsrXVxuICBpZiAobGVuYnl0ZSAmIDB4ODApIHtcbiAgICBpbmRleCArPSBsZW5ieXRlIC0gMHg4MFxuICAgIGlmIChpbmRleCA+IGxlbmd0aCkgcmV0dXJuXG4gIH1cblxuICAvLyBzZXF1ZW5jZSB0YWcgYnl0ZSBmb3IgclxuICBpZiAoc2lnW2luZGV4KytdICE9PSAweDAyKSByZXR1cm5cblxuICAvLyBsZW5ndGggZm9yIHJcbiAgdmFyIHJsZW4gPSBzaWdbaW5kZXgrK11cbiAgaWYgKHJsZW4gJiAweDgwKSB7XG4gICAgbGVuYnl0ZSA9IHJsZW4gLSAweDgwXG4gICAgaWYgKGluZGV4ICsgbGVuYnl0ZSA+IGxlbmd0aCkgcmV0dXJuXG4gICAgZm9yICg7IGxlbmJ5dGUgPiAwICYmIHNpZ1tpbmRleF0gPT09IDB4MDA7IGluZGV4ICs9IDEsIGxlbmJ5dGUgLT0gMSk7XG4gICAgZm9yIChybGVuID0gMDsgbGVuYnl0ZSA+IDA7IGluZGV4ICs9IDEsIGxlbmJ5dGUgLT0gMSkgcmxlbiA9IChybGVuIDw8IDgpICsgc2lnW2luZGV4XVxuICB9XG4gIGlmIChybGVuID4gbGVuZ3RoIC0gaW5kZXgpIHJldHVyblxuICB2YXIgcmluZGV4ID0gaW5kZXhcbiAgaW5kZXggKz0gcmxlblxuXG4gIC8vIHNlcXVlbmNlIHRhZyBieXRlIGZvciBzXG4gIGlmIChzaWdbaW5kZXgrK10gIT09IDB4MDIpIHJldHVyblxuXG4gIC8vIGxlbmd0aCBmb3Igc1xuICB2YXIgc2xlbiA9IHNpZ1tpbmRleCsrXVxuICBpZiAoc2xlbiAmIDB4ODApIHtcbiAgICBsZW5ieXRlID0gc2xlbiAtIDB4ODBcbiAgICBpZiAoaW5kZXggKyBsZW5ieXRlID4gbGVuZ3RoKSByZXR1cm5cbiAgICBmb3IgKDsgbGVuYnl0ZSA+IDAgJiYgc2lnW2luZGV4XSA9PT0gMHgwMDsgaW5kZXggKz0gMSwgbGVuYnl0ZSAtPSAxKTtcbiAgICBmb3IgKHNsZW4gPSAwOyBsZW5ieXRlID4gMDsgaW5kZXggKz0gMSwgbGVuYnl0ZSAtPSAxKSBzbGVuID0gKHNsZW4gPDwgOCkgKyBzaWdbaW5kZXhdXG4gIH1cbiAgaWYgKHNsZW4gPiBsZW5ndGggLSBpbmRleCkgcmV0dXJuXG4gIHZhciBzaW5kZXggPSBpbmRleFxuICBpbmRleCArPSBzbGVuXG5cbiAgLy8gaWdub3JlIGxlYWRpbmcgemVyb3MgaW4gclxuICBmb3IgKDsgcmxlbiA+IDAgJiYgc2lnW3JpbmRleF0gPT09IDB4MDA7IHJsZW4gLT0gMSwgcmluZGV4ICs9IDEpO1xuICAvLyBjb3B5IHIgdmFsdWVcbiAgaWYgKHJsZW4gPiAzMikgcmV0dXJuXG4gIHZhciBydmFsdWUgPSBzaWcuc2xpY2UocmluZGV4LCByaW5kZXggKyBybGVuKVxuICBydmFsdWUuY29weShyLCAzMiAtIHJ2YWx1ZS5sZW5ndGgpXG5cbiAgLy8gaWdub3JlIGxlYWRpbmcgemVyb3MgaW4gc1xuICBmb3IgKDsgc2xlbiA+IDAgJiYgc2lnW3NpbmRleF0gPT09IDB4MDA7IHNsZW4gLT0gMSwgc2luZGV4ICs9IDEpO1xuICAvLyBjb3B5IHMgdmFsdWVcbiAgaWYgKHNsZW4gPiAzMikgcmV0dXJuXG4gIHZhciBzdmFsdWUgPSBzaWcuc2xpY2Uoc2luZGV4LCBzaW5kZXggKyBzbGVuKVxuICBzdmFsdWUuY29weShzLCAzMiAtIHN2YWx1ZS5sZW5ndGgpXG5cbiAgcmV0dXJuIHsgcjogciwgczogcyB9XG59XG4iLCIvLyBSZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDA2Ni5tZWRpYXdpa2lcbi8vIEZvcm1hdDogMHgzMCBbdG90YWwtbGVuZ3RoXSAweDAyIFtSLWxlbmd0aF0gW1JdIDB4MDIgW1MtbGVuZ3RoXSBbU11cbi8vIE5PVEU6IFNJR0hBU0ggYnl0ZSBpZ25vcmVkIEFORCByZXN0cmljdGVkLCB0cnVuY2F0ZSBiZWZvcmUgdXNlXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG5mdW5jdGlvbiBjaGVjayAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgOCkgcmV0dXJuIGZhbHNlXG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHJldHVybiBmYWxzZVxuICBpZiAoYnVmZmVyWzBdICE9PSAweDMwKSByZXR1cm4gZmFsc2VcbiAgaWYgKGJ1ZmZlclsxXSAhPT0gYnVmZmVyLmxlbmd0aCAtIDIpIHJldHVybiBmYWxzZVxuICBpZiAoYnVmZmVyWzJdICE9PSAweDAyKSByZXR1cm4gZmFsc2VcblxuICB2YXIgbGVuUiA9IGJ1ZmZlclszXVxuICBpZiAobGVuUiA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gIGlmICg1ICsgbGVuUiA+PSBidWZmZXIubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgaWYgKGJ1ZmZlcls0ICsgbGVuUl0gIT09IDB4MDIpIHJldHVybiBmYWxzZVxuXG4gIHZhciBsZW5TID0gYnVmZmVyWzUgKyBsZW5SXVxuICBpZiAobGVuUyA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gIGlmICgoNiArIGxlblIgKyBsZW5TKSAhPT0gYnVmZmVyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgaWYgKGJ1ZmZlcls0XSAmIDB4ODApIHJldHVybiBmYWxzZVxuICBpZiAobGVuUiA+IDEgJiYgKGJ1ZmZlcls0XSA9PT0gMHgwMCkgJiYgIShidWZmZXJbNV0gJiAweDgwKSkgcmV0dXJuIGZhbHNlXG5cbiAgaWYgKGJ1ZmZlcltsZW5SICsgNl0gJiAweDgwKSByZXR1cm4gZmFsc2VcbiAgaWYgKGxlblMgPiAxICYmIChidWZmZXJbbGVuUiArIDZdID09PSAweDAwKSAmJiAhKGJ1ZmZlcltsZW5SICsgN10gJiAweDgwKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGRlY29kZSAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgOCkgdGhyb3cgbmV3IEVycm9yKCdERVIgc2VxdWVuY2UgbGVuZ3RoIGlzIHRvbyBzaG9ydCcpXG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHRocm93IG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGxlbmd0aCBpcyB0b28gbG9uZycpXG4gIGlmIChidWZmZXJbMF0gIT09IDB4MzApIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgREVSIHNlcXVlbmNlJylcbiAgaWYgKGJ1ZmZlclsxXSAhPT0gYnVmZmVyLmxlbmd0aCAtIDIpIHRocm93IG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGxlbmd0aCBpcyBpbnZhbGlkJylcbiAgaWYgKGJ1ZmZlclsyXSAhPT0gMHgwMikgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBERVIgaW50ZWdlcicpXG5cbiAgdmFyIGxlblIgPSBidWZmZXJbM11cbiAgaWYgKGxlblIgPT09IDApIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgemVybycpXG4gIGlmICg1ICsgbGVuUiA+PSBidWZmZXIubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ1IgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgaWYgKGJ1ZmZlcls0ICsgbGVuUl0gIT09IDB4MDIpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgREVSIGludGVnZXIgKDIpJylcblxuICB2YXIgbGVuUyA9IGJ1ZmZlcls1ICsgbGVuUl1cbiAgaWYgKGxlblMgPT09IDApIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgemVybycpXG4gIGlmICgoNiArIGxlblIgKyBsZW5TKSAhPT0gYnVmZmVyLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdTIGxlbmd0aCBpcyBpbnZhbGlkJylcblxuICBpZiAoYnVmZmVyWzRdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdSIHZhbHVlIGlzIG5lZ2F0aXZlJylcbiAgaWYgKGxlblIgPiAxICYmIChidWZmZXJbNF0gPT09IDB4MDApICYmICEoYnVmZmVyWzVdICYgMHg4MCkpIHRocm93IG5ldyBFcnJvcignUiB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKVxuXG4gIGlmIChidWZmZXJbbGVuUiArIDZdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdTIHZhbHVlIGlzIG5lZ2F0aXZlJylcbiAgaWYgKGxlblMgPiAxICYmIChidWZmZXJbbGVuUiArIDZdID09PSAweDAwKSAmJiAhKGJ1ZmZlcltsZW5SICsgN10gJiAweDgwKSkgdGhyb3cgbmV3IEVycm9yKCdTIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZCcpXG5cbiAgLy8gbm9uLUJJUDY2IC0gZXh0cmFjdCBSLCBTIHZhbHVlc1xuICByZXR1cm4ge1xuICAgIHI6IGJ1ZmZlci5zbGljZSg0LCA0ICsgbGVuUiksXG4gICAgczogYnVmZmVyLnNsaWNlKDYgKyBsZW5SKVxuICB9XG59XG5cbi8qXG4gKiBFeHBlY3RzIHIgYW5kIHMgdG8gYmUgcG9zaXRpdmUgREVSIGludGVnZXJzLlxuICpcbiAqIFRoZSBERVIgZm9ybWF0IHVzZXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGFzIGEgc2lnbiBiaXQgKCYgMHg4MCkuXG4gKiBJZiB0aGUgc2lnbmlmaWNhbnQgYml0IGlzIHNldCBBTkQgdGhlIGludGVnZXIgaXMgcG9zaXRpdmUsIGEgMHgwMCBpcyBwcmVwZW5kZWQuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAwID0+ICAgICAweDAwXG4gKiAgICAgIDEgPT4gICAgIDB4MDFcbiAqICAgICAtMSA9PiAgICAgMHhmZlxuICogICAgMTI3ID0+ICAgICAweDdmXG4gKiAgIC0xMjcgPT4gICAgIDB4ODFcbiAqICAgIDEyOCA9PiAgIDB4MDA4MFxuICogICAtMTI4ID0+ICAgICAweDgwXG4gKiAgICAyNTUgPT4gICAweDAwZmZcbiAqICAgLTI1NSA9PiAgIDB4ZmYwMVxuICogIDE2MzAwID0+ICAgMHgzZmFjXG4gKiAtMTYzMDAgPT4gICAweGMwNTRcbiAqICA2MjMwMCA9PiAweDAwZjM1Y1xuICogLTYyMzAwID0+IDB4ZmYwY2E0XG4qL1xuZnVuY3Rpb24gZW5jb2RlIChyLCBzKSB7XG4gIHZhciBsZW5SID0gci5sZW5ndGhcbiAgdmFyIGxlblMgPSBzLmxlbmd0aFxuICBpZiAobGVuUiA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSIGxlbmd0aCBpcyB6ZXJvJylcbiAgaWYgKGxlblMgPT09IDApIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgemVybycpXG4gIGlmIChsZW5SID4gMzMpIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgdG9vIGxvbmcnKVxuICBpZiAobGVuUyA+IDMzKSB0aHJvdyBuZXcgRXJyb3IoJ1MgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgaWYgKHJbMF0gJiAweDgwKSB0aHJvdyBuZXcgRXJyb3IoJ1IgdmFsdWUgaXMgbmVnYXRpdmUnKVxuICBpZiAoc1swXSAmIDB4ODApIHRocm93IG5ldyBFcnJvcignUyB2YWx1ZSBpcyBuZWdhdGl2ZScpXG4gIGlmIChsZW5SID4gMSAmJiAoclswXSA9PT0gMHgwMCkgJiYgIShyWzFdICYgMHg4MCkpIHRocm93IG5ldyBFcnJvcignUiB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKVxuICBpZiAobGVuUyA+IDEgJiYgKHNbMF0gPT09IDB4MDApICYmICEoc1sxXSAmIDB4ODApKSB0aHJvdyBuZXcgRXJyb3IoJ1MgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJylcblxuICB2YXIgc2lnbmF0dXJlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDYgKyBsZW5SICsgbGVuUylcblxuICAvLyAweDMwIFt0b3RhbC1sZW5ndGhdIDB4MDIgW1ItbGVuZ3RoXSBbUl0gMHgwMiBbUy1sZW5ndGhdIFtTXVxuICBzaWduYXR1cmVbMF0gPSAweDMwXG4gIHNpZ25hdHVyZVsxXSA9IHNpZ25hdHVyZS5sZW5ndGggLSAyXG4gIHNpZ25hdHVyZVsyXSA9IDB4MDJcbiAgc2lnbmF0dXJlWzNdID0gci5sZW5ndGhcbiAgci5jb3B5KHNpZ25hdHVyZSwgNClcbiAgc2lnbmF0dXJlWzQgKyBsZW5SXSA9IDB4MDJcbiAgc2lnbmF0dXJlWzUgKyBsZW5SXSA9IHMubGVuZ3RoXG4gIHMuY29weShzaWduYXR1cmUsIDYgKyBsZW5SKVxuXG4gIHJldHVybiBzaWduYXR1cmVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNoZWNrOiBjaGVjayxcbiAgZGVjb2RlOiBkZWNvZGUsXG4gIGVuY29kZTogZW5jb2RlXG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgRUMgPSByZXF1aXJlKCdlbGxpcHRpYycpLmVjXG5cbnZhciBtZXNzYWdlcyA9IHJlcXVpcmUoJy4uL21lc3NhZ2VzLmpzb24nKVxuXG52YXIgZWMgPSBuZXcgRUMoJ3NlY3AyNTZrMScpXG52YXIgZWNwYXJhbXMgPSBlYy5jdXJ2ZVxuXG5mdW5jdGlvbiBsb2FkQ29tcHJlc3NlZFB1YmxpY0tleSAoZmlyc3QsIHhCdWZmZXIpIHtcbiAgdmFyIHggPSBuZXcgQk4oeEJ1ZmZlcilcblxuICAvLyBvdmVyZmxvd1xuICBpZiAoeC5jbXAoZWNwYXJhbXMucCkgPj0gMCkgcmV0dXJuIG51bGxcbiAgeCA9IHgudG9SZWQoZWNwYXJhbXMucmVkKVxuXG4gIC8vIGNvbXB1dGUgY29ycmVzcG9uZGluZyBZXG4gIHZhciB5ID0geC5yZWRTcXIoKS5yZWRJTXVsKHgpLnJlZElBZGQoZWNwYXJhbXMuYikucmVkU3FydCgpXG4gIGlmICgoZmlyc3QgPT09IDB4MDMpICE9PSB5LmlzT2RkKCkpIHkgPSB5LnJlZE5lZygpXG5cbiAgcmV0dXJuIGVjLmtleVBhaXIoeyBwdWI6IHsgeDogeCwgeTogeSB9IH0pXG59XG5cbmZ1bmN0aW9uIGxvYWRVbmNvbXByZXNzZWRQdWJsaWNLZXkgKGZpcnN0LCB4QnVmZmVyLCB5QnVmZmVyKSB7XG4gIHZhciB4ID0gbmV3IEJOKHhCdWZmZXIpXG4gIHZhciB5ID0gbmV3IEJOKHlCdWZmZXIpXG5cbiAgLy8gb3ZlcmZsb3dcbiAgaWYgKHguY21wKGVjcGFyYW1zLnApID49IDAgfHwgeS5jbXAoZWNwYXJhbXMucCkgPj0gMCkgcmV0dXJuIG51bGxcblxuICB4ID0geC50b1JlZChlY3BhcmFtcy5yZWQpXG4gIHkgPSB5LnRvUmVkKGVjcGFyYW1zLnJlZClcblxuICAvLyBpcyBvZGQgZmxhZ1xuICBpZiAoKGZpcnN0ID09PSAweDA2IHx8IGZpcnN0ID09PSAweDA3KSAmJiB5LmlzT2RkKCkgIT09IChmaXJzdCA9PT0gMHgwNykpIHJldHVybiBudWxsXG5cbiAgLy8geCp4KnggKyBiID0geSp5XG4gIHZhciB4MyA9IHgucmVkU3FyKCkucmVkSU11bCh4KVxuICBpZiAoIXkucmVkU3FyKCkucmVkSVN1Yih4My5yZWRJQWRkKGVjcGFyYW1zLmIpKS5pc1plcm8oKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gZWMua2V5UGFpcih7IHB1YjogeyB4OiB4LCB5OiB5IH0gfSlcbn1cblxuZnVuY3Rpb24gbG9hZFB1YmxpY0tleSAocHVibGljS2V5KSB7XG4gIHZhciBmaXJzdCA9IHB1YmxpY0tleVswXVxuICBzd2l0Y2ggKGZpcnN0KSB7XG4gICAgY2FzZSAweDAyOlxuICAgIGNhc2UgMHgwMzpcbiAgICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSAzMykgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBsb2FkQ29tcHJlc3NlZFB1YmxpY0tleShmaXJzdCwgcHVibGljS2V5LnNsaWNlKDEsIDMzKSlcbiAgICBjYXNlIDB4MDQ6XG4gICAgY2FzZSAweDA2OlxuICAgIGNhc2UgMHgwNzpcbiAgICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSA2NSkgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBsb2FkVW5jb21wcmVzc2VkUHVibGljS2V5KGZpcnN0LCBwdWJsaWNLZXkuc2xpY2UoMSwgMzMpLCBwdWJsaWNLZXkuc2xpY2UoMzMsIDY1KSlcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlWZXJpZnkgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICB2YXIgYm4gPSBuZXcgQk4ocHJpdmF0ZUtleSlcbiAgcmV0dXJuIGJuLmNtcChlY3BhcmFtcy5uKSA8IDAgJiYgIWJuLmlzWmVybygpXG59XG5cbmV4cG9ydHMucHJpdmF0ZUtleUV4cG9ydCA9IGZ1bmN0aW9uIChwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gIHZhciBkID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIGlmIChkLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IGQuaXNaZXJvKCkpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9FWFBPUlRfREVSX0ZBSUwpXG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVjLmtleUZyb21Qcml2YXRlKHByaXZhdGVLZXkpLmdldFB1YmxpYyhjb21wcmVzc2VkLCB0cnVlKSlcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5TmVnYXRlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGJuID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIHJldHVybiBibi5pc1plcm8oKSA/IEJ1ZmZlci5hbGxvYygzMikgOiBlY3BhcmFtcy5uLnN1YihibikudW1vZChlY3BhcmFtcy5uKS50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlNb2RJbnZlcnNlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGJuID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIGlmIChibi5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1JBTkdFX0lOVkFMSUQpXG5cbiAgcmV0dXJuIGJuLmludm0oZWNwYXJhbXMubikudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5VHdlYWtBZGQgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSwgdHdlYWspIHtcbiAgdmFyIGJuID0gbmV3IEJOKHR3ZWFrKVxuICBpZiAoYm4uY21wKGVjcGFyYW1zLm4pID49IDApIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UV0VBS19BRERfRkFJTClcblxuICBibi5pYWRkKG5ldyBCTihwcml2YXRlS2V5KSlcbiAgaWYgKGJuLmNtcChlY3BhcmFtcy5uKSA+PSAwKSBibi5pc3ViKGVjcGFyYW1zLm4pXG4gIGlmIChibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHJldHVybiBibi50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlUd2Vha011bCA9IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICB2YXIgYm4gPSBuZXcgQk4odHdlYWspXG4gIGlmIChibi5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RXRUFLX01VTF9GQUlMKVxuXG4gIGJuLmltdWwobmV3IEJOKHByaXZhdGVLZXkpKVxuICBpZiAoYm4uY21wKGVjcGFyYW1zLm4pKSBibiA9IGJuLnVtb2QoZWNwYXJhbXMubilcblxuICByZXR1cm4gYm4udG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlDcmVhdGUgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSwgY29tcHJlc3NlZCkge1xuICB2YXIgZCA9IG5ldyBCTihwcml2YXRlS2V5KVxuICBpZiAoZC5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBkLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9DUkVBVEVfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20oZWMua2V5RnJvbVByaXZhdGUocHJpdmF0ZUtleSkuZ2V0UHVibGljKGNvbXByZXNzZWQsIHRydWUpKVxufVxuXG5leHBvcnRzLnB1YmxpY0tleUNvbnZlcnQgPSBmdW5jdGlvbiAocHVibGljS2V5LCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlyID0gbG9hZFB1YmxpY0tleShwdWJsaWNLZXkpXG4gIGlmIChwYWlyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwYWlyLmdldFB1YmxpYyhjb21wcmVzc2VkLCB0cnVlKSlcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlWZXJpZnkgPSBmdW5jdGlvbiAocHVibGljS2V5KSB7XG4gIHJldHVybiBsb2FkUHVibGljS2V5KHB1YmxpY0tleSkgIT09IG51bGxcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlUd2Vha0FkZCA9IGZ1bmN0aW9uIChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlyID0gbG9hZFB1YmxpY0tleShwdWJsaWNLZXkpXG4gIGlmIChwYWlyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuXG4gIHR3ZWFrID0gbmV3IEJOKHR3ZWFrKVxuICBpZiAodHdlYWsuY21wKGVjcGFyYW1zLm4pID49IDApIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHZhciBwb2ludCA9IGVjcGFyYW1zLmcubXVsKHR3ZWFrKS5hZGQocGFpci5wdWIpXG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMucHVibGljS2V5VHdlYWtNdWwgPSBmdW5jdGlvbiAocHVibGljS2V5LCB0d2VhaywgY29tcHJlc3NlZCkge1xuICB2YXIgcGFpciA9IGxvYWRQdWJsaWNLZXkocHVibGljS2V5KVxuICBpZiAocGFpciA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfUEFSU0VfRkFJTClcblxuICB0d2VhayA9IG5ldyBCTih0d2VhaylcbiAgaWYgKHR3ZWFrLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IHR3ZWFrLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9UV0VBS19NVUxfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20ocGFpci5wdWIubXVsKHR3ZWFrKS5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMucHVibGljS2V5Q29tYmluZSA9IGZ1bmN0aW9uIChwdWJsaWNLZXlzLCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlycyA9IG5ldyBBcnJheShwdWJsaWNLZXlzLmxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdWJsaWNLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgcGFpcnNbaV0gPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleXNbaV0pXG4gICAgaWYgKHBhaXJzW2ldID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuICB9XG5cbiAgdmFyIHBvaW50ID0gcGFpcnNbMF0ucHViXG4gIGZvciAodmFyIGogPSAxOyBqIDwgcGFpcnMubGVuZ3RoOyArK2opIHBvaW50ID0gcG9pbnQuYWRkKHBhaXJzW2pdLnB1YilcbiAgaWYgKHBvaW50LmlzSW5maW5pdHkoKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfQ09NQklORV9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMuc2lnbmF0dXJlTm9ybWFsaXplID0gZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICB2YXIgciA9IG5ldyBCTihzaWduYXR1cmUuc2xpY2UoMCwgMzIpKVxuICB2YXIgcyA9IG5ldyBCTihzaWduYXR1cmUuc2xpY2UoMzIsIDY0KSlcbiAgaWYgKHIuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgcy5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuXG4gIHZhciByZXN1bHQgPSBCdWZmZXIuZnJvbShzaWduYXR1cmUpXG4gIGlmIChzLmNtcChlYy5uaCkgPT09IDEpIGVjcGFyYW1zLm4uc3ViKHMpLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgMzIpLmNvcHkocmVzdWx0LCAzMilcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydHMuc2lnbmF0dXJlRXhwb3J0ID0gZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICB2YXIgciA9IHNpZ25hdHVyZS5zbGljZSgwLCAzMilcbiAgdmFyIHMgPSBzaWduYXR1cmUuc2xpY2UoMzIsIDY0KVxuICBpZiAobmV3IEJOKHIpLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IG5ldyBCTihzKS5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuXG4gIHJldHVybiB7IHI6IHIsIHM6IHMgfVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydCA9IGZ1bmN0aW9uIChzaWdPYmopIHtcbiAgdmFyIHIgPSBuZXcgQk4oc2lnT2JqLnIpXG4gIGlmIChyLmNtcChlY3BhcmFtcy5uKSA+PSAwKSByID0gbmV3IEJOKDApXG5cbiAgdmFyIHMgPSBuZXcgQk4oc2lnT2JqLnMpXG4gIGlmIChzLmNtcChlY3BhcmFtcy5uKSA+PSAwKSBzID0gbmV3IEJOKDApXG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIHIudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMiksXG4gICAgcy50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxuICBdKVxufVxuXG5leHBvcnRzLnNpZ24gPSBmdW5jdGlvbiAobWVzc2FnZSwgcHJpdmF0ZUtleSwgbm9uY2VmbiwgZGF0YSkge1xuICBpZiAodHlwZW9mIG5vbmNlZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZ2V0Tm9uY2UgPSBub25jZWZuXG4gICAgbm9uY2VmbiA9IGZ1bmN0aW9uIChjb3VudGVyKSB7XG4gICAgICB2YXIgbm9uY2UgPSBnZXROb25jZShtZXNzYWdlLCBwcml2YXRlS2V5LCBudWxsLCBkYXRhLCBjb3VudGVyKVxuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobm9uY2UpIHx8IG5vbmNlLmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9TSUdOX0ZBSUwpXG5cbiAgICAgIHJldHVybiBuZXcgQk4obm9uY2UpXG4gICAgfVxuICB9XG5cbiAgdmFyIGQgPSBuZXcgQk4ocHJpdmF0ZUtleSlcbiAgaWYgKGQuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgZC5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05fRkFJTClcblxuICB2YXIgcmVzdWx0ID0gZWMuc2lnbihtZXNzYWdlLCBwcml2YXRlS2V5LCB7IGNhbm9uaWNhbDogdHJ1ZSwgazogbm9uY2VmbiwgcGVyczogZGF0YSB9KVxuICByZXR1cm4ge1xuICAgIHNpZ25hdHVyZTogQnVmZmVyLmNvbmNhdChbXG4gICAgICByZXN1bHQuci50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKSxcbiAgICAgIHJlc3VsdC5zLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgMzIpXG4gICAgXSksXG4gICAgcmVjb3Zlcnk6IHJlc3VsdC5yZWNvdmVyeVBhcmFtXG4gIH1cbn1cblxuZXhwb3J0cy52ZXJpZnkgPSBmdW5jdGlvbiAobWVzc2FnZSwgc2lnbmF0dXJlLCBwdWJsaWNLZXkpIHtcbiAgdmFyIHNpZ09iaiA9IHsgcjogc2lnbmF0dXJlLnNsaWNlKDAsIDMyKSwgczogc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkgfVxuXG4gIHZhciBzaWdyID0gbmV3IEJOKHNpZ09iai5yKVxuICB2YXIgc2lncyA9IG5ldyBCTihzaWdPYmoucylcbiAgaWYgKHNpZ3IuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgc2lncy5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuICBpZiAoc2lncy5jbXAoZWMubmgpID09PSAxIHx8IHNpZ3IuaXNaZXJvKCkgfHwgc2lncy5pc1plcm8oKSkgcmV0dXJuIGZhbHNlXG5cbiAgdmFyIHBhaXIgPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleSlcbiAgaWYgKHBhaXIgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpXG5cbiAgcmV0dXJuIGVjLnZlcmlmeShtZXNzYWdlLCBzaWdPYmosIHsgeDogcGFpci5wdWIueCwgeTogcGFpci5wdWIueSB9KVxufVxuXG5leHBvcnRzLnJlY292ZXIgPSBmdW5jdGlvbiAobWVzc2FnZSwgc2lnbmF0dXJlLCByZWNvdmVyeSwgY29tcHJlc3NlZCkge1xuICB2YXIgc2lnT2JqID0geyByOiBzaWduYXR1cmUuc2xpY2UoMCwgMzIpLCBzOiBzaWduYXR1cmUuc2xpY2UoMzIsIDY0KSB9XG5cbiAgdmFyIHNpZ3IgPSBuZXcgQk4oc2lnT2JqLnIpXG4gIHZhciBzaWdzID0gbmV3IEJOKHNpZ09iai5zKVxuICBpZiAoc2lnci5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBzaWdzLmNtcChlY3BhcmFtcy5uKSA+PSAwKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0ZBSUwpXG5cbiAgdHJ5IHtcbiAgICBpZiAoc2lnci5pc1plcm8oKSB8fCBzaWdzLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IoKVxuXG4gICAgdmFyIHBvaW50ID0gZWMucmVjb3ZlclB1YktleShtZXNzYWdlLCBzaWdPYmosIHJlY292ZXJ5KVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9SRUNPVkVSX0ZBSUwpXG4gIH1cbn1cblxuZXhwb3J0cy5lY2RoID0gZnVuY3Rpb24gKHB1YmxpY0tleSwgcHJpdmF0ZUtleSkge1xuICB2YXIgc2hhcmVkID0gZXhwb3J0cy5lY2RoVW5zYWZlKHB1YmxpY0tleSwgcHJpdmF0ZUtleSwgdHJ1ZSlcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzaGFyZWQpLmRpZ2VzdCgpXG59XG5cbmV4cG9ydHMuZWNkaFVuc2FmZSA9IGZ1bmN0aW9uIChwdWJsaWNLZXksIHByaXZhdGVLZXksIGNvbXByZXNzZWQpIHtcbiAgdmFyIHBhaXIgPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleSlcbiAgaWYgKHBhaXIgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpXG5cbiAgdmFyIHNjYWxhciA9IG5ldyBCTihwcml2YXRlS2V5KVxuICBpZiAoc2NhbGFyLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IHNjYWxhci5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDREhfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20ocGFpci5wdWIubXVsKHNjYWxhcikuZW5jb2RlKHRydWUsIGNvbXByZXNzZWQpKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaEJhc2UgPSByZXF1aXJlKCdoYXNoLWJhc2UnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBBUlJBWTE2ID0gbmV3IEFycmF5KDE2KVxuXG5mdW5jdGlvbiBNRDUgKCkge1xuICBIYXNoQmFzZS5jYWxsKHRoaXMsIDY0KVxuXG4gIC8vIHN0YXRlXG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG59XG5cbmluaGVyaXRzKE1ENSwgSGFzaEJhc2UpXG5cbk1ENS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIE0gPSBBUlJBWTE2XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgTVtpXSA9IHRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKGkgKiA0KVxuXG4gIHZhciBhID0gdGhpcy5fYVxuICB2YXIgYiA9IHRoaXMuX2JcbiAgdmFyIGMgPSB0aGlzLl9jXG4gIHZhciBkID0gdGhpcy5fZFxuXG4gIGEgPSBmbkYoYSwgYiwgYywgZCwgTVswXSwgMHhkNzZhYTQ3OCwgNylcbiAgZCA9IGZuRihkLCBhLCBiLCBjLCBNWzFdLCAweGU4YzdiNzU2LCAxMilcbiAgYyA9IGZuRihjLCBkLCBhLCBiLCBNWzJdLCAweDI0MjA3MGRiLCAxNylcbiAgYiA9IGZuRihiLCBjLCBkLCBhLCBNWzNdLCAweGMxYmRjZWVlLCAyMilcbiAgYSA9IGZuRihhLCBiLCBjLCBkLCBNWzRdLCAweGY1N2MwZmFmLCA3KVxuICBkID0gZm5GKGQsIGEsIGIsIGMsIE1bNV0sIDB4NDc4N2M2MmEsIDEyKVxuICBjID0gZm5GKGMsIGQsIGEsIGIsIE1bNl0sIDB4YTgzMDQ2MTMsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bN10sIDB4ZmQ0Njk1MDEsIDIyKVxuICBhID0gZm5GKGEsIGIsIGMsIGQsIE1bOF0sIDB4Njk4MDk4ZDgsIDcpXG4gIGQgPSBmbkYoZCwgYSwgYiwgYywgTVs5XSwgMHg4YjQ0ZjdhZiwgMTIpXG4gIGMgPSBmbkYoYywgZCwgYSwgYiwgTVsxMF0sIDB4ZmZmZjViYjEsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bMTFdLCAweDg5NWNkN2JlLCAyMilcbiAgYSA9IGZuRihhLCBiLCBjLCBkLCBNWzEyXSwgMHg2YjkwMTEyMiwgNylcbiAgZCA9IGZuRihkLCBhLCBiLCBjLCBNWzEzXSwgMHhmZDk4NzE5MywgMTIpXG4gIGMgPSBmbkYoYywgZCwgYSwgYiwgTVsxNF0sIDB4YTY3OTQzOGUsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bMTVdLCAweDQ5YjQwODIxLCAyMilcblxuICBhID0gZm5HKGEsIGIsIGMsIGQsIE1bMV0sIDB4ZjYxZTI1NjIsIDUpXG4gIGQgPSBmbkcoZCwgYSwgYiwgYywgTVs2XSwgMHhjMDQwYjM0MCwgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzExXSwgMHgyNjVlNWE1MSwgMTQpXG4gIGIgPSBmbkcoYiwgYywgZCwgYSwgTVswXSwgMHhlOWI2YzdhYSwgMjApXG4gIGEgPSBmbkcoYSwgYiwgYywgZCwgTVs1XSwgMHhkNjJmMTA1ZCwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzEwXSwgMHgwMjQ0MTQ1MywgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzE1XSwgMHhkOGExZTY4MSwgMTQpXG4gIGIgPSBmbkcoYiwgYywgZCwgYSwgTVs0XSwgMHhlN2QzZmJjOCwgMjApXG4gIGEgPSBmbkcoYSwgYiwgYywgZCwgTVs5XSwgMHgyMWUxY2RlNiwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzE0XSwgMHhjMzM3MDdkNiwgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzNdLCAweGY0ZDUwZDg3LCAxNClcbiAgYiA9IGZuRyhiLCBjLCBkLCBhLCBNWzhdLCAweDQ1NWExNGVkLCAyMClcbiAgYSA9IGZuRyhhLCBiLCBjLCBkLCBNWzEzXSwgMHhhOWUzZTkwNSwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzJdLCAweGZjZWZhM2Y4LCA5KVxuICBjID0gZm5HKGMsIGQsIGEsIGIsIE1bN10sIDB4Njc2ZjAyZDksIDE0KVxuICBiID0gZm5HKGIsIGMsIGQsIGEsIE1bMTJdLCAweDhkMmE0YzhhLCAyMClcblxuICBhID0gZm5IKGEsIGIsIGMsIGQsIE1bNV0sIDB4ZmZmYTM5NDIsIDQpXG4gIGQgPSBmbkgoZCwgYSwgYiwgYywgTVs4XSwgMHg4NzcxZjY4MSwgMTEpXG4gIGMgPSBmbkgoYywgZCwgYSwgYiwgTVsxMV0sIDB4NmQ5ZDYxMjIsIDE2KVxuICBiID0gZm5IKGIsIGMsIGQsIGEsIE1bMTRdLCAweGZkZTUzODBjLCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzFdLCAweGE0YmVlYTQ0LCA0KVxuICBkID0gZm5IKGQsIGEsIGIsIGMsIE1bNF0sIDB4NGJkZWNmYTksIDExKVxuICBjID0gZm5IKGMsIGQsIGEsIGIsIE1bN10sIDB4ZjZiYjRiNjAsIDE2KVxuICBiID0gZm5IKGIsIGMsIGQsIGEsIE1bMTBdLCAweGJlYmZiYzcwLCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzEzXSwgMHgyODliN2VjNiwgNClcbiAgZCA9IGZuSChkLCBhLCBiLCBjLCBNWzBdLCAweGVhYTEyN2ZhLCAxMSlcbiAgYyA9IGZuSChjLCBkLCBhLCBiLCBNWzNdLCAweGQ0ZWYzMDg1LCAxNilcbiAgYiA9IGZuSChiLCBjLCBkLCBhLCBNWzZdLCAweDA0ODgxZDA1LCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzldLCAweGQ5ZDRkMDM5LCA0KVxuICBkID0gZm5IKGQsIGEsIGIsIGMsIE1bMTJdLCAweGU2ZGI5OWU1LCAxMSlcbiAgYyA9IGZuSChjLCBkLCBhLCBiLCBNWzE1XSwgMHgxZmEyN2NmOCwgMTYpXG4gIGIgPSBmbkgoYiwgYywgZCwgYSwgTVsyXSwgMHhjNGFjNTY2NSwgMjMpXG5cbiAgYSA9IGZuSShhLCBiLCBjLCBkLCBNWzBdLCAweGY0MjkyMjQ0LCA2KVxuICBkID0gZm5JKGQsIGEsIGIsIGMsIE1bN10sIDB4NDMyYWZmOTcsIDEwKVxuICBjID0gZm5JKGMsIGQsIGEsIGIsIE1bMTRdLCAweGFiOTQyM2E3LCAxNSlcbiAgYiA9IGZuSShiLCBjLCBkLCBhLCBNWzVdLCAweGZjOTNhMDM5LCAyMSlcbiAgYSA9IGZuSShhLCBiLCBjLCBkLCBNWzEyXSwgMHg2NTViNTljMywgNilcbiAgZCA9IGZuSShkLCBhLCBiLCBjLCBNWzNdLCAweDhmMGNjYzkyLCAxMClcbiAgYyA9IGZuSShjLCBkLCBhLCBiLCBNWzEwXSwgMHhmZmVmZjQ3ZCwgMTUpXG4gIGIgPSBmbkkoYiwgYywgZCwgYSwgTVsxXSwgMHg4NTg0NWRkMSwgMjEpXG4gIGEgPSBmbkkoYSwgYiwgYywgZCwgTVs4XSwgMHg2ZmE4N2U0ZiwgNilcbiAgZCA9IGZuSShkLCBhLCBiLCBjLCBNWzE1XSwgMHhmZTJjZTZlMCwgMTApXG4gIGMgPSBmbkkoYywgZCwgYSwgYiwgTVs2XSwgMHhhMzAxNDMxNCwgMTUpXG4gIGIgPSBmbkkoYiwgYywgZCwgYSwgTVsxM10sIDB4NGUwODExYTEsIDIxKVxuICBhID0gZm5JKGEsIGIsIGMsIGQsIE1bNF0sIDB4Zjc1MzdlODIsIDYpXG4gIGQgPSBmbkkoZCwgYSwgYiwgYywgTVsxMV0sIDB4YmQzYWYyMzUsIDEwKVxuICBjID0gZm5JKGMsIGQsIGEsIGIsIE1bMl0sIDB4MmFkN2QyYmIsIDE1KVxuICBiID0gZm5JKGIsIGMsIGQsIGEsIE1bOV0sIDB4ZWI4NmQzOTEsIDIxKVxuXG4gIHRoaXMuX2EgPSAodGhpcy5fYSArIGEpIHwgMFxuICB0aGlzLl9iID0gKHRoaXMuX2IgKyBiKSB8IDBcbiAgdGhpcy5fYyA9ICh0aGlzLl9jICsgYykgfCAwXG4gIHRoaXMuX2QgPSAodGhpcy5fZCArIGQpIHwgMFxufVxuXG5NRDUucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGNyZWF0ZSBwYWRkaW5nIGFuZCBoYW5kbGUgYmxvY2tzXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdID0gMHg4MFxuICBpZiAodGhpcy5fYmxvY2tPZmZzZXQgPiA1Nikge1xuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fYmxvY2tPZmZzZXQsIDY0KVxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gICAgdGhpcy5fYmxvY2tPZmZzZXQgPSAwXG4gIH1cblxuICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2Jsb2NrT2Zmc2V0LCA1NilcbiAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sIDU2KVxuICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSwgNjApXG4gIHRoaXMuX3VwZGF0ZSgpXG5cbiAgLy8gcHJvZHVjZSByZXN1bHRcbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNilcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9hLCAwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2IsIDQpXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYywgOClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9kLCAxMilcbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiByb3RsICh4LCBuKSB7XG4gIHJldHVybiAoeCA8PCBuKSB8ICh4ID4+PiAoMzIgLSBuKSlcbn1cblxuZnVuY3Rpb24gZm5GIChhLCBiLCBjLCBkLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGMpIHwgKCh+YikgJiBkKSkgKyBtICsgaykgfCAwLCBzKSArIGIpIHwgMFxufVxuXG5mdW5jdGlvbiBmbkcgKGEsIGIsIGMsIGQsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiICYgZCkgfCAoYyAmICh+ZCkpKSArIG0gKyBrKSB8IDAsIHMpICsgYikgfCAwXG59XG5cbmZ1bmN0aW9uIGZuSCAoYSwgYiwgYywgZCwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoYiBeIGMgXiBkKSArIG0gKyBrKSB8IDAsIHMpICsgYikgfCAwXG59XG5cbmZ1bmN0aW9uIGZuSSAoYSwgYiwgYywgZCwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGMgXiAoYiB8ICh+ZCkpKSkgKyBtICsgaykgfCAwLCBzKSArIGIpIHwgMFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1ENVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaEJhc2UgPSByZXF1aXJlKCdoYXNoLWJhc2UnKVxuXG52YXIgQVJSQVkxNiA9IG5ldyBBcnJheSgxNilcblxudmFyIHpsID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dXG5cbnZhciB6ciA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXVxuXG52YXIgc2wgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dXG5cbnZhciBzciA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl1cblxudmFyIGhsID0gWzB4MDAwMDAwMDAsIDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4YTk1M2ZkNGVdXG52YXIgaHIgPSBbMHg1MGEyOGJlNiwgMHg1YzRkZDEyNCwgMHg2ZDcwM2VmMywgMHg3YTZkNzZlOSwgMHgwMDAwMDAwMF1cblxuZnVuY3Rpb24gUklQRU1EMTYwICgpIHtcbiAgSGFzaEJhc2UuY2FsbCh0aGlzLCA2NClcblxuICAvLyBzdGF0ZVxuICB0aGlzLl9hID0gMHg2NzQ1MjMwMVxuICB0aGlzLl9iID0gMHhlZmNkYWI4OVxuICB0aGlzLl9jID0gMHg5OGJhZGNmZVxuICB0aGlzLl9kID0gMHgxMDMyNTQ3NlxuICB0aGlzLl9lID0gMHhjM2QyZTFmMFxufVxuXG5pbmhlcml0cyhSSVBFTUQxNjAsIEhhc2hCYXNlKVxuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB3b3JkcyA9IEFSUkFZMTZcbiAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB3b3Jkc1tqXSA9IHRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKGogKiA0KVxuXG4gIHZhciBhbCA9IHRoaXMuX2EgfCAwXG4gIHZhciBibCA9IHRoaXMuX2IgfCAwXG4gIHZhciBjbCA9IHRoaXMuX2MgfCAwXG4gIHZhciBkbCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlbCA9IHRoaXMuX2UgfCAwXG5cbiAgdmFyIGFyID0gdGhpcy5fYSB8IDBcbiAgdmFyIGJyID0gdGhpcy5fYiB8IDBcbiAgdmFyIGNyID0gdGhpcy5fYyB8IDBcbiAgdmFyIGRyID0gdGhpcy5fZCB8IDBcbiAgdmFyIGVyID0gdGhpcy5fZSB8IDBcblxuICAvLyBjb21wdXRhdGlvblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpICs9IDEpIHtcbiAgICB2YXIgdGxcbiAgICB2YXIgdHJcbiAgICBpZiAoaSA8IDE2KSB7XG4gICAgICB0bCA9IGZuMShhbCwgYmwsIGNsLCBkbCwgZWwsIHdvcmRzW3psW2ldXSwgaGxbMF0sIHNsW2ldKVxuICAgICAgdHIgPSBmbjUoYXIsIGJyLCBjciwgZHIsIGVyLCB3b3Jkc1t6cltpXV0sIGhyWzBdLCBzcltpXSlcbiAgICB9IGVsc2UgaWYgKGkgPCAzMikge1xuICAgICAgdGwgPSBmbjIoYWwsIGJsLCBjbCwgZGwsIGVsLCB3b3Jkc1t6bFtpXV0sIGhsWzFdLCBzbFtpXSlcbiAgICAgIHRyID0gZm40KGFyLCBiciwgY3IsIGRyLCBlciwgd29yZHNbenJbaV1dLCBoclsxXSwgc3JbaV0pXG4gICAgfSBlbHNlIGlmIChpIDwgNDgpIHtcbiAgICAgIHRsID0gZm4zKGFsLCBibCwgY2wsIGRsLCBlbCwgd29yZHNbemxbaV1dLCBobFsyXSwgc2xbaV0pXG4gICAgICB0ciA9IGZuMyhhciwgYnIsIGNyLCBkciwgZXIsIHdvcmRzW3pyW2ldXSwgaHJbMl0sIHNyW2ldKVxuICAgIH0gZWxzZSBpZiAoaSA8IDY0KSB7XG4gICAgICB0bCA9IGZuNChhbCwgYmwsIGNsLCBkbCwgZWwsIHdvcmRzW3psW2ldXSwgaGxbM10sIHNsW2ldKVxuICAgICAgdHIgPSBmbjIoYXIsIGJyLCBjciwgZHIsIGVyLCB3b3Jkc1t6cltpXV0sIGhyWzNdLCBzcltpXSlcbiAgICB9IGVsc2UgeyAvLyBpZiAoaTw4MCkge1xuICAgICAgdGwgPSBmbjUoYWwsIGJsLCBjbCwgZGwsIGVsLCB3b3Jkc1t6bFtpXV0sIGhsWzRdLCBzbFtpXSlcbiAgICAgIHRyID0gZm4xKGFyLCBiciwgY3IsIGRyLCBlciwgd29yZHNbenJbaV1dLCBocls0XSwgc3JbaV0pXG4gICAgfVxuXG4gICAgYWwgPSBlbFxuICAgIGVsID0gZGxcbiAgICBkbCA9IHJvdGwoY2wsIDEwKVxuICAgIGNsID0gYmxcbiAgICBibCA9IHRsXG5cbiAgICBhciA9IGVyXG4gICAgZXIgPSBkclxuICAgIGRyID0gcm90bChjciwgMTApXG4gICAgY3IgPSBiclxuICAgIGJyID0gdHJcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzdGF0ZVxuICB2YXIgdCA9ICh0aGlzLl9iICsgY2wgKyBkcikgfCAwXG4gIHRoaXMuX2IgPSAodGhpcy5fYyArIGRsICsgZXIpIHwgMFxuICB0aGlzLl9jID0gKHRoaXMuX2QgKyBlbCArIGFyKSB8IDBcbiAgdGhpcy5fZCA9ICh0aGlzLl9lICsgYWwgKyBicikgfCAwXG4gIHRoaXMuX2UgPSAodGhpcy5fYSArIGJsICsgY3IpIHwgMFxuICB0aGlzLl9hID0gdFxufVxuXG5SSVBFTUQxNjAucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGNyZWF0ZSBwYWRkaW5nIGFuZCBoYW5kbGUgYmxvY2tzXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdID0gMHg4MFxuICBpZiAodGhpcy5fYmxvY2tPZmZzZXQgPiA1Nikge1xuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fYmxvY2tPZmZzZXQsIDY0KVxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gICAgdGhpcy5fYmxvY2tPZmZzZXQgPSAwXG4gIH1cblxuICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2Jsb2NrT2Zmc2V0LCA1NilcbiAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sIDU2KVxuICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSwgNjApXG4gIHRoaXMuX3VwZGF0ZSgpXG5cbiAgLy8gcHJvZHVjZSByZXN1bHRcbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyA/IEJ1ZmZlci5hbGxvYygyMCkgOiBuZXcgQnVmZmVyKDIwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2EsIDApXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYiwgNClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9jLCA4KVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2QsIDEyKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2UsIDE2KVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHJvdGwgKHgsIG4pIHtcbiAgcmV0dXJuICh4IDw8IG4pIHwgKHggPj4+ICgzMiAtIG4pKVxufVxuXG5mdW5jdGlvbiBmbjEgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKGIgXiBjIF4gZCkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjIgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiICYgYykgfCAoKH5iKSAmIGQpKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbmZ1bmN0aW9uIGZuMyAoYSwgYiwgYywgZCwgZSwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGIgfCAofmMpKSBeIGQpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm40IChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGQpIHwgKGMgJiAofmQpKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjUgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKGIgXiAoYyB8ICh+ZCkpKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUklQRU1EMTYwXG4iLCJ2YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gU0hBIChhbGdvcml0aG0pIHtcbiAgYWxnb3JpdGhtID0gYWxnb3JpdGhtLnRvTG93ZXJDYXNlKClcblxuICB2YXIgQWxnb3JpdGhtID0gZXhwb3J0c1thbGdvcml0aG1dXG4gIGlmICghQWxnb3JpdGhtKSB0aHJvdyBuZXcgRXJyb3IoYWxnb3JpdGhtICsgJyBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyknKVxuXG4gIHJldHVybiBuZXcgQWxnb3JpdGhtKClcbn1cblxuZXhwb3J0cy5zaGEgPSByZXF1aXJlKCcuL3NoYScpXG5leHBvcnRzLnNoYTEgPSByZXF1aXJlKCcuL3NoYTEnKVxuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYTIyNCcpXG5leHBvcnRzLnNoYTI1NiA9IHJlcXVpcmUoJy4vc2hhMjU2JylcbmV4cG9ydHMuc2hhMzg0ID0gcmVxdWlyZSgnLi9zaGEzODQnKVxuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYTUxMicpXG4iLCIvKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0wLCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIFBVQiAxODAtMVxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBkZXJpdmVkIGZyb20gc2hhMS5qcyBvZiB0aGUgc2FtZSByZXBvc2l0b3J5LlxuICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBTSEEtMCBhbmQgU0hBLTEgaXMganVzdCBhIGJpdHdpc2Ugcm90YXRlIGxlZnRcbiAqIG9wZXJhdGlvbiB3YXMgYWRkZWQuXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYSAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhLCBIYXNoKVxuXG5TaGEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDUgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCA1KSB8IChudW0gPj4+IDI3KVxufVxuXG5mdW5jdGlvbiByb3RsMzAgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAzMCkgfCAobnVtID4+PiAyKVxufVxuXG5mdW5jdGlvbiBmdCAocywgYiwgYywgZCkge1xuICBpZiAocyA9PT0gMCkgcmV0dXJuIChiICYgYykgfCAoKH5iKSAmIGQpXG4gIGlmIChzID09PSAyKSByZXR1cm4gKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpXG4gIHJldHVybiBiIF4gYyBeIGRcbn1cblxuU2hhLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7ICsraikge1xuICAgIHZhciBzID0gfn4oaiAvIDIwKVxuICAgIHZhciB0ID0gKHJvdGw1KGEpICsgZnQocywgYiwgYywgZCkgKyBlICsgV1tqXSArIEtbc10pIHwgMFxuXG4gICAgZSA9IGRcbiAgICBkID0gY1xuICAgIGMgPSByb3RsMzAoYilcbiAgICBiID0gYVxuICAgIGEgPSB0XG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG59XG5cblNoYS5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhXG4iLCIvKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0xLCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIFBVQiAxODAtMVxuICogVmVyc2lvbiAyLjFhIENvcHlyaWdodCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDAyLlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgZGV0YWlscy5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxudmFyIEsgPSBbXG4gIDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMgfCAwLCAweGNhNjJjMWQ2IHwgMFxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg4MClcblxuZnVuY3Rpb24gU2hhMSAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMSwgSGFzaClcblxuU2hhMS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4Njc0NTIzMDFcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODlcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmVcbiAgdGhpcy5fZCA9IDB4MTAzMjU0NzZcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjBcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiByb3RsMSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDEpIHwgKG51bSA+Pj4gMzEpXG59XG5cbmZ1bmN0aW9uIHJvdGw1IChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgNSkgfCAobnVtID4+PiAyNylcbn1cblxuZnVuY3Rpb24gcm90bDMwIChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgMzApIHwgKG51bSA+Pj4gMilcbn1cblxuZnVuY3Rpb24gZnQgKHMsIGIsIGMsIGQpIHtcbiAgaWYgKHMgPT09IDApIHJldHVybiAoYiAmIGMpIHwgKCh+YikgJiBkKVxuICBpZiAocyA9PT0gMikgcmV0dXJuIChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKVxuICByZXR1cm4gYiBeIGMgXiBkXG59XG5cblNoYTEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYSA9IHRoaXMuX2EgfCAwXG4gIHZhciBiID0gdGhpcy5fYiB8IDBcbiAgdmFyIGMgPSB0aGlzLl9jIHwgMFxuICB2YXIgZCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlID0gdGhpcy5fZSB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICBmb3IgKDsgaSA8IDgwOyArK2kpIFdbaV0gPSByb3RsMShXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdKVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7ICsraikge1xuICAgIHZhciBzID0gfn4oaiAvIDIwKVxuICAgIHZhciB0ID0gKHJvdGw1KGEpICsgZnQocywgYiwgYywgZCkgKyBlICsgV1tqXSArIEtbc10pIHwgMFxuXG4gICAgZSA9IGRcbiAgICBkID0gY1xuICAgIGMgPSByb3RsMzAoYilcbiAgICBiID0gYVxuICAgIGEgPSB0XG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG59XG5cblNoYTEucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTFcbiIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyMjQgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyMjQsIFNoYTI1NilcblxuU2hhMjI0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHhjMTA1OWVkOFxuICB0aGlzLl9iID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kID0gMHhmNzBlNTkzOVxuICB0aGlzLl9lID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nID0gMHg2NGY5OGZhN1xuICB0aGlzLl9oID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTIyNC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gQnVmZmVyLmFsbG9jVW5zYWZlKDI4KVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EsIDApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2IsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QsIDEyKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9lLCAxNilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZiwgMjApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2csIDI0KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMjI0XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhMzg0ICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTM4NCwgU0hBNTEyKVxuXG5TaGEzODQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHhjYmJiOWQ1ZFxuICB0aGlzLl9iaCA9IDB4NjI5YTI5MmFcbiAgdGhpcy5fY2ggPSAweDkxNTkwMTVhXG4gIHRoaXMuX2RoID0gMHgxNTJmZWNkOFxuICB0aGlzLl9laCA9IDB4NjczMzI2NjdcbiAgdGhpcy5fZmggPSAweDhlYjQ0YTg3XG4gIHRoaXMuX2doID0gMHhkYjBjMmUwZFxuICB0aGlzLl9oaCA9IDB4NDdiNTQ4MWRcblxuICB0aGlzLl9hbCA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYmwgPSAweDM2N2NkNTA3XG4gIHRoaXMuX2NsID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kbCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZWwgPSAweGZmYzAwYjMxXG4gIHRoaXMuX2ZsID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nbCA9IDB4NjRmOThmYTdcbiAgdGhpcy5faGwgPSAweGJlZmE0ZmE0XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuU2hhMzg0LnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBCdWZmZXIuYWxsb2NVbnNhZmUoNDgpXG5cbiAgZnVuY3Rpb24gd3JpdGVJbnQ2NEJFIChoLCBsLCBvZmZzZXQpIHtcbiAgICBILndyaXRlSW50MzJCRShoLCBvZmZzZXQpXG4gICAgSC53cml0ZUludDMyQkUobCwgb2Zmc2V0ICsgNClcbiAgfVxuXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9haCwgdGhpcy5fYWwsIDApXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9iaCwgdGhpcy5fYmwsIDgpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9jaCwgdGhpcy5fY2wsIDE2KVxuICB3cml0ZUludDY0QkUodGhpcy5fZGgsIHRoaXMuX2RsLCAyNClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2VoLCB0aGlzLl9lbCwgMzIpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9maCwgdGhpcy5fZmwsIDQwKVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMzg0XG4iLCJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmZ1bmN0aW9uIENpcGhlckJhc2UgKGhhc2hNb2RlKSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuaGFzaE1vZGUgPSB0eXBlb2YgaGFzaE1vZGUgPT09ICdzdHJpbmcnXG4gIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgdGhpc1toYXNoTW9kZV0gPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5maW5hbCA9IHRoaXMuX2ZpbmFsT3JEaWdlc3RcbiAgfVxuICBpZiAodGhpcy5fZmluYWwpIHtcbiAgICB0aGlzLl9fZmluYWwgPSB0aGlzLl9maW5hbFxuICAgIHRoaXMuX2ZpbmFsID0gbnVsbFxuICB9XG4gIHRoaXMuX2RlY29kZXIgPSBudWxsXG4gIHRoaXMuX2VuY29kaW5nID0gbnVsbFxufVxuaW5oZXJpdHMoQ2lwaGVyQmFzZSwgVHJhbnNmb3JtKVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgaW5wdXRFbmMsIG91dHB1dEVuYykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGlucHV0RW5jKVxuICB9XG5cbiAgdmFyIG91dERhdGEgPSB0aGlzLl91cGRhdGUoZGF0YSlcbiAgaWYgKHRoaXMuaGFzaE1vZGUpIHJldHVybiB0aGlzXG5cbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMpXG4gIH1cblxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uICgpIHt9XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5nZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdmFyIGVyclxuICB0cnkge1xuICAgIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgICB0aGlzLl91cGRhdGUoZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShkYXRhKSlcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH0gZmluYWxseSB7XG4gICAgbmV4dChlcnIpXG4gIH1cbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChkb25lKSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICB0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH1cblxuICBkb25lKGVycilcbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0ID0gZnVuY3Rpb24gKG91dHB1dEVuYykge1xuICB2YXIgb3V0RGF0YSA9IHRoaXMuX19maW5hbCgpIHx8IEJ1ZmZlci5hbGxvYygwKVxuICBpZiAob3V0cHV0RW5jKSB7XG4gICAgb3V0RGF0YSA9IHRoaXMuX3RvU3RyaW5nKG91dERhdGEsIG91dHB1dEVuYywgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUsIGVuYywgZmluKSB7XG4gIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNcbiAgfVxuXG4gIGlmICh0aGlzLl9lbmNvZGluZyAhPT0gZW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2NhblxcJ3Qgc3dpdGNoIGVuY29kaW5ncycpXG5cbiAgdmFyIG91dCA9IHRoaXMuX2RlY29kZXIud3JpdGUodmFsdWUpXG4gIGlmIChmaW4pIHtcbiAgICBvdXQgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlckJhc2VcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gZXhwb3J0cztcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgbWluQXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIG1pblV0aWxzID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWNyeXB0by11dGlscycpO1xuXG51dGlscy5hc3NlcnQgPSBtaW5Bc3NlcnQ7XG51dGlscy50b0FycmF5ID0gbWluVXRpbHMudG9BcnJheTtcbnV0aWxzLnplcm8yID0gbWluVXRpbHMuemVybzI7XG51dGlscy50b0hleCA9IG1pblV0aWxzLnRvSGV4O1xudXRpbHMuZW5jb2RlID0gbWluVXRpbHMuZW5jb2RlO1xuXG4vLyBSZXByZXNlbnQgbnVtIGluIGEgdy1OQUYgZm9ybVxuZnVuY3Rpb24gZ2V0TkFGKG51bSwgdykge1xuICB2YXIgbmFmID0gW107XG4gIHZhciB3cyA9IDEgPDwgKHcgKyAxKTtcbiAgdmFyIGsgPSBudW0uY2xvbmUoKTtcbiAgd2hpbGUgKGsuY21wbigxKSA+PSAwKSB7XG4gICAgdmFyIHo7XG4gICAgaWYgKGsuaXNPZGQoKSkge1xuICAgICAgdmFyIG1vZCA9IGsuYW5kbG4od3MgLSAxKTtcbiAgICAgIGlmIChtb2QgPiAod3MgPj4gMSkgLSAxKVxuICAgICAgICB6ID0gKHdzID4+IDEpIC0gbW9kO1xuICAgICAgZWxzZVxuICAgICAgICB6ID0gbW9kO1xuICAgICAgay5pc3Vibih6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgeiA9IDA7XG4gICAgfVxuICAgIG5hZi5wdXNoKHopO1xuXG4gICAgLy8gT3B0aW1pemF0aW9uLCBzaGlmdCBieSB3b3JkIGlmIHBvc3NpYmxlXG4gICAgdmFyIHNoaWZ0ID0gKGsuY21wbigwKSAhPT0gMCAmJiBrLmFuZGxuKHdzIC0gMSkgPT09IDApID8gKHcgKyAxKSA6IDE7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzaGlmdDsgaSsrKVxuICAgICAgbmFmLnB1c2goMCk7XG4gICAgay5pdXNocm4oc2hpZnQpO1xuICB9XG5cbiAgcmV0dXJuIG5hZjtcbn1cbnV0aWxzLmdldE5BRiA9IGdldE5BRjtcblxuLy8gUmVwcmVzZW50IGsxLCBrMiBpbiBhIEpvaW50IFNwYXJzZSBGb3JtXG5mdW5jdGlvbiBnZXRKU0YoazEsIGsyKSB7XG4gIHZhciBqc2YgPSBbXG4gICAgW10sXG4gICAgW11cbiAgXTtcblxuICBrMSA9IGsxLmNsb25lKCk7XG4gIGsyID0gazIuY2xvbmUoKTtcbiAgdmFyIGQxID0gMDtcbiAgdmFyIGQyID0gMDtcbiAgd2hpbGUgKGsxLmNtcG4oLWQxKSA+IDAgfHwgazIuY21wbigtZDIpID4gMCkge1xuXG4gICAgLy8gRmlyc3QgcGhhc2VcbiAgICB2YXIgbTE0ID0gKGsxLmFuZGxuKDMpICsgZDEpICYgMztcbiAgICB2YXIgbTI0ID0gKGsyLmFuZGxuKDMpICsgZDIpICYgMztcbiAgICBpZiAobTE0ID09PSAzKVxuICAgICAgbTE0ID0gLTE7XG4gICAgaWYgKG0yNCA9PT0gMylcbiAgICAgIG0yNCA9IC0xO1xuICAgIHZhciB1MTtcbiAgICBpZiAoKG0xNCAmIDEpID09PSAwKSB7XG4gICAgICB1MSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMS5hbmRsbig3KSArIGQxKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMjQgPT09IDIpXG4gICAgICAgIHUxID0gLW0xNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTEgPSBtMTQ7XG4gICAgfVxuICAgIGpzZlswXS5wdXNoKHUxKTtcblxuICAgIHZhciB1MjtcbiAgICBpZiAoKG0yNCAmIDEpID09PSAwKSB7XG4gICAgICB1MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMi5hbmRsbig3KSArIGQyKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMTQgPT09IDIpXG4gICAgICAgIHUyID0gLW0yNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTIgPSBtMjQ7XG4gICAgfVxuICAgIGpzZlsxXS5wdXNoKHUyKTtcblxuICAgIC8vIFNlY29uZCBwaGFzZVxuICAgIGlmICgyICogZDEgPT09IHUxICsgMSlcbiAgICAgIGQxID0gMSAtIGQxO1xuICAgIGlmICgyICogZDIgPT09IHUyICsgMSlcbiAgICAgIGQyID0gMSAtIGQyO1xuICAgIGsxLml1c2hybigxKTtcbiAgICBrMi5pdXNocm4oMSk7XG4gIH1cblxuICByZXR1cm4ganNmO1xufVxudXRpbHMuZ2V0SlNGID0gZ2V0SlNGO1xuXG5mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eShvYmosIG5hbWUsIGNvbXB1dGVyKSB7XG4gIHZhciBrZXkgPSAnXycgKyBuYW1lO1xuICBvYmoucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpc1trZXldIDpcbiAgICAgICAgICAgdGhpc1trZXldID0gY29tcHV0ZXIuY2FsbCh0aGlzKTtcbiAgfTtcbn1cbnV0aWxzLmNhY2hlZFByb3BlcnR5ID0gY2FjaGVkUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHBhcnNlQnl0ZXMoYnl0ZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycgPyB1dGlscy50b0FycmF5KGJ5dGVzLCAnaGV4JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzO1xufVxudXRpbHMucGFyc2VCeXRlcyA9IHBhcnNlQnl0ZXM7XG5cbmZ1bmN0aW9uIGludEZyb21MRShieXRlcykge1xuICByZXR1cm4gbmV3IEJOKGJ5dGVzLCAnaGV4JywgJ2xlJyk7XG59XG51dGlscy5pbnRGcm9tTEUgPSBpbnRGcm9tTEU7XG5cbiIsInZhciByO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJhbmQobGVuKSB7XG4gIGlmICghcilcbiAgICByID0gbmV3IFJhbmQobnVsbCk7XG5cbiAgcmV0dXJuIHIuZ2VuZXJhdGUobGVuKTtcbn07XG5cbmZ1bmN0aW9uIFJhbmQocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kO1xufVxubW9kdWxlLmV4cG9ydHMuUmFuZCA9IFJhbmQ7XG5cblJhbmQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuKSB7XG4gIHJldHVybiB0aGlzLl9yYW5kKGxlbik7XG59O1xuXG4vLyBFbXVsYXRlIGNyeXB0byBBUEkgdXNpbmcgcmFuZHlcblJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICBpZiAodGhpcy5yYW5kLmdldEJ5dGVzKVxuICAgIHJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMobik7XG5cbiAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKylcbiAgICByZXNbaV0gPSB0aGlzLnJhbmQuZ2V0Qnl0ZSgpO1xuICByZXR1cm4gcmVzO1xufTtcblxuaWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0Jykge1xuICBpZiAoc2VsZi5jcnlwdG8gJiYgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChzZWxmLm1zQ3J5cHRvICYmIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gSUVcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgLy8gU2FmYXJpJ3MgV2ViV29ya2VycyBkbyBub3QgaGF2ZSBgY3J5cHRvYFxuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkIGp1bmtcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgfTtcbiAgfVxufSBlbHNlIHtcbiAgLy8gTm9kZS5qcyBvciBXZWIgd29ya2VyIHdpdGggbm8gY3J5cHRvIHN1cHBvcnRcbiAgdHJ5IHtcbiAgICB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgIT09ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQnKTtcblxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBnZXROQUYgPSB1dGlscy5nZXROQUY7XG52YXIgZ2V0SlNGID0gdXRpbHMuZ2V0SlNGO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gQmFzZUN1cnZlKHR5cGUsIGNvbmYpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5wID0gbmV3IEJOKGNvbmYucCwgMTYpO1xuXG4gIC8vIFVzZSBNb250Z29tZXJ5LCB3aGVuIHRoZXJlIGlzIG5vIGZhc3QgcmVkdWN0aW9uIGZvciB0aGUgcHJpbWVcbiAgdGhpcy5yZWQgPSBjb25mLnByaW1lID8gQk4ucmVkKGNvbmYucHJpbWUpIDogQk4ubW9udCh0aGlzLnApO1xuXG4gIC8vIFVzZWZ1bCBmb3IgbWFueSBjdXJ2ZXNcbiAgdGhpcy56ZXJvID0gbmV3IEJOKDApLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5vbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLnR3byA9IG5ldyBCTigyKS50b1JlZCh0aGlzLnJlZCk7XG5cbiAgLy8gQ3VydmUgY29uZmlndXJhdGlvbiwgb3B0aW9uYWxcbiAgdGhpcy5uID0gY29uZi5uICYmIG5ldyBCTihjb25mLm4sIDE2KTtcbiAgdGhpcy5nID0gY29uZi5nICYmIHRoaXMucG9pbnRGcm9tSlNPTihjb25mLmcsIGNvbmYuZ1JlZCk7XG5cbiAgLy8gVGVtcG9yYXJ5IGFycmF5c1xuICB0aGlzLl93bmFmVDEgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUMiA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQzID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDQgPSBuZXcgQXJyYXkoNCk7XG5cbiAgLy8gR2VuZXJhbGl6ZWQgR3JlZyBNYXh3ZWxsJ3MgdHJpY2tcbiAgdmFyIGFkanVzdENvdW50ID0gdGhpcy5uICYmIHRoaXMucC5kaXYodGhpcy5uKTtcbiAgaWYgKCFhZGp1c3RDb3VudCB8fCBhZGp1c3RDb3VudC5jbXBuKDEwMCkgPiAwKSB7XG4gICAgdGhpcy5yZWROID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9tYXh3ZWxsVHJpY2sgPSB0cnVlO1xuICAgIHRoaXMucmVkTiA9IHRoaXMubi50b1JlZCh0aGlzLnJlZCk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gQmFzZUN1cnZlO1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl9maXhlZE5hZk11bCA9IGZ1bmN0aW9uIF9maXhlZE5hZk11bChwLCBrKSB7XG4gIGFzc2VydChwLnByZWNvbXB1dGVkKTtcbiAgdmFyIGRvdWJsZXMgPSBwLl9nZXREb3VibGVzKCk7XG5cbiAgdmFyIG5hZiA9IGdldE5BRihrLCAxKTtcbiAgdmFyIEkgPSAoMSA8PCAoZG91Ymxlcy5zdGVwICsgMSkpIC0gKGRvdWJsZXMuc3RlcCAlIDIgPT09IDAgPyAyIDogMSk7XG4gIEkgLz0gMztcblxuICAvLyBUcmFuc2xhdGUgaW50byBtb3JlIHdpbmRvd2VkIGZvcm1cbiAgdmFyIHJlcHIgPSBbXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuYWYubGVuZ3RoOyBqICs9IGRvdWJsZXMuc3RlcCkge1xuICAgIHZhciBuYWZXID0gMDtcbiAgICBmb3IgKHZhciBrID0gaiArIGRvdWJsZXMuc3RlcCAtIDE7IGsgPj0gajsgay0tKVxuICAgICAgbmFmVyA9IChuYWZXIDw8IDEpICsgbmFmW2tdO1xuICAgIHJlcHIucHVzaChuYWZXKTtcbiAgfVxuXG4gIHZhciBhID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIHZhciBiID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIGZvciAodmFyIGkgPSBJOyBpID4gMDsgaS0tKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXByLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbmFmVyA9IHJlcHJbal07XG4gICAgICBpZiAobmFmVyA9PT0gaSlcbiAgICAgICAgYiA9IGIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0pO1xuICAgICAgZWxzZSBpZiAobmFmVyA9PT0gLWkpXG4gICAgICAgIGIgPSBiLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdLm5lZygpKTtcbiAgICB9XG4gICAgYSA9IGEuYWRkKGIpO1xuICB9XG4gIHJldHVybiBhLnRvUCgpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fd25hZk11bCA9IGZ1bmN0aW9uIF93bmFmTXVsKHAsIGspIHtcbiAgdmFyIHcgPSA0O1xuXG4gIC8vIFByZWNvbXB1dGUgd2luZG93XG4gIHZhciBuYWZQb2ludHMgPSBwLl9nZXROQUZQb2ludHModyk7XG4gIHcgPSBuYWZQb2ludHMud25kO1xuICB2YXIgd25kID0gbmFmUG9pbnRzLnBvaW50cztcblxuICAvLyBHZXQgTkFGIGZvcm1cbiAgdmFyIG5hZiA9IGdldE5BRihrLCB3KTtcblxuICAvLyBBZGQgYHRoaXNgKihOKzEpIGZvciBldmVyeSB3LU5BRiBpbmRleFxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIGZvciAodmFyIGkgPSBuYWYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyBDb3VudCB6ZXJvZXNcbiAgICBmb3IgKHZhciBrID0gMDsgaSA+PSAwICYmIG5hZltpXSA9PT0gMDsgaS0tKVxuICAgICAgaysrO1xuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG5cbiAgICBpZiAoaSA8IDApXG4gICAgICBicmVhaztcbiAgICB2YXIgeiA9IG5hZltpXTtcbiAgICBhc3NlcnQoeiAhPT0gMCk7XG4gICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpIHtcbiAgICAgIC8vIEogKy0gUFxuICAgICAgaWYgKHogPiAwKVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSiArLSBKXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHduZFsoLXogLSAxKSA+PiAxXS5uZWcoKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwLnR5cGUgPT09ICdhZmZpbmUnID8gYWNjLnRvUCgpIDogYWNjO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fd25hZk11bEFkZCA9IGZ1bmN0aW9uIF93bmFmTXVsQWRkKGRlZlcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamFjb2JpYW5SZXN1bHQpIHtcbiAgdmFyIHduZFdpZHRoID0gdGhpcy5fd25hZlQxO1xuICB2YXIgd25kID0gdGhpcy5fd25hZlQyO1xuICB2YXIgbmFmID0gdGhpcy5fd25hZlQzO1xuXG4gIC8vIEZpbGwgYWxsIGFycmF5c1xuICB2YXIgbWF4ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBuYWZQb2ludHMgPSBwLl9nZXROQUZQb2ludHMoZGVmVyk7XG4gICAgd25kV2lkdGhbaV0gPSBuYWZQb2ludHMud25kO1xuICAgIHduZFtpXSA9IG5hZlBvaW50cy5wb2ludHM7XG4gIH1cblxuICAvLyBDb21iIHNtYWxsIHdpbmRvdyBOQUZzXG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDE7IGkgLT0gMikge1xuICAgIHZhciBhID0gaSAtIDE7XG4gICAgdmFyIGIgPSBpO1xuICAgIGlmICh3bmRXaWR0aFthXSAhPT0gMSB8fCB3bmRXaWR0aFtiXSAhPT0gMSkge1xuICAgICAgbmFmW2FdID0gZ2V0TkFGKGNvZWZmc1thXSwgd25kV2lkdGhbYV0pO1xuICAgICAgbmFmW2JdID0gZ2V0TkFGKGNvZWZmc1tiXSwgd25kV2lkdGhbYl0pO1xuICAgICAgbWF4ID0gTWF0aC5tYXgobmFmW2FdLmxlbmd0aCwgbWF4KTtcbiAgICAgIG1heCA9IE1hdGgubWF4KG5hZltiXS5sZW5ndGgsIG1heCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgY29tYiA9IFtcbiAgICAgIHBvaW50c1thXSwgLyogMSAqL1xuICAgICAgbnVsbCwgLyogMyAqL1xuICAgICAgbnVsbCwgLyogNSAqL1xuICAgICAgcG9pbnRzW2JdIC8qIDcgKi9cbiAgICBdO1xuXG4gICAgLy8gVHJ5IHRvIGF2b2lkIFByb2plY3RpdmUgcG9pbnRzLCBpZiBwb3NzaWJsZVxuICAgIGlmIChwb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkpID09PSAwKSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLmFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH0gZWxzZSBpZiAocG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55LnJlZE5lZygpKSA9PT0gMCkge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS5hZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0pO1xuICAgICAgY29tYlsyXSA9IHBvaW50c1thXS50b0ooKS5taXhlZEFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IFtcbiAgICAgIC0zLCAvKiAtMSAtMSAqL1xuICAgICAgLTEsIC8qIC0xIDAgKi9cbiAgICAgIC01LCAvKiAtMSAxICovXG4gICAgICAtNywgLyogMCAtMSAqL1xuICAgICAgMCwgLyogMCAwICovXG4gICAgICA3LCAvKiAwIDEgKi9cbiAgICAgIDUsIC8qIDEgLTEgKi9cbiAgICAgIDEsIC8qIDEgMCAqL1xuICAgICAgMyAgLyogMSAxICovXG4gICAgXTtcblxuICAgIHZhciBqc2YgPSBnZXRKU0YoY29lZmZzW2FdLCBjb2VmZnNbYl0pO1xuICAgIG1heCA9IE1hdGgubWF4KGpzZlswXS5sZW5ndGgsIG1heCk7XG4gICAgbmFmW2FdID0gbmV3IEFycmF5KG1heCk7XG4gICAgbmFmW2JdID0gbmV3IEFycmF5KG1heCk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXg7IGorKykge1xuICAgICAgdmFyIGphID0ganNmWzBdW2pdIHwgMDtcbiAgICAgIHZhciBqYiA9IGpzZlsxXVtqXSB8IDA7XG5cbiAgICAgIG5hZlthXVtqXSA9IGluZGV4WyhqYSArIDEpICogMyArIChqYiArIDEpXTtcbiAgICAgIG5hZltiXVtqXSA9IDA7XG4gICAgICB3bmRbYV0gPSBjb21iO1xuICAgIH1cbiAgfVxuXG4gIHZhciBhY2MgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgdmFyIHRtcCA9IHRoaXMuX3duYWZUNDtcbiAgZm9yICh2YXIgaSA9IG1heDsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgayA9IDA7XG5cbiAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICB2YXIgemVybyA9IHRydWU7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIHRtcFtqXSA9IG5hZltqXVtpXSB8IDA7XG4gICAgICAgIGlmICh0bXBbal0gIT09IDApXG4gICAgICAgICAgemVybyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCF6ZXJvKVxuICAgICAgICBicmVhaztcbiAgICAgIGsrKztcbiAgICAgIGktLTtcbiAgICB9XG4gICAgaWYgKGkgPj0gMClcbiAgICAgIGsrKztcbiAgICBhY2MgPSBhY2MuZGJscChrKTtcbiAgICBpZiAoaSA8IDApXG4gICAgICBicmVhaztcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIHZhciB6ID0gdG1wW2pdO1xuICAgICAgdmFyIHA7XG4gICAgICBpZiAoeiA9PT0gMClcbiAgICAgICAgY29udGludWU7XG4gICAgICBlbHNlIGlmICh6ID4gMClcbiAgICAgICAgcCA9IHduZFtqXVsoeiAtIDEpID4+IDFdO1xuICAgICAgZWxzZSBpZiAoeiA8IDApXG4gICAgICAgIHAgPSB3bmRbal1bKC16IC0gMSkgPj4gMV0ubmVnKCk7XG5cbiAgICAgIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQocCk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5hZGQocCk7XG4gICAgfVxuICB9XG4gIC8vIFplcm9pZnkgcmVmZXJlbmNlc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHduZFtpXSA9IG51bGw7XG5cbiAgaWYgKGphY29iaWFuUmVzdWx0KVxuICAgIHJldHVybiBhY2M7XG4gIGVsc2VcbiAgICByZXR1cm4gYWNjLnRvUCgpO1xufTtcblxuZnVuY3Rpb24gQmFzZVBvaW50KGN1cnZlLCB0eXBlKSB7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5wcmVjb21wdXRlZCA9IG51bGw7XG59XG5CYXNlQ3VydmUuQmFzZVBvaW50ID0gQmFzZVBvaW50O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEoLypvdGhlciovKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzLCBlbmMpIHtcbiAgYnl0ZXMgPSB1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpO1xuXG4gIHZhciBsZW4gPSB0aGlzLnAuYnl0ZUxlbmd0aCgpO1xuXG4gIC8vIHVuY29tcHJlc3NlZCwgaHlicmlkLW9kZCwgaHlicmlkLWV2ZW5cbiAgaWYgKChieXRlc1swXSA9PT0gMHgwNCB8fCBieXRlc1swXSA9PT0gMHgwNiB8fCBieXRlc1swXSA9PT0gMHgwNykgJiZcbiAgICAgIGJ5dGVzLmxlbmd0aCAtIDEgPT09IDIgKiBsZW4pIHtcbiAgICBpZiAoYnl0ZXNbMF0gPT09IDB4MDYpXG4gICAgICBhc3NlcnQoYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMV0gJSAyID09PSAwKTtcbiAgICBlbHNlIGlmIChieXRlc1swXSA9PT0gMHgwNylcbiAgICAgIGFzc2VydChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAlIDIgPT09IDEpO1xuXG4gICAgdmFyIHJlcyA9ICB0aGlzLnBvaW50KGJ5dGVzLnNsaWNlKDEsIDEgKyBsZW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcy5zbGljZSgxICsgbGVuLCAxICsgMiAqIGxlbikpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfSBlbHNlIGlmICgoYnl0ZXNbMF0gPT09IDB4MDIgfHwgYnl0ZXNbMF0gPT09IDB4MDMpICYmXG4gICAgICAgICAgICAgIGJ5dGVzLmxlbmd0aCAtIDEgPT09IGxlbikge1xuICAgIHJldHVybiB0aGlzLnBvaW50RnJvbVgoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksIGJ5dGVzWzBdID09PSAweDAzKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcG9pbnQgZm9ybWF0Jyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQgPSBmdW5jdGlvbiBlbmNvZGVDb21wcmVzc2VkKGVuYykge1xuICByZXR1cm4gdGhpcy5lbmNvZGUoZW5jLCB0cnVlKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIF9lbmNvZGUoY29tcGFjdCkge1xuICB2YXIgbGVuID0gdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHggPSB0aGlzLmdldFgoKS50b0FycmF5KCdiZScsIGxlbik7XG5cbiAgaWYgKGNvbXBhY3QpXG4gICAgcmV0dXJuIFsgdGhpcy5nZXRZKCkuaXNFdmVuKCkgPyAweDAyIDogMHgwMyBdLmNvbmNhdCh4KTtcblxuICByZXR1cm4gWyAweDA0IF0uY29uY2F0KHgsIHRoaXMuZ2V0WSgpLnRvQXJyYXkoJ2JlJywgbGVuKSkgO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZW5jLCBjb21wYWN0KSB7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5fZW5jb2RlKGNvbXBhY3QpLCBlbmMpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZShwb3dlcikge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZClcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcHJlY29tcHV0ZWQgPSB7XG4gICAgZG91YmxlczogbnVsbCxcbiAgICBuYWY6IG51bGwsXG4gICAgYmV0YTogbnVsbFxuICB9O1xuICBwcmVjb21wdXRlZC5uYWYgPSB0aGlzLl9nZXROQUZQb2ludHMoOCk7XG4gIHByZWNvbXB1dGVkLmRvdWJsZXMgPSB0aGlzLl9nZXREb3VibGVzKDQsIHBvd2VyKTtcbiAgcHJlY29tcHV0ZWQuYmV0YSA9IHRoaXMuX2dldEJldGEoKTtcbiAgdGhpcy5wcmVjb21wdXRlZCA9IHByZWNvbXB1dGVkO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5faGFzRG91YmxlcyA9IGZ1bmN0aW9uIF9oYXNEb3VibGVzKGspIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgZG91YmxlcyA9IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztcbiAgaWYgKCFkb3VibGVzKVxuICAgIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gZG91Ymxlcy5wb2ludHMubGVuZ3RoID49IE1hdGguY2VpbCgoay5iaXRMZW5ndGgoKSArIDEpIC8gZG91Ymxlcy5zdGVwKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldERvdWJsZXMgPSBmdW5jdGlvbiBfZ2V0RG91YmxlcyhzdGVwLCBwb3dlcikge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZCAmJiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpXG4gICAgcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztcblxuICB2YXIgZG91YmxlcyA9IFsgdGhpcyBdO1xuICB2YXIgYWNjID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3dlcjsgaSArPSBzdGVwKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdGVwOyBqKyspXG4gICAgICBhY2MgPSBhY2MuZGJsKCk7XG4gICAgZG91Ymxlcy5wdXNoKGFjYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdGVwOiBzdGVwLFxuICAgIHBvaW50czogZG91Ymxlc1xuICB9O1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzID0gZnVuY3Rpb24gX2dldE5BRlBvaW50cyh3bmQpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQgJiYgdGhpcy5wcmVjb21wdXRlZC5uYWYpXG4gICAgcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO1xuXG4gIHZhciByZXMgPSBbIHRoaXMgXTtcbiAgdmFyIG1heCA9ICgxIDw8IHduZCkgLSAxO1xuICB2YXIgZGJsID0gbWF4ID09PSAxID8gbnVsbCA6IHRoaXMuZGJsKCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbWF4OyBpKyspXG4gICAgcmVzW2ldID0gcmVzW2kgLSAxXS5hZGQoZGJsKTtcbiAgcmV0dXJuIHtcbiAgICB3bmQ6IHduZCxcbiAgICBwb2ludHM6IHJlc1xuICB9O1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZGJscCA9IGZ1bmN0aW9uIGRibHAoaykge1xuICB2YXIgciA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgazsgaSsrKVxuICAgIHIgPSByLmRibCgpO1xuICByZXR1cm4gcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQmFzZSA9IGN1cnZlLmJhc2U7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFNob3J0Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ3Nob3J0JywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5iID0gbmV3IEJOKGNvbmYuYiwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50aW52ID0gdGhpcy50d28ucmVkSW52bSgpO1xuXG4gIHRoaXMuemVyb0EgPSB0aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCkgPT09IDA7XG4gIHRoaXMudGhyZWVBID0gdGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSA9PT0gMDtcblxuICAvLyBJZiB0aGUgY3VydmUgaXMgZW5kb21vcnBoaWMsIHByZWNhbGN1bGF0ZSBiZXRhIGFuZCBsYW1iZGFcbiAgdGhpcy5lbmRvID0gdGhpcy5fZ2V0RW5kb21vcnBoaXNtKGNvbmYpO1xuICB0aGlzLl9lbmRvV25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl9lbmRvV25hZlQyID0gbmV3IEFycmF5KDQpO1xufVxuaW5oZXJpdHMoU2hvcnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IFNob3J0Q3VydmU7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc20gPSBmdW5jdGlvbiBfZ2V0RW5kb21vcnBoaXNtKGNvbmYpIHtcbiAgLy8gTm8gZWZmaWNpZW50IGVuZG9tb3JwaGlzbVxuICBpZiAoIXRoaXMuemVyb0EgfHwgIXRoaXMuZyB8fCAhdGhpcy5uIHx8IHRoaXMucC5tb2RuKDMpICE9PSAxKVxuICAgIHJldHVybjtcblxuICAvLyBDb21wdXRlIGJldGEgYW5kIGxhbWJkYSwgdGhhdCBsYW1iZGEgKiBQID0gKGJldGEgKiBQeDsgUHkpXG4gIHZhciBiZXRhO1xuICB2YXIgbGFtYmRhO1xuICBpZiAoY29uZi5iZXRhKSB7XG4gICAgYmV0YSA9IG5ldyBCTihjb25mLmJldGEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJldGFzID0gdGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7XG4gICAgLy8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBiZXRhXG4gICAgYmV0YSA9IGJldGFzWzBdLmNtcChiZXRhc1sxXSkgPCAwID8gYmV0YXNbMF0gOiBiZXRhc1sxXTtcbiAgICBiZXRhID0gYmV0YS50b1JlZCh0aGlzLnJlZCk7XG4gIH1cbiAgaWYgKGNvbmYubGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEJOKGNvbmYubGFtYmRhLCAxNik7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2hvb3NlIHRoZSBsYW1iZGEgdGhhdCBpcyBtYXRjaGluZyBzZWxlY3RlZCBiZXRhXG4gICAgdmFyIGxhbWJkYXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTtcbiAgICBpZiAodGhpcy5nLm11bChsYW1iZGFzWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzFdO1xuICAgICAgYXNzZXJ0KHRoaXMuZy5tdWwobGFtYmRhKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgYmFzaXMgdmVjdG9ycywgdXNlZCBmb3IgYmFsYW5jZWQgbGVuZ3RoLXR3byByZXByZXNlbnRhdGlvblxuICB2YXIgYmFzaXM7XG4gIGlmIChjb25mLmJhc2lzKSB7XG4gICAgYmFzaXMgPSBjb25mLmJhc2lzLm1hcChmdW5jdGlvbih2ZWMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGE6IG5ldyBCTih2ZWMuYSwgMTYpLFxuICAgICAgICBiOiBuZXcgQk4odmVjLmIsIDE2KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiYXNpcyA9IHRoaXMuX2dldEVuZG9CYXNpcyhsYW1iZGEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiZXRhOiBiZXRhLFxuICAgIGxhbWJkYTogbGFtYmRhLFxuICAgIGJhc2lzOiBiYXNpc1xuICB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cyA9IGZ1bmN0aW9uIF9nZXRFbmRvUm9vdHMobnVtKSB7XG4gIC8vIEZpbmQgcm9vdHMgb2YgZm9yIHheMiArIHggKyAxIGluIEZcbiAgLy8gUm9vdCA9ICgtMSArLSBTcXJ0KC0zKSkgLyAyXG4gIC8vXG4gIHZhciByZWQgPSBudW0gPT09IHRoaXMucCA/IHRoaXMucmVkIDogQk4ubW9udChudW0pO1xuICB2YXIgdGludiA9IG5ldyBCTigyKS50b1JlZChyZWQpLnJlZEludm0oKTtcbiAgdmFyIG50aW52ID0gdGludi5yZWROZWcoKTtcblxuICB2YXIgcyA9IG5ldyBCTigzKS50b1JlZChyZWQpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwodGludik7XG5cbiAgdmFyIGwxID0gbnRpbnYucmVkQWRkKHMpLmZyb21SZWQoKTtcbiAgdmFyIGwyID0gbnRpbnYucmVkU3ViKHMpLmZyb21SZWQoKTtcbiAgcmV0dXJuIFsgbDEsIGwyIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzID0gZnVuY3Rpb24gX2dldEVuZG9CYXNpcyhsYW1iZGEpIHtcbiAgLy8gYXByeFNxcnQgPj0gc3FydCh0aGlzLm4pXG4gIHZhciBhcHJ4U3FydCA9IHRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKSAvIDIpKTtcblxuICAvLyAzLjc0XG4gIC8vIFJ1biBFR0NELCB1bnRpbCByKEwgKyAxKSA8IGFwcnhTcXJ0XG4gIHZhciB1ID0gbGFtYmRhO1xuICB2YXIgdiA9IHRoaXMubi5jbG9uZSgpO1xuICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gIHZhciB5MSA9IG5ldyBCTigwKTtcbiAgdmFyIHgyID0gbmV3IEJOKDApO1xuICB2YXIgeTIgPSBuZXcgQk4oMSk7XG5cbiAgLy8gTk9URTogYWxsIHZlY3RvcnMgYXJlIHJvb3RzIG9mOiBhICsgYiAqIGxhbWJkYSA9IDAgKG1vZCBuKVxuICB2YXIgYTA7XG4gIHZhciBiMDtcbiAgLy8gRmlyc3QgdmVjdG9yXG4gIHZhciBhMTtcbiAgdmFyIGIxO1xuICAvLyBTZWNvbmQgdmVjdG9yXG4gIHZhciBhMjtcbiAgdmFyIGIyO1xuXG4gIHZhciBwcmV2UjtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcjtcbiAgdmFyIHg7XG4gIHdoaWxlICh1LmNtcG4oMCkgIT09IDApIHtcbiAgICB2YXIgcSA9IHYuZGl2KHUpO1xuICAgIHIgPSB2LnN1YihxLm11bCh1KSk7XG4gICAgeCA9IHgyLnN1YihxLm11bCh4MSkpO1xuICAgIHZhciB5ID0geTIuc3ViKHEubXVsKHkxKSk7XG5cbiAgICBpZiAoIWExICYmIHIuY21wKGFwcnhTcXJ0KSA8IDApIHtcbiAgICAgIGEwID0gcHJldlIubmVnKCk7XG4gICAgICBiMCA9IHgxO1xuICAgICAgYTEgPSByLm5lZygpO1xuICAgICAgYjEgPSB4O1xuICAgIH0gZWxzZSBpZiAoYTEgJiYgKytpID09PSAyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcHJldlIgPSByO1xuXG4gICAgdiA9IHU7XG4gICAgdSA9IHI7XG4gICAgeDIgPSB4MTtcbiAgICB4MSA9IHg7XG4gICAgeTIgPSB5MTtcbiAgICB5MSA9IHk7XG4gIH1cbiAgYTIgPSByLm5lZygpO1xuICBiMiA9IHg7XG5cbiAgdmFyIGxlbjEgPSBhMS5zcXIoKS5hZGQoYjEuc3FyKCkpO1xuICB2YXIgbGVuMiA9IGEyLnNxcigpLmFkZChiMi5zcXIoKSk7XG4gIGlmIChsZW4yLmNtcChsZW4xKSA+PSAwKSB7XG4gICAgYTIgPSBhMDtcbiAgICBiMiA9IGIwO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNpZ25zXG4gIGlmIChhMS5uZWdhdGl2ZSkge1xuICAgIGExID0gYTEubmVnKCk7XG4gICAgYjEgPSBiMS5uZWcoKTtcbiAgfVxuICBpZiAoYTIubmVnYXRpdmUpIHtcbiAgICBhMiA9IGEyLm5lZygpO1xuICAgIGIyID0gYjIubmVnKCk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgYTogYTEsIGI6IGIxIH0sXG4gICAgeyBhOiBhMiwgYjogYjIgfVxuICBdO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9TcGxpdCA9IGZ1bmN0aW9uIF9lbmRvU3BsaXQoaykge1xuICB2YXIgYmFzaXMgPSB0aGlzLmVuZG8uYmFzaXM7XG4gIHZhciB2MSA9IGJhc2lzWzBdO1xuICB2YXIgdjIgPSBiYXNpc1sxXTtcblxuICB2YXIgYzEgPSB2Mi5iLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuICB2YXIgYzIgPSB2MS5iLm5lZygpLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuXG4gIHZhciBwMSA9IGMxLm11bCh2MS5hKTtcbiAgdmFyIHAyID0gYzIubXVsKHYyLmEpO1xuICB2YXIgcTEgPSBjMS5tdWwodjEuYik7XG4gIHZhciBxMiA9IGMyLm11bCh2Mi5iKTtcblxuICAvLyBDYWxjdWxhdGUgYW5zd2VyXG4gIHZhciBrMSA9IGsuc3ViKHAxKS5zdWIocDIpO1xuICB2YXIgazIgPSBxMS5hZGQocTIpLm5lZygpO1xuICByZXR1cm4geyBrMTogazEsIGsyOiBrMiB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWCA9IGZ1bmN0aW9uIHBvaW50RnJvbVgoeCwgb2RkKSB7XG4gIHggPSBuZXcgQk4oeCwgMTYpO1xuICBpZiAoIXgucmVkKVxuICAgIHggPSB4LnRvUmVkKHRoaXMucmVkKTtcblxuICB2YXIgeTIgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKHgucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKTtcbiAgdmFyIHkgPSB5Mi5yZWRTcXJ0KCk7XG4gIGlmICh5LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgLy8gWFhYIElzIHRoZXJlIGFueSB3YXkgdG8gdGVsbCBpZiB0aGUgbnVtYmVyIGlzIG9kZCB3aXRob3V0IGNvbnZlcnRpbmcgaXRcbiAgLy8gdG8gbm9uLXJlZCBmb3JtP1xuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaW5mKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4ID0gcG9pbnQueDtcbiAgdmFyIHkgPSBwb2ludC55O1xuXG4gIHZhciBheCA9IHRoaXMuYS5yZWRNdWwoeCk7XG4gIHZhciByaHMgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKGF4KS5yZWRJQWRkKHRoaXMuYik7XG4gIHJldHVybiB5LnJlZFNxcigpLnJlZElTdWIocmhzKS5jbXBuKDApID09PSAwO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkID1cbiAgICBmdW5jdGlvbiBfZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciBucG9pbnRzID0gdGhpcy5fZW5kb1duYWZUMTtcbiAgdmFyIG5jb2VmZnMgPSB0aGlzLl9lbmRvV25hZlQyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGxpdCA9IHRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pO1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBiZXRhID0gcC5fZ2V0QmV0YSgpO1xuXG4gICAgaWYgKHNwbGl0LmsxLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMS5pbmVnKCk7XG4gICAgICBwID0gcC5uZWcodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzcGxpdC5rMi5uZWdhdGl2ZSkge1xuICAgICAgc3BsaXQuazIuaW5lZygpO1xuICAgICAgYmV0YSA9IGJldGEubmVnKHRydWUpO1xuICAgIH1cblxuICAgIG5wb2ludHNbaSAqIDJdID0gcDtcbiAgICBucG9pbnRzW2kgKiAyICsgMV0gPSBiZXRhO1xuICAgIG5jb2VmZnNbaSAqIDJdID0gc3BsaXQuazE7XG4gICAgbmNvZWZmc1tpICogMiArIDFdID0gc3BsaXQuazI7XG4gIH1cbiAgdmFyIHJlcyA9IHRoaXMuX3duYWZNdWxBZGQoMSwgbnBvaW50cywgbmNvZWZmcywgaSAqIDIsIGphY29iaWFuUmVzdWx0KTtcblxuICAvLyBDbGVhbi11cCByZWZlcmVuY2VzIHRvIHBvaW50cyBhbmQgY29lZmZpY2llbnRzXG4gIGZvciAodmFyIGogPSAwOyBqIDwgaSAqIDI7IGorKykge1xuICAgIG5wb2ludHNbal0gPSBudWxsO1xuICAgIG5jb2VmZnNbal0gPSBudWxsO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgaXNSZWQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ2FmZmluZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gbnVsbDtcbiAgICB0aGlzLnkgPSBudWxsO1xuICAgIHRoaXMuaW5mID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgLy8gRm9yY2UgcmVkZ29tZXJ5IHJlcHJlc2VudGF0aW9uIHdoZW4gbG9hZGluZyBmcm9tIEpTT05cbiAgICBpZiAoaXNSZWQpIHtcbiAgICAgIHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgICB0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy5pbmYgPSBmYWxzZTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCBpc1JlZCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIGlzUmVkKTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaiwgcmVkKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmosIHJlZCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuO1xuXG4gIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICBpZiAocHJlICYmIHByZS5iZXRhKVxuICAgIHJldHVybiBwcmUuYmV0YTtcblxuICB2YXIgYmV0YSA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksIHRoaXMueSk7XG4gIGlmIChwcmUpIHtcbiAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlO1xuICAgIHZhciBlbmRvTXVsID0gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIGN1cnZlLnBvaW50KHAueC5yZWRNdWwoY3VydmUuZW5kby5iZXRhKSwgcC55KTtcbiAgICB9O1xuICAgIHByZS5iZXRhID0gYmV0YTtcbiAgICBiZXRhLnByZWNvbXB1dGVkID0ge1xuICAgICAgYmV0YTogbnVsbCxcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKGVuZG9NdWwpXG4gICAgICB9LFxuICAgICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgICBzdGVwOiBwcmUuZG91Ymxlcy5zdGVwLFxuICAgICAgICBwb2ludHM6IHByZS5kb3VibGVzLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBiZXRhO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBbIHRoaXMueCwgdGhpcy55IF07XG5cbiAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnksIHRoaXMucHJlY29tcHV0ZWQgJiYge1xuICAgIGRvdWJsZXM6IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyAmJiB7XG4gICAgICBzdGVwOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKVxuICAgIH0sXG4gICAgbmFmOiB0aGlzLnByZWNvbXB1dGVkLm5hZiAmJiB7XG4gICAgICB3bmQ6IHRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpXG4gICAgfVxuICB9IF07XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmosIHJlZCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpXG4gICAgb2JqID0gSlNPTi5wYXJzZShvYmopO1xuICB2YXIgcmVzID0gY3VydmUucG9pbnQob2JqWzBdLCBvYmpbMV0sIHJlZCk7XG4gIGlmICghb2JqWzJdKVxuICAgIHJldHVybiByZXM7XG5cbiAgZnVuY3Rpb24gb2JqMnBvaW50KG9iaikge1xuICAgIHJldHVybiBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgfVxuXG4gIHZhciBwcmUgPSBvYmpbMl07XG4gIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICBiZXRhOiBudWxsLFxuICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5kb3VibGVzLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9LFxuICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICB3bmQ6IHByZS5uYWYud25kLFxuICAgICAgcG9pbnRzOiBbIHJlcyBdLmNvbmNhdChwcmUubmFmLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9XG4gIH07XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIHJldHVybiB0aGlzLmluZjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gUCArIFAgPSAyUFxuICBpZiAodGhpcy5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICAvLyBQICsgKC1QKSA9IE9cbiAgaWYgKHRoaXMubmVnKCkuZXEocCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgLy8gUCArIFEgPSBPXG4gIGlmICh0aGlzLnguY21wKHAueCkgPT09IDApXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIGMgPSB0aGlzLnkucmVkU3ViKHAueSk7XG4gIGlmIChjLmNtcG4oMCkgIT09IDApXG4gICAgYyA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIocC54KS5yZWRJbnZtKCkpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHAueCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMlAgPSBPXG4gIHZhciB5czEgPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIGlmICh5czEuY21wbigwKSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICB2YXIgeDIgPSB0aGlzLngucmVkU3FyKCk7XG4gIHZhciBkeWludiA9IHlzMS5yZWRJbnZtKCk7XG4gIHZhciBjID0geDIucmVkQWRkKHgyKS5yZWRJQWRkKHgyKS5yZWRJQWRkKGEpLnJlZE11bChkeWludik7XG5cbiAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBrID0gbmV3IEJOKGssIDE2KTtcblxuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWyB0aGlzIF0sIFsgayBdKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAyLCBrMikge1xuICB2YXIgcG9pbnRzID0gWyB0aGlzLCBwMiBdO1xuICB2YXIgY29lZmZzID0gWyBrMSwgazIgXTtcbiAgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIHRydWUpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgcG9pbnRzLCBjb2VmZnMsIDIsIHRydWUpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEocCkge1xuICByZXR1cm4gdGhpcyA9PT0gcCB8fFxuICAgICAgICAgdGhpcy5pbmYgPT09IHAuaW5mICYmXG4gICAgICAgICAgICAgKHRoaXMuaW5mIHx8IHRoaXMueC5jbXAocC54KSA9PT0gMCAmJiB0aGlzLnkuY21wKHAueSkgPT09IDApO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyhfcHJlY29tcHV0ZSkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHJlcyA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCkpO1xuICBpZiAoX3ByZWNvbXB1dGUgJiYgdGhpcy5wcmVjb21wdXRlZCkge1xuICAgIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICAgIHZhciBuZWdhdGUgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gcC5uZWcoKTtcbiAgICB9O1xuICAgIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChuZWdhdGUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSiA9IGZ1bmN0aW9uIHRvSigpIHtcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnksIHRoaXMuY3VydmUub25lKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIEpQb2ludChjdXJ2ZSwgeCwgeSwgeikge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnamFjb2JpYW4nKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy55ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gbmV3IEJOKDApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSBuZXcgQk4oeiwgMTYpO1xuICB9XG4gIGlmICghdGhpcy54LnJlZClcbiAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMueS5yZWQpXG4gICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgaWYgKCF0aGlzLnoucmVkKVxuICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG5cbiAgdGhpcy56T25lID0gdGhpcy56ID09PSB0aGlzLmN1cnZlLm9uZTtcbn1cbmluaGVyaXRzKEpQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5qcG9pbnQgPSBmdW5jdGlvbiBqcG9pbnQoeCwgeSwgeikge1xuICByZXR1cm4gbmV3IEpQb2ludCh0aGlzLCB4LCB5LCB6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudG9QID0gZnVuY3Rpb24gdG9QKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIHppbnYgPSB0aGlzLnoucmVkSW52bSgpO1xuICB2YXIgemludjIgPSB6aW52LnJlZFNxcigpO1xuICB2YXIgYXggPSB0aGlzLngucmVkTXVsKHppbnYyKTtcbiAgdmFyIGF5ID0gdGhpcy55LnJlZE11bCh6aW52MikucmVkTXVsKHppbnYpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KGF4LCBheSk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCwgdGhpcy55LnJlZE5lZygpLCB0aGlzLnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMTJNICsgNFMgKyA3QVxuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueC5yZWRNdWwocHoyKTtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueS5yZWRNdWwocHoyLnJlZE11bChwLnopKTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6Mi5yZWRNdWwodGhpcy56KSk7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwocC56KS5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5taXhlZEFkZCA9IGZ1bmN0aW9uIG1peGVkQWRkKHApIHtcbiAgLy8gTyArIFAgPSBQXG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcC50b0ooKTtcblxuICAvLyBQICsgTyA9IFBcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIDhNICsgM1MgKyA3QVxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueDtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6MikucmVkTXVsKHRoaXMueik7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChwb3cpIHtcbiAgaWYgKHBvdyA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAoIXBvdylcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICBpZiAodGhpcy5jdXJ2ZS56ZXJvQSB8fCB0aGlzLmN1cnZlLnRocmVlQSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKVxuICAgICAgciA9IHIuZGJsKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICAvLyAxTSArIDJTICsgMUEgKyBOICogKDRTICsgNU0gKyA4QSlcbiAgLy8gTiA9IDEgPT4gNk0gKyA2UyArIDlBXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuICB2YXIgdGludiA9IHRoaXMuY3VydmUudGludjtcblxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgLy8gUmV1c2UgcmVzdWx0c1xuICB2YXIganlkID0gankucmVkQWRkKGp5KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3c7IGkrKykge1xuICAgIHZhciBqeDIgPSBqeC5yZWRTcXIoKTtcbiAgICB2YXIganlkMiA9IGp5ZC5yZWRTcXIoKTtcbiAgICB2YXIganlkNCA9IGp5ZDIucmVkU3FyKCk7XG4gICAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgICB2YXIgdDEgPSBqeC5yZWRNdWwoanlkMik7XG4gICAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHQxLnJlZEFkZCh0MSkpO1xuICAgIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuICAgIHZhciBkbnkgPSBjLnJlZE11bCh0Mik7XG4gICAgZG55ID0gZG55LnJlZElBZGQoZG55KS5yZWRJU3ViKGp5ZDQpO1xuICAgIHZhciBueiA9IGp5ZC5yZWRNdWwoanopO1xuICAgIGlmIChpICsgMSA8IHBvdylcbiAgICAgIGp6NCA9IGp6NC5yZWRNdWwoanlkNCk7XG5cbiAgICBqeCA9IG54O1xuICAgIGp6ID0gbno7XG4gICAganlkID0gZG55O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGp4LCBqeWQucmVkTXVsKHRpbnYpLCBqeik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLl96ZXJvRGJsKCk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUudGhyZWVBKVxuICAgIHJldHVybiB0aGlzLl90aHJlZURibCgpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX2RibCgpO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5femVyb0RibCA9IGZ1bmN0aW9uIF96ZXJvRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNEFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhOyBhID0gMFxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KTtcbiAgICAvLyBUID0gTSBeIDIgLSAyKlNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuXG4gICAgLy8gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuXG4gICAgLy8gWDMgPSBUXG4gICAgbnggPSB0O1xuICAgIC8vIFkzID0gTSAqIChTIC0gVCkgLSA4ICogWVlZWVxuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIqWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDktbFxuICAgIC8vIDJNICsgNVMgKyAxM0FcblxuICAgIC8vIEEgPSBYMV4yXG4gICAgdmFyIGEgPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gQiA9IFkxXjJcbiAgICB2YXIgYiA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBDID0gQl4yXG4gICAgdmFyIGMgPSBiLnJlZFNxcigpO1xuICAgIC8vIEQgPSAyICogKChYMSArIEIpXjIgLSBBIC0gQylcbiAgICB2YXIgZCA9IHRoaXMueC5yZWRBZGQoYikucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGMpO1xuICAgIGQgPSBkLnJlZElBZGQoZCk7XG4gICAgLy8gRSA9IDMgKiBBXG4gICAgdmFyIGUgPSBhLnJlZEFkZChhKS5yZWRJQWRkKGEpO1xuICAgIC8vIEYgPSBFXjJcbiAgICB2YXIgZiA9IGUucmVkU3FyKCk7XG5cbiAgICAvLyA4ICogQ1xuICAgIHZhciBjOCA9IGMucmVkSUFkZChjKTtcbiAgICBjOCA9IGM4LnJlZElBZGQoYzgpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG5cbiAgICAvLyBYMyA9IEYgLSAyICogRFxuICAgIG54ID0gZi5yZWRJU3ViKGQpLnJlZElTdWIoZCk7XG4gICAgLy8gWTMgPSBFICogKEQgLSBYMykgLSA4ICogQ1xuICAgIG55ID0gZS5yZWRNdWwoZC5yZWRJU3ViKG54KSkucmVkSVN1YihjOCk7XG4gICAgLy8gWjMgPSAyICogWTEgKiBaMVxuICAgIG56ID0gdGhpcy55LnJlZE11bCh0aGlzLnopO1xuICAgIG56ID0gbnoucmVkSUFkZChueik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl90aHJlZURibCA9IGZ1bmN0aW9uIF90aHJlZURibCgpIHtcbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgLy8gWiA9IDFcbiAgaWYgKHRoaXMuek9uZSkge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1tZGJsLTIwMDctYmxcbiAgICAvLyAxTSArIDVTICsgMTVBXG5cbiAgICAvLyBYWCA9IFgxXjJcbiAgICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gWVkgPSBZMV4yXG4gICAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIFlZWVkgPSBZWV4yXG4gICAgdmFyIHl5eXkgPSB5eS5yZWRTcXIoKTtcbiAgICAvLyBTID0gMiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSlcbiAgICB2YXIgcyA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gICAgcyA9IHMucmVkSUFkZChzKTtcbiAgICAvLyBNID0gMyAqIFhYICsgYVxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KS5yZWRJQWRkKHRoaXMuY3VydmUuYSk7XG4gICAgLy8gVCA9IE1eMiAtIDIgKiBTXG4gICAgdmFyIHQgPSBtLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihzKTtcbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgdmFyIHl5eXk4ID0geXl5eS5yZWRJQWRkKHl5eXkpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICBueSA9IG0ucmVkTXVsKHMucmVkSVN1Yih0KSkucmVkSVN1Yih5eXl5OCk7XG4gICAgLy8gWjMgPSAyICogWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTMuaHRtbCNkb3VibGluZy1kYmwtMjAwMS1iXG4gICAgLy8gM00gKyA1U1xuXG4gICAgLy8gZGVsdGEgPSBaMV4yXG4gICAgdmFyIGRlbHRhID0gdGhpcy56LnJlZFNxcigpO1xuICAgIC8vIGdhbW1hID0gWTFeMlxuICAgIHZhciBnYW1tYSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBiZXRhID0gWDEgKiBnYW1tYVxuICAgIHZhciBiZXRhID0gdGhpcy54LnJlZE11bChnYW1tYSk7XG4gICAgLy8gYWxwaGEgPSAzICogKFgxIC0gZGVsdGEpICogKFgxICsgZGVsdGEpXG4gICAgdmFyIGFscGhhID0gdGhpcy54LnJlZFN1YihkZWx0YSkucmVkTXVsKHRoaXMueC5yZWRBZGQoZGVsdGEpKTtcbiAgICBhbHBoYSA9IGFscGhhLnJlZEFkZChhbHBoYSkucmVkSUFkZChhbHBoYSk7XG4gICAgLy8gWDMgPSBhbHBoYV4yIC0gOCAqIGJldGFcbiAgICB2YXIgYmV0YTQgPSBiZXRhLnJlZElBZGQoYmV0YSk7XG4gICAgYmV0YTQgPSBiZXRhNC5yZWRJQWRkKGJldGE0KTtcbiAgICB2YXIgYmV0YTggPSBiZXRhNC5yZWRBZGQoYmV0YTQpO1xuICAgIG54ID0gYWxwaGEucmVkU3FyKCkucmVkSVN1YihiZXRhOCk7XG4gICAgLy8gWjMgPSAoWTEgKyBaMSleMiAtIGdhbW1hIC0gZGVsdGFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGdhbW1hKS5yZWRJU3ViKGRlbHRhKTtcbiAgICAvLyBZMyA9IGFscGhhICogKDQgKiBiZXRhIC0gWDMpIC0gOCAqIGdhbW1hXjJcbiAgICB2YXIgZ2dhbW1hOCA9IGdhbW1hLnJlZFNxcigpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIG55ID0gYWxwaGEucmVkTXVsKGJldGE0LnJlZElTdWIobngpKS5yZWRJU3ViKGdnYW1tYTgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5fZGJsID0gZnVuY3Rpb24gX2RibCgpIHtcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG5cbiAgLy8gNE0gKyA2UyArIDEwQVxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICB2YXIgankyID0gankucmVkU3FyKCk7XG5cbiAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgdmFyIGp4ZDQgPSBqeC5yZWRBZGQoangpO1xuICBqeGQ0ID0ganhkNC5yZWRJQWRkKGp4ZDQpO1xuICB2YXIgdDEgPSBqeGQ0LnJlZE11bChqeTIpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuXG4gIHZhciBqeWQ4ID0gankyLnJlZFNxcigpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICB2YXIgbnkgPSBjLnJlZE11bCh0MikucmVkSVN1YihqeWQ4KTtcbiAgdmFyIG56ID0gankucmVkQWRkKGp5KS5yZWRNdWwoanopO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudHJwbCA9IGZ1bmN0aW9uIHRycGwoKSB7XG4gIGlmICghdGhpcy5jdXJ2ZS56ZXJvQSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7XG5cbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWwjdHJpcGxpbmctdHBsLTIwMDctYmxcbiAgLy8gNU0gKyAxMFMgKyAuLi5cblxuICAvLyBYWCA9IFgxXjJcbiAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBZWSA9IFkxXjJcbiAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAvLyBaWiA9IFoxXjJcbiAgdmFyIHp6ID0gdGhpcy56LnJlZFNxcigpO1xuICAvLyBZWVlZID0gWVleMlxuICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAvLyBNID0gMyAqIFhYICsgYSAqIFpaMjsgYSA9IDBcbiAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAvLyBNTSA9IE1eMlxuICB2YXIgbW0gPSBtLnJlZFNxcigpO1xuICAvLyBFID0gNiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSkgLSBNTVxuICB2YXIgZSA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gIGUgPSBlLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZEFkZChlKS5yZWRJQWRkKGUpO1xuICBlID0gZS5yZWRJU3ViKG1tKTtcbiAgLy8gRUUgPSBFXjJcbiAgdmFyIGVlID0gZS5yZWRTcXIoKTtcbiAgLy8gVCA9IDE2KllZWVlcbiAgdmFyIHQgPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIC8vIFUgPSAoTSArIEUpXjIgLSBNTSAtIEVFIC0gVFxuICB2YXIgdSA9IG0ucmVkSUFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKG1tKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHQpO1xuICAvLyBYMyA9IDQgKiAoWDEgKiBFRSAtIDQgKiBZWSAqIFUpXG4gIHZhciB5eXU0ID0geXkucmVkTXVsKHUpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB2YXIgbnggPSB0aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKHl5dTQpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICAvLyBZMyA9IDggKiBZMSAqIChVICogKFQgLSBVKSAtIEUgKiBFRSlcbiAgdmFyIG55ID0gdGhpcy55LnJlZE11bCh1LnJlZE11bCh0LnJlZElTdWIodSkpLnJlZElTdWIoZS5yZWRNdWwoZWUpKSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIC8vIFozID0gKFoxICsgRSleMiAtIFpaIC0gRUVcbiAgdmFyIG56ID0gdGhpcy56LnJlZEFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKHp6KS5yZWRJU3ViKGVlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrLCBrYmFzZSkge1xuICBrID0gbmV3IEJOKGssIGtiYXNlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKVxuICAgIHJldHVybiB0aGlzLmVxKHAudG9KKCkpO1xuXG4gIGlmICh0aGlzID09PSBwKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIHgxICogejJeMiA9PSB4MiAqIHoxXjJcbiAgdmFyIHoyID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICBpZiAodGhpcy54LnJlZE11bChwejIpLnJlZElTdWIocC54LnJlZE11bCh6MikpLmNtcG4oMCkgIT09IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIHkxICogejJeMyA9PSB5MiAqIHoxXjNcbiAgdmFyIHozID0gejIucmVkTXVsKHRoaXMueik7XG4gIHZhciBwejMgPSBwejIucmVkTXVsKHAueik7XG4gIHJldHVybiB0aGlzLnkucmVkTXVsKHB6MykucmVkSVN1YihwLnkucmVkTXVsKHozKSkuY21wbigwKSA9PT0gMDtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXFYVG9QID0gZnVuY3Rpb24gZXFYVG9QKHgpIHtcbiAgdmFyIHpzID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcnggPSB4LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoenMpO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwoenMpO1xuICBmb3IgKDs7KSB7XG4gICAgeGMuaWFkZCh0aGlzLmN1cnZlLm4pO1xuICAgIGlmICh4Yy5jbXAodGhpcy5jdXJ2ZS5wKSA+PSAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcngucmVkSUFkZCh0KTtcbiAgICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuSlBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIEpQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBKUG9pbnQgeDogJyArIHRoaXMueC50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnoudG9TdHJpbmcoMTYsIDIpICsgJz4nO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG5cbmZ1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnbW9udCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuaTQgPSBuZXcgQk4oNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmEyNCA9IHRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKTtcbn1cbmluaGVyaXRzKE1vbnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRDdXJ2ZTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQubm9ybWFsaXplKCkueDtcbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtcbiAgdmFyIHkgPSByaHMucmVkU3FydCgpO1xuXG4gIHJldHVybiB5LnJlZFNxcigpLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUuemVybztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICByZXR1cm4gdGhpcy5wb2ludCh1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpLCAxKTtcbn07XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB6KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeik7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcbiAgLy8gTm8tb3Bcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZSgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0gfHwgY3VydmUub25lKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZG91YmxpbmctZGJsLTE5ODctbS0zXG4gIC8vIDJNICsgMlMgKyA0QVxuXG4gIC8vIEEgPSBYMSArIFoxXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBBQSA9IEFeMlxuICB2YXIgYWEgPSBhLnJlZFNxcigpO1xuICAvLyBCID0gWDEgLSBaMVxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQkIgPSBCXjJcbiAgdmFyIGJiID0gYi5yZWRTcXIoKTtcbiAgLy8gQyA9IEFBIC0gQkJcbiAgdmFyIGMgPSBhYS5yZWRTdWIoYmIpO1xuICAvLyBYMyA9IEFBICogQkJcbiAgdmFyIG54ID0gYWEucmVkTXVsKGJiKTtcbiAgLy8gWjMgPSBDICogKEJCICsgQTI0ICogQylcbiAgdmFyIG56ID0gYy5yZWRNdWwoYmIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChjKSkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaWZmQWRkID0gZnVuY3Rpb24gZGlmZkFkZChwLCBkaWZmKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RpZmZhZGQtZGFkZC0xOTg3LW0tM1xuICAvLyA0TSArIDJTICsgNkFcblxuICAvLyBBID0gWDIgKyBaMlxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQiA9IFgyIC0gWjJcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEMgPSBYMyArIFozXG4gIHZhciBjID0gcC54LnJlZEFkZChwLnopO1xuICAvLyBEID0gWDMgLSBaM1xuICB2YXIgZCA9IHAueC5yZWRTdWIocC56KTtcbiAgLy8gREEgPSBEICogQVxuICB2YXIgZGEgPSBkLnJlZE11bChhKTtcbiAgLy8gQ0IgPSBDICogQlxuICB2YXIgY2IgPSBjLnJlZE11bChiKTtcbiAgLy8gWDUgPSBaMSAqIChEQSArIENCKV4yXG4gIHZhciBueCA9IGRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSk7XG4gIC8vIFo1ID0gWDEgKiAoREEgLSBDQileMlxuICB2YXIgbnogPSBkaWZmLngucmVkTXVsKGRhLnJlZElTdWIoY2IpLnJlZFNxcigpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICB2YXIgdCA9IGsuY2xvbmUoKTtcbiAgdmFyIGEgPSB0aGlzOyAvLyAoTiAvIDIpICogUSArIFFcbiAgdmFyIGIgPSB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpOyAvLyAoTiAvIDIpICogUVxuICB2YXIgYyA9IHRoaXM7IC8vIFFcblxuICBmb3IgKHZhciBiaXRzID0gW107IHQuY21wbigwKSAhPT0gMDsgdC5pdXNocm4oMSkpXG4gICAgYml0cy5wdXNoKHQuYW5kbG4oMSkpO1xuXG4gIGZvciAodmFyIGkgPSBiaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJpdHNbaV0gPT09IDApIHtcbiAgICAgIC8vIE4gKiBRICsgUSA9ICgoTiAvIDIpICogUSArIFEpKSArIChOIC8gMikgKiBRXG4gICAgICBhID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgPSAyICogKChOIC8gMikgKiBRICsgUSkpXG4gICAgICBiID0gYi5kYmwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTiAqIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSArICgoTiAvIDIpICogUSlcbiAgICAgIGIgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSArIFEgPSAyICogKChOIC8gMikgKiBRICsgUSlcbiAgICAgIGEgPSBhLmRibCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuanVtbEFkZCA9IGZ1bmN0aW9uIGp1bWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gRWR3YXJkc0N1cnZlKGNvbmYpIHtcbiAgLy8gTk9URTogSW1wb3J0YW50IGFzIHdlIGFyZSBjcmVhdGluZyBwb2ludCBpbiBCYXNlLmNhbGwoKVxuICB0aGlzLnR3aXN0ZWQgPSAoY29uZi5hIHwgMCkgIT09IDE7XG4gIHRoaXMubU9uZUEgPSB0aGlzLnR3aXN0ZWQgJiYgKGNvbmYuYSB8IDApID09PSAtMTtcbiAgdGhpcy5leHRlbmRlZCA9IHRoaXMubU9uZUE7XG5cbiAgQmFzZS5jYWxsKHRoaXMsICdlZHdhcmRzJywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnVtb2QodGhpcy5yZWQubSk7XG4gIHRoaXMuYSA9IHRoaXMuYS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYyA9IG5ldyBCTihjb25mLmMsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYzIgPSB0aGlzLmMucmVkU3FyKCk7XG4gIHRoaXMuZCA9IG5ldyBCTihjb25mLmQsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuZGQgPSB0aGlzLmQucmVkQWRkKHRoaXMuZCk7XG5cbiAgYXNzZXJ0KCF0aGlzLnR3aXN0ZWQgfHwgdGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpID09PSAwKTtcbiAgdGhpcy5vbmVDID0gKGNvbmYuYyB8IDApID09PSAxO1xufVxuaW5oZXJpdHMoRWR3YXJkc0N1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gRWR3YXJkc0N1cnZlO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxBID0gZnVuY3Rpb24gX211bEEobnVtKSB7XG4gIGlmICh0aGlzLm1PbmVBKVxuICAgIHJldHVybiBudW0ucmVkTmVnKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5hLnJlZE11bChudW0pO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQyA9IGZ1bmN0aW9uIF9tdWxDKG51bSkge1xuICBpZiAodGhpcy5vbmVDKVxuICAgIHJldHVybiBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jLnJlZE11bChudW0pO1xufTtcblxuLy8gSnVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNob3J0IGN1cnZlXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHksIHosIHQpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHgyKSk7XG4gIHZhciBsaHMgPSB0aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeDIpKTtcblxuICB2YXIgeTIgPSByaHMucmVkTXVsKGxocy5yZWRJbnZtKCkpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21ZID0gZnVuY3Rpb24gcG9pbnRGcm9tWSh5LCBvZGQpIHtcbiAgeSA9IG5ldyBCTih5LCAxNik7XG4gIGlmICgheS5yZWQpXG4gICAgeSA9IHkudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIHheMiA9ICh5XjIgLSBjXjIpIC8gKGNeMiBkIHleMiAtIGEpXG4gIHZhciB5MiA9IHkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB5Mi5yZWRTdWIodGhpcy5jMik7XG4gIHZhciByaHMgPSB5Mi5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSk7XG4gIHZhciB4MiA9IGxocy5yZWRNdWwocmhzLnJlZEludm0oKSk7XG5cbiAgaWYgKHgyLmNtcCh0aGlzLnplcm8pID09PSAwKSB7XG4gICAgaWYgKG9kZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLnBvaW50KHRoaXMuemVybywgeSk7XG4gIH1cblxuICB2YXIgeCA9IHgyLnJlZFNxcnQoKTtcbiAgaWYgKHgucmVkU3FyKCkucmVkU3ViKHgyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICBpZiAoeC5mcm9tUmVkKCkuaXNPZGQoKSAhPT0gb2RkKVxuICAgIHggPSB4LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ3VydmU6IEEgKiBYXjIgKyBZXjIgPSBDXjIgKiAoMSArIEQgKiBYXjIgKiBZXjIpXG4gIHBvaW50Lm5vcm1hbGl6ZSgpO1xuXG4gIHZhciB4MiA9IHBvaW50LngucmVkU3FyKCk7XG4gIHZhciB5MiA9IHBvaW50LnkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB4Mi5yZWRNdWwodGhpcy5hKS5yZWRBZGQoeTIpO1xuICB2YXIgcmhzID0gdGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoeDIpLnJlZE11bCh5MikpKTtcblxuICByZXR1cm4gbGhzLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHksIHosIHQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMueSA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnpPbmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSB6ID8gbmV3IEJOKHosIDE2KSA6IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHQgJiYgbmV3IEJOKHQsIDE2KTtcbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAodGhpcy50ICYmICF0aGlzLnQucmVkKVxuICAgICAgdGhpcy50ID0gdGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xuXG4gICAgLy8gVXNlIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gICAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQgJiYgIXRoaXMudCkge1xuICAgICAgdGhpcy50ID0gdGhpcy54LnJlZE11bCh0aGlzLnkpO1xuICAgICAgaWYgKCF0aGlzLnpPbmUpXG4gICAgICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSk7XG4gICAgfVxuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgeiwgdCk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0sIG9ialsyXSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnguY21wbigwKSA9PT0gMCAmJlxuICAgICh0aGlzLnkuY21wKHRoaXMueikgPT09IDAgfHxcbiAgICAodGhpcy56T25lICYmIHRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSA9PT0gMCkpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHREYmwgPSBmdW5jdGlvbiBfZXh0RGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1od2NkXG4gIC8vIDRNICsgNFNcblxuICAvLyBBID0gWDFeMlxuICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gQiA9IFkxXjJcbiAgdmFyIGIgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIEMgPSAyICogWjFeMlxuICB2YXIgYyA9IHRoaXMuei5yZWRTcXIoKTtcbiAgYyA9IGMucmVkSUFkZChjKTtcbiAgLy8gRCA9IGEgKiBBXG4gIHZhciBkID0gdGhpcy5jdXJ2ZS5fbXVsQShhKTtcbiAgLy8gRSA9IChYMSArIFkxKV4yIC0gQSAtIEJcbiAgdmFyIGUgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGIpO1xuICAvLyBHID0gRCArIEJcbiAgdmFyIGcgPSBkLnJlZEFkZChiKTtcbiAgLy8gRiA9IEcgLSBDXG4gIHZhciBmID0gZy5yZWRTdWIoYyk7XG4gIC8vIEggPSBEIC0gQlxuICB2YXIgaCA9IGQucmVkU3ViKGIpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pEYmwgPSBmdW5jdGlvbiBfcHJvakRibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtYmJqbHBcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwNy1ibFxuICAvLyBhbmQgb3RoZXJzXG4gIC8vIEdlbmVyYWxseSAzTSArIDRTIG9yIDJNICsgNFNcblxuICAvLyBCID0gKFgxICsgWTEpXjJcbiAgdmFyIGIgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCk7XG4gIC8vIEMgPSBYMV4yXG4gIHZhciBjID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBEID0gWTFeMlxuICB2YXIgZCA9IHRoaXMueS5yZWRTcXIoKTtcblxuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gRSA9IGEgKiBDXG4gICAgdmFyIGUgPSB0aGlzLmN1cnZlLl9tdWxBKGMpO1xuICAgIC8vIEYgPSBFICsgRFxuICAgIHZhciBmID0gZS5yZWRBZGQoZCk7XG4gICAgaWYgKHRoaXMuek9uZSkge1xuICAgICAgLy8gWDMgPSAoQiAtIEMgLSBEKSAqIChGIC0gMilcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkU3ViKGQpLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEZeMiAtIDIgKiBGXG4gICAgICBueiA9IGYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSCA9IFoxXjJcbiAgICAgIHZhciBoID0gdGhpcy56LnJlZFNxcigpO1xuICAgICAgLy8gSiA9IEYgLSAyICogSFxuICAgICAgdmFyIGogPSBmLnJlZFN1YihoKS5yZWRJU3ViKGgpO1xuICAgICAgLy8gWDMgPSAoQi1DLUQpKkpcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkSVN1YihkKS5yZWRNdWwoaik7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRiAqIEpcbiAgICAgIG56ID0gZi5yZWRNdWwoaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEUgPSBDICsgRFxuICAgIHZhciBlID0gYy5yZWRBZGQoZCk7XG4gICAgLy8gSCA9IChjICogWjEpXjJcbiAgICB2YXIgaCA9IHRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKTtcbiAgICAvLyBKID0gRSAtIDIgKiBIXG4gICAgdmFyIGogPSBlLnJlZFN1YihoKS5yZWRTdWIoaCk7XG4gICAgLy8gWDMgPSBjICogKEIgLSBFKSAqIEpcbiAgICBueCA9IHRoaXMuY3VydmUuX211bEMoYi5yZWRJU3ViKGUpKS5yZWRNdWwoaik7XG4gICAgLy8gWTMgPSBjICogRSAqIChDIC0gRClcbiAgICBueSA9IHRoaXMuY3VydmUuX211bEMoZSkucmVkTXVsKGMucmVkSVN1YihkKSk7XG4gICAgLy8gWjMgPSBFICogSlxuICAgIG56ID0gZS5yZWRNdWwoaik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRG91YmxlIGluIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHREYmwoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qRGJsKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dEFkZCA9IGZ1bmN0aW9uIF9leHRBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1od2NkLTNcbiAgLy8gOE1cblxuICAvLyBBID0gKFkxIC0gWDEpICogKFkyIC0gWDIpXG4gIHZhciBhID0gdGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChwLnkucmVkU3ViKHAueCkpO1xuICAvLyBCID0gKFkxICsgWDEpICogKFkyICsgWDIpXG4gIHZhciBiID0gdGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChwLnkucmVkQWRkKHAueCkpO1xuICAvLyBDID0gVDEgKiBrICogVDJcbiAgdmFyIGMgPSB0aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChwLnQpO1xuICAvLyBEID0gWjEgKiAyICogWjJcbiAgdmFyIGQgPSB0aGlzLnoucmVkTXVsKHAuei5yZWRBZGQocC56KSk7XG4gIC8vIEUgPSBCIC0gQVxuICB2YXIgZSA9IGIucmVkU3ViKGEpO1xuICAvLyBGID0gRCAtIENcbiAgdmFyIGYgPSBkLnJlZFN1YihjKTtcbiAgLy8gRyA9IEQgKyBDXG4gIHZhciBnID0gZC5yZWRBZGQoYyk7XG4gIC8vIEggPSBCICsgQVxuICB2YXIgaCA9IGIucmVkQWRkKGEpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pBZGQgPSBmdW5jdGlvbiBfcHJvakFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWJiamxwXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDctYmxcbiAgLy8gMTBNICsgMVNcblxuICAvLyBBID0gWjEgKiBaMlxuICB2YXIgYSA9IHRoaXMuei5yZWRNdWwocC56KTtcbiAgLy8gQiA9IEFeMlxuICB2YXIgYiA9IGEucmVkU3FyKCk7XG4gIC8vIEMgPSBYMSAqIFgyXG4gIHZhciBjID0gdGhpcy54LnJlZE11bChwLngpO1xuICAvLyBEID0gWTEgKiBZMlxuICB2YXIgZCA9IHRoaXMueS5yZWRNdWwocC55KTtcbiAgLy8gRSA9IGQgKiBDICogRFxuICB2YXIgZSA9IHRoaXMuY3VydmUuZC5yZWRNdWwoYykucmVkTXVsKGQpO1xuICAvLyBGID0gQiAtIEVcbiAgdmFyIGYgPSBiLnJlZFN1YihlKTtcbiAgLy8gRyA9IEIgKyBFXG4gIHZhciBnID0gYi5yZWRBZGQoZSk7XG4gIC8vIFgzID0gQSAqIEYgKiAoKFgxICsgWTEpICogKFgyICsgWTIpIC0gQyAtIEQpXG4gIHZhciB0bXAgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHAueC5yZWRBZGQocC55KSkucmVkSVN1YihjKS5yZWRJU3ViKGQpO1xuICB2YXIgbnggPSBhLnJlZE11bChmKS5yZWRNdWwodG1wKTtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBhICogQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGMpKSk7XG4gICAgLy8gWjMgPSBGICogR1xuICAgIG56ID0gZi5yZWRNdWwoZyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1YihjKSk7XG4gICAgLy8gWjMgPSBjICogRiAqIEdcbiAgICBueiA9IHRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKGcpO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcDtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHRBZGQocCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakFkZChwKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCBmYWxzZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCB0cnVlKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIGlmICh0aGlzLnpPbmUpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gTm9ybWFsaXplIGNvb3JkaW5hdGVzXG4gIHZhciB6aSA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHRoaXMueCA9IHRoaXMueC5yZWRNdWwoemkpO1xuICB0aGlzLnkgPSB0aGlzLnkucmVkTXVsKHppKTtcbiAgaWYgKHRoaXMudClcbiAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHppKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHRoaXMuek9uZSA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ICYmIHRoaXMudC5yZWROZWcoKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKG90aGVyKSB7XG4gIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMuZ2V0WSgpLmNtcChvdGhlci5nZXRZKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxWFRvUCA9IGZ1bmN0aW9uIGVxWFRvUCh4KSB7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTtcbiAgZm9yICg7Oykge1xuICAgIHhjLmlhZGQodGhpcy5jdXJ2ZS5uKTtcbiAgICBpZiAoeGMuY21wKHRoaXMuY3VydmUucCkgPj0gMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJ4LnJlZElBZGQodCk7XG4gICAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8vIENvbXBhdGliaWxpdHkgd2l0aCBCYXNlQ3VydmVcblBvaW50LnByb3RvdHlwZS50b1AgPSBQb2ludC5wcm90b3R5cGUubm9ybWFsaXplO1xuUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gUG9pbnQucHJvdG90eXBlLmFkZDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlcyA9IGV4cG9ydHM7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vZWxsaXB0aWMnKTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gUHJlc2V0Q3VydmUob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50eXBlID09PSAnc2hvcnQnKVxuICAgIHRoaXMuY3VydmUgPSBuZXcgZWxsaXB0aWMuY3VydmUuc2hvcnQob3B0aW9ucyk7XG4gIGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ2Vkd2FyZHMnKVxuICAgIHRoaXMuY3VydmUgPSBuZXcgZWxsaXB0aWMuY3VydmUuZWR3YXJkcyhvcHRpb25zKTtcbiAgZWxzZVxuICAgIHRoaXMuY3VydmUgPSBuZXcgZWxsaXB0aWMuY3VydmUubW9udChvcHRpb25zKTtcbiAgdGhpcy5nID0gdGhpcy5jdXJ2ZS5nO1xuICB0aGlzLm4gPSB0aGlzLmN1cnZlLm47XG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaDtcblxuICBhc3NlcnQodGhpcy5nLnZhbGlkYXRlKCksICdJbnZhbGlkIGN1cnZlJyk7XG4gIGFzc2VydCh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCAnSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8nKTtcbn1cbmN1cnZlcy5QcmVzZXRDdXJ2ZSA9IFByZXNldEN1cnZlO1xuXG5mdW5jdGlvbiBkZWZpbmVDdXJ2ZShuYW1lLCBvcHRpb25zKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJ2ZXMsIG5hbWUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGN1cnZlID0gbmV3IFByZXNldEN1cnZlKG9wdGlvbnMpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnZlcywgbmFtZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBjdXJ2ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY3VydmU7XG4gICAgfVxuICB9KTtcbn1cblxuZGVmaW5lQ3VydmUoJ3AxOTInLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiAncDE5MicsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYycsXG4gIGI6ICc2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMScsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMicsXG4gICAgJzA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExJ1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3AyMjQnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiAncDIyNCcsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScsXG4gIGE6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZScsXG4gIGI6ICdiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCcsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICdiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMScsXG4gICAgJ2JkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3AyNTYnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGInLFxuICBuOiAnZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYnLFxuICAgICc0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMzg0Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYycsXG4gIGI6ICdiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiAnICtcbiAgICAgJzUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmJyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxICcgK1xuICAgICAnZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMnLFxuICBoYXNoOiBoYXNoLnNoYTM4NCxcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggJyArXG4gICAgJzU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3JyxcbiAgICAnMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgJyArXG4gICAgJzBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmJ1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3A1MjEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYycsXG4gIGI6ICcwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiAnICtcbiAgICAgJzk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkICcgK1xuICAgICAnM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAnLFxuICBuOiAnMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCAnICtcbiAgICAgJ2Y3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5JyxcbiAgaGFzaDogaGFzaC5zaGE1MTIsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5ICcgK1xuICAgICcwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyAnICtcbiAgICAnYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYnLFxuICAgICcwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSAnICtcbiAgICAnNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgJyArXG4gICAgJzNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwJ1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ2N1cnZlMjU1MTknLCB7XG4gIHR5cGU6ICdtb250JyxcbiAgcHJpbWU6ICdwMjU1MTknLFxuICBwOiAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcsXG4gIGE6ICc3NmQwNicsXG4gIGI6ICcxJyxcbiAgbjogJzEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnOSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdlZDI1NTE5Jywge1xuICB0eXBlOiAnZWR3YXJkcycsXG4gIHByaW1lOiAncDI1NTE5JyxcbiAgcDogJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnLFxuICBhOiAnLTEnLFxuICBjOiAnMScsXG4gIC8vIC0xMjE2NjUgKiAoMTIxNjY2XigtMSkpIChtb2QgUClcbiAgZDogJzUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMnLFxuICBuOiAnMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhJyxcblxuICAgIC8vIDQvNVxuICAgICc2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4J1xuICBdXG59KTtcblxudmFyIHByZTtcbnRyeSB7XG4gIHByZSA9IHJlcXVpcmUoJy4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxJyk7XG59IGNhdGNoIChlKSB7XG4gIHByZSA9IHVuZGVmaW5lZDtcbn1cblxuZGVmaW5lQ3VydmUoJ3NlY3AyNTZrMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdrMjU2JyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmJyxcbiAgYTogJzAnLFxuICBiOiAnNycsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MScsXG4gIGg6ICcxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG5cbiAgLy8gUHJlY29tcHV0ZWQgZW5kb21vcnBoaXNtXG4gIGJldGE6ICc3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlJyxcbiAgbGFtYmRhOiAnNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MicsXG4gIGJhc2lzOiBbXG4gICAge1xuICAgICAgYTogJzMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1JyxcbiAgICAgIGI6ICctZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMnXG4gICAgfSxcbiAgICB7XG4gICAgICBhOiAnMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4JyxcbiAgICAgIGI6ICczMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSdcbiAgICB9XG4gIF0sXG5cbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcsXG4gICAgJzQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgnLFxuICAgIHByZVxuICBdXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgZnRfMSA9IHNoYUNvbW1vbi5mdF8xO1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGExX0sgPSBbXG4gIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsXG4gIDB4OEYxQkJDREMsIDB4Q0E2MkMxRDZcbl07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsXG4gICAgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoODApO1xufVxuXG51dGlscy5pbmhlcml0cyhTSEExLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuLzUxMicpO1xuXG5mdW5jdGlvbiBTSEEzODQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKVxuICAgIHJldHVybiBuZXcgU0hBMzg0KCk7XG5cbiAgU0hBNTEyLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4LFxuICAgIDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcsXG4gICAgMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyxcbiAgICAweDE1MmZlY2Q4LCAweGY3MGU1OTM5LFxuICAgIDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEsXG4gICAgMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSxcbiAgICAweGRiMGMyZTBkLCAweDY0Zjk4ZmE3LFxuICAgIDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTM4NCwgU0hBNTEyKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMzg0O1xuXG5TSEEzODQuYmxvY2tTaXplID0gMTAyNDtcblNIQTM4NC5vdXRTaXplID0gMzg0O1xuU0hBMzg0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTM4NC5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTM4NC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl8zID0gdXRpbHMuc3VtMzJfMztcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG5mdW5jdGlvbiBSSVBFTUQxNjAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSSVBFTUQxNjApKVxuICAgIHJldHVybiBuZXcgUklQRU1EMTYwKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuZW5kaWFuID0gJ2xpdHRsZSc7XG59XG51dGlscy5pbmhlcml0cyhSSVBFTUQxNjAsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnJpcGVtZDE2MCA9IFJJUEVNRDE2MDtcblxuUklQRU1EMTYwLmJsb2NrU2l6ZSA9IDUxMjtcblJJUEVNRDE2MC5vdXRTaXplID0gMTYwO1xuUklQRU1EMTYwLmhtYWNTdHJlbmd0aCA9IDE5MjtcblJJUEVNRDE2MC5wYWRMZW5ndGggPSA2NDtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIEEgPSB0aGlzLmhbMF07XG4gIHZhciBCID0gdGhpcy5oWzFdO1xuICB2YXIgQyA9IHRoaXMuaFsyXTtcbiAgdmFyIEQgPSB0aGlzLmhbM107XG4gIHZhciBFID0gdGhpcy5oWzRdO1xuICB2YXIgQWggPSBBO1xuICB2YXIgQmggPSBCO1xuICB2YXIgQ2ggPSBDO1xuICB2YXIgRGggPSBEO1xuICB2YXIgRWggPSBFO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyBqKyspIHtcbiAgICB2YXIgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEEsIGYoaiwgQiwgQywgRCksIG1zZ1tyW2pdICsgc3RhcnRdLCBLKGopKSxcbiAgICAgICAgc1tqXSksXG4gICAgICBFKTtcbiAgICBBID0gRTtcbiAgICBFID0gRDtcbiAgICBEID0gcm90bDMyKEMsIDEwKTtcbiAgICBDID0gQjtcbiAgICBCID0gVDtcbiAgICBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQWgsIGYoNzkgLSBqLCBCaCwgQ2gsIERoKSwgbXNnW3JoW2pdICsgc3RhcnRdLCBLaChqKSksXG4gICAgICAgIHNoW2pdKSxcbiAgICAgIEVoKTtcbiAgICBBaCA9IEVoO1xuICAgIEVoID0gRGg7XG4gICAgRGggPSByb3RsMzIoQ2gsIDEwKTtcbiAgICBDaCA9IEJoO1xuICAgIEJoID0gVDtcbiAgfVxuICBUID0gc3VtMzJfMyh0aGlzLmhbMV0sIEMsIERoKTtcbiAgdGhpcy5oWzFdID0gc3VtMzJfMyh0aGlzLmhbMl0sIEQsIEVoKTtcbiAgdGhpcy5oWzJdID0gc3VtMzJfMyh0aGlzLmhbM10sIEUsIEFoKTtcbiAgdGhpcy5oWzNdID0gc3VtMzJfMyh0aGlzLmhbNF0sIEEsIEJoKTtcbiAgdGhpcy5oWzRdID0gc3VtMzJfMyh0aGlzLmhbMF0sIEIsIENoKTtcbiAgdGhpcy5oWzBdID0gVDtcbn07XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnbGl0dGxlJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdsaXR0bGUnKTtcbn07XG5cbmZ1bmN0aW9uIGYoaiwgeCwgeSwgeikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4geCBeIHkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAoeCAmIHkpIHwgKCh+eCkgJiB6KTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gKHggfCAofnkpKSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuICh4ICYgeikgfCAoeSAmICh+eikpO1xuICBlbHNlXG4gICAgcmV0dXJuIHggXiAoeSB8ICh+eikpO1xufVxuXG5mdW5jdGlvbiBLKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWE4Mjc5OTk7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmVkOWViYTE7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4OGYxYmJjZGM7XG4gIGVsc2VcbiAgICByZXR1cm4gMHhhOTUzZmQ0ZTtcbn1cblxuZnVuY3Rpb24gS2goaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHg1MGEyOGJlNjtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YzRkZDEyNDtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZDcwM2VmMztcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg3YTZkNzZlOTtcbiAgZWxzZVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xufVxuXG52YXIgciA9IFtcbiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCxcbiAgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMixcbiAgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMixcbiAgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM1xuXTtcblxudmFyIHJoID0gW1xuICA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyLFxuICA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyLFxuICAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzLFxuICA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0LFxuICAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExXG5dO1xuXG52YXIgcyA9IFtcbiAgMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4LFxuICA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTIsXG4gIDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNSxcbiAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyLFxuICA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbl07XG5cbnZhciBzaCA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHg2YTtcbiAgdGhpcy5vdXRlciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcbn07XG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICB0aGlzLmlubmVyLnVwZGF0ZShtc2csIGVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKTtcbiAgcmV0dXJuIHRoaXMub3V0ZXIuZGlnZXN0KGVuYyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRvdWJsZXM6IHtcbiAgICBzdGVwOiA0LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYScsXG4gICAgICAgICdmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgnLFxuICAgICAgICAnMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5JyxcbiAgICAgICAgJ2QzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCcsXG4gICAgICAgICc0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYycsXG4gICAgICAgICc0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEnLFxuICAgICAgICAnOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhJyxcbiAgICAgICAgJzVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCcsXG4gICAgICAgICdjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQnLFxuICAgICAgICAnOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkJyxcbiAgICAgICAgJ2U1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMScsXG4gICAgICAgICc5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAnLFxuICAgICAgICAnNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3JyxcbiAgICAgICAgJzEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MicsXG4gICAgICAgICcyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNycsXG4gICAgICAgICc3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQnLFxuICAgICAgICAnNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzJyxcbiAgICAgICAgJzdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhJyxcbiAgICAgICAgJzUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCcsXG4gICAgICAgICdiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQnLFxuICAgICAgICAnNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1JyxcbiAgICAgICAgJzdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCcsXG4gICAgICAgICc0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MnLFxuICAgICAgICAnMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2JyxcbiAgICAgICAgJzZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOScsXG4gICAgICAgICdjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEnLFxuICAgICAgICAnODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiJyxcbiAgICAgICAgJ2ZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMycsXG4gICAgICAgICcyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQnLFxuICAgICAgICAnZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwJyxcbiAgICAgICAgJzczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCcsXG4gICAgICAgICdlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYScsXG4gICAgICAgICc2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEnLFxuICAgICAgICAnMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllJyxcbiAgICAgICAgJ2VmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MScsXG4gICAgICAgICcyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYnLFxuICAgICAgICAnNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgnLFxuICAgICAgICAnZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkJyxcbiAgICAgICAgJzY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NicsXG4gICAgICAgICczNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkJyxcbiAgICAgICAgJ2RkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNScsXG4gICAgICAgICc5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYnLFxuICAgICAgICAnNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxJyxcbiAgICAgICAgJzM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjJyxcbiAgICAgICAgJ2MyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MScsXG4gICAgICAgICcxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UnLFxuICAgICAgICAnNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxJyxcbiAgICAgICAgJ2M2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMycsXG4gICAgICAgICdiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYnLFxuICAgICAgICAnNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5JyxcbiAgICAgICAgJ2FlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZScsXG4gICAgICAgICdiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjknLFxuICAgICAgICAnNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyJyxcbiAgICAgICAgJzgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMycsXG4gICAgICAgICc3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MnLFxuICAgICAgICAnY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhJyxcbiAgICAgICAgJzJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MScsXG4gICAgICAgICdlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMnLFxuICAgICAgICAnZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4JyxcbiAgICAgICAgJzM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YicsXG4gICAgICAgICc2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYnLFxuICAgICAgICAnZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEnLFxuICAgICAgICAnNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAnLFxuICAgICAgICAnNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3JyxcbiAgICAgICAgJzdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZScsXG4gICAgICAgICdlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyJ1xuICAgICAgXVxuICAgIF1cbiAgfSxcbiAgbmFmOiB7XG4gICAgd25kOiA3LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOScsXG4gICAgICAgICczODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQnLFxuICAgICAgICAnZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjJyxcbiAgICAgICAgJzZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZScsXG4gICAgICAgICdjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2InLFxuICAgICAgICAnZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4JyxcbiAgICAgICAgJ2FiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlJyxcbiAgICAgICAgJzU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCcsXG4gICAgICAgICc0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMnLFxuICAgICAgICAnODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1JyxcbiAgICAgICAgJzMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZicsXG4gICAgICAgICcyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCcsXG4gICAgICAgICc3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjknLFxuICAgICAgICAnYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiJyxcbiAgICAgICAgJzIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCcsXG4gICAgICAgICdlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUnLFxuICAgICAgICAnYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5JyxcbiAgICAgICAgJzI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkJyxcbiAgICAgICAgJzgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZicsXG4gICAgICAgICcxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmInLFxuICAgICAgICAnZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzknLFxuICAgICAgICAnZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMnLFxuICAgICAgICAnNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0JyxcbiAgICAgICAgJzk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCcsXG4gICAgICAgICdlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWInLFxuICAgICAgICAnNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3JyxcbiAgICAgICAgJ2NlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMScsXG4gICAgICAgICdjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAnLFxuICAgICAgICAnNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1JyxcbiAgICAgICAgJzkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4JyxcbiAgICAgICAgJzY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4JyxcbiAgICAgICAgJzU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYicsXG4gICAgICAgICczYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YnLFxuICAgICAgICAnNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzJyxcbiAgICAgICAgJ2VmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYScsXG4gICAgICAgICdlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUnLFxuICAgICAgICAnZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhJyxcbiAgICAgICAgJzc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZScsXG4gICAgICAgICdjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgnLFxuICAgICAgICAnZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjJyxcbiAgICAgICAgJzMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOScsXG4gICAgICAgICdlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWInLFxuICAgICAgICAnMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhJyxcbiAgICAgICAgJ2VmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZicsXG4gICAgICAgICc4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAnLFxuICAgICAgICAnNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0JyxcbiAgICAgICAgJ2Y1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YycsXG4gICAgICAgICdkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAnLFxuICAgICAgICAnZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwJyxcbiAgICAgICAgJ2E4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzJyxcbiAgICAgICAgJzY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZicsXG4gICAgICAgICc5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MycsXG4gICAgICAgICc0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgnLFxuICAgICAgICAnZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmJyxcbiAgICAgICAgJzVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNScsXG4gICAgICAgICc4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYnLFxuICAgICAgICAnOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1JyxcbiAgICAgICAgJzVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OScsXG4gICAgICAgICdmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MScsXG4gICAgICAgICdmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUnLFxuICAgICAgICAnNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1JyxcbiAgICAgICAgJzIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NycsXG4gICAgICAgICc0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MScsXG4gICAgICAgICc3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNScsXG4gICAgICAgICczOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYnLFxuICAgICAgICAnZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYnLFxuICAgICAgICAnZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlJyxcbiAgICAgICAgJzZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCcsXG4gICAgICAgICc2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMScsXG4gICAgICAgICczZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEnLFxuICAgICAgICAnYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2EwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTInLFxuICAgICAgICAnYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUnLFxuICAgICAgICAnY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiJyxcbiAgICAgICAgJzZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCcsXG4gICAgICAgICczMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYnLFxuICAgICAgICAnNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OScsXG4gICAgICAgICcyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYnLFxuICAgICAgICAnYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0JyxcbiAgICAgICAgJzk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YScsXG4gICAgICAgICdiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAnLFxuICAgICAgICAnYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3JyxcbiAgICAgICAgJzZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzJyxcbiAgICAgICAgJ2MzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZicsXG4gICAgICAgICcyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCcsXG4gICAgICAgICc2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEnLFxuICAgICAgICAnNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExJyxcbiAgICAgICAgJzVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMicsXG4gICAgICAgICc3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEnLFxuICAgICAgICAnYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2JyxcbiAgICAgICAgJzhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NicsXG4gICAgICAgICczOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUnLFxuICAgICAgICAnNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0JyxcbiAgICAgICAgJzI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYScsXG4gICAgICAgICdlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTknLFxuICAgICAgICAnY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmJyxcbiAgICAgICAgJ2Y1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYycsXG4gICAgICAgICc2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDInLFxuICAgICAgICAnZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhJyxcbiAgICAgICAgJzFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCcsXG4gICAgICAgICc1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQnLFxuICAgICAgICAnNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExJyxcbiAgICAgICAgJ2NkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MycsXG4gICAgICAgICdjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MicsXG4gICAgICAgICc2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMnLFxuICAgICAgICAnY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwJyxcbiAgICAgICAgJzk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4JyxcbiAgICAgICAgJ2VlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNycsXG4gICAgICAgICdkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgnLFxuICAgICAgICAnYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlJyxcbiAgICAgICAgJzY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCcsXG4gICAgICAgICdjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YicsXG4gICAgICAgICcyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYnLFxuICAgICAgICAnZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2JyxcbiAgICAgICAgJzQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NycsXG4gICAgICAgICc2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEnLFxuICAgICAgICAnN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjJyxcbiAgICAgICAgJ2FiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MicsXG4gICAgICAgICc0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmInLFxuICAgICAgICAnYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1JyxcbiAgICAgICAgJ2JmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNycsXG4gICAgICAgICc2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTknLFxuICAgICAgICAnY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzJyxcbiAgICAgICAgJzU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NycsXG4gICAgICAgICc3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NicsXG4gICAgICAgICdlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgnLFxuICAgICAgICAnOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxJyxcbiAgICAgICAgJzllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCcsXG4gICAgICAgICc0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5J1xuICAgICAgXVxuICAgIF1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBIbWFjRFJCRyA9IHJlcXVpcmUoJ2htYWMtZHJiZycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxudmFyIEtleVBhaXIgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIEVDKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVDKSlcbiAgICByZXR1cm4gbmV3IEVDKG9wdGlvbnMpO1xuXG4gIC8vIFNob3J0Y3V0IGBlbGxpcHRpYy5lYyhjdXJ2ZS1uYW1lKWBcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIGFzc2VydChlbGxpcHRpYy5jdXJ2ZXMuaGFzT3duUHJvcGVydHkob3B0aW9ucyksICdVbmtub3duIGN1cnZlICcgKyBvcHRpb25zKTtcblxuICAgIG9wdGlvbnMgPSBlbGxpcHRpYy5jdXJ2ZXNbb3B0aW9uc107XG4gIH1cblxuICAvLyBTaG9ydGN1dCBmb3IgYGVsbGlwdGljLmVjKGVsbGlwdGljLmN1cnZlcy5jdXJ2ZU5hbWUpYFxuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIGVsbGlwdGljLmN1cnZlcy5QcmVzZXRDdXJ2ZSlcbiAgICBvcHRpb25zID0geyBjdXJ2ZTogb3B0aW9ucyB9O1xuXG4gIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlLmN1cnZlO1xuICB0aGlzLm4gPSB0aGlzLmN1cnZlLm47XG4gIHRoaXMubmggPSB0aGlzLm4udXNocm4oMSk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcblxuICAvLyBQb2ludCBvbiBjdXJ2ZVxuICB0aGlzLmcgPSBvcHRpb25zLmN1cnZlLmc7XG4gIHRoaXMuZy5wcmVjb21wdXRlKG9wdGlvbnMuY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIC8vIEhhc2ggZm9yIGZ1bmN0aW9uIGZvciBEUkJHXG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaCB8fCBvcHRpb25zLmN1cnZlLmhhc2g7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEVDO1xuXG5FQy5wcm90b3R5cGUua2V5UGFpciA9IGZ1bmN0aW9uIGtleVBhaXIob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEtleVBhaXIodGhpcywgb3B0aW9ucyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGUgPSBmdW5jdGlvbiBrZXlGcm9tUHJpdmF0ZShwcml2LCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVByaXZhdGUodGhpcywgcHJpdiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24ga2V5RnJvbVB1YmxpYyhwdWIsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1YiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gZnVuY3Rpb24gZ2VuS2V5UGFpcihvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCcsXG4gICAgZW50cm9weTogb3B0aW9ucy5lbnRyb3B5IHx8IGVsbGlwdGljLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksXG4gICAgZW50cm9weUVuYzogb3B0aW9ucy5lbnRyb3B5ICYmIG9wdGlvbnMuZW50cm9weUVuYyB8fCAndXRmOCcsXG4gICAgbm9uY2U6IHRoaXMubi50b0FycmF5KClcbiAgfSk7XG5cbiAgdmFyIGJ5dGVzID0gdGhpcy5uLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG5zMiA9IHRoaXMubi5zdWIobmV3IEJOKDIpKTtcbiAgZG8ge1xuICAgIHZhciBwcml2ID0gbmV3IEJOKGRyYmcuZ2VuZXJhdGUoYnl0ZXMpKTtcbiAgICBpZiAocHJpdi5jbXAobnMyKSA+IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHByaXYuaWFkZG4oMSk7XG4gICAgcmV0dXJuIHRoaXMua2V5RnJvbVByaXZhdGUocHJpdik7XG4gIH0gd2hpbGUgKHRydWUpO1xufTtcblxuRUMucHJvdG90eXBlLl90cnVuY2F0ZVRvTiA9IGZ1bmN0aW9uIHRydW5jYXRlVG9OKG1zZywgdHJ1bmNPbmx5KSB7XG4gIHZhciBkZWx0YSA9IG1zZy5ieXRlTGVuZ3RoKCkgKiA4IC0gdGhpcy5uLmJpdExlbmd0aCgpO1xuICBpZiAoZGVsdGEgPiAwKVxuICAgIG1zZyA9IG1zZy51c2hybihkZWx0YSk7XG4gIGlmICghdHJ1bmNPbmx5ICYmIG1zZy5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBtc2cuc3ViKHRoaXMubik7XG4gIGVsc2VcbiAgICByZXR1cm4gbXNnO1xufTtcblxuRUMucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywga2V5LCBlbmMsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBlbmMgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IGVuYztcbiAgICBlbmMgPSBudWxsO1xuICB9XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAga2V5ID0gdGhpcy5rZXlGcm9tUHJpdmF0ZShrZXksIGVuYyk7XG4gIG1zZyA9IHRoaXMuX3RydW5jYXRlVG9OKG5ldyBCTihtc2csIDE2KSk7XG5cbiAgLy8gWmVyby1leHRlbmQga2V5IHRvIHByb3ZpZGUgZW5vdWdoIGVudHJvcHlcbiAgdmFyIGJ5dGVzID0gdGhpcy5uLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIGJrZXkgPSBrZXkuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoJ2JlJywgYnl0ZXMpO1xuXG4gIC8vIFplcm8tZXh0ZW5kIG5vbmNlIHRvIGhhdmUgdGhlIHNhbWUgYnl0ZSBzaXplIGFzIE5cbiAgdmFyIG5vbmNlID0gbXNnLnRvQXJyYXkoJ2JlJywgYnl0ZXMpO1xuXG4gIC8vIEluc3RhbnRpYXRlIEhtYWNfRFJCR1xuICB2YXIgZHJiZyA9IG5ldyBIbWFjRFJCRyh7XG4gICAgaGFzaDogdGhpcy5oYXNoLFxuICAgIGVudHJvcHk6IGJrZXksXG4gICAgbm9uY2U6IG5vbmNlLFxuICAgIHBlcnM6IG9wdGlvbnMucGVycyxcbiAgICBwZXJzRW5jOiBvcHRpb25zLnBlcnNFbmMgfHwgJ3V0ZjgnXG4gIH0pO1xuXG4gIC8vIE51bWJlciBvZiBieXRlcyB0byBnZW5lcmF0ZVxuICB2YXIgbnMxID0gdGhpcy5uLnN1YihuZXcgQk4oMSkpO1xuXG4gIGZvciAodmFyIGl0ZXIgPSAwOyB0cnVlOyBpdGVyKyspIHtcbiAgICB2YXIgayA9IG9wdGlvbnMuayA/XG4gICAgICAgIG9wdGlvbnMuayhpdGVyKSA6XG4gICAgICAgIG5ldyBCTihkcmJnLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtcbiAgICBrID0gdGhpcy5fdHJ1bmNhdGVUb04oaywgdHJ1ZSk7XG4gICAgaWYgKGsuY21wbigxKSA8PSAwIHx8IGsuY21wKG5zMSkgPj0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGtwID0gdGhpcy5nLm11bChrKTtcbiAgICBpZiAoa3AuaXNJbmZpbml0eSgpKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3BYID0ga3AuZ2V0WCgpO1xuICAgIHZhciByID0ga3BYLnVtb2QodGhpcy5uKTtcbiAgICBpZiAoci5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcyA9IGsuaW52bSh0aGlzLm4pLm11bChyLm11bChrZXkuZ2V0UHJpdmF0ZSgpKS5pYWRkKG1zZykpO1xuICAgIHMgPSBzLnVtb2QodGhpcy5uKTtcbiAgICBpZiAocy5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcmVjb3ZlcnlQYXJhbSA9IChrcC5nZXRZKCkuaXNPZGQoKSA/IDEgOiAwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAoa3BYLmNtcChyKSAhPT0gMCA/IDIgOiAwKTtcblxuICAgIC8vIFVzZSBjb21wbGVtZW50IG9mIGBzYCwgaWYgaXQgaXMgPiBgbiAvIDJgXG4gICAgaWYgKG9wdGlvbnMuY2Fub25pY2FsICYmIHMuY21wKHRoaXMubmgpID4gMCkge1xuICAgICAgcyA9IHRoaXMubi5zdWIocyk7XG4gICAgICByZWNvdmVyeVBhcmFtIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoeyByOiByLCBzOiBzLCByZWNvdmVyeVBhcmFtOiByZWNvdmVyeVBhcmFtIH0pO1xuICB9XG59O1xuXG5FQy5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlLCBrZXksIGVuYykge1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuICBrZXkgPSB0aGlzLmtleUZyb21QdWJsaWMoa2V5LCBlbmMpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgJ2hleCcpO1xuXG4gIC8vIFBlcmZvcm0gcHJpbWl0aXZlIHZhbHVlcyB2YWxpZGF0aW9uXG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG4gIGlmIChyLmNtcG4oMSkgPCAwIHx8IHIuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChzLmNtcG4oMSkgPCAwIHx8IHMuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gVmFsaWRhdGUgc2lnbmF0dXJlXG4gIHZhciBzaW52ID0gcy5pbnZtKHRoaXMubik7XG4gIHZhciB1MSA9IHNpbnYubXVsKG1zZykudW1vZCh0aGlzLm4pO1xuICB2YXIgdTIgPSBzaW52Lm11bChyKS51bW9kKHRoaXMubik7XG5cbiAgaWYgKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spIHtcbiAgICB2YXIgcCA9IHRoaXMuZy5tdWxBZGQodTEsIGtleS5nZXRQdWJsaWMoKSwgdTIpO1xuICAgIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBwLmdldFgoKS51bW9kKHRoaXMubikuY21wKHIpID09PSAwO1xuICB9XG5cbiAgLy8gTk9URTogR3JlZyBNYXh3ZWxsJ3MgdHJpY2ssIGluc3BpcmVkIGJ5OlxuICAvLyBodHRwczovL2dpdC5pby92YWQzS1xuXG4gIHZhciBwID0gdGhpcy5nLmptdWxBZGQodTEsIGtleS5nZXRQdWJsaWMoKSwgdTIpO1xuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIENvbXBhcmUgYHAueGAgb2YgSmFjb2JpYW4gcG9pbnQgd2l0aCBgcmAsXG4gIC8vIHRoaXMgd2lsbCBkbyBgcC54ID09IHIgKiBwLnpeMmAgaW5zdGVhZCBvZiBtdWx0aXBseWluZyBgcC54YCBieSB0aGVcbiAgLy8gaW52ZXJzZSBvZiBgcC56XjJgXG4gIHJldHVybiBwLmVxWFRvUChyKTtcbn07XG5cbkVDLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5ID0gZnVuY3Rpb24obXNnLCBzaWduYXR1cmUsIGosIGVuYykge1xuICBhc3NlcnQoKDMgJiBqKSA9PT0gaiwgJ1RoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMnKTtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG5cbiAgdmFyIG4gPSB0aGlzLm47XG4gIHZhciBlID0gbmV3IEJOKG1zZyk7XG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG5cbiAgLy8gQSBzZXQgTFNCIHNpZ25pZmllcyB0aGF0IHRoZSB5LWNvb3JkaW5hdGUgaXMgb2RkXG4gIHZhciBpc1lPZGQgPSBqICYgMTtcbiAgdmFyIGlzU2Vjb25kS2V5ID0gaiA+PiAxO1xuICBpZiAoci5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSkgPj0gMCAmJiBpc1NlY29uZEtleSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZScpO1xuXG4gIC8vIDEuMS4gTGV0IHggPSByICsgam4uXG4gIGlmIChpc1NlY29uZEtleSlcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIuYWRkKHRoaXMuY3VydmUubiksIGlzWU9kZCk7XG4gIGVsc2VcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIsIGlzWU9kZCk7XG5cbiAgdmFyIHJJbnYgPSBzaWduYXR1cmUuci5pbnZtKG4pO1xuICB2YXIgczEgPSBuLnN1YihlKS5tdWwockludikudW1vZChuKTtcbiAgdmFyIHMyID0gcy5tdWwockludikudW1vZChuKTtcblxuICAvLyAxLjYuMSBDb21wdXRlIFEgPSByXi0xIChzUiAtICBlRylcbiAgLy8gICAgICAgICAgICAgICBRID0gcl4tMSAoc1IgKyAtZUcpXG4gIHJldHVybiB0aGlzLmcubXVsQWRkKHMxLCByLCBzMik7XG59O1xuXG5FQy5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbSA9IGZ1bmN0aW9uKGUsIHNpZ25hdHVyZSwgUSwgZW5jKSB7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCBlbmMpO1xuICBpZiAoc2lnbmF0dXJlLnJlY292ZXJ5UGFyYW0gIT09IG51bGwpXG4gICAgcmV0dXJuIHNpZ25hdHVyZS5yZWNvdmVyeVBhcmFtO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgdmFyIFFwcmltZTtcbiAgICB0cnkge1xuICAgICAgUXByaW1lID0gdGhpcy5yZWNvdmVyUHViS2V5KGUsIHNpZ25hdHVyZSwgaSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFFwcmltZS5lcShRKSlcbiAgICAgIHJldHVybiBpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlcbiAgICByZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG4gIHRoaXMucHJlZFJlc2lzdCA9ICEhb3B0aW9ucy5wcmVkUmVzaXN0O1xuXG4gIHRoaXMub3V0TGVuID0gdGhpcy5oYXNoLm91dFNpemU7XG4gIHRoaXMubWluRW50cm9weSA9IG9wdGlvbnMubWluRW50cm9weSB8fCB0aGlzLmhhc2guaG1hY1N0cmVuZ3RoO1xuXG4gIHRoaXMuX3Jlc2VlZCA9IG51bGw7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLksgPSBudWxsO1xuICB0aGlzLlYgPSBudWxsO1xuXG4gIHZhciBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShvcHRpb25zLmVudHJvcHksIG9wdGlvbnMuZW50cm9weUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBub25jZSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSwgb3B0aW9ucy5ub25jZUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBwZXJzID0gdXRpbHMudG9BcnJheShvcHRpb25zLnBlcnMsIG9wdGlvbnMucGVyc0VuYyB8fCAnaGV4Jyk7XG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG4gIHRoaXMuX2luaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjRFJCRztcblxuSG1hY0RSQkcucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChlbnRyb3B5LCBub25jZSwgcGVycykge1xuICB2YXIgc2VlZCA9IGVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7XG5cbiAgdGhpcy5LID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIHRoaXMuViA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVi5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuS1tpXSA9IDB4MDA7XG4gICAgdGhpcy5WW2ldID0gMHgwMTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZShzZWVkKTtcbiAgdGhpcy5fcmVzZWVkID0gMTtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IDB4MTAwMDAwMDAwMDAwMDsgIC8vIDJeNDhcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faG1hYyA9IGZ1bmN0aW9uIGhtYWMoKSB7XG4gIHJldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCwgdGhpcy5LKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWQpIHtcbiAgdmFyIGttYWMgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAwIF0pO1xuICBpZiAoc2VlZClcbiAgICBrbWFjID0ga21hYy51cGRhdGUoc2VlZCk7XG4gIHRoaXMuSyA9IGttYWMuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbiAgaWYgKCFzZWVkKVxuICAgIHJldHVybjtcblxuICB0aGlzLksgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDEgXSlcbiAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZCA9IGZ1bmN0aW9uIHJlc2VlZChlbnRyb3B5LCBlbnRyb3B5RW5jLCBhZGQsIGFkZEVuYykge1xuICAvLyBPcHRpb25hbCBlbnRyb3B5IGVuY1xuICBpZiAodHlwZW9mIGVudHJvcHlFbmMgIT09ICdzdHJpbmcnKSB7XG4gICAgYWRkRW5jID0gYWRkO1xuICAgIGFkZCA9IGVudHJvcHlFbmM7XG4gICAgZW50cm9weUVuYyA9IG51bGw7XG4gIH1cblxuICBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShlbnRyb3B5LCBlbnRyb3B5RW5jKTtcbiAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyk7XG5cbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcblxuICB0aGlzLl91cGRhdGUoZW50cm9weS5jb25jYXQoYWRkIHx8IFtdKSk7XG4gIHRoaXMuX3Jlc2VlZCA9IDE7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4sIGVuYywgYWRkLCBhZGRFbmMpIHtcbiAgaWYgKHRoaXMuX3Jlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMgfHwgJ2hleCcpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMuX3Jlc2VlZCsrO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBLZXlQYWlyKGVjLCBvcHRpb25zKSB7XG4gIHRoaXMuZWMgPSBlYztcbiAgdGhpcy5wcml2ID0gbnVsbDtcbiAgdGhpcy5wdWIgPSBudWxsO1xuXG4gIC8vIEtleVBhaXIoZWMsIHsgcHJpdjogLi4uLCBwdWI6IC4uLiB9KVxuICBpZiAob3B0aW9ucy5wcml2KVxuICAgIHRoaXMuX2ltcG9ydFByaXZhdGUob3B0aW9ucy5wcml2LCBvcHRpb25zLnByaXZFbmMpO1xuICBpZiAob3B0aW9ucy5wdWIpXG4gICAgdGhpcy5faW1wb3J0UHVibGljKG9wdGlvbnMucHViLCBvcHRpb25zLnB1YkVuYyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWMsIHB1YiwgZW5jKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHViOiBwdWIsXG4gICAgcHViRW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21Qcml2YXRlID0gZnVuY3Rpb24gZnJvbVByaXZhdGUoZWMsIHByaXYsIGVuYykge1xuICBpZiAocHJpdiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHByaXY7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHJpdjogcHJpdixcbiAgICBwcml2RW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICB2YXIgcHViID0gdGhpcy5nZXRQdWJsaWMoKTtcblxuICBpZiAocHViLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdJbnZhbGlkIHB1YmxpYyBrZXknIH07XG4gIGlmICghcHViLnZhbGlkYXRlKCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSBpcyBub3QgYSBwb2ludCcgfTtcbiAgaWYgKCFwdWIubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ1B1YmxpYyBrZXkgKiBOICE9IE8nIH07XG5cbiAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlLCByZWFzb246IG51bGwgfTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhjb21wYWN0LCBlbmMpIHtcbiAgLy8gY29tcGFjdCBpcyBvcHRpb25hbCBhcmd1bWVudFxuICBpZiAodHlwZW9mIGNvbXBhY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jID0gY29tcGFjdDtcbiAgICBjb21wYWN0ID0gbnVsbDtcbiAgfVxuXG4gIGlmICghdGhpcy5wdWIpXG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmcubXVsKHRoaXMucHJpdik7XG5cbiAgaWYgKCFlbmMpXG4gICAgcmV0dXJuIHRoaXMucHViO1xuXG4gIHJldHVybiB0aGlzLnB1Yi5lbmNvZGUoZW5jLCBjb21wYWN0KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFByaXZhdGUgPSBmdW5jdGlvbiBnZXRQcml2YXRlKGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdGhpcy5wcml2LnRvU3RyaW5nKDE2LCAyKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLnByaXY7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZSA9IGZ1bmN0aW9uIF9pbXBvcnRQcml2YXRlKGtleSwgZW5jKSB7XG4gIHRoaXMucHJpdiA9IG5ldyBCTihrZXksIGVuYyB8fCAxNik7XG5cbiAgLy8gRW5zdXJlIHRoYXQgdGhlIHByaXYgd29uJ3QgYmUgYmlnZ2VyIHRoYW4gbiwgb3RoZXJ3aXNlIHdlIG1heSBmYWlsXG4gIC8vIGluIGZpeGVkIG11bHRpcGxpY2F0aW9uIG1ldGhvZFxuICB0aGlzLnByaXYgPSB0aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYyA9IGZ1bmN0aW9uIF9pbXBvcnRQdWJsaWMoa2V5LCBlbmMpIHtcbiAgaWYgKGtleS54IHx8IGtleS55KSB7XG4gICAgLy8gTW9udGdvbWVyeSBwb2ludHMgb25seSBoYXZlIGFuIGB4YCBjb29yZGluYXRlLlxuICAgIC8vIFdlaWVyc3RyYXNzL0Vkd2FyZHMgcG9pbnRzIG9uIHRoZSBvdGhlciBoYW5kIGhhdmUgYm90aCBgeGAgYW5kXG4gICAgLy8gYHlgIGNvb3JkaW5hdGVzLlxuICAgIGlmICh0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdtb250Jykge1xuICAgICAgYXNzZXJ0KGtleS54LCAnTmVlZCB4IGNvb3JkaW5hdGUnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ3Nob3J0JyB8fFxuICAgICAgICAgICAgICAgdGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnZWR3YXJkcycpIHtcbiAgICAgIGFzc2VydChrZXkueCAmJiBrZXkueSwgJ05lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUnKTtcbiAgICB9XG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLnBvaW50KGtleS54LCBrZXkueSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucHViID0gdGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChrZXksIGVuYyk7XG59O1xuXG4vLyBFQ0RIXG5LZXlQYWlyLnByb3RvdHlwZS5kZXJpdmUgPSBmdW5jdGlvbiBkZXJpdmUocHViKSB7XG4gIHJldHVybiBwdWIubXVsKHRoaXMucHJpdikuZ2V0WCgpO1xufTtcblxuLy8gRUNEU0FcbktleVBhaXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmVjLnNpZ24obXNnLCB0aGlzLCBlbmMsIG9wdGlvbnMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlKSB7XG4gIHJldHVybiB0aGlzLmVjLnZlcmlmeShtc2csIHNpZ25hdHVyZSwgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgcmV0dXJuICc8S2V5IHByaXY6ICcgKyAodGhpcy5wcml2ICYmIHRoaXMucHJpdi50b1N0cmluZygxNiwgMikpICtcbiAgICAgICAgICcgcHViOiAnICsgKHRoaXMucHViICYmIHRoaXMucHViLmluc3BlY3QoKSkgKyAnID4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2lnbmF0dXJlKG9wdGlvbnMsIGVuYykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gb3B0aW9ucztcblxuICBpZiAodGhpcy5faW1wb3J0REVSKG9wdGlvbnMsIGVuYykpXG4gICAgcmV0dXJuO1xuXG4gIGFzc2VydChvcHRpb25zLnIgJiYgb3B0aW9ucy5zLCAnU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzJyk7XG4gIHRoaXMuciA9IG5ldyBCTihvcHRpb25zLnIsIDE2KTtcbiAgdGhpcy5zID0gbmV3IEJOKG9wdGlvbnMucywgMTYpO1xuICBpZiAob3B0aW9ucy5yZWNvdmVyeVBhcmFtID09PSB1bmRlZmluZWQpXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcbiAgZWxzZVxuICAgIHRoaXMucmVjb3ZlcnlQYXJhbSA9IG9wdGlvbnMucmVjb3ZlcnlQYXJhbTtcbn1cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuXG5mdW5jdGlvbiBQb3NpdGlvbigpIHtcbiAgdGhpcy5wbGFjZSA9IDA7XG59XG5cbmZ1bmN0aW9uIGdldExlbmd0aChidWYsIHApIHtcbiAgdmFyIGluaXRpYWwgPSBidWZbcC5wbGFjZSsrXTtcbiAgaWYgKCEoaW5pdGlhbCAmIDB4ODApKSB7XG4gICAgcmV0dXJuIGluaXRpYWw7XG4gIH1cbiAgdmFyIG9jdGV0TGVuID0gaW5pdGlhbCAmIDB4ZjtcbiAgdmFyIHZhbCA9IDA7XG4gIGZvciAodmFyIGkgPSAwLCBvZmYgPSBwLnBsYWNlOyBpIDwgb2N0ZXRMZW47IGkrKywgb2ZmKyspIHtcbiAgICB2YWwgPDw9IDg7XG4gICAgdmFsIHw9IGJ1ZltvZmZdO1xuICB9XG4gIHAucGxhY2UgPSBvZmY7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIHJtUGFkZGluZyhidWYpIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aCAtIDE7XG4gIHdoaWxlICghYnVmW2ldICYmICEoYnVmW2kgKyAxXSAmIDB4ODApICYmIGkgPCBsZW4pIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGkgPT09IDApIHtcbiAgICByZXR1cm4gYnVmO1xuICB9XG4gIHJldHVybiBidWYuc2xpY2UoaSk7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUuX2ltcG9ydERFUiA9IGZ1bmN0aW9uIF9pbXBvcnRERVIoZGF0YSwgZW5jKSB7XG4gIGRhdGEgPSB1dGlscy50b0FycmF5KGRhdGEsIGVuYyk7XG4gIHZhciBwID0gbmV3IFBvc2l0aW9uKCk7XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MzApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgaWYgKChsZW4gKyBwLnBsYWNlKSAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcmxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgdmFyIHIgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHJsZW4gKyBwLnBsYWNlKTtcbiAgcC5wbGFjZSArPSBybGVuO1xuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoZGF0YS5sZW5ndGggIT09IHNsZW4gKyBwLnBsYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzID0gZGF0YS5zbGljZShwLnBsYWNlLCBzbGVuICsgcC5wbGFjZSk7XG4gIGlmIChyWzBdID09PSAwICYmIChyWzFdICYgMHg4MCkpIHtcbiAgICByID0gci5zbGljZSgxKTtcbiAgfVxuICBpZiAoc1swXSA9PT0gMCAmJiAoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cblxuICB0aGlzLnIgPSBuZXcgQk4ocik7XG4gIHRoaXMucyA9IG5ldyBCTihzKTtcbiAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdExlbmd0aChhcnIsIGxlbikge1xuICBpZiAobGVuIDwgMHg4MCkge1xuICAgIGFyci5wdXNoKGxlbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBvY3RldHMgPSAxICsgKE1hdGgubG9nKGxlbikgLyBNYXRoLkxOMiA+Pj4gMyk7XG4gIGFyci5wdXNoKG9jdGV0cyB8IDB4ODApO1xuICB3aGlsZSAoLS1vY3RldHMpIHtcbiAgICBhcnIucHVzaCgobGVuID4+PiAob2N0ZXRzIDw8IDMpKSAmIDB4ZmYpO1xuICB9XG4gIGFyci5wdXNoKGxlbik7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9ERVIgPSBmdW5jdGlvbiB0b0RFUihlbmMpIHtcbiAgdmFyIHIgPSB0aGlzLnIudG9BcnJheSgpO1xuICB2YXIgcyA9IHRoaXMucy50b0FycmF5KCk7XG5cbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoclswXSAmIDB4ODApXG4gICAgciA9IFsgMCBdLmNvbmNhdChyKTtcbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoc1swXSAmIDB4ODApXG4gICAgcyA9IFsgMCBdLmNvbmNhdChzKTtcblxuICByID0gcm1QYWRkaW5nKHIpO1xuICBzID0gcm1QYWRkaW5nKHMpO1xuXG4gIHdoaWxlICghc1swXSAmJiAhKHNbMV0gJiAweDgwKSkge1xuICAgIHMgPSBzLnNsaWNlKDEpO1xuICB9XG4gIHZhciBhcnIgPSBbIDB4MDIgXTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgci5sZW5ndGgpO1xuICBhcnIgPSBhcnIuY29uY2F0KHIpO1xuICBhcnIucHVzaCgweDAyKTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgcy5sZW5ndGgpO1xuICB2YXIgYmFja0hhbGYgPSBhcnIuY29uY2F0KHMpO1xuICB2YXIgcmVzID0gWyAweDMwIF07XG4gIGNvbnN0cnVjdExlbmd0aChyZXMsIGJhY2tIYWxmLmxlbmd0aCk7XG4gIHJlcyA9IHJlcy5jb25jYXQoYmFja0hhbGYpO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFRERTQShjdXJ2ZSkge1xuICBhc3NlcnQoY3VydmUgPT09ICdlZDI1NTE5JywgJ29ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXInKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUREU0EpKVxuICAgIHJldHVybiBuZXcgRUREU0EoY3VydmUpO1xuXG4gIHZhciBjdXJ2ZSA9IGVsbGlwdGljLmN1cnZlc1tjdXJ2ZV0uY3VydmU7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5nID0gY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUoY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIHRoaXMucG9pbnRDbGFzcyA9IGN1cnZlLnBvaW50KCkuY29uc3RydWN0b3I7XG4gIHRoaXMuZW5jb2RpbmdMZW5ndGggPSBNYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKSAvIDgpO1xuICB0aGlzLmhhc2ggPSBoYXNoLnNoYTUxMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFRERTQTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xLZXlQYWlyfSBzZWNyZXQgLSBzZWNyZXQgYnl0ZXMgb3IgYSBrZXlwYWlyXG4qIEByZXR1cm5zIHtTaWduYXR1cmV9IC0gc2lnbmF0dXJlXG4qL1xuRUREU0EucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UsIHNlY3JldCkge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVNlY3JldChzZWNyZXQpO1xuICB2YXIgciA9IHRoaXMuaGFzaEludChrZXkubWVzc2FnZVByZWZpeCgpLCBtZXNzYWdlKTtcbiAgdmFyIFIgPSB0aGlzLmcubXVsKHIpO1xuICB2YXIgUmVuY29kZWQgPSB0aGlzLmVuY29kZVBvaW50KFIpO1xuICB2YXIgc18gPSB0aGlzLmhhc2hJbnQoUmVuY29kZWQsIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgLm11bChrZXkucHJpdigpKTtcbiAgdmFyIFMgPSByLmFkZChzXykudW1vZCh0aGlzLmN1cnZlLm4pO1xuICByZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHsgUjogUiwgUzogUywgUmVuY29kZWQ6IFJlbmNvZGVkIH0pO1xufTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFNpZ25hdHVyZX0gc2lnIC0gc2lnIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFBvaW50fEtleVBhaXJ9IHB1YiAtIHB1YmxpYyBrZXlcbiogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBwdWJsaWMga2V5IG1hdGNoZXMgc2lnIG9mIG1lc3NhZ2VcbiovXG5FRERTQS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZywgcHViKSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICBzaWcgPSB0aGlzLm1ha2VTaWduYXR1cmUoc2lnKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhwdWIpO1xuICB2YXIgaCA9IHRoaXMuaGFzaEludChzaWcuUmVuY29kZWQoKSwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpO1xuICB2YXIgU0cgPSB0aGlzLmcubXVsKHNpZy5TKCkpO1xuICB2YXIgUnBsdXNBaCA9IHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpO1xuICByZXR1cm4gUnBsdXNBaC5lcShTRyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQoKSB7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgIGhhc2gudXBkYXRlKGFyZ3VtZW50c1tpXSk7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yikge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1Yik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21TZWNyZXQodGhpcywgc2VjcmV0KTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWFrZVNpZ25hdHVyZShzaWcpIHtcbiAgaWYgKHNpZyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gc2lnO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZSh0aGlzLCBzaWcpO1xufTtcblxuLyoqXG4qICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWpvc2Vmc3Nvbi1lZGRzYS1lZDI1NTE5LTAzI3NlY3Rpb24tNS4yXG4qXG4qIEVERFNBIGRlZmluZXMgbWV0aG9kcyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBvaW50cyBhbmQgaW50ZWdlcnMuIFRoZXNlIGFyZVxuKiBoZWxwZXIgY29udmVuaWVuY2UgbWV0aG9kcywgdGhhdCBwYXNzIGFsb25nIHRvIHV0aWxpdHkgZnVuY3Rpb25zIGltcGxpZWRcbiogcGFyYW1ldGVycy5cbipcbiovXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlUG9pbnQgPSBmdW5jdGlvbiBlbmNvZGVQb2ludChwb2ludCkge1xuICB2YXIgZW5jID0gcG9pbnQuZ2V0WSgpLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG4gIGVuY1t0aGlzLmVuY29kaW5nTGVuZ3RoIC0gMV0gfD0gcG9pbnQuZ2V0WCgpLmlzT2RkKCkgPyAweDgwIDogMDtcbiAgcmV0dXJuIGVuYztcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzKSB7XG4gIGJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcyhieXRlcyk7XG5cbiAgdmFyIGxhc3RJeCA9IGJ5dGVzLmxlbmd0aCAtIDE7XG4gIHZhciBub3JtZWQgPSBieXRlcy5zbGljZSgwLCBsYXN0SXgpLmNvbmNhdChieXRlc1tsYXN0SXhdICYgfjB4ODApO1xuICB2YXIgeElzT2RkID0gKGJ5dGVzW2xhc3RJeF0gJiAweDgwKSAhPT0gMDtcblxuICB2YXIgeSA9IHV0aWxzLmludEZyb21MRShub3JtZWQpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKHksIHhJc09kZCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSkge1xuICByZXR1cm4gbnVtLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlSW50ID0gZnVuY3Rpb24gZGVjb2RlSW50KGJ5dGVzKSB7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoYnl0ZXMpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmlzUG9pbnQgPSBmdW5jdGlvbiBpc1BvaW50KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBjYWNoZWRQcm9wZXJ0eSA9IHV0aWxzLmNhY2hlZFByb3BlcnR5O1xuXG4vKipcbiogQHBhcmFtIHtFRERTQX0gZWRkc2EgLSBpbnN0YW5jZVxuKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcHVibGljL3ByaXZhdGUga2V5IHBhcmFtZXRlcnNcbipcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5zZWNyZXRdIC0gc2VjcmV0IHNlZWQgYnl0ZXNcbiogQHBhcmFtIHtQb2ludH0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCAoYWthIGBBYCBpbiBlZGRzYSB0ZXJtcylcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCBlbmNvZGVkIGFzIGJ5dGVzXG4qXG4qL1xuZnVuY3Rpb24gS2V5UGFpcihlZGRzYSwgcGFyYW1zKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcbiAgdGhpcy5fc2VjcmV0ID0gcGFyc2VCeXRlcyhwYXJhbXMuc2VjcmV0KTtcbiAgaWYgKGVkZHNhLmlzUG9pbnQocGFyYW1zLnB1YikpXG4gICAgdGhpcy5fcHViID0gcGFyYW1zLnB1YjtcbiAgZWxzZVxuICAgIHRoaXMuX3B1YkJ5dGVzID0gcGFyc2VCeXRlcyhwYXJhbXMucHViKTtcbn1cblxuS2V5UGFpci5mcm9tUHVibGljID0gZnVuY3Rpb24gZnJvbVB1YmxpYyhlZGRzYSwgcHViKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG4gIHJldHVybiBuZXcgS2V5UGFpcihlZGRzYSwgeyBwdWI6IHB1YiB9KTtcbn07XG5cbktleVBhaXIuZnJvbVNlY3JldCA9IGZ1bmN0aW9uIGZyb21TZWNyZXQoZWRkc2EsIHNlY3JldCkge1xuICBpZiAoc2VjcmV0IGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gc2VjcmV0O1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgc2VjcmV0OiBzZWNyZXQgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zZWNyZXQgPSBmdW5jdGlvbiBzZWNyZXQoKSB7XG4gIHJldHVybiB0aGlzLl9zZWNyZXQ7XG59O1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHViQnl0ZXMnLCBmdW5jdGlvbiBwdWJCeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3B1YicsIGZ1bmN0aW9uIHB1YigpIHtcbiAgaWYgKHRoaXMuX3B1YkJ5dGVzKVxuICAgIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwcml2Qnl0ZXMnLCBmdW5jdGlvbiBwcml2Qnl0ZXMoKSB7XG4gIHZhciBlZGRzYSA9IHRoaXMuZWRkc2E7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIHZhciBsYXN0SXggPSBlZGRzYS5lbmNvZGluZ0xlbmd0aCAtIDE7XG5cbiAgdmFyIGEgPSBoYXNoLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbiAgYVswXSAmPSAyNDg7XG4gIGFbbGFzdEl4XSAmPSAxMjc7XG4gIGFbbGFzdEl4XSB8PSA2NDtcblxuICByZXR1cm4gYTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdicsIGZ1bmN0aW9uIHByaXYoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnaGFzaCcsIGZ1bmN0aW9uIGhhc2goKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ21lc3NhZ2VQcmVmaXgnLCBmdW5jdGlvbiBtZXNzYWdlUHJlZml4KCkge1xuICByZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCk7XG59KTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSkge1xuICBhc3NlcnQodGhpcy5fc2VjcmV0LCAnS2V5UGFpciBjYW4gb25seSB2ZXJpZnknKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2Euc2lnbihtZXNzYWdlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlLCBzaWcpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KG1lc3NhZ2UsIHNpZywgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRTZWNyZXQgPSBmdW5jdGlvbiBnZXRTZWNyZXQoZW5jKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGlzIHB1YmxpYyBvbmx5Jyk7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5zZWNyZXQoKSwgZW5jKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhlbmMpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksIGVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIGNhY2hlZFByb3BlcnR5ID0gdXRpbHMuY2FjaGVkUHJvcGVydHk7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG5cbi8qKlxuKiBAcGFyYW0ge0VERFNBfSBlZGRzYSAtIGVkZHNhIGluc3RhbmNlXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fE9iamVjdH0gc2lnIC1cbiogQHBhcmFtIHtBcnJheTxCeXRlcz58UG9pbnR9IFtzaWcuUl0gLSBSIHBvaW50IGFzIFBvaW50IG9yIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fGJufSBbc2lnLlNdIC0gUyBzY2FsYXIgYXMgYm4gb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuUmVuY29kZWRdIC0gUiBwb2ludCBlbmNvZGVkXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fSBbc2lnLlNlbmNvZGVkXSAtIFMgc2NhbGFyIGVuY29kZWRcbiovXG5mdW5jdGlvbiBTaWduYXR1cmUoZWRkc2EsIHNpZykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG5cbiAgaWYgKHR5cGVvZiBzaWcgIT09ICdvYmplY3QnKVxuICAgIHNpZyA9IHBhcnNlQnl0ZXMoc2lnKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzaWcpKSB7XG4gICAgc2lnID0ge1xuICAgICAgUjogc2lnLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKSxcbiAgICAgIFM6IHNpZy5zbGljZShlZGRzYS5lbmNvZGluZ0xlbmd0aClcbiAgICB9O1xuICB9XG5cbiAgYXNzZXJ0KHNpZy5SICYmIHNpZy5TLCAnU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTJyk7XG5cbiAgaWYgKGVkZHNhLmlzUG9pbnQoc2lnLlIpKVxuICAgIHRoaXMuX1IgPSBzaWcuUjtcbiAgaWYgKHNpZy5TIGluc3RhbmNlb2YgQk4pXG4gICAgdGhpcy5fUyA9IHNpZy5TO1xuXG4gIHRoaXMuX1JlbmNvZGVkID0gQXJyYXkuaXNBcnJheShzaWcuUikgPyBzaWcuUiA6IHNpZy5SZW5jb2RlZDtcbiAgdGhpcy5fU2VuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5TKSA/IHNpZy5TIDogc2lnLlNlbmNvZGVkO1xufVxuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdTJywgZnVuY3Rpb24gUygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUicsIGZ1bmN0aW9uIFIoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUmVuY29kZWQnLCBmdW5jdGlvbiBSZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1NlbmNvZGVkJywgZnVuY3Rpb24gU2VuY29kZWQoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSk7XG59KTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKTtcbn07XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9IZXggPSBmdW5jdGlvbiB0b0hleCgpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwgJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25hdHVyZTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJ2YXIgaXNIZXhQcmVmaXhlZCA9IHJlcXVpcmUoJ2lzLWhleC1wcmVmaXhlZCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgJzB4JyBmcm9tIGEgZ2l2ZW4gYFN0cmluZ2AgaXMgcHJlc2VudFxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHZhbHVlXG4gKiBAcmV0dXJuIHtTdHJpbmd8T3B0aW9uYWx9IGEgc3RyaW5nIGJ5IHBhc3MgaWYgbmVjZXNzYXJ5XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaXBIZXhQcmVmaXgoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gaXNIZXhQcmVmaXhlZChzdHIpID8gc3RyLnNsaWNlKDIpIDogc3RyO1xufVxuIiwiLy8gY29uc3QgRXRoUXVlcnkgPSByZXF1aXJlKCdldGhqcy1xdWVyeScpXG5jb25zdCBFdGhRdWVyeSA9IHJlcXVpcmUoJ2V0aC1xdWVyeScpXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuY29uc3QgcGlmeSA9IHJlcXVpcmUoJ3BpZnknKVxuY29uc3QgaGV4VXRpbHMgPSByZXF1aXJlKCcuL2hleFV0aWxzJylcbmNvbnN0IGluY3JlbWVudEhleE51bWJlciA9IGhleFV0aWxzLmluY3JlbWVudEhleE51bWJlclxuY29uc3Qgc2VjID0gMTAwMFxuY29uc3QgbWluID0gNjAgKiBzZWNcblxuY2xhc3MgUnBjQmxvY2tUcmFja2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKCFvcHRzLnByb3ZpZGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1JwY0Jsb2NrVHJhY2tlciAtIG5vIHByb3ZpZGVyIHNwZWNpZmllZC4nKVxuICAgIHRoaXMuX3Byb3ZpZGVyID0gb3B0cy5wcm92aWRlclxuICAgIHRoaXMuX3F1ZXJ5ID0gbmV3IEV0aFF1ZXJ5KG9wdHMucHJvdmlkZXIpXG4gICAgLy8gY29uZmlnXG4gICAgdGhpcy5fcG9sbGluZ0ludGVydmFsID0gb3B0cy5wb2xsaW5nSW50ZXJ2YWwgfHwgNCAqIHNlY1xuICAgIHRoaXMuX3N5bmNpbmdUaW1lb3V0ID0gb3B0cy5zeW5jaW5nVGltZW91dCB8fCAxICogbWluXG4gICAgLy8gc3RhdGVcbiAgICB0aGlzLl90cmFja2luZ0Jsb2NrID0gbnVsbFxuICAgIHRoaXMuX3RyYWNraW5nQmxvY2tUaW1lc3RhbXAgPSBudWxsXG4gICAgdGhpcy5fY3VycmVudEJsb2NrID0gbnVsbFxuICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlXG4gICAgLy8gYmluZCBtZXRob2RzIGZvciBjbGVhbmVyIHN5bnRheCBsYXRlclxuICAgIHRoaXMuX3BlcmZvcm1TeW5jID0gdGhpcy5fcGVyZm9ybVN5bmMuYmluZCh0aGlzKVxuICAgIHRoaXMuX2hhbmRsZU5ld0Jsb2NrTm90aWZpY2F0aW9uID0gdGhpcy5faGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24uYmluZCh0aGlzKVxuICB9XG5cbiAgZ2V0VHJhY2tpbmdCbG9jayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYWNraW5nQmxvY2tcbiAgfVxuXG4gIGdldEN1cnJlbnRCbG9jayAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCbG9ja1xuICB9XG5cbiAgYXN5bmMgYXdhaXRDdXJyZW50QmxvY2sgKCkge1xuICAgIC8vIHJldHVybiBpZiBhdmFpbGFibGVcbiAgICBpZiAodGhpcy5fY3VycmVudEJsb2NrKSByZXR1cm4gdGhpcy5fY3VycmVudEJsb2NrXG4gICAgLy8gd2FpdCBmb3IgXCJzeW5jXCIgZXZlbnRcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMub25jZSgnbGF0ZXN0JywgcmVzb2x2ZSkpXG4gICAgLy8gcmV0dXJuIG5ld2x5IHNldCBjdXJyZW50IGJsb2NrXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCbG9ja1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKG9wdHMgPSB7fSkge1xuICAgIC8vIGFib3J0IGlmIGFscmVhZHkgc3RhcnRlZFxuICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHJldHVyblxuICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWVcbiAgICAvLyBpZiB0aGlzLl9jdXJyZW50QmxvY2tcbiAgICBpZiAob3B0cy5mcm9tQmxvY2spIHtcbiAgICAgIC8vIHVzZSBzcGVjaWZpZWQgc3RhcnQgcG9pbnRcbiAgICAgIGF3YWl0IHRoaXMuX3NldFRyYWNraW5nQmxvY2soYXdhaXQgdGhpcy5fZmV0Y2hCbG9ja0J5TnVtYmVyKG9wdHMuZnJvbUJsb2NrKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3IgcXVlcnkgZm9yIGxhdGVzdFxuICAgICAgYXdhaXQgdGhpcy5fc2V0VHJhY2tpbmdCbG9jayhhd2FpdCB0aGlzLl9mZXRjaExhdGVzdEJsb2NrKCkpXG4gICAgfVxuICAgIGlmICh0aGlzLl9wcm92aWRlci5vbikge1xuICAgICAgYXdhaXQgdGhpcy5faW5pdFN1YnNjcmlwdGlvbigpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BlcmZvcm1TeW5jKClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZVxuICAgIGlmICh0aGlzLl9wcm92aWRlci5vbikge1xuICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9uKClcbiAgICB9XG4gIH1cblxuICAvL1xuICAvLyBwcml2YXRlXG4gIC8vXG5cbiAgYXN5bmMgX3NldFRyYWNraW5nQmxvY2sgKG5ld0Jsb2NrKSB7XG4gICAgaWYgKHRoaXMuX3RyYWNraW5nQmxvY2sgJiYgKHRoaXMuX3RyYWNraW5nQmxvY2suaGFzaCA9PT0gbmV3QmxvY2suaGFzaCkpIHJldHVyblxuICAgIC8vIGNoZWNrIGZvciBsYXJnZSB0aW1lc3RhbXAgbGFwc2VcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX3RyYWNraW5nQmxvY2tUaW1lc3RhbXBcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgLy8gY2hlY2sgZm9yIGRlc3luY2hyb25pemF0aW9uIChjb21wdXRlciBzbGVlcCBvciBubyBpbnRlcm5ldClcbiAgICBpZiAocHJldmlvdXMgJiYgKG5vdyAtIHByZXZpb3VzKSA+IHRoaXMuX3N5bmNpbmdUaW1lb3V0KSB7XG4gICAgICB0aGlzLl90cmFja2luZ0Jsb2NrVGltZXN0YW1wID0gbnVsbFxuICAgICAgYXdhaXQgdGhpcy5fd2FycFRvTGF0ZXN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHJhY2tpbmdCbG9jayA9IG5ld0Jsb2NrXG4gICAgICB0aGlzLl90cmFja2luZ0Jsb2NrVGltZXN0YW1wID0gbm93XG4gICAgICB0aGlzLmVtaXQoJ2Jsb2NrJywgbmV3QmxvY2spXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3NldEN1cnJlbnRCbG9jayAobmV3QmxvY2spIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEJsb2NrICYmICh0aGlzLl9jdXJyZW50QmxvY2suaGFzaCA9PT0gbmV3QmxvY2suaGFzaCkpIHJldHVyblxuICAgIGNvbnN0IG9sZEJsb2NrID0gdGhpcy5fY3VycmVudEJsb2NrXG4gICAgdGhpcy5fY3VycmVudEJsb2NrID0gbmV3QmxvY2tcbiAgICB0aGlzLmVtaXQoJ2xhdGVzdCcsIG5ld0Jsb2NrKVxuICAgIHRoaXMuZW1pdCgnc3luYycsIHsgbmV3QmxvY2ssIG9sZEJsb2NrIH0pXG4gIH1cblxuICBhc3luYyBfd2FycFRvTGF0ZXN0KCkge1xuICAgIC8vIHNldCBsYXRlc3QgYXMgdHJhY2tpbmcgYmxvY2tcbiAgICBhd2FpdCB0aGlzLl9zZXRUcmFja2luZ0Jsb2NrKGF3YWl0IHRoaXMuX2ZldGNoTGF0ZXN0QmxvY2soKSlcbiAgfVxuXG4gIGFzeW5jIF9wb2xsRm9yTmV4dEJsb2NrICgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3BlcmZvcm1TeW5jKCksIHRoaXMuX3BvbGxpbmdJbnRlcnZhbClcbiAgfVxuXG4gIGFzeW5jIF9wZXJmb3JtU3luYyAoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1J1bm5pbmcpIHJldHVyblxuICAgIGNvbnN0IHRyYWNraW5nQmxvY2sgPSB0aGlzLmdldFRyYWNraW5nQmxvY2soKVxuICAgIGlmICghdHJhY2tpbmdCbG9jaykgdGhyb3cgbmV3IEVycm9yKCdScGNCbG9ja1RyYWNrZXIgLSB0cmFja2luZyBibG9jayBpcyBtaXNzaW5nJylcbiAgICBjb25zdCBuZXh0TnVtYmVyID0gaW5jcmVtZW50SGV4TnVtYmVyKHRyYWNraW5nQmxvY2subnVtYmVyKVxuICAgIHRyeSB7XG5cbiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYXdhaXQgdGhpcy5fZmV0Y2hCbG9ja0J5TnVtYmVyKG5leHROdW1iZXIpXG4gICAgICBpZiAobmV3QmxvY2spIHtcbiAgICAgICAgLy8gc2V0IGFzIG5ldyB0cmFja2luZyBibG9ja1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRUcmFja2luZ0Jsb2NrKG5ld0Jsb2NrKVxuICAgICAgICAvLyBhc2sgZm9yIG5leHQgYmxvY2tcbiAgICAgICAgdGhpcy5fcGVyZm9ybVN5bmMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2V0IHRyYWNraW5nIGJsb2NrIGFzIGN1cnJlbnQgYmxvY2tcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEJsb2NrKHRyYWNraW5nQmxvY2spXG4gICAgICAgIC8vIHNldHVwIHBvbGwgZm9yIG5leHQgYmxvY2tcbiAgICAgICAgdGhpcy5fcG9sbEZvck5leHRCbG9jaygpXG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnIpIHtcblxuICAgICAgLy8gaG90Zml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW1qcy90ZXN0cnBjL2lzc3Vlcy8yOTBcbiAgICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnaW5kZXggb3V0IG9mIHJhbmdlJykgfHxcbiAgICAgICAgICBlcnIubWVzc2FnZS5pbmNsdWRlcyhcIkNvdWxkbid0IGZpbmQgYmxvY2sgYnkgcmVmZXJlbmNlXCIpKSB7XG4gICAgICAgIC8vIHNldCB0cmFja2luZyBibG9jayBhcyBjdXJyZW50IGJsb2NrXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRCbG9jayh0cmFja2luZ0Jsb2NrKVxuICAgICAgICAvLyBzZXR1cCBwb2xsIGZvciBuZXh0IGJsb2NrXG4gICAgICAgIHRoaXMuX3BvbGxGb3JOZXh0QmxvY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuX3BvbGxGb3JOZXh0QmxvY2soKVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2hhbmRsZU5ld0Jsb2NrTm90aWZpY2F0aW9uKGVyciwgbm90aWZpY2F0aW9uKSB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5pZCAhPSB0aGlzLl9zdWJzY3JpcHRpb25JZClcbiAgICAgIHJldHVybiAvLyB0aGlzIG5vdGlmaWNhdGlvbiBpc24ndCBmb3IgdXNcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb24oKVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuX3NldFRyYWNraW5nQmxvY2soYXdhaXQgdGhpcy5fZmV0Y2hCbG9ja0J5TnVtYmVyKG5vdGlmaWNhdGlvbi5yZXN1bHQubnVtYmVyKSlcbiAgfVxuXG4gIGFzeW5jIF9pbml0U3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMuX3Byb3ZpZGVyLm9uKCdkYXRhJywgdGhpcy5faGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24pXG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgcGlmeSh0aGlzLl9wcm92aWRlci5zZW5kQXN5bmMgfHwgdGhpcy5fcHJvdmlkZXIuc2VuZCkoe1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBpZDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICBtZXRob2Q6ICdldGhfc3Vic2NyaWJlJyxcbiAgICAgIHBhcmFtczogW1xuICAgICAgICAnbmV3SGVhZHMnXG4gICAgICBdLFxuICAgIH0pXG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25JZCA9IHJlc3VsdC5yZXN1bHRcbiAgfVxuXG4gIGFzeW5jIF9yZW1vdmVTdWJzY3JpcHRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb25JZCkgdGhyb3cgbmV3IEVycm9yKFwiTm90IHN1YnNjcmliZWQuXCIpXG5cbiAgICB0aGlzLl9wcm92aWRlci5yZW1vdmVMaXN0ZW5lcignZGF0YScsIHRoaXMuX2hhbmRsZU5ld0Jsb2NrTm90aWZpY2F0aW9uKVxuXG4gICAgYXdhaXQgcGlmeSh0aGlzLl9wcm92aWRlci5zZW5kQXN5bmMgfHwgdGhpcy5fcHJvdmlkZXIuc2VuZCkoe1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBpZDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICBtZXRob2Q6ICdldGhfdW5zdWJzY3JpYmUnLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbklkXG4gICAgICBdLFxuICAgIH0pXG5cbiAgICBkZWxldGUgdGhpcy5fc3Vic2NyaXB0aW9uSWRcbiAgfVxuXG4gIF9mZXRjaExhdGVzdEJsb2NrICgpIHtcbiAgICByZXR1cm4gcGlmeSh0aGlzLl9xdWVyeS5nZXRCbG9ja0J5TnVtYmVyKS5jYWxsKHRoaXMuX3F1ZXJ5LCAnbGF0ZXN0JywgdHJ1ZSlcbiAgfVxuXG4gIF9mZXRjaEJsb2NrQnlOdW1iZXIgKGhleE51bWJlcikge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4VXRpbHMuZm9ybWF0SGV4KGhleE51bWJlcilcbiAgICByZXR1cm4gcGlmeSh0aGlzLl9xdWVyeS5nZXRCbG9ja0J5TnVtYmVyKS5jYWxsKHRoaXMuX3F1ZXJ5LCBjbGVhbkhleCwgdHJ1ZSlcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUnBjQmxvY2tUcmFja2VyXG5cbiAvLyDilJzilIAgZGlmZmljdWx0eTogMHgyODkyZGRjYVxuIC8vIOKUnOKUgCBleHRyYURhdGE6IDB4ZDk4MzAxMDUwNzg0Njc2NTc0Njg4NzY3NmYzMTJlMzcyZTM0ODc3NzY5NmU2NDZmNzc3M1xuIC8vIOKUnOKUgCBnYXNMaW1pdDogMHg0N2U3YzRcbiAvLyDilJzilIAgZ2FzVXNlZDogMHg2Mzg0XG4gLy8g4pSc4pSAIGhhc2g6IDB4ZjYwOTAzNjg3YjE1NTliOWM4MGYyZDkzNWI0YzRmNDY4YWQ5NWMzMDc2OTI4YzQzMmVjMzRmMmVmM2Q0ZWVjOVxuIC8vIOKUnOKUgCBsb2dzQmxvb206IDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcbiAvLyDilJzilIAgbWluZXI6IDB4MDE3MTE4NTMzMzVmODU3NDQyZWY2ZjM0OWIyNDY3YzUzMTczMTMxOFxuIC8vIOKUnOKUgCBtaXhIYXNoOiAweGYwZDliZWM5OTk2MDBlZWM5MmU4ZTRkYThmYzExODJlMzU3NDY4YzllZDJmODQ5YWExN2UwZTkwMDQxMmIzNTJcbiAvLyDilJzilIAgbm9uY2U6IDB4ZDU1NmQ1YTU1MDQxOThlNFxuIC8vIOKUnOKUgCBudW1iZXI6IDB4NzJhYzhcbiAvLyDilJzilIAgcGFyZW50SGFzaDogMHhmNTIzOWMzY2UxMDg1MTk0NTIxNDM1YTUwNTI0OTRjMDJiYmIxMDAyYjAxOTY4NGRjZjM2ODQ5MGVhNjIwOGU1XG4gLy8g4pSc4pSAIHJlY2VpcHRzUm9vdDogMHg3OGM2ZjgyMzYwOTRiMzkyYmNjNDNiNDdiMGRjMWNlOTNlY2QyODc1YmZiNWU0ZTRjMzQzMWU1YWY2OThmZjk5XG4gLy8g4pSc4pSAIHNoYTNVbmNsZXM6IDB4MWRjYzRkZThkZWM3NWQ3YWFiODViNTY3YjZjY2Q0MWFkMzEyNDUxYjk0OGE3NDEzZjBhMTQyZmQ0MGQ0OTM0N1xuIC8vIOKUnOKUgCBzaXplOiAweDJhZFxuIC8vIOKUnOKUgCBzdGF0ZVJvb3Q6IDB4MDU1NGYxNDVjNDgxZGYyZmEwMmVjZDJkYTE3MDcxNjcyNzQwYzNhYTk0OGM4OTZmMTQ2NWU2NzcyZjc0MWFjNlxuIC8vIOKUnOKUgCB0aW1lc3RhbXA6IDB4NTg5NTU4NDRcbiAvLyDilJzilIAgdG90YWxEaWZmaWN1bHR5OiAweDc1MWQwZGZhMDNjMVxuIC8vIOKUnOKUgCB0cmFuc2FjdGlvbnNcbiAvLyDilIIgIOKUlOKUgCAwXG4gLy8g4pSCICAgICDilJzilIAgYmxvY2tIYXNoOiAweGY2MDkwMzY4N2IxNTU5YjljODBmMmQ5MzViNGM0ZjQ2OGFkOTVjMzA3NjkyOGM0MzJlYzM0ZjJlZjNkNGVlYzlcbiAvLyDilIIgICAgIOKUnOKUgCBibG9ja051bWJlcjogMHg3MmFjOFxuIC8vIOKUgiAgICAg4pSc4pSAIGZyb206IDB4MjAxMzU0NzI5ZjhkMGY4YjY0ZTlhMGMzNTNjNjcyYzZhNjZiMzg1N1xuIC8vIOKUgiAgICAg4pSc4pSAIGdhczogMHgxNWY5MFxuIC8vIOKUgiAgICAg4pSc4pSAIGdhc1ByaWNlOiAweDRhODE3YzgwMFxuIC8vIOKUgiAgICAg4pSc4pSAIGhhc2g6IDB4ZDVhMTVkN2MyNDQ5MTUwZGI0Zjc0ZjQyYTZjYTA3MDIxNTBhMjRjNDZjNWI0MDZhN2UxYjNlNDQ5MDhlZjQ0ZFxuIC8vIOKUgiAgICAg4pSc4pSAIGlucHV0OiAweGUxZmE4ZTg0OWJjMTBkODdmYjAzYzZiMDYwM2IwNWEzZTI5MDQzYzdlMGI3YzkyNzExOTU3NmE0YmVjNDU3ZTk2YzdkN2NkZVxuIC8vIOKUgiAgICAg4pSc4pSAIG5vbmNlOiAweDMyM2VcbiAvLyDilIIgICAgIOKUnOKUgCB0bzogMHhkMTBlM2JlMmJjOGY5NTliYzhjNDFjZjY1ZjYwZGU3MjFjZjg5YWRmXG4gLy8g4pSCICAgICDilJzilIAgdHJhbnNhY3Rpb25JbmRleDogMHgwXG4gLy8g4pSCICAgICDilJzilIAgdmFsdWU6IDB4MFxuIC8vIOKUgiAgICAg4pSc4pSAIHY6IDB4MjlcbiAvLyDilIIgICAgIOKUnOKUgCByOiAweGYzNWY4YWIyNDFlNmJiM2NjYWZmZDIxYjI2OGRiZmM3ZmNiNWRmMWMxZmI4M2VlNTMwNjIwN2U0YTFhM2U5NTRcbiAvLyDilIIgICAgIOKUlOKUgCBzOiAweDE2MTBjZGFjMjc4MmM5MTA2NWZkNDM1ODRjZDg5NzRmN2YzYjRlNmQ0NmEyYWFmZTdiMTAxNzg4Mjg1YmYzZjJcbiAvLyDilJzilIAgdHJhbnNhY3Rpb25zUm9vdDogMHhiMDkwYzMyZDg0MGRlYzFlOTc1MjcxOWYyMWJiYWU0YTczZTU4MzMzYWVjYjg5YmMzYjhlZDU1OWZiMjcxMmEzXG4gLy8g4pSU4pSAIHVuY2xlc1xuIiwiY29uc3QgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxuY29uc3QgY3JlYXRlUmFuZG9tSWQgPSByZXF1aXJlKCdqc29uLXJwYy1yYW5kb20taWQnKSgpXG5cbm1vZHVsZS5leHBvcnRzID0gRXRoUXVlcnlcblxuXG5mdW5jdGlvbiBFdGhRdWVyeShwcm92aWRlcil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuY3VycmVudFByb3ZpZGVyID0gcHJvdmlkZXJcbn1cblxuLy9cbi8vIGJhc2UgcXVlcmllc1xuLy9cblxuLy8gZGVmYXVsdCBibG9ja1xuRXRoUXVlcnkucHJvdG90eXBlLmdldEJhbGFuY2UgPSAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbldpdGhEZWZhdWx0QmxvY2tGb3IoMiwgJ2V0aF9nZXRCYWxhbmNlJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRDb2RlID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5XaXRoRGVmYXVsdEJsb2NrRm9yKDIsICdldGhfZ2V0Q29kZScpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3VudCA9ICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuV2l0aERlZmF1bHRCbG9ja0ZvcigyLCAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldFN0b3JhZ2VBdCA9ICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbldpdGhEZWZhdWx0QmxvY2tGb3IoMywgJ2V0aF9nZXRTdG9yYWdlQXQnKVxuRXRoUXVlcnkucHJvdG90eXBlLmNhbGwgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbldpdGhEZWZhdWx0QmxvY2tGb3IoMiwgJ2V0aF9jYWxsJylcbi8vIHN0YW5kYXJkXG5FdGhRdWVyeS5wcm90b3R5cGUucHJvdG9jb2xWZXJzaW9uID0gICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfcHJvdG9jb2xWZXJzaW9uJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zeW5jaW5nID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zeW5jaW5nJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5jb2luYmFzZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9jb2luYmFzZScpXG5FdGhRdWVyeS5wcm90b3R5cGUubWluaW5nID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfbWluaW5nJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5oYXNocmF0ZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9oYXNocmF0ZScpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2FzUHJpY2UgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2FzUHJpY2UnKVxuRXRoUXVlcnkucHJvdG90eXBlLmFjY291bnRzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2FjY291bnRzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5ibG9ja051bWJlciA9ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9ibG9ja051bWJlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoID0gICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeU51bWJlciA9ICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeU51bWJlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VW5jbGVDb3VudEJ5QmxvY2tIYXNoID0gICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tIYXNoJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRVbmNsZUNvdW50QnlCbG9ja051bWJlciA9ICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRVbmNsZUNvdW50QnlCbG9ja051bWJlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUuc2lnbiA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfc2lnbicpXG5FdGhRdWVyeS5wcm90b3R5cGUuc2VuZFRyYW5zYWN0aW9uID0gICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfc2VuZFRyYW5zYWN0aW9uJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zZW5kUmF3VHJhbnNhY3Rpb24gPSAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zZW5kUmF3VHJhbnNhY3Rpb24nKVxuRXRoUXVlcnkucHJvdG90eXBlLmVzdGltYXRlR2FzID0gICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2VzdGltYXRlR2FzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRCbG9ja0J5SGFzaCA9ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRCbG9ja0J5SGFzaCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0QmxvY2tCeU51bWJlciA9ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0QmxvY2tCeU51bWJlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25CeUhhc2ggPSAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VHJhbnNhY3Rpb25CeUhhc2gnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleCA9ICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXggPSBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXgnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uUmVjZWlwdCA9ICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4ID0gICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4JylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRVbmNsZUJ5QmxvY2tOdW1iZXJBbmRJbmRleCA9ICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRVbmNsZUJ5QmxvY2tOdW1iZXJBbmRJbmRleCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0Q29tcGlsZXJzID0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0Q29tcGlsZXJzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5jb21waWxlTExMID0gICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9jb21waWxlTExMJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5jb21waWxlU29saWRpdHkgPSAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9jb21waWxlU29saWRpdHknKVxuRXRoUXVlcnkucHJvdG90eXBlLmNvbXBpbGVTZXJwZW50ID0gICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2NvbXBpbGVTZXJwZW50JylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5uZXdGaWx0ZXIgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9uZXdGaWx0ZXInKVxuRXRoUXVlcnkucHJvdG90eXBlLm5ld0Jsb2NrRmlsdGVyID0gICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX25ld0Jsb2NrRmlsdGVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIgPSAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXInKVxuRXRoUXVlcnkucHJvdG90eXBlLnVuaW5zdGFsbEZpbHRlciA9ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX3VuaW5zdGFsbEZpbHRlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0RmlsdGVyQ2hhbmdlcyA9ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0RmlsdGVyQ2hhbmdlcycpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0RmlsdGVyTG9ncyA9ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0RmlsdGVyTG9ncycpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0TG9ncyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0TG9ncycpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0V29yayA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0V29yaycpXG5FdGhRdWVyeS5wcm90b3R5cGUuc3VibWl0V29yayA9ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfc3VibWl0V29yaycpXG5FdGhRdWVyeS5wcm90b3R5cGUuc3VibWl0SGFzaHJhdGUgPSAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfc3VibWl0SGFzaHJhdGUnKVxuXG4vLyBuZXR3b3JrIGxldmVsXG5cbkV0aFF1ZXJ5LnByb3RvdHlwZS5zZW5kQXN5bmMgPSBmdW5jdGlvbihvcHRzLCBjYil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuY3VycmVudFByb3ZpZGVyLnNlbmRBc3luYyhjcmVhdGVQYXlsb2FkKG9wdHMpLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKXtcbiAgICBpZiAoIWVyciAmJiByZXNwb25zZS5lcnJvcikgZXJyID0gbmV3IEVycm9yKCdFdGhRdWVyeSAtIFJQQyBFcnJvciAtICcrcmVzcG9uc2UuZXJyb3IubWVzc2FnZSlcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNiKG51bGwsIHJlc3BvbnNlLnJlc3VsdClcbiAgfSlcbn1cblxuLy8gdXRpbFxuXG5mdW5jdGlvbiBnZW5lcmF0ZUZuRm9yKG1ldGhvZE5hbWUpe1xuICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIHNlbGYuc2VuZEFzeW5jKHtcbiAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIHBhcmFtczogYXJncyxcbiAgICB9LCBjYilcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUZuV2l0aERlZmF1bHRCbG9ja0ZvcihhcmdDb3VudCwgbWV0aG9kTmFtZSl7XG4gIHJldHVybiBmdW5jdGlvbigpe1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgLy8gc2V0IG9wdGlvbmFsIGRlZmF1bHQgYmxvY2sgcGFyYW1cbiAgICBpZiAoYXJncy5sZW5ndGggPCBhcmdDb3VudCkgYXJncy5wdXNoKCdsYXRlc3QnKVxuICAgIHNlbGYuc2VuZEFzeW5jKHtcbiAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIHBhcmFtczogYXJncyxcbiAgICB9LCBjYilcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXlsb2FkKGRhdGEpe1xuICByZXR1cm4gZXh0ZW5kKHtcbiAgICAvLyBkZWZhdWx0c1xuICAgIGlkOiBjcmVhdGVSYW5kb21JZCgpLFxuICAgIGpzb25ycGM6ICcyLjAnLFxuICAgIHBhcmFtczogW10sXG4gICAgLy8gdXNlci1zcGVjaWZpZWRcbiAgfSwgZGF0YSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gSWRJdGVyYXRvclxuXG5mdW5jdGlvbiBJZEl0ZXJhdG9yKG9wdHMpe1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICB2YXIgbWF4ID0gb3B0cy5tYXggfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgdmFyIGlkQ291bnRlciA9IHR5cGVvZiBvcHRzLnN0YXJ0ICE9PSAndW5kZWZpbmVkJyA/IG9wdHMuc3RhcnQgOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXgpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVJhbmRvbUlkICgpIHtcbiAgICBpZENvdW50ZXIgPSBpZENvdW50ZXIgJSBtYXhcbiAgICByZXR1cm4gaWRDb3VudGVyKytcbiAgfVxuXG59IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJvY2Vzc0ZuID0gZnVuY3Rpb24gKGZuLCBQLCBvcHRzKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGFyZ3MucHVzaChmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wdHMubXVsdGlBcmdzKSB7XG5cdFx0XHRcdFx0dmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHJlc3VsdHNbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Zm4uYXBwbHkodGhhdCwgYXJncyk7XG5cdFx0fSk7XG5cdH07XG59O1xuXG52YXIgcGlmeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgUCwgb3B0cykge1xuXHRpZiAodHlwZW9mIFAgIT09ICdmdW5jdGlvbicpIHtcblx0XHRvcHRzID0gUDtcblx0XHRQID0gUHJvbWlzZTtcblx0fVxuXG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHRvcHRzLmV4Y2x1ZGUgPSBvcHRzLmV4Y2x1ZGUgfHwgWy8uK1N5bmMkL107XG5cblx0dmFyIGZpbHRlciA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHR2YXIgbWF0Y2ggPSBmdW5jdGlvbiAocGF0dGVybikge1xuXHRcdFx0cmV0dXJuIHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJyA/IGtleSA9PT0gcGF0dGVybiA6IHBhdHRlcm4udGVzdChrZXkpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb3B0cy5pbmNsdWRlID8gb3B0cy5pbmNsdWRlLnNvbWUobWF0Y2gpIDogIW9wdHMuZXhjbHVkZS5zb21lKG1hdGNoKTtcblx0fTtcblxuXHR2YXIgcmV0ID0gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAob3B0cy5leGNsdWRlTWFpbikge1xuXHRcdFx0cmV0dXJuIG9iai5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9jZXNzRm4ob2JqLCBQLCBvcHRzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR9IDoge307XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKGZ1bmN0aW9uIChyZXQsIGtleSkge1xuXHRcdHZhciB4ID0gb2JqW2tleV07XG5cblx0XHRyZXRba2V5XSA9IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nICYmIGZpbHRlcihrZXkpID8gcHJvY2Vzc0ZuKHgsIFAsIG9wdHMpIDogeDtcblxuXHRcdHJldHVybiByZXQ7XG5cdH0sIHJldCk7XG59O1xuXG5waWZ5LmFsbCA9IHBpZnk7XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgZXRoanNVdGlsID0gcmVxdWlyZSgnZXRoanMtdXRpbCcpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbmNyZW1lbnRIZXhOdW1iZXIsXG4gIGZvcm1hdEhleCxcbn1cblxuZnVuY3Rpb24gaW5jcmVtZW50SGV4TnVtYmVyKGhleE51bSkge1xuICByZXR1cm4gZm9ybWF0SGV4KGV0aGpzVXRpbC5pbnRUb0hleCgocGFyc2VJbnQoaGV4TnVtLCAxNikgKyAxKSkpXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhleCAoaGV4TnVtKSB7XG4gIGxldCBzdHJpcHBlZCA9IGV0aGpzVXRpbC5zdHJpcEhleFByZWZpeChoZXhOdW0pXG4gIHdoaWxlIChzdHJpcHBlZFswXSA9PT0gJzAnKSB7XG4gICAgc3RyaXBwZWQgPSBzdHJpcHBlZC5zdWJzdHIoMSlcbiAgfVxuICByZXR1cm4gYDB4JHtzdHJpcHBlZH1gXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZG9QYXJhbGxlbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvZG9QYXJhbGxlbCcpO1xuXG52YXIgX2RvUGFyYWxsZWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZG9QYXJhbGxlbCk7XG5cbnZhciBfbWFwID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9tYXAnKTtcblxudmFyIF9tYXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFwKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBQcm9kdWNlcyBhIG5ldyBjb2xsZWN0aW9uIG9mIHZhbHVlcyBieSBtYXBwaW5nIGVhY2ggdmFsdWUgaW4gYGNvbGxgIHRocm91Z2hcbiAqIHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9uLiBUaGUgYGl0ZXJhdGVlYCBpcyBjYWxsZWQgd2l0aCBhbiBpdGVtIGZyb20gYGNvbGxgXG4gKiBhbmQgYSBjYWxsYmFjayBmb3Igd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gRWFjaCBvZiB0aGVzZSBjYWxsYmFja1xuICogdGFrZXMgMiBhcmd1bWVudHM6IGFuIGBlcnJvcmAsIGFuZCB0aGUgdHJhbnNmb3JtZWQgaXRlbSBmcm9tIGBjb2xsYC4gSWZcbiAqIGBpdGVyYXRlZWAgcGFzc2VzIGFuIGVycm9yIHRvIGl0cyBjYWxsYmFjaywgdGhlIG1haW4gYGNhbGxiYWNrYCAoZm9yIHRoZVxuICogYG1hcGAgZnVuY3Rpb24pIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAqXG4gKiBOb3RlLCB0aGF0IHNpbmNlIHRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGl0ZW0gaW5cbiAqIHBhcmFsbGVsLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgYGl0ZXJhdGVlYCBmdW5jdGlvbnMgd2lsbCBjb21wbGV0ZVxuICogaW4gb3JkZXIuIEhvd2V2ZXIsIHRoZSByZXN1bHRzIGFycmF5IHdpbGwgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4gKiBvcmlnaW5hbCBgY29sbGAuXG4gKlxuICogSWYgYG1hcGAgaXMgcGFzc2VkIGFuIE9iamVjdCwgdGhlIHJlc3VsdHMgd2lsbCBiZSBhbiBBcnJheS4gIFRoZSByZXN1bHRzXG4gKiB3aWxsIHJvdWdobHkgYmUgaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBPYmplY3RzJyBrZXlzIChidXQgdGhpcyBjYW5cbiAqIHZhcnkgYWNyb3NzIEphdmFTY3JpcHQgZW5naW5lcykuXG4gKlxuICogQG5hbWUgbWFwXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gKiBAbWV0aG9kXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICogYGNvbGxgLlxuICogVGhlIGl0ZXJhdGVlIHNob3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB0cmFuc2Zvcm1lZCBpdGVtLlxuICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGwgYGl0ZXJhdGVlYFxuICogZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gUmVzdWx0cyBpcyBhbiBBcnJheSBvZiB0aGVcbiAqIHRyYW5zZm9ybWVkIGl0ZW1zIGZyb20gdGhlIGBjb2xsYC4gSW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdHMpLlxuICogQGV4YW1wbGVcbiAqXG4gKiBhc3luYy5tYXAoWydmaWxlMScsJ2ZpbGUyJywnZmlsZTMnXSwgZnMuc3RhdCwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gKiAgICAgLy8gcmVzdWx0cyBpcyBub3cgYW4gYXJyYXkgb2Ygc3RhdHMgZm9yIGVhY2ggZmlsZVxuICogfSk7XG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfZG9QYXJhbGxlbDIuZGVmYXVsdCkoX21hcDIuZGVmYXVsdCk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRvUGFyYWxsZWw7XG5cbnZhciBfZWFjaE9mID0gcmVxdWlyZSgnLi4vZWFjaE9mJyk7XG5cbnZhciBfZWFjaE9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VhY2hPZik7XG5cbnZhciBfd3JhcEFzeW5jID0gcmVxdWlyZSgnLi93cmFwQXN5bmMnKTtcblxudmFyIF93cmFwQXN5bmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd3JhcEFzeW5jKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gZG9QYXJhbGxlbChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZuKF9lYWNoT2YyLmRlZmF1bHQsIG9iaiwgKDAsIF93cmFwQXN5bmMyLmRlZmF1bHQpKGl0ZXJhdGVlKSwgY2FsbGJhY2spO1xuICAgIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBlYWNoT2ZMaW1pdDtcblxudmFyIF9lYWNoT2ZMaW1pdDIgPSByZXF1aXJlKCcuL2ludGVybmFsL2VhY2hPZkxpbWl0Jyk7XG5cbnZhciBfZWFjaE9mTGltaXQzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWFjaE9mTGltaXQyKTtcblxudmFyIF93cmFwQXN5bmMgPSByZXF1aXJlKCcuL2ludGVybmFsL3dyYXBBc3luYycpO1xuXG52YXIgX3dyYXBBc3luYzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93cmFwQXN5bmMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFRoZSBzYW1lIGFzIFtgZWFjaE9mYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhXG4gKiB0aW1lLlxuICpcbiAqIEBuYW1lIGVhY2hPZkxpbWl0XG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gKiBAbWV0aG9kXG4gKiBAc2VlIFthc3luYy5lYWNoT2Zde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNoT2Z9XG4gKiBAYWxpYXMgZm9yRWFjaE9mTGltaXRcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaFxuICogaXRlbSBpbiBgY29sbGAuIFRoZSBga2V5YCBpcyB0aGUgaXRlbSdzIGtleSwgb3IgaW5kZXggaW4gdGhlIGNhc2Ugb2YgYW5cbiAqIGFycmF5LlxuICogSW52b2tlZCB3aXRoIChpdGVtLCBrZXksIGNhbGxiYWNrKS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gKi9cbmZ1bmN0aW9uIGVhY2hPZkxpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgKDAsIF9lYWNoT2ZMaW1pdDMuZGVmYXVsdCkobGltaXQpKGNvbGwsICgwLCBfd3JhcEFzeW5jMi5kZWZhdWx0KShpdGVyYXRlZSksIGNhbGxiYWNrKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gaXRlcmF0b3I7XG5cbnZhciBfaXNBcnJheUxpa2UgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheUxpa2UnKTtcblxudmFyIF9pc0FycmF5TGlrZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0FycmF5TGlrZSk7XG5cbnZhciBfZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuL2dldEl0ZXJhdG9yJyk7XG5cbnZhciBfZ2V0SXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IpO1xuXG52YXIgX2tleXMgPSByZXF1aXJlKCdsb2Rhc2gva2V5cycpO1xuXG52YXIgX2tleXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfa2V5cyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5SXRlcmF0b3IoY29sbCkge1xuICAgIHZhciBpID0gLTE7XG4gICAgdmFyIGxlbiA9IGNvbGwubGVuZ3RoO1xuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICByZXR1cm4gKytpIDwgbGVuID8geyB2YWx1ZTogY29sbFtpXSwga2V5OiBpIH0gOiBudWxsO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSB7XG4gICAgdmFyIGkgPSAtMTtcbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChpdGVtLmRvbmUpIHJldHVybiBudWxsO1xuICAgICAgICBpKys7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBpdGVtLnZhbHVlLCBrZXk6IGkgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RJdGVyYXRvcihvYmopIHtcbiAgICB2YXIgb2tleXMgPSAoMCwgX2tleXMyLmRlZmF1bHQpKG9iaik7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbGVuID0gb2tleXMubGVuZ3RoO1xuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICB2YXIga2V5ID0gb2tleXNbKytpXTtcbiAgICAgICAgcmV0dXJuIGkgPCBsZW4gPyB7IHZhbHVlOiBvYmpba2V5XSwga2V5OiBrZXkgfSA6IG51bGw7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaXRlcmF0b3IoY29sbCkge1xuICAgIGlmICgoMCwgX2lzQXJyYXlMaWtlMi5kZWZhdWx0KShjb2xsKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKTtcbiAgICB9XG5cbiAgICB2YXIgaXRlcmF0b3IgPSAoMCwgX2dldEl0ZXJhdG9yMi5kZWZhdWx0KShjb2xsKTtcbiAgICByZXR1cm4gaXRlcmF0b3IgPyBjcmVhdGVFUzIwMTVJdGVyYXRvcihpdGVyYXRvcikgOiBjcmVhdGVPYmplY3RJdGVyYXRvcihjb2xsKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoY29sbCkge1xuICAgIHJldHVybiBpdGVyYXRvclN5bWJvbCAmJiBjb2xsW2l0ZXJhdG9yU3ltYm9sXSAmJiBjb2xsW2l0ZXJhdG9yU3ltYm9sXSgpO1xufTtcblxudmFyIGl0ZXJhdG9yU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhc3luY2lmeTtcblxudmFyIF9pc09iamVjdCA9IHJlcXVpcmUoJ2xvZGFzaC9pc09iamVjdCcpO1xuXG52YXIgX2lzT2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzT2JqZWN0KTtcblxudmFyIF9pbml0aWFsUGFyYW1zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9pbml0aWFsUGFyYW1zJyk7XG5cbnZhciBfaW5pdGlhbFBhcmFtczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbml0aWFsUGFyYW1zKTtcblxudmFyIF9zZXRJbW1lZGlhdGUgPSByZXF1aXJlKCcuL2ludGVybmFsL3NldEltbWVkaWF0ZScpO1xuXG52YXIgX3NldEltbWVkaWF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXRJbW1lZGlhdGUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFRha2UgYSBzeW5jIGZ1bmN0aW9uIGFuZCBtYWtlIGl0IGFzeW5jLCBwYXNzaW5nIGl0cyByZXR1cm4gdmFsdWUgdG8gYVxuICogY2FsbGJhY2suIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnZ2luZyBzeW5jIGZ1bmN0aW9ucyBpbnRvIGEgd2F0ZXJmYWxsLFxuICogc2VyaWVzLCBvciBvdGhlciBhc3luYyBmdW5jdGlvbnMuIEFueSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBnZW5lcmF0ZWRcbiAqIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIChleGNlcHQgZm9yIHRoZSBmaW5hbFxuICogY2FsbGJhY2sgYXJndW1lbnQpLiBFcnJvcnMgdGhyb3duIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAqXG4gKiBJZiB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIGBhc3luY2lmeWAgcmV0dXJucyBhIFByb21pc2UsIHRoYXQgcHJvbWlzZXMnc1xuICogcmVzb2x2ZWQvcmVqZWN0ZWQgc3RhdGUgd2lsbCBiZSB1c2VkIHRvIGNhbGwgdGhlIGNhbGxiYWNrLCByYXRoZXIgdGhhbiBzaW1wbHlcbiAqIHRoZSBzeW5jaHJvbm91cyByZXR1cm4gdmFsdWUuXG4gKlxuICogVGhpcyBhbHNvIG1lYW5zIHlvdSBjYW4gYXN5bmNpZnkgRVMyMDE3IGBhc3luY2AgZnVuY3Rpb25zLlxuICpcbiAqIEBuYW1lIGFzeW5jaWZ5XG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlV0aWxzXG4gKiBAbWV0aG9kXG4gKiBAYWxpYXMgd3JhcFN5bmNcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uLCBvciBQcm9taXNlLXJldHVybmluZ1xuICogZnVuY3Rpb24gdG8gY29udmVydCB0byBhbiB7QGxpbmsgQXN5bmNGdW5jdGlvbn0uXG4gKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gQW4gYXN5bmNocm9ub3VzIHdyYXBwZXIgb2YgdGhlIGBmdW5jYC4gVG8gYmVcbiAqIGludm9rZWQgd2l0aCBgKGFyZ3MuLi4sIGNhbGxiYWNrKWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIHBhc3NpbmcgYSByZWd1bGFyIHN5bmNocm9ub3VzIGZ1bmN0aW9uXG4gKiBhc3luYy53YXRlcmZhbGwoW1xuICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICogICAgIGFzeW5jLmFzeW5jaWZ5KEpTT04ucGFyc2UpLFxuICogICAgIGZ1bmN0aW9uIChkYXRhLCBuZXh0KSB7XG4gKiAgICAgICAgIC8vIGRhdGEgaXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSB0ZXh0LlxuICogICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYSBwYXJzaW5nIGVycm9yLCBpdCB3b3VsZCBoYXZlIGJlZW4gY2F1Z2h0LlxuICogICAgIH1cbiAqIF0sIGNhbGxiYWNrKTtcbiAqXG4gKiAvLyBwYXNzaW5nIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcHJvbWlzZVxuICogYXN5bmMud2F0ZXJmYWxsKFtcbiAqICAgICBhc3luYy5hcHBseShmcy5yZWFkRmlsZSwgZmlsZW5hbWUsIFwidXRmOFwiKSxcbiAqICAgICBhc3luYy5hc3luY2lmeShmdW5jdGlvbiAoY29udGVudHMpIHtcbiAqICAgICAgICAgcmV0dXJuIGRiLm1vZGVsLmNyZWF0ZShjb250ZW50cyk7XG4gKiAgICAgfSksXG4gKiAgICAgZnVuY3Rpb24gKG1vZGVsLCBuZXh0KSB7XG4gKiAgICAgICAgIC8vIGBtb2RlbGAgaXMgdGhlIGluc3RhbnRpYXRlZCBtb2RlbCBvYmplY3QuXG4gKiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgdGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBza2lwcGVkLlxuICogICAgIH1cbiAqIF0sIGNhbGxiYWNrKTtcbiAqXG4gKiAvLyBlczIwMTcgZXhhbXBsZSwgdGhvdWdoIGBhc3luY2lmeWAgaXMgbm90IG5lZWRlZCBpZiB5b3VyIEpTIGVudmlyb25tZW50XG4gKiAvLyBzdXBwb3J0cyBhc3luYyBmdW5jdGlvbnMgb3V0IG9mIHRoZSBib3hcbiAqIHZhciBxID0gYXN5bmMucXVldWUoYXN5bmMuYXN5bmNpZnkoYXN5bmMgZnVuY3Rpb24oZmlsZSkge1xuICogICAgIHZhciBpbnRlcm1lZGlhdGVTdGVwID0gYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSk7XG4gKiAgICAgcmV0dXJuIGF3YWl0IHNvbWVQcm9taXNlKGludGVybWVkaWF0ZVN0ZXApXG4gKiB9KSk7XG4gKlxuICogcS5wdXNoKGZpbGVzKTtcbiAqL1xuZnVuY3Rpb24gYXN5bmNpZnkoZnVuYykge1xuICAgIHJldHVybiAoMCwgX2luaXRpYWxQYXJhbXMyLmRlZmF1bHQpKGZ1bmN0aW9uIChhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHJlc3VsdCBpcyBQcm9taXNlIG9iamVjdFxuICAgICAgICBpZiAoKDAsIF9pc09iamVjdDIuZGVmYXVsdCkocmVzdWx0KSAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCB2YWx1ZSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIGVyci5tZXNzYWdlID8gZXJyIDogbmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrLCBlcnJvciwgdmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgKDAsIF9zZXRJbW1lZGlhdGUyLmRlZmF1bHQpKHJldGhyb3csIGUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmV0aHJvdyhlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSAvKi4uLmFyZ3MsIGNhbGxiYWNrKi97XG4gICAgICAgIHZhciBhcmdzID0gKDAsIF9zbGljZTIuZGVmYXVsdCkoYXJndW1lbnRzKTtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJncy5wb3AoKTtcbiAgICAgICAgZm4uY2FsbCh0aGlzLCBhcmdzLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5cbnZhciBfc2xpY2UgPSByZXF1aXJlKCcuL3NsaWNlJyk7XG5cbnZhciBfc2xpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2xpY2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFzTmV4dFRpY2sgPSBleHBvcnRzLmhhc1NldEltbWVkaWF0ZSA9IHVuZGVmaW5lZDtcbmV4cG9ydHMuZmFsbGJhY2sgPSBmYWxsYmFjaztcbmV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbnZhciBfc2xpY2UgPSByZXF1aXJlKCcuL3NsaWNlJyk7XG5cbnZhciBfc2xpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2xpY2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaGFzU2V0SW1tZWRpYXRlID0gZXhwb3J0cy5oYXNTZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZTtcbnZhciBoYXNOZXh0VGljayA9IGV4cG9ydHMuaGFzTmV4dFRpY2sgPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGZhbGxiYWNrKGZuKSB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG59XG5cbmZ1bmN0aW9uIHdyYXAoZGVmZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGZuIC8qLCAuLi5hcmdzKi8pIHtcbiAgICAgICAgdmFyIGFyZ3MgPSAoMCwgX3NsaWNlMi5kZWZhdWx0KShhcmd1bWVudHMsIDEpO1xuICAgICAgICBkZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxudmFyIF9kZWZlcjtcblxuaWYgKGhhc1NldEltbWVkaWF0ZSkge1xuICAgIF9kZWZlciA9IHNldEltbWVkaWF0ZTtcbn0gZWxzZSBpZiAoaGFzTmV4dFRpY2spIHtcbiAgICBfZGVmZXIgPSBwcm9jZXNzLm5leHRUaWNrO1xufSBlbHNlIHtcbiAgICBfZGVmZXIgPSBmYWxsYmFjaztcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gd3JhcChfZGVmZXIpOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2FzeW5jTWFwO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKCdsb2Rhc2gvbm9vcCcpO1xuXG52YXIgX25vb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9vcCk7XG5cbnZhciBfd3JhcEFzeW5jID0gcmVxdWlyZSgnLi93cmFwQXN5bmMnKTtcblxudmFyIF93cmFwQXN5bmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd3JhcEFzeW5jKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2FzeW5jTWFwKGVhY2hmbiwgYXJyLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IF9ub29wMi5kZWZhdWx0O1xuICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgX2l0ZXJhdGVlID0gKDAsIF93cmFwQXN5bmMyLmRlZmF1bHQpKGl0ZXJhdGVlKTtcblxuICAgIGVhY2hmbihhcnIsIGZ1bmN0aW9uICh2YWx1ZSwgXywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICBfaXRlcmF0ZWUodmFsdWUsIGZ1bmN0aW9uIChlcnIsIHYpIHtcbiAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gdjtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHRzKTtcbiAgICB9KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9lYWNoTGltaXQgPSByZXF1aXJlKCcuL2VhY2hMaW1pdCcpO1xuXG52YXIgX2VhY2hMaW1pdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lYWNoTGltaXQpO1xuXG52YXIgX2RvTGltaXQgPSByZXF1aXJlKCcuL2ludGVybmFsL2RvTGltaXQnKTtcblxudmFyIF9kb0xpbWl0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RvTGltaXQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFRoZSBzYW1lIGFzIFtgZWFjaGBde0BsaW5rIG1vZHVsZTpDb2xsZWN0aW9ucy5lYWNofSBidXQgcnVucyBvbmx5IGEgc2luZ2xlIGFzeW5jIG9wZXJhdGlvbiBhdCBhIHRpbWUuXG4gKlxuICogQG5hbWUgZWFjaFNlcmllc1xuICogQHN0YXRpY1xuICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICogQG1ldGhvZFxuICogQHNlZSBbYXN5bmMuZWFjaF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9XG4gKiBAYWxpYXMgZm9yRWFjaFNlcmllc1xuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gKiBpdGVtIGluIGBjb2xsYC5cbiAqIFRoZSBhcnJheSBpbmRleCBpcyBub3QgcGFzc2VkIHRvIHRoZSBpdGVyYXRlZS5cbiAqIElmIHlvdSBuZWVkIHRoZSBpbmRleCwgdXNlIGBlYWNoT2ZTZXJpZXNgLlxuICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICovXG5leHBvcnRzLmRlZmF1bHQgPSAoMCwgX2RvTGltaXQyLmRlZmF1bHQpKF9lYWNoTGltaXQyLmRlZmF1bHQsIDEpO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZWFjaExpbWl0O1xuXG52YXIgX2VhY2hPZkxpbWl0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9lYWNoT2ZMaW1pdCcpO1xuXG52YXIgX2VhY2hPZkxpbWl0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VhY2hPZkxpbWl0KTtcblxudmFyIF93aXRob3V0SW5kZXggPSByZXF1aXJlKCcuL2ludGVybmFsL3dpdGhvdXRJbmRleCcpO1xuXG52YXIgX3dpdGhvdXRJbmRleDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93aXRob3V0SW5kZXgpO1xuXG52YXIgX3dyYXBBc3luYyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd3JhcEFzeW5jJyk7XG5cbnZhciBfd3JhcEFzeW5jMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyYXBBc3luYyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGhlIHNhbWUgYXMgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9IGJ1dCBydW5zIGEgbWF4aW11bSBvZiBgbGltaXRgIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICpcbiAqIEBuYW1lIGVhY2hMaW1pdFxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIG1vZHVsZTpDb2xsZWN0aW9uc1xuICogQG1ldGhvZFxuICogQHNlZSBbYXN5bmMuZWFjaF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9XG4gKiBAYWxpYXMgZm9yRWFjaExpbWl0XG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGFzeW5jIG9wZXJhdGlvbnMgYXQgYSB0aW1lLlxuICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggaXRlbSBpblxuICogYGNvbGxgLlxuICogVGhlIGFycmF5IGluZGV4IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGl0ZXJhdGVlLlxuICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZkxpbWl0YC5cbiAqIEludm9rZWQgd2l0aCAoaXRlbSwgY2FsbGJhY2spLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAqL1xuZnVuY3Rpb24gZWFjaExpbWl0KGNvbGwsIGxpbWl0LCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgKDAsIF9lYWNoT2ZMaW1pdDIuZGVmYXVsdCkobGltaXQpKGNvbGwsICgwLCBfd2l0aG91dEluZGV4Mi5kZWZhdWx0KSgoMCwgX3dyYXBBc3luYzIuZGVmYXVsdCkoaXRlcmF0ZWUpKSwgY2FsbGJhY2spO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IF93aXRob3V0SW5kZXg7XG5mdW5jdGlvbiBfd2l0aG91dEluZGV4KGl0ZXJhdGVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRlZSh2YWx1ZSwgY2FsbGJhY2spO1xuICAgIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcblxubW9kdWxlLmV4cG9ydHMgPSBTdG9wbGlnaHRcblxuXG5pbmhlcml0cyhTdG9wbGlnaHQsIEV2ZW50RW1pdHRlcilcblxuZnVuY3Rpb24gU3RvcGxpZ2h0KCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIEV2ZW50RW1pdHRlci5jYWxsKHNlbGYpXG4gIHNlbGYuaXNMb2NrZWQgPSB0cnVlXG59XG5cblN0b3BsaWdodC5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbigpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmlzTG9ja2VkID0gZmFsc2VcbiAgc2VsZi5lbWl0KCd1bmxvY2snKVxufVxuXG5TdG9wbGlnaHQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbigpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmlzTG9ja2VkID0gdHJ1ZVxuICBzZWxmLmVtaXQoJ2xvY2snKVxufVxuXG5TdG9wbGlnaHQucHJvdG90eXBlLmF3YWl0ID0gZnVuY3Rpb24oZm4pe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5pc0xvY2tlZCkge1xuICAgIHNlbGYub25jZSgndW5sb2NrJywgZm4pXG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dChmbilcbiAgfVxufSIsImNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJ2pzb24tc3RhYmxlLXN0cmluZ2lmeScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjYWNoZUlkZW50aWZpZXJGb3JQYXlsb2FkOiBjYWNoZUlkZW50aWZpZXJGb3JQYXlsb2FkLFxuICBjYW5DYWNoZTogY2FuQ2FjaGUsXG4gIGJsb2NrVGFnRm9yUGF5bG9hZDogYmxvY2tUYWdGb3JQYXlsb2FkLFxuICBwYXJhbXNXaXRob3V0QmxvY2tUYWc6IHBhcmFtc1dpdGhvdXRCbG9ja1RhZyxcbiAgYmxvY2tUYWdQYXJhbUluZGV4OiBibG9ja1RhZ1BhcmFtSW5kZXgsXG4gIGNhY2hlVHlwZUZvclBheWxvYWQ6IGNhY2hlVHlwZUZvclBheWxvYWQsXG59XG5cbmZ1bmN0aW9uIGNhY2hlSWRlbnRpZmllckZvclBheWxvYWQocGF5bG9hZCwgb3B0cyA9IHt9KXtcbiAgaWYgKCFjYW5DYWNoZShwYXlsb2FkKSkgcmV0dXJuIG51bGxcbiAgY29uc3QgeyBpbmNsdWRlQmxvY2tSZWYgfSA9IG9wdHNcbiAgY29uc3QgcGFyYW1zID0gaW5jbHVkZUJsb2NrUmVmID8gcGF5bG9hZC5wYXJhbXMgOiBwYXJhbXNXaXRob3V0QmxvY2tUYWcocGF5bG9hZClcbiAgcmV0dXJuIHBheWxvYWQubWV0aG9kICsgJzonICsgc3RyaW5naWZ5KHBhcmFtcylcbn1cblxuZnVuY3Rpb24gY2FuQ2FjaGUocGF5bG9hZCl7XG4gIHJldHVybiBjYWNoZVR5cGVGb3JQYXlsb2FkKHBheWxvYWQpICE9PSAnbmV2ZXInXG59XG5cbmZ1bmN0aW9uIGJsb2NrVGFnRm9yUGF5bG9hZChwYXlsb2FkKXtcbiAgdmFyIGluZGV4ID0gYmxvY2tUYWdQYXJhbUluZGV4KHBheWxvYWQpO1xuXG4gIC8vIEJsb2NrIHRhZyBwYXJhbSBub3QgcGFzc2VkLlxuICBpZiAoaW5kZXggPj0gcGF5bG9hZC5wYXJhbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcGF5bG9hZC5wYXJhbXNbaW5kZXhdO1xufVxuXG5mdW5jdGlvbiBwYXJhbXNXaXRob3V0QmxvY2tUYWcocGF5bG9hZCl7XG4gIHZhciBpbmRleCA9IGJsb2NrVGFnUGFyYW1JbmRleChwYXlsb2FkKTtcblxuICAvLyBCbG9jayB0YWcgcGFyYW0gbm90IHBhc3NlZC5cbiAgaWYgKGluZGV4ID49IHBheWxvYWQucGFyYW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBwYXlsb2FkLnBhcmFtcztcbiAgfVxuXG4gIC8vIGV0aF9nZXRCbG9ja0J5TnVtYmVyIGhhcyB0aGUgYmxvY2sgdGFnIGZpcnN0LCB0aGVuIHRoZSBvcHRpb25hbCBpbmNsdWRlVHg/IHBhcmFtXG4gIGlmIChwYXlsb2FkLm1ldGhvZCA9PT0gJ2V0aF9nZXRCbG9ja0J5TnVtYmVyJykge1xuICAgIHJldHVybiBwYXlsb2FkLnBhcmFtcy5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBwYXlsb2FkLnBhcmFtcy5zbGljZSgwLGluZGV4KTtcbn1cblxuZnVuY3Rpb24gYmxvY2tUYWdQYXJhbUluZGV4KHBheWxvYWQpe1xuICBzd2l0Y2gocGF5bG9hZC5tZXRob2QpIHtcbiAgICAvLyBibG9ja1RhZyBpcyB0aGlyZCBwYXJhbVxuICAgIGNhc2UgJ2V0aF9nZXRTdG9yYWdlQXQnOlxuICAgICAgcmV0dXJuIDJcbiAgICAvLyBibG9ja1RhZyBpcyBzZWNvbmQgcGFyYW1cbiAgICBjYXNlICdldGhfZ2V0QmFsYW5jZSc6XG4gICAgY2FzZSAnZXRoX2dldENvZGUnOlxuICAgIGNhc2UgJ2V0aF9nZXRUcmFuc2FjdGlvbkNvdW50JzpcbiAgICBjYXNlICdldGhfY2FsbCc6XG4gICAgY2FzZSAnZXRoX2VzdGltYXRlR2FzJzpcbiAgICAgIHJldHVybiAxXG4gICAgLy8gYmxvY2tUYWcgaXMgZmlyc3QgcGFyYW1cbiAgICBjYXNlICdldGhfZ2V0QmxvY2tCeU51bWJlcic6XG4gICAgICByZXR1cm4gMFxuICAgIC8vIHRoZXJlIGlzIG5vIGJsb2NrVGFnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZVR5cGVGb3JQYXlsb2FkKHBheWxvYWQpIHtcbiAgc3dpdGNoIChwYXlsb2FkLm1ldGhvZCkge1xuICAgIC8vIGNhY2hlIHBlcm1hbmVudGx5XG4gICAgY2FzZSAnd2ViM19jbGllbnRWZXJzaW9uJzpcbiAgICBjYXNlICd3ZWIzX3NoYTMnOlxuICAgIGNhc2UgJ2V0aF9wcm90b2NvbFZlcnNpb24nOlxuICAgIGNhc2UgJ2V0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2gnOlxuICAgIGNhc2UgJ2V0aF9nZXRVbmNsZUNvdW50QnlCbG9ja0hhc2gnOlxuICAgIGNhc2UgJ2V0aF9nZXRDb2RlJzpcbiAgICBjYXNlICdldGhfZ2V0QmxvY2tCeUhhc2gnOlxuICAgIGNhc2UgJ2V0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaCc6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleCc6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdCc6XG4gICAgY2FzZSAnZXRoX2dldFVuY2xlQnlCbG9ja0hhc2hBbmRJbmRleCc6XG4gICAgY2FzZSAnZXRoX2dldENvbXBpbGVycyc6XG4gICAgY2FzZSAnZXRoX2NvbXBpbGVMTEwnOlxuICAgIGNhc2UgJ2V0aF9jb21waWxlU29saWRpdHknOlxuICAgIGNhc2UgJ2V0aF9jb21waWxlU2VycGVudCc6XG4gICAgY2FzZSAnc2hoX3ZlcnNpb24nOlxuICAgICAgcmV0dXJuICdwZXJtYSdcblxuICAgIC8vIGNhY2hlIHVudGlsIGZvcmtcbiAgICBjYXNlICdldGhfZ2V0QmxvY2tCeU51bWJlcic6XG4gICAgY2FzZSAnZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyJzpcbiAgICBjYXNlICdldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tOdW1iZXInOlxuICAgIGNhc2UgJ2V0aF9nZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCc6XG4gICAgY2FzZSAnZXRoX2dldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4JzpcbiAgICAgIHJldHVybiAnZm9yaydcblxuICAgIC8vIGNhY2hlIGZvciBibG9ja1xuICAgIGNhc2UgJ2V0aF9nYXNQcmljZSc6XG4gICAgY2FzZSAnZXRoX2Jsb2NrTnVtYmVyJzpcbiAgICBjYXNlICdldGhfZ2V0QmFsYW5jZSc6XG4gICAgY2FzZSAnZXRoX2dldFN0b3JhZ2VBdCc6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnOlxuICAgIGNhc2UgJ2V0aF9jYWxsJzpcbiAgICBjYXNlICdldGhfZXN0aW1hdGVHYXMnOlxuICAgIGNhc2UgJ2V0aF9nZXRGaWx0ZXJMb2dzJzpcbiAgICBjYXNlICdldGhfZ2V0TG9ncyc6XG4gICAgICByZXR1cm4gJ2Jsb2NrJ1xuXG4gICAgLy8gbmV2ZXIgY2FjaGVcbiAgICBjYXNlICduZXRfdmVyc2lvbic6XG4gICAgY2FzZSAnbmV0X3BlZXJDb3VudCc6XG4gICAgY2FzZSAnbmV0X2xpc3RlbmluZyc6XG4gICAgY2FzZSAnZXRoX3N5bmNpbmcnOlxuICAgIGNhc2UgJ2V0aF9zaWduJzpcbiAgICBjYXNlICdldGhfY29pbmJhc2UnOlxuICAgIGNhc2UgJ2V0aF9taW5pbmcnOlxuICAgIGNhc2UgJ2V0aF9oYXNocmF0ZSc6XG4gICAgY2FzZSAnZXRoX2FjY291bnRzJzpcbiAgICBjYXNlICdldGhfc2VuZFRyYW5zYWN0aW9uJzpcbiAgICBjYXNlICdldGhfc2VuZFJhd1RyYW5zYWN0aW9uJzpcbiAgICBjYXNlICdldGhfbmV3RmlsdGVyJzpcbiAgICBjYXNlICdldGhfbmV3QmxvY2tGaWx0ZXInOlxuICAgIGNhc2UgJ2V0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXInOlxuICAgIGNhc2UgJ2V0aF91bmluc3RhbGxGaWx0ZXInOlxuICAgIGNhc2UgJ2V0aF9nZXRGaWx0ZXJDaGFuZ2VzJzpcbiAgICBjYXNlICdldGhfZ2V0V29yayc6XG4gICAgY2FzZSAnZXRoX3N1Ym1pdFdvcmsnOlxuICAgIGNhc2UgJ2V0aF9zdWJtaXRIYXNocmF0ZSc6XG4gICAgY2FzZSAnZGJfcHV0U3RyaW5nJzpcbiAgICBjYXNlICdkYl9nZXRTdHJpbmcnOlxuICAgIGNhc2UgJ2RiX3B1dEhleCc6XG4gICAgY2FzZSAnZGJfZ2V0SGV4JzpcbiAgICBjYXNlICdzaGhfcG9zdCc6XG4gICAgY2FzZSAnc2hoX25ld0lkZW50aXR5JzpcbiAgICBjYXNlICdzaGhfaGFzSWRlbnRpdHknOlxuICAgIGNhc2UgJ3NoaF9uZXdHcm91cCc6XG4gICAgY2FzZSAnc2hoX2FkZFRvR3JvdXAnOlxuICAgIGNhc2UgJ3NoaF9uZXdGaWx0ZXInOlxuICAgIGNhc2UgJ3NoaF91bmluc3RhbGxGaWx0ZXInOlxuICAgIGNhc2UgJ3NoaF9nZXRGaWx0ZXJDaGFuZ2VzJzpcbiAgICBjYXNlICdzaGhfZ2V0TWVzc2FnZXMnOlxuICAgICAgcmV0dXJuICduZXZlcidcbiAgfVxufVxuIiwidmFyIGpzb24gPSB0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgPyBKU09OIDogcmVxdWlyZSgnanNvbmlmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIG9wdHMgPSB7IGNtcDogb3B0cyB9O1xuICAgIHZhciBzcGFjZSA9IG9wdHMuc3BhY2UgfHwgJyc7XG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHNwYWNlID0gQXJyYXkoc3BhY2UrMSkuam9pbignICcpO1xuICAgIHZhciBjeWNsZXMgPSAodHlwZW9mIG9wdHMuY3ljbGVzID09PSAnYm9vbGVhbicpID8gb3B0cy5jeWNsZXMgOiBmYWxzZTtcbiAgICB2YXIgcmVwbGFjZXIgPSBvcHRzLnJlcGxhY2VyIHx8IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIChmdW5jdGlvbiAoZikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHZhciBhb2JqID0geyBrZXk6IGEsIHZhbHVlOiBub2RlW2FdIH07XG4gICAgICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYiwgdmFsdWU6IG5vZGVbYl0gfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihhb2JqLCBib2JqKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfSkob3B0cy5jbXApO1xuXG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHN0cmluZ2lmeSAocGFyZW50LCBrZXksIG5vZGUsIGxldmVsKSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBzcGFjZSA/ICgnXFxuJyArIG5ldyBBcnJheShsZXZlbCArIDEpLmpvaW4oc3BhY2UpKSA6ICcnO1xuICAgICAgICB2YXIgY29sb25TZXBhcmF0b3IgPSBzcGFjZSA/ICc6ICcgOiAnOic7XG5cbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS50b0pTT04gJiYgdHlwZW9mIG5vZGUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS50b0pTT04oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSByZXBsYWNlci5jYWxsKHBhcmVudCwga2V5LCBub2RlKTtcblxuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JyB8fCBub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ganNvbi5zdHJpbmdpZnkobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gc3RyaW5naWZ5KG5vZGUsIGksIG5vZGVbaV0sIGxldmVsKzEpIHx8IGpzb24uc3RyaW5naWZ5KG51bGwpO1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKGluZGVudCArIHNwYWNlICsgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgb3V0LmpvaW4oJywnKSArIGluZGVudCArICddJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIGpzb24uc3RyaW5naWZ5KCdfX2N5Y2xlX18nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHNlZW4ucHVzaChub2RlKTtcblxuICAgICAgICAgICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKG5vZGUpLnNvcnQoY21wICYmIGNtcChub2RlKSk7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHJpbmdpZnkobm9kZSwga2V5LCBub2RlW2tleV0sIGxldmVsKzEpO1xuXG4gICAgICAgICAgICAgICAgaWYoIXZhbHVlKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGpzb24uc3RyaW5naWZ5KGtleSlcbiAgICAgICAgICAgICAgICAgICAgKyBjb2xvblNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICArIHZhbHVlO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGtleVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uc3BsaWNlKHNlZW4uaW5kZXhPZihub2RlKSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gJ3snICsgb3V0LmpvaW4oJywnKSArIGluZGVudCArICd9JztcbiAgICAgICAgfVxuICAgIH0pKHsgJyc6IG9iaiB9LCAnJywgb2JqLCAwKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9O1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59O1xuIiwiZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vbGliL3BhcnNlJyk7XG5leHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeScpO1xuIiwidmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAgICdcIic6ICAnXCInLFxuICAgICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICAgJy8nOiAgJy8nLFxuICAgICAgICBiOiAgICAnXFxiJyxcbiAgICAgICAgZjogICAgJ1xcZicsXG4gICAgICAgIG46ICAgICdcXG4nLFxuICAgICAgICByOiAgICAnXFxyJyxcbiAgICAgICAgdDogICAgJ1xcdCdcbiAgICB9LFxuICAgIHRleHQsXG5cbiAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICAgICdTeW50YXhFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICAgICAgYXQ6ICAgICAgYXQsXG4gICAgICAgICAgICB0ZXh0OiAgICB0ZXh0XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBcbiAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgICAgICBlcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgICAgXG4gICAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpO1xuICAgICAgICBhdCArPSAxO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuICAgICAgICB2YXIgbnVtYmVyLFxuICAgICAgICAgICAgc3RyaW5nID0gJyc7XG4gICAgICAgIFxuICAgICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICAgICAgc3RyaW5nID0gJy0nO1xuICAgICAgICAgICAgbmV4dCgnLScpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSAnLic7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykge1xuICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgICAgICBlcnJvcihcIkJhZCBudW1iZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxuICAgICAgICB2YXIgaGV4LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICAgICAgdWZmZmY7XG4gICAgICAgIFxuICAgICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG4gICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJCYWQgc3RyaW5nXCIpO1xuICAgIH0sXG5cbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcblxuLy8gU2tpcCB3aGl0ZXNwYWNlLlxuXG4gICAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuXG4vLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgICAgbmV4dCgncicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuXG4gICAgdmFsdWUsICAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cblxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsgICAvLyBlbXB0eSBhcnJheVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBhcnJheVwiKTtcbiAgICB9LFxuXG4gICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIG9iamVjdCA9IHt9O1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgICAgICBuZXh0KCd7Jyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsgICAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgICAgICAgIGtleSA9IHN0cmluZygpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgbmV4dCgnOicpO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJCYWQgb2JqZWN0XCIpO1xuICAgIH07XG5cbnZhbHVlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbi8vIG9yIGEgd29yZC5cblxuICAgIHdoaXRlKCk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcmV0dXJuIHN0cmluZygpO1xuICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG59O1xuXG4vLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG4gICAgXG4gICAgdGV4dCA9IHNvdXJjZTtcbiAgICBhdCA9IDA7XG4gICAgY2ggPSAnICc7XG4gICAgcmVzdWx0ID0gdmFsdWUoKTtcbiAgICB3aGl0ZSgpO1xuICAgIGlmIChjaCkge1xuICAgICAgICBlcnJvcihcIlN5bnRheCBlcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfSh7Jyc6IHJlc3VsdH0sICcnKSkgOiByZXN1bHQ7XG59O1xuIiwidmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICBnYXAsXG4gICAgaW5kZW50LFxuICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICB9LFxuICAgIHJlcDtcblxuZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG4gICAgLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuICAgIC8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4gICAgLy8gc2VxdWVuY2VzLlxuICAgIFxuICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6XG4gICAgICAgICAgICAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbn1cblxuZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG4gICAgLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgbGVuZ3RoLFxuICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgIFxuICAgIC8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuICAgIC8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4gICAgICAgICAgICAvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuICAgICAgICAgICAgLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQXJyYXkuaXNBcnJheVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmRcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHRoZW0gaW4gYnJhY2tldHMuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6IGdhcCA/XG4gICAgICAgICAgICAgICAgICAgICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nIDpcbiAgICAgICAgICAgICAgICAgICAgJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlXG4gICAgICAgICAgICAvLyBzdHJpbmdpZmllZC5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cbiAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4gICAgICAgIC8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOiBnYXAgP1xuICAgICAgICAgICAgJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfScgOlxuICAgICAgICAgICAgJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgIHZhciBpO1xuICAgIGdhcCA9ICcnO1xuICAgIGluZGVudCA9ICcnO1xuICAgIFxuICAgIC8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbiAgICAvLyBtYW55IHNwYWNlcy5cbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG4gICAgZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4gICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cbiAgICByZXAgPSByZXBsYWNlcjtcbiAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nXG4gICAgJiYgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbiAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbn07XG4iLCIvLyBnb3R0YSBrZWVwIGl0IHdpdGhpbiBNQVhfU0FGRV9JTlRFR0VSXG5jb25zdCBleHRyYURpZ2l0cyA9IDNcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSYW5kb21JZFxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbUlkKCl7XG4gIC8vIDEzIHRpbWUgZGlnaXRzXG4gIHZhciBkYXRlUGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpKk1hdGgucG93KDEwLCBleHRyYURpZ2l0cylcbiAgLy8gMyByYW5kb20gZGlnaXRzXG4gIHZhciBleHRyYVBhcnQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTWF0aC5wb3coMTAsIGV4dHJhRGlnaXRzKSlcbiAgLy8gMTYgZGlnaXRzXG4gIHJldHVybiBkYXRlUGFydCtleHRyYVBhcnRcbn0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB3aW5kb3cgPSByZXF1aXJlKFwiZ2xvYmFsL3dpbmRvd1wiKVxudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKFwiaXMtZnVuY3Rpb25cIilcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKFwicGFyc2UtaGVhZGVyc1wiKVxudmFyIHh0ZW5kID0gcmVxdWlyZShcInh0ZW5kXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlWEhSXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVYSFI7XG5jcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3QgfHwgbm9vcFxuY3JlYXRlWEhSLlhEb21haW5SZXF1ZXN0ID0gXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiAobmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpKSA/IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCA6IHdpbmRvdy5YRG9tYWluUmVxdWVzdFxuXG5mb3JFYWNoQXJyYXkoW1wiZ2V0XCIsIFwicHV0XCIsIFwicG9zdFwiLCBcInBhdGNoXCIsIFwiaGVhZFwiLCBcImRlbGV0ZVwiXSwgZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgY3JlYXRlWEhSW21ldGhvZCA9PT0gXCJkZWxldGVcIiA/IFwiZGVsXCIgOiBtZXRob2RdID0gZnVuY3Rpb24odXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG4gICAgfVxufSlcblxuZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvcikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0b3IoYXJyYXlbaV0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0VtcHR5KG9iail7XG4gICAgZm9yKHZhciBpIGluIG9iail7XG4gICAgICAgIGlmKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciBwYXJhbXMgPSB1cmlcblxuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICAgICAgICBpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGFyYW1zID0ge3VyaTp1cml9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMgPSB4dGVuZChvcHRpb25zLCB7dXJpOiB1cml9KVxuICAgIH1cblxuICAgIHBhcmFtcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBjcmVhdGVYSFIodXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIG9wdGlvbnMgPSBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgcmV0dXJuIF9jcmVhdGVYSFIob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVhIUihvcHRpb25zKSB7XG4gICAgaWYodHlwZW9mIG9wdGlvbnMuY2FsbGJhY2sgPT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYWxsYmFjayBhcmd1bWVudCBtaXNzaW5nXCIpXG4gICAgfVxuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlXG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2JPbmNlKGVyciwgcmVzcG9uc2UsIGJvZHkpe1xuICAgICAgICBpZighY2FsbGVkKXtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWVcbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2soZXJyLCByZXNwb25zZSwgYm9keSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChsb2FkRnVuYywgMClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gICAgICAgIC8vIENocm9tZSB3aXRoIHJlcXVlc3RUeXBlPWJsb2IgdGhyb3dzIGVycm9ycyBhcnJvdW5kIHdoZW4gZXZlbiB0ZXN0aW5nIGFjY2VzcyB0byByZXNwb25zZVRleHRcbiAgICAgICAgdmFyIGJvZHkgPSB1bmRlZmluZWRcblxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBib2R5ID0geGhyLnJlc3BvbnNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0geGhyLnJlc3BvbnNlVGV4dCB8fCBnZXRYbWwoeGhyKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSnNvbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBib2R5XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJyb3JGdW5jKGV2dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZighKGV2dCBpbnN0YW5jZW9mIEVycm9yKSl7XG4gICAgICAgICAgICBldnQgPSBuZXcgRXJyb3IoXCJcIiArIChldnQgfHwgXCJVbmtub3duIFhNTEh0dHBSZXF1ZXN0IEVycm9yXCIpIClcbiAgICAgICAgfVxuICAgICAgICBldnQuc3RhdHVzQ29kZSA9IDBcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGV2dCwgZmFpbHVyZVJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIHdpbGwgbG9hZCB0aGUgZGF0YSAmIHByb2Nlc3MgdGhlIHJlc3BvbnNlIGluIGEgc3BlY2lhbCByZXNwb25zZSBvYmplY3RcbiAgICBmdW5jdGlvbiBsb2FkRnVuYygpIHtcbiAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVyblxuICAgICAgICB2YXIgc3RhdHVzXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0VGltZXIpXG4gICAgICAgIGlmKG9wdGlvbnMudXNlWERSICYmIHhoci5zdGF0dXM9PT11bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vSUU4IENPUlMgR0VUIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZG9lc24ndCBoYXZlIGEgc3RhdHVzIGZpZWxkLCBidXQgYm9keSBpcyBmaW5lXG4gICAgICAgICAgICBzdGF0dXMgPSAyMDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICh4aHIuc3RhdHVzID09PSAxMjIzID8gMjA0IDogeGhyLnN0YXR1cylcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBmYWlsdXJlUmVzcG9uc2VcbiAgICAgICAgdmFyIGVyciA9IG51bGxcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAwKXtcbiAgICAgICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGJvZHk6IGdldEJvZHkoKSxcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXMsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgICAgdXJsOiB1cmksXG4gICAgICAgICAgICAgICAgcmF3UmVxdWVzdDogeGhyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKXsgLy9yZW1lbWJlciB4aHIgY2FuIGluIGZhY3QgYmUgWERSIGZvciBDT1JTIGluIElFXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoXCJJbnRlcm5hbCBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIsIHJlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBvcHRpb25zLnhociB8fCBudWxsXG5cbiAgICBpZiAoIXhocikge1xuICAgICAgICBpZiAob3B0aW9ucy5jb3JzIHx8IG9wdGlvbnMudXNlWERSKSB7XG4gICAgICAgICAgICB4aHIgPSBuZXcgY3JlYXRlWEhSLlhEb21haW5SZXF1ZXN0KClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB4aHIgPSBuZXcgY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0KClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlcbiAgICB2YXIgYWJvcnRlZFxuICAgIHZhciB1cmkgPSB4aHIudXJsID0gb3B0aW9ucy51cmkgfHwgb3B0aW9ucy51cmxcbiAgICB2YXIgbWV0aG9kID0geGhyLm1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8IFwiR0VUXCJcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keSB8fCBvcHRpb25zLmRhdGFcbiAgICB2YXIgaGVhZGVycyA9IHhoci5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgdmFyIHN5bmMgPSAhIW9wdGlvbnMuc3luY1xuICAgIHZhciBpc0pzb24gPSBmYWxzZVxuICAgIHZhciB0aW1lb3V0VGltZXJcbiAgICB2YXIgZmFpbHVyZVJlc3BvbnNlID0ge1xuICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBzdGF0dXNDb2RlOiAwLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgdXJsOiB1cmksXG4gICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgIH1cblxuICAgIGlmIChcImpzb25cIiBpbiBvcHRpb25zICYmIG9wdGlvbnMuanNvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgaXNKc29uID0gdHJ1ZVxuICAgICAgICBoZWFkZXJzW1wiYWNjZXB0XCJdIHx8IGhlYWRlcnNbXCJBY2NlcHRcIl0gfHwgKGhlYWRlcnNbXCJBY2NlcHRcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIikgLy9Eb24ndCBvdmVycmlkZSBleGlzdGluZyBhY2NlcHQgaGVhZGVyIGRlY2xhcmVkIGJ5IHVzZXJcbiAgICAgICAgaWYgKG1ldGhvZCAhPT0gXCJHRVRcIiAmJiBtZXRob2QgIT09IFwiSEVBRFwiKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdIHx8IGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gfHwgKGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIikgLy9Eb24ndCBvdmVycmlkZSBleGlzdGluZyBhY2NlcHQgaGVhZGVyIGRlY2xhcmVkIGJ5IHVzZXJcbiAgICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmpzb24gPT09IHRydWUgPyBib2R5IDogb3B0aW9ucy5qc29uKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHJlYWR5c3RhdGVjaGFuZ2VcbiAgICB4aHIub25sb2FkID0gbG9hZEZ1bmNcbiAgICB4aHIub25lcnJvciA9IGVycm9yRnVuY1xuICAgIC8vIElFOSBtdXN0IGhhdmUgb25wcm9ncmVzcyBiZSBzZXQgdG8gYSB1bmlxdWUgZnVuY3Rpb24uXG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElFIG11c3QgZGllXG4gICAgfVxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHhoci5vbnRpbWVvdXQgPSBlcnJvckZ1bmNcbiAgICB4aHIub3BlbihtZXRob2QsIHVyaSwgIXN5bmMsIG9wdGlvbnMudXNlcm5hbWUsIG9wdGlvbnMucGFzc3dvcmQpXG4gICAgLy9oYXMgdG8gYmUgYWZ0ZXIgb3BlblxuICAgIGlmKCFzeW5jKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSAhIW9wdGlvbnMud2l0aENyZWRlbnRpYWxzXG4gICAgfVxuICAgIC8vIENhbm5vdCBzZXQgdGltZW91dCB3aXRoIHN5bmMgcmVxdWVzdFxuICAgIC8vIG5vdCBzZXR0aW5nIHRpbWVvdXQgb24gdGhlIHhociBvYmplY3QsIGJlY2F1c2Ugb2Ygb2xkIHdlYmtpdHMgZXRjLiBub3QgaGFuZGxpbmcgdGhhdCBjb3JyZWN0bHlcbiAgICAvLyBib3RoIG5wbSdzIHJlcXVlc3QgYW5kIGpxdWVyeSAxLnggdXNlIHRoaXMga2luZCBvZiB0aW1lb3V0LCBzbyB0aGlzIGlzIGJlaW5nIGNvbnNpc3RlbnRcbiAgICBpZiAoIXN5bmMgJiYgb3B0aW9ucy50aW1lb3V0ID4gMCApIHtcbiAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVyblxuICAgICAgICAgICAgYWJvcnRlZCA9IHRydWUvL0lFOSBtYXkgc3RpbGwgY2FsbCByZWFkeXN0YXRlY2hhbmdlXG4gICAgICAgICAgICB4aHIuYWJvcnQoXCJ0aW1lb3V0XCIpXG4gICAgICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihcIlhNTEh0dHBSZXF1ZXN0IHRpbWVvdXRcIilcbiAgICAgICAgICAgIGUuY29kZSA9IFwiRVRJTUVET1VUXCJcbiAgICAgICAgICAgIGVycm9yRnVuYyhlKVxuICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQgKVxuICAgIH1cblxuICAgIGlmICh4aHIuc2V0UmVxdWVzdEhlYWRlcikge1xuICAgICAgICBmb3Ioa2V5IGluIGhlYWRlcnMpe1xuICAgICAgICAgICAgaWYoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5oZWFkZXJzICYmICFpc0VtcHR5KG9wdGlvbnMuaGVhZGVycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGVhZGVycyBjYW5ub3QgYmUgc2V0IG9uIGFuIFhEb21haW5SZXF1ZXN0IG9iamVjdFwiKVxuICAgIH1cblxuICAgIGlmIChcInJlc3BvbnNlVHlwZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlXG4gICAgfVxuXG4gICAgaWYgKFwiYmVmb3JlU2VuZFwiIGluIG9wdGlvbnMgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICAgIG9wdGlvbnMuYmVmb3JlU2VuZCh4aHIpXG4gICAgfVxuXG4gICAgLy8gTWljcm9zb2Z0IEVkZ2UgYnJvd3NlciBzZW5kcyBcInVuZGVmaW5lZFwiIHdoZW4gc2VuZCBpcyBjYWxsZWQgd2l0aCB1bmRlZmluZWQgdmFsdWUuXG4gICAgLy8gWE1MSHR0cFJlcXVlc3Qgc3BlYyBzYXlzIHRvIHBhc3MgbnVsbCBhcyBib2R5IHRvIGluZGljYXRlIG5vIGJvZHlcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25hdWd0dXIveGhyL2lzc3Vlcy8xMDAuXG4gICAgeGhyLnNlbmQoYm9keSB8fCBudWxsKVxuXG4gICAgcmV0dXJuIHhoclxuXG5cbn1cblxuZnVuY3Rpb24gZ2V0WG1sKHhocikge1xuICAgIC8vIHhoci5yZXNwb25zZVhNTCB3aWxsIHRocm93IEV4Y2VwdGlvbiBcIkludmFsaWRTdGF0ZUVycm9yXCIgb3IgXCJET01FeGNlcHRpb25cIlxuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvcmVzcG9uc2VYTUwuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiZG9jdW1lbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVhNTFxuICAgICAgICB9XG4gICAgICAgIHZhciBmaXJlZm94QnVnVGFrZW5FZmZlY3QgPSB4aHIucmVzcG9uc2VYTUwgJiYgeGhyLnJlc3BvbnNlWE1MLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSA9PT0gXCJwYXJzZXJlcnJvclwiXG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiICYmICFmaXJlZm94QnVnVGFrZW5FZmZlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VYTUxcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsInZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgd2luID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgd2luID0ge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2luO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxuZnVuY3Rpb24gaXNGdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHN0cmluZyA9IHRvU3RyaW5nLmNhbGwoZm4pXG4gIHJldHVybiBzdHJpbmcgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHN0cmluZyAhPT0gJ1tvYmplY3QgUmVnRXhwXScpIHx8XG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgIC8vIElFOCBhbmQgYmVsb3dcbiAgICAgKGZuID09PSB3aW5kb3cuc2V0VGltZW91dCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5hbGVydCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5jb25maXJtIHx8XG4gICAgICBmbiA9PT0gd2luZG93LnByb21wdCkpXG59O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnRyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kVHJpbSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBnZXRQb2x5ZmlsbCgpKTtcblxuZGVmaW5lKGJvdW5kVHJpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRUcmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuL0dldEludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYXNzZXJ0UmVjb3JkJyk7XG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzRmluaXRlJyk7XG5cbnZhciBzaWduID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NpZ24nKTtcbnZhciBtb2QgPSByZXF1aXJlKCcuL2hlbHBlcnMvbW9kJyk7XG5cbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG4vLyBodHRwczovL2VzNS5naXRodWIuaW8vI3g5XG52YXIgRVM1ID0ge1xuXHRUb1ByaW1pdGl2ZTogdG9QcmltaXRpdmUsXG5cblx0VG9Cb29sZWFuOiBmdW5jdGlvbiBUb0Jvb2xlYW4odmFsdWUpIHtcblx0XHRyZXR1cm4gISF2YWx1ZTtcblx0fSxcblx0VG9OdW1iZXI6IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdFx0cmV0dXJuICt2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9LFxuXHRUb0ludGVnZXI6IGZ1bmN0aW9uIFRvSW50ZWdlcih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikpIHsgcmV0dXJuIDA7IH1cblx0XHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdFx0cmV0dXJuIHNpZ24obnVtYmVyKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobnVtYmVyKSk7XG5cdH0sXG5cdFRvSW50MzI6IGZ1bmN0aW9uIFRvSW50MzIoeCkge1xuXHRcdHJldHVybiB0aGlzLlRvTnVtYmVyKHgpID4+IDA7XG5cdH0sXG5cdFRvVWludDMyOiBmdW5jdGlvbiBUb1VpbnQzMih4KSB7XG5cdFx0cmV0dXJuIHRoaXMuVG9OdW1iZXIoeCkgPj4+IDA7XG5cdH0sXG5cdFRvVWludDE2OiBmdW5jdGlvbiBUb1VpbnQxNih2YWx1ZSkge1xuXHRcdHZhciBudW1iZXIgPSB0aGlzLlRvTnVtYmVyKHZhbHVlKTtcblx0XHRpZiAoJGlzTmFOKG51bWJlcikgfHwgbnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRcdHZhciBwb3NJbnQgPSBzaWduKG51bWJlcikgKiBNYXRoLmZsb29yKE1hdGguYWJzKG51bWJlcikpO1xuXHRcdHJldHVybiBtb2QocG9zSW50LCAweDEwMDAwKTtcblx0fSxcblx0VG9TdHJpbmc6IGZ1bmN0aW9uIFRvU3RyaW5nKHZhbHVlKSB7XG5cdFx0cmV0dXJuICRTdHJpbmcodmFsdWUpO1xuXHR9LFxuXHRUb09iamVjdDogZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0XHR0aGlzLkNoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlKTtcblx0XHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG5cdH0sXG5cdENoZWNrT2JqZWN0Q29lcmNpYmxlOiBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRJc0NhbGxhYmxlOiBJc0NhbGxhYmxlLFxuXHRTYW1lVmFsdWU6IGZ1bmN0aW9uIFNhbWVWYWx1ZSh4LCB5KSB7XG5cdFx0aWYgKHggPT09IHkpIHsgLy8gMCA9PT0gLTAsIGJ1dCB0aGV5IGFyZSBub3QgaWRlbnRpY2FsLlxuXHRcdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOFxuXHRUeXBlOiBmdW5jdGlvbiBUeXBlKHgpIHtcblx0XHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICdOdWxsJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuICdVbmRlZmluZWQnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gJ09iamVjdCc7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiAnTnVtYmVyJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiAnQm9vbGVhbic7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnU3RyaW5nJztcblx0XHR9XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdElzUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc1Byb3BlcnR5RGVzY3JpcHRvcihEZXNjKSB7XG5cdFx0aWYgKHRoaXMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dmFyIGFsbG93ZWQgPSB7XG5cdFx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuXHRcdFx0J1tbR2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdFx0J1tbVmFsdWVdXSc6IHRydWUsXG5cdFx0XHQnW1tXcml0YWJsZV1dJzogdHJ1ZVxuXHRcdH07XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cdFx0XHRpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG5cdFx0dmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcblx0XHRpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuMVxuXHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbR2V0XV0nKSAmJiAhaGFzKERlc2MsICdbW1NldF1dJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC4yXG5cdElzRGF0YURlc2NyaXB0b3I6IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRcdGlmICh0eXBlb2YgRGVzYyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKCFoYXMoRGVzYywgJ1tbVmFsdWVdXScpICYmICFoYXMoRGVzYywgJ1tbV3JpdGFibGVdXScpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuM1xuXHRJc0dlbmVyaWNEZXNjcmlwdG9yOiBmdW5jdGlvbiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0YXNzZXJ0UmVjb3JkKHRoaXMsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRcdGlmICghdGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSAmJiAhdGhpcy5Jc0RhdGFEZXNjcmlwdG9yKERlc2MpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTAuNFxuXHRGcm9tUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0XHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gRGVzYztcblx0XHR9XG5cblx0XHRhc3NlcnRSZWNvcmQodGhpcywgJ1Byb3BlcnR5IERlc2NyaXB0b3InLCAnRGVzYycsIERlc2MpO1xuXG5cdFx0aWYgKHRoaXMuSXNEYXRhRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFsdWU6IERlc2NbJ1tbVmFsdWVdXSddLFxuXHRcdFx0XHR3cml0YWJsZTogISFEZXNjWydbW1dyaXRhYmxlXV0nXSxcblx0XHRcdFx0ZW51bWVyYWJsZTogISFEZXNjWydbW0VudW1lcmFibGVdXSddLFxuXHRcdFx0XHRjb25maWd1cmFibGU6ICEhRGVzY1snW1tDb25maWd1cmFibGVdXSddXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAodGhpcy5Jc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Z2V0OiBEZXNjWydbW0dldF1dJ10sXG5cdFx0XHRcdHNldDogRGVzY1snW1tTZXRdXSddLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiAhIURlc2NbJ1tbRW51bWVyYWJsZV1dJ10sXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogISFEZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ11cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdGcm9tUHJvcGVydHlEZXNjcmlwdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdWxseSBwb3B1bGF0ZWQgUHJvcGVydHkgRGVzY3JpcHRvcicpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMC41XG5cdFRvUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0XHRpZiAodGhpcy5UeXBlKE9iaikgIT09ICdPYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2MgPSB7fTtcblx0XHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tFbnVtZXJhYmxlXV0nXSA9IHRoaXMuVG9Cb29sZWFuKE9iai5lbnVtZXJhYmxlKTtcblx0XHR9XG5cdFx0aWYgKGhhcyhPYmosICdjb25maWd1cmFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tDb25maWd1cmFibGVdXSddID0gdGhpcy5Ub0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAndmFsdWUnKSkge1xuXHRcdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdFx0fVxuXHRcdGlmIChoYXMoT2JqLCAnd3JpdGFibGUnKSkge1xuXHRcdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSB0aGlzLlRvQm9vbGVhbihPYmoud3JpdGFibGUpO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0XHR2YXIgZ2V0dGVyID0gT2JqLmdldDtcblx0XHRcdGlmICh0eXBlb2YgZ2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXHRcdFx0ZGVzY1snW1tHZXRdXSddID0gZ2V0dGVyO1xuXHRcdH1cblx0XHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0XHR2YXIgc2V0dGVyID0gT2JqLnNldDtcblx0XHRcdGlmICh0eXBlb2Ygc2V0dGVyICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5Jc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ3NldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdH1cblx0XHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0XHR9XG5cblx0XHRpZiAoKGhhcyhkZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhkZXNjLCAnW1tTZXRdXScpKSAmJiAoaGFzKGRlc2MsICdbW1ZhbHVlXV0nKSB8fCBoYXMoZGVzYywgJ1tbV3JpdGFibGVdXScpKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVTNTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJy4uL0dldEludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkU3ludGF4RXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVTeW50YXhFcnJvciUnKTtcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgcHJlZGljYXRlcyA9IHtcbiAgLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG4gICdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoRVMsIERlc2MpIHtcbiAgICBpZiAoRVMuVHlwZShEZXNjKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGFsbG93ZWQgPSB7XG4gICAgICAnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG4gICAgICAnW1tFbnVtZXJhYmxlXV0nOiB0cnVlLFxuICAgICAgJ1tbR2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbU2V0XV0nOiB0cnVlLFxuICAgICAgJ1tbVmFsdWVdXSc6IHRydWUsXG4gICAgICAnW1tXcml0YWJsZV1dJzogdHJ1ZVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gRGVzYykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoaGFzKERlc2MsIGtleSkgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzRGF0YSA9IGhhcyhEZXNjLCAnW1tWYWx1ZV1dJyk7XG4gICAgdmFyIElzQWNjZXNzb3IgPSBoYXMoRGVzYywgJ1tbR2V0XV0nKSB8fCBoYXMoRGVzYywgJ1tbU2V0XV0nKTtcbiAgICBpZiAoaXNEYXRhICYmIElzQWNjZXNzb3IpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdQcm9wZXJ0eSBEZXNjcmlwdG9ycyBtYXkgbm90IGJlIGJvdGggYWNjZXNzb3IgYW5kIGRhdGEgZGVzY3JpcHRvcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzZXJ0UmVjb3JkKEVTLCByZWNvcmRUeXBlLCBhcmd1bWVudE5hbWUsIHZhbHVlKSB7XG4gIHZhciBwcmVkaWNhdGUgPSBwcmVkaWNhdGVzW3JlY29yZFR5cGVdO1xuICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Vua25vd24gcmVjb3JkIHR5cGU6ICcgKyByZWNvcmRUeXBlKTtcbiAgfVxuICBpZiAoIXByZWRpY2F0ZShFUywgdmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuICB9XG4gIGNvbnNvbGUubG9nKHByZWRpY2F0ZShFUywgdmFsdWUpLCB2YWx1ZSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gaXNOYU4oYSkge1xuXHRyZXR1cm4gYSAhPT0gYTtcbn07XG4iLCJ2YXIgJGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhICE9PSBhOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmICEkaXNOYU4oeCkgJiYgeCAhPT0gSW5maW5pdHkgJiYgeCAhPT0gLUluZmluaXR5OyB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtb2QobnVtYmVyLCBtb2R1bG8pIHtcblx0dmFyIHJlbWFpbiA9IG51bWJlciAlIG1vZHVsbztcblx0cmV0dXJuIE1hdGguZmxvb3IocmVtYWluID49IDAgPyByZW1haW4gOiByZW1haW4gKyBtb2R1bG8pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1TdHJpbmdUcmltKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgeyB0cmltOiBwb2x5ZmlsbCB9LCB7IHRyaW06IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUudHJpbSAhPT0gcG9seWZpbGw7IH0gfSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmb3JFYWNoQXJyYXkgPSBmdW5jdGlvbiBmb3JFYWNoQXJyYXkoYXJyYXksIGl0ZXJhdG9yLCByZWNlaXZlcikge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgaSkpIHtcbiAgICAgICAgICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IoYXJyYXlbaV0sIGksIGFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgYXJyYXlbaV0sIGksIGFycmF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBmb3JFYWNoU3RyaW5nID0gZnVuY3Rpb24gZm9yRWFjaFN0cmluZyhzdHJpbmcsIGl0ZXJhdG9yLCByZWNlaXZlcikge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHJpbmcubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgLy8gbm8gc3VjaCB0aGluZyBhcyBhIHNwYXJzZSBzdHJpbmcuXG4gICAgICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihzdHJpbmcuY2hhckF0KGkpLCBpLCBzdHJpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChyZWNlaXZlciwgc3RyaW5nLmNoYXJBdChpKSwgaSwgc3RyaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBmb3JFYWNoT2JqZWN0ID0gZnVuY3Rpb24gZm9yRWFjaE9iamVjdChvYmplY3QsIGl0ZXJhdG9yLCByZWNlaXZlcikge1xuICAgIGZvciAodmFyIGsgaW4gb2JqZWN0KSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIHtcbiAgICAgICAgICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3Iob2JqZWN0W2tdLCBrLCBvYmplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKHJlY2VpdmVyLCBvYmplY3Rba10sIGssIG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2gobGlzdCwgaXRlcmF0b3IsIHRoaXNBcmcpIHtcbiAgICBpZiAoIWlzQ2FsbGFibGUoaXRlcmF0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2l0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHZhciByZWNlaXZlcjtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIHJlY2VpdmVyID0gdGhpc0FyZztcbiAgICB9XG5cbiAgICBpZiAodG9TdHIuY2FsbChsaXN0KSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICBmb3JFYWNoQXJyYXkobGlzdCwgaXRlcmF0b3IsIHJlY2VpdmVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBmb3JFYWNoU3RyaW5nKGxpc3QsIGl0ZXJhdG9yLCByZWNlaXZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yRWFjaE9iamVjdChsaXN0LCBpdGVyYXRvciwgcmVjZWl2ZXIpO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZm9yRWFjaDtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvZXJyb3JzJyk7IiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIEpzb25ScGNFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvZGUsIGRhdGEpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEpzb25ScGNFcnJvcikpIHtcbiAgICByZXR1cm4gbmV3IEpzb25ScGNFcnJvcihtZXNzYWdlLCBjb2RlLCBkYXRhKTtcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMuY29kZSA9IGNvZGU7XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn07XG5cbmluaGVyaXRzKEpzb25ScGNFcnJvciwgRXJyb3IpO1xuXG52YXIgUGFyc2VFcnJvciA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VFcnJvcikpIHtcbiAgICByZXR1cm4gbmV3IFBhcnNlRXJyb3IoKTtcbiAgfVxuXG4gIEpzb25ScGNFcnJvci5jYWxsKHRoaXMsICdQYXJzZSBlcnJvcicsIC0zMjcwMCk7XG59O1xuXG5pbmhlcml0cyhQYXJzZUVycm9yLCBKc29uUnBjRXJyb3IpO1xuXG52YXIgSW52YWxpZFJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEludmFsaWRSZXF1ZXN0KSkge1xuICAgIHJldHVybiBuZXcgSW52YWxpZFJlcXVlc3QoKTtcbiAgfVxuXG4gIEpzb25ScGNFcnJvci5jYWxsKHRoaXMsICdJbnZhbGlkIFJlcXVlc3QnLCAtMzI2MDApO1xufTtcblxuaW5oZXJpdHMoSW52YWxpZFJlcXVlc3QsIEpzb25ScGNFcnJvcik7XG5cbnZhciBNZXRob2ROb3RGb3VuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWV0aG9kTm90Rm91bmQpKSB7XG4gICAgcmV0dXJuIG5ldyBNZXRob2ROb3RGb3VuZCgpO1xuICB9XG5cbiAgSnNvblJwY0Vycm9yLmNhbGwodGhpcywgJ01ldGhvZCBub3QgZm91bmQnLCAtMzI2MDEpO1xufTtcblxuaW5oZXJpdHMoTWV0aG9kTm90Rm91bmQsIEpzb25ScGNFcnJvcik7XG5cbnZhciBJbnZhbGlkUGFyYW1zID0gZnVuY3Rpb24oKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbnZhbGlkUGFyYW1zKSkge1xuICAgIHJldHVybiBuZXcgSW52YWxpZFBhcmFtcygpO1xuICB9XG5cbiAgSnNvblJwY0Vycm9yLmNhbGwodGhpcywgJ0ludmFsaWQgcGFyYW1zJywgLTMyNjAyKTtcbn07XG5cbmluaGVyaXRzKEludmFsaWRQYXJhbXMsIEpzb25ScGNFcnJvcik7XG5cbnZhciBJbnRlcm5hbEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHZhciBtZXNzYWdlO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbnRlcm5hbEVycm9yKSkge1xuICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICB9XG5cbiAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xuICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gJ0ludGVybmFsIGVycm9yJztcbiAgfVxuXG4gIEpzb25ScGNFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIC0zMjYwMyk7XG59O1xuXG5pbmhlcml0cyhJbnRlcm5hbEVycm9yLCBKc29uUnBjRXJyb3IpO1xuXG52YXIgU2VydmVyRXJyb3IgPSBmdW5jdGlvbihjb2RlKSB7XG4gIGlmIChjb2RlIDwgLTMyMDk5IHx8IGNvZGUgPiAtMzIwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXJyb3IgY29kZScpO1xuICB9XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNlcnZlckVycm9yKSkge1xuICAgIHJldHVybiBuZXcgU2VydmVyRXJyb3IoY29kZSk7XG4gIH1cblxuICBKc29uUnBjRXJyb3IuY2FsbCh0aGlzLCAnU2VydmVyIGVycm9yJywgY29kZSk7XG59O1xuXG5pbmhlcml0cyhTZXJ2ZXJFcnJvciwgSnNvblJwY0Vycm9yKTtcblxuSnNvblJwY0Vycm9yLlBhcnNlRXJyb3IgPSBQYXJzZUVycm9yO1xuSnNvblJwY0Vycm9yLkludmFsaWRSZXF1ZXN0ID0gSW52YWxpZFJlcXVlc3Q7XG5Kc29uUnBjRXJyb3IuTWV0aG9kTm90Rm91bmQgPSBNZXRob2ROb3RGb3VuZDtcbkpzb25ScGNFcnJvci5JbnZhbGlkUGFyYW1zID0gSW52YWxpZFBhcmFtcztcbkpzb25ScGNFcnJvci5JbnRlcm5hbEVycm9yID0gSW50ZXJuYWxFcnJvcjtcbkpzb25ScGNFcnJvci5TZXJ2ZXJFcnJvciA9IFNlcnZlckVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpzb25ScGNFcnJvcjtcblxuXG4iLCIvLyAgICAgIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4vLyAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxudmFyIEJhY2tvZmYgPSByZXF1aXJlKCcuL2xpYi9iYWNrb2ZmJyk7XG52YXIgRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kgPSByZXF1aXJlKCcuL2xpYi9zdHJhdGVneS9leHBvbmVudGlhbCcpO1xudmFyIEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneSA9IHJlcXVpcmUoJy4vbGliL3N0cmF0ZWd5L2ZpYm9uYWNjaScpO1xudmFyIEZ1bmN0aW9uQ2FsbCA9IHJlcXVpcmUoJy4vbGliL2Z1bmN0aW9uX2NhbGwuanMnKTtcblxubW9kdWxlLmV4cG9ydHMuQmFja29mZiA9IEJhY2tvZmY7XG5tb2R1bGUuZXhwb3J0cy5GdW5jdGlvbkNhbGwgPSBGdW5jdGlvbkNhbGw7XG5tb2R1bGUuZXhwb3J0cy5GaWJvbmFjY2lTdHJhdGVneSA9IEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneTtcbm1vZHVsZS5leHBvcnRzLkV4cG9uZW50aWFsU3RyYXRlZ3kgPSBFeHBvbmVudGlhbEJhY2tvZmZTdHJhdGVneTtcblxuLy8gQ29uc3RydWN0cyBhIEZpYm9uYWNjaSBiYWNrb2ZmLlxubW9kdWxlLmV4cG9ydHMuZmlib25hY2NpID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQmFja29mZihuZXcgRmlib25hY2NpQmFja29mZlN0cmF0ZWd5KG9wdGlvbnMpKTtcbn07XG5cbi8vIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWwgYmFja29mZi5cbm1vZHVsZS5leHBvcnRzLmV4cG9uZW50aWFsID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQmFja29mZihuZXcgRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kob3B0aW9ucykpO1xufTtcblxuLy8gQ29uc3RydWN0cyBhIEZ1bmN0aW9uQ2FsbCBmb3IgdGhlIGdpdmVuIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMuXG5tb2R1bGUuZXhwb3J0cy5jYWxsID0gZnVuY3Rpb24oZm4sIHZhcmdzLCBjYWxsYmFjaykge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBmbiA9IGFyZ3NbMF07XG4gICAgdmFyZ3MgPSBhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoIC0gMSk7XG4gICAgY2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNhbGwoZm4sIHZhcmdzLCBjYWxsYmFjayk7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbnZhciBlcnJvcnMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cbmZ1bmN0aW9uIGZhaWxDaGVjayhFeGNlcHRpb25Db25zdHJ1Y3RvciwgY2FsbGVlLCBtZXNzYWdlRm9ybWF0LCBmb3JtYXRBcmdzKSB7XG4gICAgbWVzc2FnZUZvcm1hdCA9IG1lc3NhZ2VGb3JtYXQgfHwgJyc7XG4gICAgdmFyIG1lc3NhZ2UgPSB1dGlsLmZvcm1hdC5hcHBseSh0aGlzLCBbbWVzc2FnZUZvcm1hdF0uY29uY2F0KGZvcm1hdEFyZ3MpKTtcbiAgICB2YXIgZXJyb3IgPSBuZXcgRXhjZXB0aW9uQ29uc3RydWN0b3IobWVzc2FnZSk7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIGNhbGxlZSk7XG4gICAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGZhaWxBcmd1bWVudENoZWNrKGNhbGxlZSwgbWVzc2FnZSwgZm9ybWF0QXJncykge1xuICAgIGZhaWxDaGVjayhlcnJvcnMuSWxsZWdhbEFyZ3VtZW50RXJyb3IsIGNhbGxlZSwgbWVzc2FnZSwgZm9ybWF0QXJncyk7XG59XG5cbmZ1bmN0aW9uIGZhaWxTdGF0ZUNoZWNrKGNhbGxlZSwgbWVzc2FnZSwgZm9ybWF0QXJncykge1xuICAgIGZhaWxDaGVjayhlcnJvcnMuSWxsZWdhbFN0YXRlRXJyb3IsIGNhbGxlZSwgbWVzc2FnZSwgZm9ybWF0QXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNoZWNrQXJndW1lbnQgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgZmFpbEFyZ3VtZW50Q2hlY2soYXJndW1lbnRzLmNhbGxlZSwgbWVzc2FnZSxcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmNoZWNrU3RhdGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgZmFpbFN0YXRlQ2hlY2soYXJndW1lbnRzLmNhbGxlZSwgbWVzc2FnZSxcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNEZWYgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmYWlsQXJndW1lbnRDaGVjayhhcmd1bWVudHMuY2FsbGVlLCBtZXNzYWdlIHx8XG4gICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0byBiZSBkZWZpbmVkIGJ1dCB3YXMgdW5kZWZpbmVkLicsXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xufTtcblxubW9kdWxlLmV4cG9ydHMuY2hlY2tJc0RlZkFuZE5vdE51bGwgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICAgIC8vIE5vdGUgdGhhdCB1bmRlZmluZWQgPT0gbnVsbC5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZmFpbEFyZ3VtZW50Q2hlY2soYXJndW1lbnRzLmNhbGxlZSwgbWVzc2FnZSB8fFxuICAgICAgICAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgZGVmaW5lZCBhbmQgbm90IG51bGwgYnV0IGdvdCBcIicgK1xuICAgICAgICB0eXBlT2YodmFsdWUpICsgJ1wiLicsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xufTtcblxuLy8gRml4ZWQgdmVyc2lvbiBvZiB0aGUgdHlwZU9mIG9wZXJhdG9yIHdoaWNoIHJldHVybnMgJ251bGwnIGZvciBudWxsIHZhbHVlc1xuLy8gYW5kICdhcnJheScgZm9yIGFycmF5cy5cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuICAgIHZhciBzID0gdHlwZW9mIHZhbHVlO1xuICAgIGlmIChzID09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIHR5cGVDaGVjayhleHBlY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlT2YodmFsdWUpO1xuXG4gICAgICAgIGlmICh0eXBlID09IGV4cGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFpbEFyZ3VtZW50Q2hlY2soYXJndW1lbnRzLmNhbGxlZSwgbWVzc2FnZSB8fFxuICAgICAgICAgICAgJ0V4cGVjdGVkIFwiJyArIGV4cGVjdCArICdcIiBidXQgZ290IFwiJyArIHR5cGUgKyAnXCIuJyxcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xuICAgIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNTdHJpbmcgPSB0eXBlQ2hlY2soJ3N0cmluZycpO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tJc0FycmF5ID0gdHlwZUNoZWNrKCdhcnJheScpO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tJc051bWJlciA9IHR5cGVDaGVjaygnbnVtYmVyJyk7XG5tb2R1bGUuZXhwb3J0cy5jaGVja0lzQm9vbGVhbiA9IHR5cGVDaGVjaygnYm9vbGVhbicpO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tJc0Z1bmN0aW9uID0gdHlwZUNoZWNrKCdmdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tJc09iamVjdCA9IHR5cGVDaGVjaygnb2JqZWN0Jyk7XG4iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIE1hdGhpZXUgVHVyY290dGVcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gSWxsZWdhbEFyZ3VtZW50RXJyb3IobWVzc2FnZSkge1xuICAgIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cbnV0aWwuaW5oZXJpdHMoSWxsZWdhbEFyZ3VtZW50RXJyb3IsIEVycm9yKTtcblxuSWxsZWdhbEFyZ3VtZW50RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSWxsZWdhbEFyZ3VtZW50RXJyb3InO1xuXG5mdW5jdGlvbiBJbGxlZ2FsU3RhdGVFcnJvcihtZXNzYWdlKSB7XG4gICAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxudXRpbC5pbmhlcml0cyhJbGxlZ2FsU3RhdGVFcnJvciwgRXJyb3IpO1xuXG5JbGxlZ2FsU3RhdGVFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbGxlZ2FsU3RhdGVFcnJvcic7XG5cbm1vZHVsZS5leHBvcnRzLklsbGVnYWxTdGF0ZUVycm9yID0gSWxsZWdhbFN0YXRlRXJyb3I7XG5tb2R1bGUuZXhwb3J0cy5JbGxlZ2FsQXJndW1lbnRFcnJvciA9IElsbGVnYWxBcmd1bWVudEVycm9yOyIsIi8vICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIE1hdGhpZXUgVHVyY290dGVcbi8vICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwcmVjb25kID0gcmVxdWlyZSgncHJlY29uZCcpO1xuXG52YXIgQmFja29mZlN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9zdHJhdGVneScpO1xuXG4vLyBFeHBvbmVudGlhbCBiYWNrb2ZmIHN0cmF0ZWd5LlxuZnVuY3Rpb24gRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kob3B0aW9ucykge1xuICAgIEJhY2tvZmZTdHJhdGVneS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuYmFja29mZkRlbGF5XyA9IDA7XG4gICAgdGhpcy5uZXh0QmFja29mZkRlbGF5XyA9IHRoaXMuZ2V0SW5pdGlhbERlbGF5KCk7XG4gICAgdGhpcy5mYWN0b3JfID0gRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kuREVGQVVMVF9GQUNUT1I7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZhY3RvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByZWNvbmQuY2hlY2tBcmd1bWVudChvcHRpb25zLmZhY3RvciA+IDEsXG4gICAgICAgICAgICAnRXhwb25lbnRpYWwgZmFjdG9yIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMSBidXQgZ290ICVzLicsXG4gICAgICAgICAgICBvcHRpb25zLmZhY3Rvcik7XG4gICAgICAgIHRoaXMuZmFjdG9yXyA9IG9wdGlvbnMuZmFjdG9yO1xuICAgIH1cbn1cbnV0aWwuaW5oZXJpdHMoRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3ksIEJhY2tvZmZTdHJhdGVneSk7XG5cbi8vIERlZmF1bHQgbXVsdGlwbGljYXRpb24gZmFjdG9yIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmV4dCBiYWNrb2ZmIGRlbGF5IGZyb21cbi8vIHRoZSBjdXJyZW50IG9uZS4gVGhlIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgYSBjdXN0b20gZmFjdG9yIGFzXG4vLyBwYXJ0IG9mIHRoZSBvcHRpb25zLlxuRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kuREVGQVVMVF9GQUNUT1IgPSAyO1xuXG5FeHBvbmVudGlhbEJhY2tvZmZTdHJhdGVneS5wcm90b3R5cGUubmV4dF8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSBNYXRoLm1pbih0aGlzLm5leHRCYWNrb2ZmRGVsYXlfLCB0aGlzLmdldE1heERlbGF5KCkpO1xuICAgIHRoaXMubmV4dEJhY2tvZmZEZWxheV8gPSB0aGlzLmJhY2tvZmZEZWxheV8gKiB0aGlzLmZhY3Rvcl87XG4gICAgcmV0dXJuIHRoaXMuYmFja29mZkRlbGF5Xztcbn07XG5cbkV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5LnByb3RvdHlwZS5yZXNldF8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSAwO1xuICAgIHRoaXMubmV4dEJhY2tvZmZEZWxheV8gPSB0aGlzLmdldEluaXRpYWxEZWxheSgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeHBvbmVudGlhbEJhY2tvZmZTdHJhdGVneTtcbiIsIi8vICAgICAgQ29weXJpZ2h0IChjKSAyMDEyIE1hdGhpZXUgVHVyY290dGVcbi8vICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG52YXIgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJyk7XG52YXIgcHJlY29uZCA9IHJlcXVpcmUoJ3ByZWNvbmQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgQmFja29mZiA9IHJlcXVpcmUoJy4vYmFja29mZicpO1xudmFyIEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneSA9IHJlcXVpcmUoJy4vc3RyYXRlZ3kvZmlib25hY2NpJyk7XG5cbi8vIFdyYXBzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIGEgYmFja29mZiBsb29wLlxuZnVuY3Rpb24gRnVuY3Rpb25DYWxsKGZuLCBhcmdzLCBjYWxsYmFjaykge1xuICAgIGV2ZW50cy5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIHByZWNvbmQuY2hlY2tJc0Z1bmN0aW9uKGZuLCAnRXhwZWN0ZWQgZm4gdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICBwcmVjb25kLmNoZWNrSXNBcnJheShhcmdzLCAnRXhwZWN0ZWQgYXJncyB0byBiZSBhbiBhcnJheS4nKTtcbiAgICBwcmVjb25kLmNoZWNrSXNGdW5jdGlvbihjYWxsYmFjaywgJ0V4cGVjdGVkIGNhbGxiYWNrIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uXyA9IGZuO1xuICAgIHRoaXMuYXJndW1lbnRzXyA9IGFyZ3M7XG4gICAgdGhpcy5jYWxsYmFja18gPSBjYWxsYmFjaztcbiAgICB0aGlzLmxhc3RSZXN1bHRfID0gW107XG4gICAgdGhpcy5udW1SZXRyaWVzXyA9IDA7XG5cbiAgICB0aGlzLmJhY2tvZmZfID0gbnVsbDtcbiAgICB0aGlzLnN0cmF0ZWd5XyA9IG51bGw7XG4gICAgdGhpcy5mYWlsQWZ0ZXJfID0gLTE7XG4gICAgdGhpcy5yZXRyeVByZWRpY2F0ZV8gPSBGdW5jdGlvbkNhbGwuREVGQVVMVF9SRVRSWV9QUkVESUNBVEVfO1xuXG4gICAgdGhpcy5zdGF0ZV8gPSBGdW5jdGlvbkNhbGwuU3RhdGVfLlBFTkRJTkc7XG59XG51dGlsLmluaGVyaXRzKEZ1bmN0aW9uQ2FsbCwgZXZlbnRzLkV2ZW50RW1pdHRlcik7XG5cbi8vIFN0YXRlcyBpbiB3aGljaCB0aGUgY2FsbCBjYW4gYmUuXG5GdW5jdGlvbkNhbGwuU3RhdGVfID0ge1xuICAgIC8vIENhbGwgaXNuJ3Qgc3RhcnRlZCB5ZXQuXG4gICAgUEVORElORzogMCxcbiAgICAvLyBDYWxsIGlzIGluIHByb2dyZXNzLlxuICAgIFJVTk5JTkc6IDEsXG4gICAgLy8gQ2FsbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IHdoaWNoIG1lYW5zIHRoYXQgZWl0aGVyIHRoZSB3cmFwcGVkIGZ1bmN0aW9uXG4gICAgLy8gcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5IG9yIHRoZSBtYXhpbWFsIG51bWJlciBvZiBiYWNrb2ZmcyB3YXMgcmVhY2hlZC5cbiAgICBDT01QTEVURUQ6IDIsXG4gICAgLy8gVGhlIGNhbGwgd2FzIGFib3J0ZWQuXG4gICAgQUJPUlRFRDogM1xufTtcblxuLy8gVGhlIGRlZmF1bHQgcmV0cnkgcHJlZGljYXRlIHdoaWNoIGNvbnNpZGVycyBhbnkgZXJyb3IgYXMgcmV0cmlhYmxlLlxuRnVuY3Rpb25DYWxsLkRFRkFVTFRfUkVUUllfUFJFRElDQVRFXyA9IGZ1bmN0aW9uKGVycikge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIENoZWNrcyB3aGV0aGVyIHRoZSBjYWxsIGlzIHBlbmRpbmcuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlXyA9PSBGdW5jdGlvbkNhbGwuU3RhdGVfLlBFTkRJTkc7XG59O1xuXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBpbiBwcm9ncmVzcy5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuaXNSdW5uaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVfID09IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uUlVOTklORztcbn07XG5cbi8vIENoZWNrcyB3aGV0aGVyIHRoZSBjYWxsIGlzIGNvbXBsZXRlZC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuaXNDb21wbGV0ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZV8gPT0gRnVuY3Rpb25DYWxsLlN0YXRlXy5DT01QTEVURUQ7XG59O1xuXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBhYm9ydGVkLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5pc0Fib3J0ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZV8gPT0gRnVuY3Rpb25DYWxsLlN0YXRlXy5BQk9SVEVEO1xufTtcblxuLy8gU2V0cyB0aGUgYmFja29mZiBzdHJhdGVneSB0byB1c2UuIENhbiBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNhbGwgaXNcbi8vIHN0YXJ0ZWQgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuc2V0U3RyYXRlZ3kgPSBmdW5jdGlvbihzdHJhdGVneSkge1xuICAgIHByZWNvbmQuY2hlY2tTdGF0ZSh0aGlzLmlzUGVuZGluZygpLCAnRnVuY3Rpb25DYWxsIGluIHByb2dyZXNzLicpO1xuICAgIHRoaXMuc3RyYXRlZ3lfID0gc3RyYXRlZ3k7XG4gICAgcmV0dXJuIHRoaXM7IC8vIFJldHVybiB0aGlzIGZvciBjaGFpbmluZy5cbn07XG5cbi8vIFNldHMgdGhlIHByZWRpY2F0ZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGVycm9yc1xuLy8gcmV0dXJuZWQgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiBzaG91bGQgYmUgcmV0cmllZCBvciBub3QsIGUuZy4gYVxuLy8gbmV0d29yayBlcnJvciB3b3VsZCBiZSByZXRyaWFibGUgd2hpbGUgYSB0eXBlIGVycm9yIHdvdWxkIHN0b3AgdGhlXG4vLyBmdW5jdGlvbiBjYWxsLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5yZXRyeUlmID0gZnVuY3Rpb24ocmV0cnlQcmVkaWNhdGUpIHtcbiAgICBwcmVjb25kLmNoZWNrU3RhdGUodGhpcy5pc1BlbmRpbmcoKSwgJ0Z1bmN0aW9uQ2FsbCBpbiBwcm9ncmVzcy4nKTtcbiAgICB0aGlzLnJldHJ5UHJlZGljYXRlXyA9IHJldHJ5UHJlZGljYXRlO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLy8gUmV0dXJucyBhbGwgaW50ZXJtZWRpYXJ5IHJlc3VsdHMgcmV0dXJuZWQgYnkgdGhlIHdyYXBwZWQgZnVuY3Rpb24gc2luY2Vcbi8vIHRoZSBpbml0aWFsIGNhbGwuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmdldExhc3RSZXN1bHQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0UmVzdWx0Xy5jb25jYXQoKTtcbn07XG5cbi8vIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiBjYWxsIHdhcyByZXRyaWVkLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5nZXROdW1SZXRyaWVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubnVtUmV0cmllc187XG59O1xuXG4vLyBTZXRzIHRoZSBiYWNrb2ZmIGxpbWl0LlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5mYWlsQWZ0ZXIgPSBmdW5jdGlvbihtYXhOdW1iZXJPZlJldHJ5KSB7XG4gICAgcHJlY29uZC5jaGVja1N0YXRlKHRoaXMuaXNQZW5kaW5nKCksICdGdW5jdGlvbkNhbGwgaW4gcHJvZ3Jlc3MuJyk7XG4gICAgdGhpcy5mYWlsQWZ0ZXJfID0gbWF4TnVtYmVyT2ZSZXRyeTtcbiAgICByZXR1cm4gdGhpczsgLy8gUmV0dXJuIHRoaXMgZm9yIGNoYWluaW5nLlxufTtcblxuLy8gQWJvcnRzIHRoZSBjYWxsLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkKCkgfHwgdGhpcy5pc0Fib3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUnVubmluZygpKSB7XG4gICAgICAgIHRoaXMuYmFja29mZl8ucmVzZXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlXyA9IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uQUJPUlRFRDtcbiAgICB0aGlzLmxhc3RSZXN1bHRfID0gW25ldyBFcnJvcignQmFja29mZiBhYm9ydGVkLicpXTtcbiAgICB0aGlzLmVtaXQoJ2Fib3J0Jyk7XG4gICAgdGhpcy5kb0NhbGxiYWNrXygpO1xufTtcblxuLy8gSW5pdGlhdGVzIHRoZSBjYWxsIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLiBBY2NlcHRzIGFuIG9wdGlvbmFsIGZhY3Rvcnlcbi8vIGZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBiYWNrb2ZmIGluc3RhbmNlOyB1c2VkIHdoZW4gdGVzdGluZy5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihiYWNrb2ZmRmFjdG9yeSkge1xuICAgIHByZWNvbmQuY2hlY2tTdGF0ZSghdGhpcy5pc0Fib3J0ZWQoKSwgJ0Z1bmN0aW9uQ2FsbCBpcyBhYm9ydGVkLicpO1xuICAgIHByZWNvbmQuY2hlY2tTdGF0ZSh0aGlzLmlzUGVuZGluZygpLCAnRnVuY3Rpb25DYWxsIGFscmVhZHkgc3RhcnRlZC4nKTtcblxuICAgIHZhciBzdHJhdGVneSA9IHRoaXMuc3RyYXRlZ3lfIHx8IG5ldyBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3koKTtcblxuICAgIHRoaXMuYmFja29mZl8gPSBiYWNrb2ZmRmFjdG9yeSA/XG4gICAgICAgIGJhY2tvZmZGYWN0b3J5KHN0cmF0ZWd5KSA6XG4gICAgICAgIG5ldyBCYWNrb2ZmKHN0cmF0ZWd5KTtcblxuICAgIHRoaXMuYmFja29mZl8ub24oJ3JlYWR5JywgdGhpcy5kb0NhbGxfLmJpbmQodGhpcywgdHJ1ZSAvKiBpc1JldHJ5ICovKSk7XG4gICAgdGhpcy5iYWNrb2ZmXy5vbignZmFpbCcsIHRoaXMuZG9DYWxsYmFja18uYmluZCh0aGlzKSk7XG4gICAgdGhpcy5iYWNrb2ZmXy5vbignYmFja29mZicsIHRoaXMuaGFuZGxlQmFja29mZl8uYmluZCh0aGlzKSk7XG5cbiAgICBpZiAodGhpcy5mYWlsQWZ0ZXJfID4gMCkge1xuICAgICAgICB0aGlzLmJhY2tvZmZfLmZhaWxBZnRlcih0aGlzLmZhaWxBZnRlcl8pO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGVfID0gRnVuY3Rpb25DYWxsLlN0YXRlXy5SVU5OSU5HO1xuICAgIHRoaXMuZG9DYWxsXyhmYWxzZSAvKiBpc1JldHJ5ICovKTtcbn07XG5cbi8vIENhbGxzIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5kb0NhbGxfID0gZnVuY3Rpb24oaXNSZXRyeSkge1xuICAgIGlmIChpc1JldHJ5KSB7XG4gICAgICAgIHRoaXMubnVtUmV0cmllc18rKztcbiAgICB9XG4gICAgdmFyIGV2ZW50QXJncyA9IFsnY2FsbCddLmNvbmNhdCh0aGlzLmFyZ3VtZW50c18pO1xuICAgIGV2ZW50cy5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgZXZlbnRBcmdzKTtcbiAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLmhhbmRsZUZ1bmN0aW9uQ2FsbGJhY2tfLmJpbmQodGhpcyk7XG4gICAgdGhpcy5mdW5jdGlvbl8uYXBwbHkobnVsbCwgdGhpcy5hcmd1bWVudHNfLmNvbmNhdChjYWxsYmFjaykpO1xufTtcblxuLy8gQ2FsbHMgdGhlIHdyYXBwZWQgZnVuY3Rpb24ncyBjYWxsYmFjayB3aXRoIHRoZSBsYXN0IHJlc3VsdCByZXR1cm5lZCBieSB0aGVcbi8vIHdyYXBwZWQgZnVuY3Rpb24uXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmRvQ2FsbGJhY2tfID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jYWxsYmFja18uYXBwbHkobnVsbCwgdGhpcy5sYXN0UmVzdWx0Xyk7XG59O1xuXG4vLyBIYW5kbGVzIHdyYXBwZWQgZnVuY3Rpb24ncyBjb21wbGV0aW9uLiBUaGlzIG1ldGhvZCBhY3RzIGFzIGEgcmVwbGFjZW1lbnRcbi8vIGZvciB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgZnVuY3Rpb24uXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmhhbmRsZUZ1bmN0aW9uQ2FsbGJhY2tfID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNBYm9ydGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB0aGlzLmxhc3RSZXN1bHRfID0gYXJnczsgLy8gU2F2ZSBsYXN0IGNhbGxiYWNrIGFyZ3VtZW50cy5cbiAgICBldmVudHMuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIFsnY2FsbGJhY2snXS5jb25jYXQoYXJncykpO1xuXG4gICAgdmFyIGVyciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyciAmJiB0aGlzLnJldHJ5UHJlZGljYXRlXyhlcnIpKSB7XG4gICAgICAgIHRoaXMuYmFja29mZl8uYmFja29mZihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGVfID0gRnVuY3Rpb25DYWxsLlN0YXRlXy5DT01QTEVURUQ7XG4gICAgICAgIHRoaXMuZG9DYWxsYmFja18oKTtcbiAgICB9XG59O1xuXG4vLyBIYW5kbGVzIHRoZSBiYWNrb2ZmIGV2ZW50IGJ5IHJlZW1pdHRpbmcgaXQuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmhhbmRsZUJhY2tvZmZfID0gZnVuY3Rpb24obnVtYmVyLCBkZWxheSwgZXJyKSB7XG4gICAgdGhpcy5lbWl0KCdiYWNrb2ZmJywgbnVtYmVyLCBkZWxheSwgZXJyKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb25DYWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICh0YXNrcywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9ICgwLCBfb25jZTIuZGVmYXVsdCkoY2FsbGJhY2sgfHwgX25vb3AyLmRlZmF1bHQpO1xuICAgIGlmICghKDAsIF9pc0FycmF5Mi5kZWZhdWx0KSh0YXNrcykpIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIHdhdGVyZmFsbCBtdXN0IGJlIGFuIGFycmF5IG9mIGZ1bmN0aW9ucycpKTtcbiAgICBpZiAoIXRhc2tzLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgdmFyIHRhc2tJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBuZXh0VGFzayhhcmdzKSB7XG4gICAgICAgIHZhciB0YXNrID0gKDAsIF93cmFwQXN5bmMyLmRlZmF1bHQpKHRhc2tzW3Rhc2tJbmRleCsrXSk7XG4gICAgICAgIGFyZ3MucHVzaCgoMCwgX29ubHlPbmNlMi5kZWZhdWx0KShuZXh0KSk7XG4gICAgICAgIHRhc2suYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV4dChlcnIgLyosIC4uLmFyZ3MqLykge1xuICAgICAgICBpZiAoZXJyIHx8IHRhc2tJbmRleCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0VGFzaygoMCwgX3NsaWNlMi5kZWZhdWx0KShhcmd1bWVudHMsIDEpKTtcbiAgICB9XG5cbiAgICBuZXh0VGFzayhbXSk7XG59O1xuXG52YXIgX2lzQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheScpO1xuXG52YXIgX2lzQXJyYXkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNBcnJheSk7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoJ2xvZGFzaC9ub29wJyk7XG5cbnZhciBfbm9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ub29wKTtcblxudmFyIF9vbmNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9vbmNlJyk7XG5cbnZhciBfb25jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vbmNlKTtcblxudmFyIF9zbGljZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc2xpY2UnKTtcblxudmFyIF9zbGljZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZSk7XG5cbnZhciBfb25seU9uY2UgPSByZXF1aXJlKCcuL2ludGVybmFsL29ubHlPbmNlJyk7XG5cbnZhciBfb25seU9uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25seU9uY2UpO1xuXG52YXIgX3dyYXBBc3luYyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd3JhcEFzeW5jJyk7XG5cbnZhciBfd3JhcEFzeW5jMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyYXBBc3luYyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGB0YXNrc2AgYXJyYXkgb2YgZnVuY3Rpb25zIGluIHNlcmllcywgZWFjaCBwYXNzaW5nIHRoZWlyIHJlc3VsdHMgdG9cbiAqIHRoZSBuZXh0IGluIHRoZSBhcnJheS4gSG93ZXZlciwgaWYgYW55IG9mIHRoZSBgdGFza3NgIHBhc3MgYW4gZXJyb3IgdG8gdGhlaXJcbiAqIG93biBjYWxsYmFjaywgdGhlIG5leHQgZnVuY3Rpb24gaXMgbm90IGV4ZWN1dGVkLCBhbmQgdGhlIG1haW4gYGNhbGxiYWNrYCBpc1xuICogaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICpcbiAqIEBuYW1lIHdhdGVyZmFsbFxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICogQG1ldGhvZFxuICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICogQHBhcmFtIHtBcnJheX0gdGFza3MgLSBBbiBhcnJheSBvZiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufVxuICogdG8gcnVuLlxuICogRWFjaCBmdW5jdGlvbiBzaG91bGQgY29tcGxldGUgd2l0aCBhbnkgbnVtYmVyIG9mIGByZXN1bHRgIHZhbHVlcy5cbiAqIFRoZSBgcmVzdWx0YCB2YWx1ZXMgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzLCBpbiBvcmRlciwgdG8gdGhlIG5leHQgdGFzay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBydW4gb25jZSBhbGwgdGhlXG4gKiBmdW5jdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIFRoaXMgd2lsbCBiZSBwYXNzZWQgdGhlIHJlc3VsdHMgb2YgdGhlIGxhc3QgdGFzaydzXG4gKiBjYWxsYmFjay4gSW52b2tlZCB3aXRoIChlcnIsIFtyZXN1bHRzXSkuXG4gKiBAcmV0dXJucyB1bmRlZmluZWRcbiAqIEBleGFtcGxlXG4gKlxuICogYXN5bmMud2F0ZXJmYWxsKFtcbiAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICogICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJywgJ3R3bycpO1xuICogICAgIH0sXG4gKiAgICAgZnVuY3Rpb24oYXJnMSwgYXJnMiwgY2FsbGJhY2spIHtcbiAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICdvbmUnIGFuZCBhcmcyIG5vdyBlcXVhbHMgJ3R3bydcbiAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gKiAgICAgfSxcbiAqICAgICBmdW5jdGlvbihhcmcxLCBjYWxsYmFjaykge1xuICogICAgICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ3RocmVlJ1xuICogICAgICAgICBjYWxsYmFjayhudWxsLCAnZG9uZScpO1xuICogICAgIH1cbiAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICogICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzICdkb25lJ1xuICogfSk7XG4gKlxuICogLy8gT3IsIHdpdGggbmFtZWQgZnVuY3Rpb25zOlxuICogYXN5bmMud2F0ZXJmYWxsKFtcbiAqICAgICBteUZpcnN0RnVuY3Rpb24sXG4gKiAgICAgbXlTZWNvbmRGdW5jdGlvbixcbiAqICAgICBteUxhc3RGdW5jdGlvbixcbiAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICogICAgIC8vIHJlc3VsdCBub3cgZXF1YWxzICdkb25lJ1xuICogfSk7XG4gKiBmdW5jdGlvbiBteUZpcnN0RnVuY3Rpb24oY2FsbGJhY2spIHtcbiAqICAgICBjYWxsYmFjayhudWxsLCAnb25lJywgJ3R3bycpO1xuICogfVxuICogZnVuY3Rpb24gbXlTZWNvbmRGdW5jdGlvbihhcmcxLCBhcmcyLCBjYWxsYmFjaykge1xuICogICAgIC8vIGFyZzEgbm93IGVxdWFscyAnb25lJyBhbmQgYXJnMiBub3cgZXF1YWxzICd0d28nXG4gKiAgICAgY2FsbGJhY2sobnVsbCwgJ3RocmVlJyk7XG4gKiB9XG4gKiBmdW5jdGlvbiBteUxhc3RGdW5jdGlvbihhcmcxLCBjYWxsYmFjaykge1xuICogICAgIC8vIGFyZzEgbm93IGVxdWFscyAndGhyZWUnXG4gKiAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAqIH1cbiAqLyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHBhcmFsbGVsTGltaXQ7XG5cbnZhciBfZWFjaE9mID0gcmVxdWlyZSgnLi9lYWNoT2YnKTtcblxudmFyIF9lYWNoT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWFjaE9mKTtcblxudmFyIF9wYXJhbGxlbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvcGFyYWxsZWwnKTtcblxudmFyIF9wYXJhbGxlbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYXJhbGxlbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogUnVuIHRoZSBgdGFza3NgIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIGluIHBhcmFsbGVsLCB3aXRob3V0IHdhaXRpbmcgdW50aWxcbiAqIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBoYXMgY29tcGxldGVkLiBJZiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBwYXNzIGFuIGVycm9yIHRvXG4gKiBpdHMgY2FsbGJhY2ssIHRoZSBtYWluIGBjYWxsYmFja2AgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZVxuICogZXJyb3IuIE9uY2UgdGhlIGB0YXNrc2AgaGF2ZSBjb21wbGV0ZWQsIHRoZSByZXN1bHRzIGFyZSBwYXNzZWQgdG8gdGhlIGZpbmFsXG4gKiBgY2FsbGJhY2tgIGFzIGFuIGFycmF5LlxuICpcbiAqICoqTm90ZToqKiBgcGFyYWxsZWxgIGlzIGFib3V0IGtpY2tpbmctb2ZmIEkvTyB0YXNrcyBpbiBwYXJhbGxlbCwgbm90IGFib3V0XG4gKiBwYXJhbGxlbCBleGVjdXRpb24gb2YgY29kZS4gIElmIHlvdXIgdGFza3MgZG8gbm90IHVzZSBhbnkgdGltZXJzIG9yIHBlcmZvcm1cbiAqIGFueSBJL08sIHRoZXkgd2lsbCBhY3R1YWxseSBiZSBleGVjdXRlZCBpbiBzZXJpZXMuICBBbnkgc3luY2hyb25vdXMgc2V0dXBcbiAqIHNlY3Rpb25zIGZvciBlYWNoIHRhc2sgd2lsbCBoYXBwZW4gb25lIGFmdGVyIHRoZSBvdGhlci4gIEphdmFTY3JpcHQgcmVtYWluc1xuICogc2luZ2xlLXRocmVhZGVkLlxuICpcbiAqICoqSGludDoqKiBVc2UgW2ByZWZsZWN0YF17QGxpbmsgbW9kdWxlOlV0aWxzLnJlZmxlY3R9IHRvIGNvbnRpbnVlIHRoZVxuICogZXhlY3V0aW9uIG9mIG90aGVyIHRhc2tzIHdoZW4gYSB0YXNrIGZhaWxzLlxuICpcbiAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBFYWNoIHByb3BlcnR5IHdpbGxcbiAqIGJlIHJ1biBhcyBhIGZ1bmN0aW9uIGFuZCB0aGUgcmVzdWx0cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZmluYWwgYGNhbGxiYWNrYFxuICogYXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkuIFRoaXMgY2FuIGJlIGEgbW9yZSByZWFkYWJsZSB3YXkgb2YgaGFuZGxpbmdcbiAqIHJlc3VsdHMgZnJvbSB7QGxpbmsgYXN5bmMucGFyYWxsZWx9LlxuICpcbiAqIEBuYW1lIHBhcmFsbGVsXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNvbnRyb2xGbG93XG4gKiBAbWV0aG9kXG4gKiBAY2F0ZWdvcnkgQ29udHJvbCBGbG93XG4gKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfE9iamVjdH0gdGFza3MgLSBBIGNvbGxlY3Rpb24gb2ZcbiAqIFthc3luYyBmdW5jdGlvbnNde0BsaW5rIEFzeW5jRnVuY3Rpb259IHRvIHJ1bi5cbiAqIEVhY2ggYXN5bmMgZnVuY3Rpb24gY2FuIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVzdWx0cyBhcnJheVxuICogKG9yIG9iamVjdCkgY29udGFpbmluZyBhbGwgdGhlIHJlc3VsdCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0YXNrIGNhbGxiYWNrcy5cbiAqIEludm9rZWQgd2l0aCAoZXJyLCByZXN1bHRzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXN5bmMucGFyYWxsZWwoW1xuICogICAgIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAnb25lJyk7XG4gKiAgICAgICAgIH0sIDIwMCk7XG4gKiAgICAgfSxcbiAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ3R3bycpO1xuICogICAgICAgICB9LCAxMDApO1xuICogICAgIH1cbiAqIF0sXG4gKiAvLyBvcHRpb25hbCBjYWxsYmFja1xuICogZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gKiAgICAgLy8gdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBlcXVhbCBbJ29uZScsJ3R3byddIGV2ZW4gdGhvdWdoXG4gKiAgICAgLy8gdGhlIHNlY29uZCBmdW5jdGlvbiBoYWQgYSBzaG9ydGVyIHRpbWVvdXQuXG4gKiB9KTtcbiAqXG4gKiAvLyBhbiBleGFtcGxlIHVzaW5nIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5XG4gKiBhc3luYy5wYXJhbGxlbCh7XG4gKiAgICAgb25lOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMSk7XG4gKiAgICAgICAgIH0sIDIwMCk7XG4gKiAgICAgfSxcbiAqICAgICB0d286IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gKiAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCAyKTtcbiAqICAgICAgICAgfSwgMTAwKTtcbiAqICAgICB9XG4gKiB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBlcXVhbHMgdG86IHtvbmU6IDEsIHR3bzogMn1cbiAqIH0pO1xuICovXG5mdW5jdGlvbiBwYXJhbGxlbExpbWl0KHRhc2tzLCBjYWxsYmFjaykge1xuICAoMCwgX3BhcmFsbGVsMi5kZWZhdWx0KShfZWFjaE9mMi5kZWZhdWx0LCB0YXNrcywgY2FsbGJhY2spO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBfcGFyYWxsZWw7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoJ2xvZGFzaC9ub29wJyk7XG5cbnZhciBfbm9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ub29wKTtcblxudmFyIF9pc0FycmF5TGlrZSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5TGlrZScpO1xuXG52YXIgX2lzQXJyYXlMaWtlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzQXJyYXlMaWtlKTtcblxudmFyIF9zbGljZSA9IHJlcXVpcmUoJy4vc2xpY2UnKTtcblxudmFyIF9zbGljZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZSk7XG5cbnZhciBfd3JhcEFzeW5jID0gcmVxdWlyZSgnLi93cmFwQXN5bmMnKTtcblxudmFyIF93cmFwQXN5bmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd3JhcEFzeW5jKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX3BhcmFsbGVsKGVhY2hmbiwgdGFza3MsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBfbm9vcDIuZGVmYXVsdDtcbiAgICB2YXIgcmVzdWx0cyA9ICgwLCBfaXNBcnJheUxpa2UyLmRlZmF1bHQpKHRhc2tzKSA/IFtdIDoge307XG5cbiAgICBlYWNoZm4odGFza3MsIGZ1bmN0aW9uICh0YXNrLCBrZXksIGNhbGxiYWNrKSB7XG4gICAgICAgICgwLCBfd3JhcEFzeW5jMi5kZWZhdWx0KSh0YXNrKShmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICgwLCBfc2xpY2UyLmRlZmF1bHQpKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzW2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0cyk7XG4gICAgfSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCJjb25zdCBldGhVdGlsID0gcmVxdWlyZSgnZXRoZXJldW1qcy11dGlsJylcbmNvbnN0IGV0aEFiaSA9IHJlcXVpcmUoJ2V0aGVyZXVtanMtYWJpJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgY29uY2F0U2lnOiBmdW5jdGlvbiAodiwgciwgcykge1xuICAgIGNvbnN0IHJTaWcgPSBldGhVdGlsLmZyb21TaWduZWQocilcbiAgICBjb25zdCBzU2lnID0gZXRoVXRpbC5mcm9tU2lnbmVkKHMpXG4gICAgY29uc3QgdlNpZyA9IGV0aFV0aWwuYnVmZmVyVG9JbnQodilcbiAgICBjb25zdCByU3RyID0gcGFkV2l0aFplcm9lcyhldGhVdGlsLnRvVW5zaWduZWQoclNpZykudG9TdHJpbmcoJ2hleCcpLCA2NClcbiAgICBjb25zdCBzU3RyID0gcGFkV2l0aFplcm9lcyhldGhVdGlsLnRvVW5zaWduZWQoc1NpZykudG9TdHJpbmcoJ2hleCcpLCA2NClcbiAgICBjb25zdCB2U3RyID0gZXRoVXRpbC5zdHJpcEhleFByZWZpeChldGhVdGlsLmludFRvSGV4KHZTaWcpKVxuICAgIHJldHVybiBldGhVdGlsLmFkZEhleFByZWZpeChyU3RyLmNvbmNhdChzU3RyLCB2U3RyKSkudG9TdHJpbmcoJ2hleCcpXG4gIH0sXG5cbiAgbm9ybWFsaXplOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm5cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBldGhVdGlsLnRvQnVmZmVyKGlucHV0KVxuICAgICAgaW5wdXQgPSBldGhVdGlsLmJ1ZmZlclRvSGV4KGJ1ZmZlcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG1zZyA9ICdldGgtc2lnLXV0aWwubm9ybWFsaXplKCkgcmVxdWlyZXMgaGV4IHN0cmluZyBvciBpbnRlZ2VyIGlucHV0LidcbiAgICAgIG1zZyArPSAnIHJlY2VpdmVkICcgKyAodHlwZW9mIGlucHV0KSArICc6ICcgKyBpbnB1dFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZylcbiAgICB9XG5cbiAgICByZXR1cm4gZXRoVXRpbC5hZGRIZXhQcmVmaXgoaW5wdXQudG9Mb3dlckNhc2UoKSlcbiAgfSxcblxuICBwZXJzb25hbFNpZ246IGZ1bmN0aW9uIChwcml2YXRlS2V5LCBtc2dQYXJhbXMpIHtcbiAgICB2YXIgbWVzc2FnZSA9IGV0aFV0aWwudG9CdWZmZXIobXNnUGFyYW1zLmRhdGEpXG4gICAgdmFyIG1zZ0hhc2ggPSBldGhVdGlsLmhhc2hQZXJzb25hbE1lc3NhZ2UobWVzc2FnZSlcbiAgICB2YXIgc2lnID0gZXRoVXRpbC5lY3NpZ24obXNnSGFzaCwgcHJpdmF0ZUtleSlcbiAgICB2YXIgc2VyaWFsaXplZCA9IGV0aFV0aWwuYnVmZmVyVG9IZXgodGhpcy5jb25jYXRTaWcoc2lnLnYsIHNpZy5yLCBzaWcucykpXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRcbiAgfSxcblxuICByZWNvdmVyUGVyc29uYWxTaWduYXR1cmU6IGZ1bmN0aW9uIChtc2dQYXJhbXMpIHtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBnZXRQdWJsaWNLZXlGb3IobXNnUGFyYW1zKVxuICAgIGNvbnN0IHNlbmRlciA9IGV0aFV0aWwucHVibGljVG9BZGRyZXNzKHB1YmxpY0tleSlcbiAgICBjb25zdCBzZW5kZXJIZXggPSBldGhVdGlsLmJ1ZmZlclRvSGV4KHNlbmRlcilcbiAgICByZXR1cm4gc2VuZGVySGV4XG4gIH0sXG5cbiAgZXh0cmFjdFB1YmxpY0tleTogZnVuY3Rpb24gKG1zZ1BhcmFtcykge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IGdldFB1YmxpY0tleUZvcihtc2dQYXJhbXMpXG4gICAgcmV0dXJuICcweCcgKyBwdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpXG4gIH0sXG5cbiAgdHlwZWRTaWduYXR1cmVIYXNoOiBmdW5jdGlvbiAodHlwZWREYXRhKSB7XG4gICAgY29uc3QgaGFzaEJ1ZmZlciA9IHR5cGVkU2lnbmF0dXJlSGFzaCh0eXBlZERhdGEpXG4gICAgcmV0dXJuIGV0aFV0aWwuYnVmZmVyVG9IZXgoaGFzaEJ1ZmZlcilcbiAgfSxcblxuICBzaWduVHlwZWREYXRhOiBmdW5jdGlvbiAocHJpdmF0ZUtleSwgbXNnUGFyYW1zKSB7XG4gICAgY29uc3QgbXNnSGFzaCA9IHR5cGVkU2lnbmF0dXJlSGFzaChtc2dQYXJhbXMuZGF0YSlcbiAgICBjb25zdCBzaWcgPSBldGhVdGlsLmVjc2lnbihtc2dIYXNoLCBwcml2YXRlS2V5KVxuICAgIHJldHVybiBldGhVdGlsLmJ1ZmZlclRvSGV4KHRoaXMuY29uY2F0U2lnKHNpZy52LCBzaWcuciwgc2lnLnMpKVxuICB9LFxuXG4gIHJlY292ZXJUeXBlZFNpZ25hdHVyZTogZnVuY3Rpb24gKG1zZ1BhcmFtcykge1xuICAgIGNvbnN0IG1zZ0hhc2ggPSB0eXBlZFNpZ25hdHVyZUhhc2gobXNnUGFyYW1zLmRhdGEpXG4gICAgY29uc3QgcHVibGljS2V5ID0gcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoLCBtc2dQYXJhbXMuc2lnKVxuICAgIGNvbnN0IHNlbmRlciA9IGV0aFV0aWwucHVibGljVG9BZGRyZXNzKHB1YmxpY0tleSlcbiAgICByZXR1cm4gZXRoVXRpbC5idWZmZXJUb0hleChzZW5kZXIpXG4gIH1cblxufVxuXG4vKipcbiAqIEBwYXJhbSB0eXBlZERhdGEgLSBBcnJheSBvZiBkYXRhIGFsb25nIHdpdGggdHlwZXMsIGFzIHBlciBFSVA3MTIuXG4gKiBAcmV0dXJucyBCdWZmZXJcbiAqL1xuZnVuY3Rpb24gdHlwZWRTaWduYXR1cmVIYXNoKHR5cGVkRGF0YSkge1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignRXhwZWN0IGFyZ3VtZW50IHRvIGJlIG5vbi1lbXB0eSBhcnJheScpXG4gIGlmICh0eXBlb2YgdHlwZWREYXRhICE9PSAnb2JqZWN0JyB8fCAhdHlwZWREYXRhLmxlbmd0aCkgdGhyb3cgZXJyb3JcblxuICBjb25zdCBkYXRhID0gdHlwZWREYXRhLm1hcChmdW5jdGlvbiAoZSkge1xuICAgIHJldHVybiBlLnR5cGUgPT09ICdieXRlcycgPyBldGhVdGlsLnRvQnVmZmVyKGUudmFsdWUpIDogZS52YWx1ZVxuICB9KVxuICBjb25zdCB0eXBlcyA9IHR5cGVkRGF0YS5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUudHlwZSB9KVxuICBjb25zdCBzY2hlbWEgPSB0eXBlZERhdGEubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFlLm5hbWUpIHRocm93IGVycm9yXG4gICAgcmV0dXJuIGUudHlwZSArICcgJyArIGUubmFtZVxuICB9KVxuXG4gIHJldHVybiBldGhBYmkuc29saWRpdHlTSEEzKFxuICAgIFsnYnl0ZXMzMicsICdieXRlczMyJ10sXG4gICAgW1xuICAgICAgZXRoQWJpLnNvbGlkaXR5U0hBMyhuZXcgQXJyYXkodHlwZWREYXRhLmxlbmd0aCkuZmlsbCgnc3RyaW5nJyksIHNjaGVtYSksXG4gICAgICBldGhBYmkuc29saWRpdHlTSEEzKHR5cGVzLCBkYXRhKVxuICAgIF1cbiAgKVxufVxuXG5mdW5jdGlvbiByZWNvdmVyUHVibGljS2V5KGhhc2gsIHNpZykge1xuICBjb25zdCBzaWduYXR1cmUgPSBldGhVdGlsLnRvQnVmZmVyKHNpZylcbiAgY29uc3Qgc2lnUGFyYW1zID0gZXRoVXRpbC5mcm9tUnBjU2lnKHNpZ25hdHVyZSlcbiAgcmV0dXJuIGV0aFV0aWwuZWNyZWNvdmVyKGhhc2gsIHNpZ1BhcmFtcy52LCBzaWdQYXJhbXMuciwgc2lnUGFyYW1zLnMpXG59XG5cbmZ1bmN0aW9uIGdldFB1YmxpY0tleUZvciAobXNnUGFyYW1zKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBldGhVdGlsLnRvQnVmZmVyKG1zZ1BhcmFtcy5kYXRhKVxuICBjb25zdCBtc2dIYXNoID0gZXRoVXRpbC5oYXNoUGVyc29uYWxNZXNzYWdlKG1lc3NhZ2UpXG4gIHJldHVybiByZWNvdmVyUHVibGljS2V5KG1zZ0hhc2gsIG1zZ1BhcmFtcy5zaWcpXG59XG5cblxuZnVuY3Rpb24gcGFkV2l0aFplcm9lcyAobnVtYmVyLCBsZW5ndGgpIHtcbiAgdmFyIG15U3RyaW5nID0gJycgKyBudW1iZXJcbiAgd2hpbGUgKG15U3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIG15U3RyaW5nID0gJzAnICsgbXlTdHJpbmdcbiAgfVxuICByZXR1cm4gbXlTdHJpbmdcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xyXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ2V0aGVyZXVtanMtdXRpbCcpXHJcbmNvbnN0IEJOID0gcmVxdWlyZSgnYm4uanMnKVxyXG5cclxudmFyIEFCSSA9IGZ1bmN0aW9uICgpIHtcclxufVxyXG5cclxuLy8gQ29udmVydCBmcm9tIHNob3J0IHRvIGNhbm9uaWNhbCBuYW1lc1xyXG4vLyBGSVhNRTogb3B0aW1pc2Ugb3IgbWFrZSB0aGlzIG5pY2VyP1xyXG5mdW5jdGlvbiBlbGVtZW50YXJ5TmFtZSAobmFtZSkge1xyXG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ2ludFsnKSkge1xyXG4gICAgcmV0dXJuICdpbnQyNTYnICsgbmFtZS5zbGljZSgzKVxyXG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2ludCcpIHtcclxuICAgIHJldHVybiAnaW50MjU2J1xyXG4gIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCd1aW50WycpKSB7XHJcbiAgICByZXR1cm4gJ3VpbnQyNTYnICsgbmFtZS5zbGljZSg0KVxyXG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3VpbnQnKSB7XHJcbiAgICByZXR1cm4gJ3VpbnQyNTYnXHJcbiAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ2ZpeGVkWycpKSB7XHJcbiAgICByZXR1cm4gJ2ZpeGVkMTI4eDEyOCcgKyBuYW1lLnNsaWNlKDUpXHJcbiAgfSBlbHNlIGlmIChuYW1lID09PSAnZml4ZWQnKSB7XHJcbiAgICByZXR1cm4gJ2ZpeGVkMTI4eDEyOCdcclxuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgndWZpeGVkWycpKSB7XHJcbiAgICByZXR1cm4gJ3VmaXhlZDEyOHgxMjgnICsgbmFtZS5zbGljZSg2KVxyXG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3VmaXhlZCcpIHtcclxuICAgIHJldHVybiAndWZpeGVkMTI4eDEyOCdcclxuICB9XHJcbiAgcmV0dXJuIG5hbWVcclxufVxyXG5cclxuQUJJLmV2ZW50SUQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZXMpIHtcclxuICAvLyBGSVhNRTogdXNlIG5vZGUuanMgdXRpbC5mb3JtYXQ/XHJcbiAgdmFyIHNpZyA9IG5hbWUgKyAnKCcgKyB0eXBlcy5tYXAoZWxlbWVudGFyeU5hbWUpLmpvaW4oJywnKSArICcpJ1xyXG4gIHJldHVybiB1dGlscy5rZWNjYWsyNTYoQnVmZmVyLmZyb20oc2lnKSlcclxufVxyXG5cclxuQUJJLm1ldGhvZElEID0gZnVuY3Rpb24gKG5hbWUsIHR5cGVzKSB7XHJcbiAgcmV0dXJuIEFCSS5ldmVudElEKG5hbWUsIHR5cGVzKS5zbGljZSgwLCA0KVxyXG59XHJcblxyXG4vLyBQYXJzZSBOIGZyb20gdHlwZTxOPlxyXG5mdW5jdGlvbiBwYXJzZVR5cGVOICh0eXBlKSB7XHJcbiAgcmV0dXJuIHBhcnNlSW50KC9eXFxEKyhcXGQrKSQvLmV4ZWModHlwZSlbMV0sIDEwKVxyXG59XHJcblxyXG4vLyBQYXJzZSBOLE0gZnJvbSB0eXBlPE4+eDxNPlxyXG5mdW5jdGlvbiBwYXJzZVR5cGVOeE0gKHR5cGUpIHtcclxuICB2YXIgdG1wID0gL15cXEQrKFxcZCspeChcXGQrKSQvLmV4ZWModHlwZSlcclxuICByZXR1cm4gWyBwYXJzZUludCh0bXBbMV0sIDEwKSwgcGFyc2VJbnQodG1wWzJdLCAxMCkgXVxyXG59XHJcblxyXG4vLyBQYXJzZSBOIGluIHR5cGVbPE4+XSB3aGVyZSBcInR5cGVcIiBjYW4gaXRzZWxmIGJlIGFuIGFycmF5IHR5cGUuXHJcbmZ1bmN0aW9uIHBhcnNlVHlwZUFycmF5ICh0eXBlKSB7XHJcbiAgdmFyIHRtcCA9IHR5cGUubWF0Y2goLyguKilcXFsoLio/KVxcXSQvKVxyXG4gIGlmICh0bXApIHtcclxuICAgIHJldHVybiB0bXBbMl0gPT09ICcnID8gJ2R5bmFtaWMnIDogcGFyc2VJbnQodG1wWzJdLCAxMClcclxuICB9XHJcbiAgcmV0dXJuIG51bGxcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VOdW1iZXIgKGFyZykge1xyXG4gIHZhciB0eXBlID0gdHlwZW9mIGFyZ1xyXG4gIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgaWYgKHV0aWxzLmlzSGV4UHJlZml4ZWQoYXJnKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEJOKHV0aWxzLnN0cmlwSGV4UHJlZml4KGFyZyksIDE2KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBCTihhcmcsIDEwKVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgIHJldHVybiBuZXcgQk4oYXJnKVxyXG4gIH0gZWxzZSBpZiAoYXJnLnRvQXJyYXkpIHtcclxuICAgIC8vIGFzc3VtZSB0aGlzIGlzIGEgQk4gZm9yIHRoZSBtb21lbnQsIHJlcGxhY2Ugd2l0aCBCTi5pc0JOIHNvb25cclxuICAgIHJldHVybiBhcmdcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBpcyBub3QgYSBudW1iZXInKVxyXG4gIH1cclxufVxyXG5cclxuLy8gc29tZU1ldGhvZChieXRlcyx1aW50KVxyXG4vLyBzb21lTWV0aG9kKGJ5dGVzLHVpbnQpOihib29sZWFuKVxyXG5mdW5jdGlvbiBwYXJzZVNpZ25hdHVyZSAoc2lnKSB7XHJcbiAgdmFyIHRtcCA9IC9eKFxcdyspXFwoKC4qKVxcKSQvLmV4ZWMoc2lnKVxyXG5cclxuICBpZiAodG1wLmxlbmd0aCAhPT0gMykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUnKVxyXG4gIH1cclxuXHJcbiAgdmFyIGFyZ3MgPSAvXiguKylcXCk6XFwoKC4rKSQvLmV4ZWModG1wWzJdKVxyXG5cclxuICBpZiAoYXJncyAhPT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiB0bXBbMV0sXHJcbiAgICAgIGFyZ3M6IGFyZ3NbMV0uc3BsaXQoJywnKSxcclxuICAgICAgcmV0YXJnczogYXJnc1syXS5zcGxpdCgnLCcpXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHZhciBwYXJhbXMgPSB0bXBbMl0uc3BsaXQoJywnKVxyXG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEgJiYgcGFyYW1zWzBdID09PSAnJykge1xyXG4gICAgICAvLyBTcGVjaWFsLWNhc2UgKHBvc3NpYmx5IG5haXZlKSBmaXh1cCBmb3IgZnVuY3Rpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMuXHJcbiAgICAgIC8vIFRPRE86IHNwZWNpYWwgY2FzZXMgYXJlIGFsd2F5cyBiYWQsIGJ1dCB0aGlzIG1ha2VzIHRoZSBmdW5jdGlvbiByZXR1cm5cclxuICAgICAgLy8gbWF0Y2ggd2hhdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZXhwZWN0XHJcbiAgICAgIHBhcmFtcyA9IFtdXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6IHRtcFsxXSxcclxuICAgICAgYXJnczogcGFyYW1zXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBFbmNvZGVzIGEgc2luZ2xlIGl0ZW0gKGNhbiBiZSBkeW5hbWljIGFycmF5KVxyXG4vLyBAcmV0dXJuczogQnVmZmVyXHJcbmZ1bmN0aW9uIGVuY29kZVNpbmdsZSAodHlwZSwgYXJnKSB7XHJcbiAgdmFyIHNpemUsIG51bSwgcmV0LCBpXHJcblxyXG4gIGlmICh0eXBlID09PSAnYWRkcmVzcycpIHtcclxuICAgIHJldHVybiBlbmNvZGVTaW5nbGUoJ3VpbnQxNjAnLCBwYXJzZU51bWJlcihhcmcpKVxyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICByZXR1cm4gZW5jb2RlU2luZ2xlKCd1aW50OCcsIGFyZyA/IDEgOiAwKVxyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiBlbmNvZGVTaW5nbGUoJ2J5dGVzJywgQnVmZmVyLmZyb20oYXJnLCAndXRmOCcpKVxyXG4gIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xyXG4gICAgLy8gdGhpcyBwYXJ0IGhhbmRsZXMgZml4ZWQtbGVuZ3RoIChbMl0pIGFuZCB2YXJpYWJsZSBsZW5ndGggKFtdKSBhcnJheXNcclxuICAgIC8vIE5PVEU6IHdlIGNhdGNoIGhlcmUgYWxsIGNhbGxzIHRvIGFycmF5cywgdGhhdCBzaW1wbGlmaWVzIHRoZSByZXN0XHJcbiAgICBpZiAodHlwZW9mIGFyZy5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFuIGFycmF5PycpXHJcbiAgICB9XHJcbiAgICBzaXplID0gcGFyc2VUeXBlQXJyYXkodHlwZSlcclxuICAgIGlmIChzaXplICE9PSAnZHluYW1pYycgJiYgc2l6ZSAhPT0gMCAmJiBhcmcubGVuZ3RoID4gc2l6ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnRzIGV4Y2VlZCBhcnJheSBzaXplOiAnICsgc2l6ZSlcclxuICAgIH1cclxuICAgIHJldCA9IFtdXHJcbiAgICB0eXBlID0gdHlwZS5zbGljZSgwLCB0eXBlLmxhc3RJbmRleE9mKCdbJykpXHJcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgYXJnID0gSlNPTi5wYXJzZShhcmcpXHJcbiAgICB9XHJcbiAgICBmb3IgKGkgaW4gYXJnKSB7XHJcbiAgICAgIHJldC5wdXNoKGVuY29kZVNpbmdsZSh0eXBlLCBhcmdbaV0pKVxyXG4gICAgfVxyXG4gICAgaWYgKHNpemUgPT09ICdkeW5hbWljJykge1xyXG4gICAgICB2YXIgbGVuZ3RoID0gZW5jb2RlU2luZ2xlKCd1aW50MjU2JywgYXJnLmxlbmd0aClcclxuICAgICAgcmV0LnVuc2hpZnQobGVuZ3RoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocmV0KVxyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2J5dGVzJykge1xyXG4gICAgYXJnID0gQnVmZmVyLmZyb20oYXJnKVxyXG5cclxuICAgIHJldCA9IEJ1ZmZlci5jb25jYXQoWyBlbmNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBhcmcubGVuZ3RoKSwgYXJnIF0pXHJcblxyXG4gICAgaWYgKChhcmcubGVuZ3RoICUgMzIpICE9PSAwKSB7XHJcbiAgICAgIHJldCA9IEJ1ZmZlci5jb25jYXQoWyByZXQsIHV0aWxzLnplcm9zKDMyIC0gKGFyZy5sZW5ndGggJSAzMikpIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldFxyXG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCdieXRlcycpKSB7XHJcbiAgICBzaXplID0gcGFyc2VUeXBlTih0eXBlKVxyXG4gICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiAzMikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnl0ZXM8Tj4gd2lkdGg6ICcgKyBzaXplKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1dGlscy5zZXRMZW5ndGhSaWdodChhcmcsIDMyKVxyXG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCd1aW50JykpIHtcclxuICAgIHNpemUgPSBwYXJzZVR5cGVOKHR5cGUpXHJcbiAgICBpZiAoKHNpemUgJSA4KSB8fCAoc2l6ZSA8IDgpIHx8IChzaXplID4gMjU2KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdWludDxOPiB3aWR0aDogJyArIHNpemUpXHJcbiAgICB9XHJcblxyXG4gICAgbnVtID0gcGFyc2VOdW1iZXIoYXJnKVxyXG4gICAgaWYgKG51bS5iaXRMZW5ndGgoKSA+IHNpemUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCB1aW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBzaXplICsgJyB2cyAnICsgbnVtLmJpdExlbmd0aCgpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW0gPCAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcGxpZWQgdWludCBpcyBuZWdhdGl2ZScpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bS50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxyXG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCdpbnQnKSkge1xyXG4gICAgc2l6ZSA9IHBhcnNlVHlwZU4odHlwZSlcclxuICAgIGlmICgoc2l6ZSAlIDgpIHx8IChzaXplIDwgOCkgfHwgKHNpemUgPiAyNTYpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnQ8Tj4gd2lkdGg6ICcgKyBzaXplKVxyXG4gICAgfVxyXG5cclxuICAgIG51bSA9IHBhcnNlTnVtYmVyKGFyZylcclxuICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBzaXplKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcGxpZWQgaW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBzaXplICsgJyB2cyAnICsgbnVtLmJpdExlbmd0aCgpKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudW0udG9Ud29zKDI1NikudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcclxuICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgndWZpeGVkJykpIHtcclxuICAgIHNpemUgPSBwYXJzZVR5cGVOeE0odHlwZSlcclxuXHJcbiAgICBudW0gPSBwYXJzZU51bWJlcihhcmcpXHJcblxyXG4gICAgaWYgKG51bSA8IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCB1Zml4ZWQgaXMgbmVnYXRpdmUnKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBudW0ubXVsKG5ldyBCTigyKS5wb3cobmV3IEJOKHNpemVbMV0pKSkpXHJcbiAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2ZpeGVkJykpIHtcclxuICAgIHNpemUgPSBwYXJzZVR5cGVOeE0odHlwZSlcclxuXHJcbiAgICByZXR1cm4gZW5jb2RlU2luZ2xlKCdpbnQyNTYnLCBwYXJzZU51bWJlcihhcmcpLm11bChuZXcgQk4oMikucG93KG5ldyBCTihzaXplWzFdKSkpKVxyXG4gIH1cclxuXHJcbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKVxyXG59XHJcblxyXG4vLyBEZWNvZGVzIGEgc2luZ2xlIGl0ZW0gKGNhbiBiZSBkeW5hbWljIGFycmF5KVxyXG4vLyBAcmV0dXJuczogYXJyYXlcclxuLy8gRklYTUU6IHRoaXMgbWV0aG9kIHdpbGwgbmVlZCBhIGxvdCBvZiBhdHRlbnRpb24gYXQgY2hlY2tpbmcgbGltaXRzIGFuZCB2YWxpZGF0aW9uXHJcbmZ1bmN0aW9uIGRlY29kZVNpbmdsZSAocGFyc2VkVHlwZSwgZGF0YSwgb2Zmc2V0KSB7XHJcbiAgaWYgKHR5cGVvZiBwYXJzZWRUeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgcGFyc2VkVHlwZSA9IHBhcnNlVHlwZShwYXJzZWRUeXBlKVxyXG4gIH1cclxuICB2YXIgc2l6ZSwgbnVtLCByZXQsIGlcclxuXHJcbiAgaWYgKHBhcnNlZFR5cGUubmFtZSA9PT0gJ2FkZHJlc3MnKSB7XHJcbiAgICByZXR1cm4gZGVjb2RlU2luZ2xlKHBhcnNlZFR5cGUucmF3VHlwZSwgZGF0YSwgb2Zmc2V0KS50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDIwKS50b1N0cmluZygnaGV4JylcclxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICByZXR1cm4gZGVjb2RlU2luZ2xlKHBhcnNlZFR5cGUucmF3VHlwZSwgZGF0YSwgb2Zmc2V0KS50b1N0cmluZygpID09PSBuZXcgQk4oMSkudG9TdHJpbmcoKVxyXG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgdmFyIGJ5dGVzID0gZGVjb2RlU2luZ2xlKHBhcnNlZFR5cGUucmF3VHlwZSwgZGF0YSwgb2Zmc2V0KVxyXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzLCAndXRmOCcpLnRvU3RyaW5nKClcclxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUuaXNBcnJheSkge1xyXG4gICAgLy8gdGhpcyBwYXJ0IGhhbmRsZXMgZml4ZWQtbGVuZ3RoIGFycmF5cyAoWzJdKSBhbmQgdmFyaWFibGUgbGVuZ3RoIChbXSkgYXJyYXlzXHJcbiAgICAvLyBOT1RFOiB3ZSBjYXRjaCBoZXJlIGFsbCBjYWxscyB0byBhcnJheXMsIHRoYXQgc2ltcGxpZmllcyB0aGUgcmVzdFxyXG4gICAgcmV0ID0gW11cclxuICAgIHNpemUgPSBwYXJzZWRUeXBlLnNpemVcclxuXHJcbiAgICBpZiAocGFyc2VkVHlwZS5zaXplID09PSAnZHluYW1pYycpIHtcclxuICAgICAgb2Zmc2V0ID0gZGVjb2RlU2luZ2xlKCd1aW50MjU2JywgZGF0YSwgb2Zmc2V0KS50b051bWJlcigpXHJcbiAgICAgIHNpemUgPSBkZWNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBkYXRhLCBvZmZzZXQpLnRvTnVtYmVyKClcclxuICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMzJcclxuICAgIH1cclxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgdmFyIGRlY29kZWQgPSBkZWNvZGVTaW5nbGUocGFyc2VkVHlwZS5zdWJBcnJheSwgZGF0YSwgb2Zmc2V0KVxyXG4gICAgICByZXQucHVzaChkZWNvZGVkKVxyXG4gICAgICBvZmZzZXQgKz0gcGFyc2VkVHlwZS5zdWJBcnJheS5tZW1vcnlVc2FnZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFxyXG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lID09PSAnYnl0ZXMnKSB7XHJcbiAgICBvZmZzZXQgPSBkZWNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBkYXRhLCBvZmZzZXQpLnRvTnVtYmVyKClcclxuICAgIHNpemUgPSBkZWNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBkYXRhLCBvZmZzZXQpLnRvTnVtYmVyKClcclxuICAgIHJldHVybiBkYXRhLnNsaWNlKG9mZnNldCArIDMyLCBvZmZzZXQgKyAzMiArIHNpemUpXHJcbiAgfSBlbHNlIGlmIChwYXJzZWRUeXBlLm5hbWUuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xyXG4gICAgcmV0dXJuIGRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBwYXJzZWRUeXBlLnNpemUpXHJcbiAgfSBlbHNlIGlmIChwYXJzZWRUeXBlLm5hbWUuc3RhcnRzV2l0aCgndWludCcpKSB7XHJcbiAgICBudW0gPSBuZXcgQk4oZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIDMyKSwgMTYsICdiZScpXHJcbiAgICBpZiAobnVtLmJpdExlbmd0aCgpID4gcGFyc2VkVHlwZS5zaXplKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVjb2RlZCBpbnQgZXhjZWVkcyB3aWR0aDogJyArIHBhcnNlZFR5cGUuc2l6ZSArICcgdnMgJyArIG51bS5iaXRMZW5ndGgoKSlcclxuICAgIH1cclxuICAgIHJldHVybiBudW1cclxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZS5zdGFydHNXaXRoKCdpbnQnKSkge1xyXG4gICAgbnVtID0gbmV3IEJOKGRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyAzMiksIDE2LCAnYmUnKS5mcm9tVHdvcygyNTYpXHJcbiAgICBpZiAobnVtLmJpdExlbmd0aCgpID4gcGFyc2VkVHlwZS5zaXplKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVjb2RlZCB1aW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBwYXJzZWRUeXBlLnNpemUgKyAnIHZzICcgKyBudW0uYml0TGVuZ3RoKCkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bVxyXG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lLnN0YXJ0c1dpdGgoJ3VmaXhlZCcpKSB7XHJcbiAgICBzaXplID0gbmV3IEJOKDIpLnBvdyhuZXcgQk4ocGFyc2VkVHlwZS5zaXplWzFdKSlcclxuICAgIG51bSA9IGRlY29kZVNpbmdsZSgndWludDI1NicsIGRhdGEsIG9mZnNldClcclxuICAgIGlmICghbnVtLm1vZChzaXplKS5pc1plcm8oKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY2ltYWxzIG5vdCBzdXBwb3J0ZWQgeWV0JylcclxuICAgIH1cclxuICAgIHJldHVybiBudW0uZGl2KHNpemUpXHJcbiAgfSBlbHNlIGlmIChwYXJzZWRUeXBlLm5hbWUuc3RhcnRzV2l0aCgnZml4ZWQnKSkge1xyXG4gICAgc2l6ZSA9IG5ldyBCTigyKS5wb3cobmV3IEJOKHBhcnNlZFR5cGUuc2l6ZVsxXSkpXHJcbiAgICBudW0gPSBkZWNvZGVTaW5nbGUoJ2ludDI1NicsIGRhdGEsIG9mZnNldClcclxuICAgIGlmICghbnVtLm1vZChzaXplKS5pc1plcm8oKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY2ltYWxzIG5vdCBzdXBwb3J0ZWQgeWV0JylcclxuICAgIH1cclxuICAgIHJldHVybiBudW0uZGl2KHNpemUpXHJcbiAgfVxyXG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3IgaW52YWxpZCB0eXBlOiAnICsgcGFyc2VkVHlwZS5uYW1lKVxyXG59XHJcblxyXG4vLyBQYXJzZSB0aGUgZ2l2ZW4gdHlwZVxyXG4vLyBAcmV0dXJuczoge30gY29udGFpbmluZyB0aGUgdHlwZSBpdHNlbGYsIG1lbW9yeSB1c2FnZSBhbmQgKGluY2x1ZGluZyBzaXplIGFuZCBzdWJBcnJheSBpZiBhcHBsaWNhYmxlKVxyXG5mdW5jdGlvbiBwYXJzZVR5cGUgKHR5cGUpIHtcclxuICB2YXIgc2l6ZVxyXG4gIHZhciByZXRcclxuICBpZiAoaXNBcnJheSh0eXBlKSkge1xyXG4gICAgc2l6ZSA9IHBhcnNlVHlwZUFycmF5KHR5cGUpXHJcbiAgICB2YXIgc3ViQXJyYXkgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoJ1snKSlcclxuICAgIHN1YkFycmF5ID0gcGFyc2VUeXBlKHN1YkFycmF5KVxyXG4gICAgcmV0ID0ge1xyXG4gICAgICBpc0FycmF5OiB0cnVlLFxyXG4gICAgICBuYW1lOiB0eXBlLFxyXG4gICAgICBzaXplOiBzaXplLFxyXG4gICAgICBtZW1vcnlVc2FnZTogc2l6ZSA9PT0gJ2R5bmFtaWMnID8gMzIgOiBzdWJBcnJheS5tZW1vcnlVc2FnZSAqIHNpemUsXHJcbiAgICAgIHN1YkFycmF5OiBzdWJBcnJheVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFxyXG4gIH0gZWxzZSB7XHJcbiAgICB2YXIgcmF3VHlwZVxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxyXG4gICAgICAgIHJhd1R5cGUgPSAndWludDE2MCdcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdib29sJzpcclxuICAgICAgICByYXdUeXBlID0gJ3VpbnQ4J1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmF3VHlwZSA9ICdieXRlcydcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gICAgcmV0ID0ge1xyXG4gICAgICByYXdUeXBlOiByYXdUeXBlLFxyXG4gICAgICBuYW1lOiB0eXBlLFxyXG4gICAgICBtZW1vcnlVc2FnZTogMzJcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHR5cGUuc3RhcnRzV2l0aCgnYnl0ZXMnKSAmJiB0eXBlICE9PSAnYnl0ZXMnKSB8fCB0eXBlLnN0YXJ0c1dpdGgoJ3VpbnQnKSB8fCB0eXBlLnN0YXJ0c1dpdGgoJ2ludCcpKSB7XHJcbiAgICAgIHJldC5zaXplID0gcGFyc2VUeXBlTih0eXBlKVxyXG4gICAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ3VmaXhlZCcpIHx8IHR5cGUuc3RhcnRzV2l0aCgnZml4ZWQnKSkge1xyXG4gICAgICByZXQuc2l6ZSA9IHBhcnNlVHlwZU54TSh0eXBlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2J5dGVzJykgJiYgdHlwZSAhPT0gJ2J5dGVzJyAmJiAocmV0LnNpemUgPCAxIHx8IHJldC5zaXplID4gMzIpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBieXRlczxOPiB3aWR0aDogJyArIHJldC5zaXplKVxyXG4gICAgfVxyXG4gICAgaWYgKCh0eXBlLnN0YXJ0c1dpdGgoJ3VpbnQnKSB8fCB0eXBlLnN0YXJ0c1dpdGgoJ2ludCcpKSAmJiAocmV0LnNpemUgJSA4IHx8IHJldC5zaXplIDwgOCB8fCByZXQuc2l6ZSA+IDI1NikpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGludC91aW50PE4+IHdpZHRoOiAnICsgcmV0LnNpemUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0XHJcbiAgfVxyXG59XHJcblxyXG4vLyBJcyBhIHR5cGUgZHluYW1pYz9cclxuZnVuY3Rpb24gaXNEeW5hbWljICh0eXBlKSB7XHJcbiAgLy8gRklYTUU6IGhhbmRsZSBhbGwgdHlwZXM/IEkgZG9uJ3QgdGhpbmsgYW55dGhpbmcgaXMgbWlzc2luZyBub3dcclxuICByZXR1cm4gKHR5cGUgPT09ICdzdHJpbmcnKSB8fCAodHlwZSA9PT0gJ2J5dGVzJykgfHwgKHBhcnNlVHlwZUFycmF5KHR5cGUpID09PSAnZHluYW1pYycpXHJcbn1cclxuXHJcbi8vIElzIGEgdHlwZSBhbiBhcnJheT9cclxuZnVuY3Rpb24gaXNBcnJheSAodHlwZSkge1xyXG4gIHJldHVybiB0eXBlLmxhc3RJbmRleE9mKCddJykgPT09IHR5cGUubGVuZ3RoIC0gMVxyXG59XHJcblxyXG4vLyBFbmNvZGUgYSBtZXRob2QvZXZlbnQgd2l0aCBhcmd1bWVudHNcclxuLy8gQHR5cGVzIGFuIGFycmF5IG9mIHN0cmluZyB0eXBlIG5hbWVzXHJcbi8vIEBhcmdzICBhbiBhcnJheSBvZiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzXHJcbkFCSS5yYXdFbmNvZGUgPSBmdW5jdGlvbiAodHlwZXMsIHZhbHVlcykge1xyXG4gIHZhciBvdXRwdXQgPSBbXVxyXG4gIHZhciBkYXRhID0gW11cclxuXHJcbiAgdmFyIGhlYWRMZW5ndGggPSAwXHJcblxyXG4gIHR5cGVzLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgIGlmIChpc0FycmF5KHR5cGUpKSB7XHJcbiAgICAgIHZhciBzaXplID0gcGFyc2VUeXBlQXJyYXkodHlwZSlcclxuXHJcbiAgICAgIGlmIChzaXplICE9PSAnZHluYW1pYycpIHtcclxuICAgICAgICBoZWFkTGVuZ3RoICs9IDMyICogc2l6ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGhlYWRMZW5ndGggKz0gMzJcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaGVhZExlbmd0aCArPSAzMlxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIHZhciB0eXBlID0gZWxlbWVudGFyeU5hbWUodHlwZXNbaV0pXHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV1cclxuICAgIHZhciBjdXIgPSBlbmNvZGVTaW5nbGUodHlwZSwgdmFsdWUpXHJcblxyXG4gICAgLy8gVXNlIHRoZSBoZWFkL3RhaWwgbWV0aG9kIGZvciBzdG9yaW5nIGR5bmFtaWMgZGF0YVxyXG4gICAgaWYgKGlzRHluYW1pYyh0eXBlKSkge1xyXG4gICAgICBvdXRwdXQucHVzaChlbmNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBoZWFkTGVuZ3RoKSlcclxuICAgICAgZGF0YS5wdXNoKGN1cilcclxuICAgICAgaGVhZExlbmd0aCArPSBjdXIubGVuZ3RoXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQucHVzaChjdXIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChvdXRwdXQuY29uY2F0KGRhdGEpKVxyXG59XHJcblxyXG5BQkkucmF3RGVjb2RlID0gZnVuY3Rpb24gKHR5cGVzLCBkYXRhKSB7XHJcbiAgdmFyIHJldCA9IFtdXHJcbiAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpXHJcbiAgdmFyIG9mZnNldCA9IDBcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnRhcnlOYW1lKHR5cGVzW2ldKVxyXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlVHlwZSh0eXBlLCBkYXRhLCBvZmZzZXQpXHJcbiAgICB2YXIgZGVjb2RlZCA9IGRlY29kZVNpbmdsZShwYXJzZWQsIGRhdGEsIG9mZnNldClcclxuICAgIG9mZnNldCArPSBwYXJzZWQubWVtb3J5VXNhZ2VcclxuICAgIHJldC5wdXNoKGRlY29kZWQpXHJcbiAgfVxyXG4gIHJldHVybiByZXRcclxufVxyXG5cclxuQUJJLnNpbXBsZUVuY29kZSA9IGZ1bmN0aW9uIChtZXRob2QpIHtcclxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuc2xpY2UoMSlcclxuICB2YXIgc2lnID0gcGFyc2VTaWduYXR1cmUobWV0aG9kKVxyXG5cclxuICAvLyBGSVhNRTogdmFsaWRhdGUvY29udmVydCBhcmd1bWVudHNcclxuICBpZiAoYXJncy5sZW5ndGggIT09IHNpZy5hcmdzLmxlbmd0aCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBjb3VudCBtaXNtYXRjaCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbIEFCSS5tZXRob2RJRChzaWcubWV0aG9kLCBzaWcuYXJncyksIEFCSS5yYXdFbmNvZGUoc2lnLmFyZ3MsIGFyZ3MpIF0pXHJcbn1cclxuXHJcbkFCSS5zaW1wbGVEZWNvZGUgPSBmdW5jdGlvbiAobWV0aG9kLCBkYXRhKSB7XHJcbiAgdmFyIHNpZyA9IHBhcnNlU2lnbmF0dXJlKG1ldGhvZClcclxuXHJcbiAgLy8gRklYTUU6IHZhbGlkYXRlL2NvbnZlcnQgYXJndW1lbnRzXHJcbiAgaWYgKCFzaWcucmV0YXJncykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZXR1cm4gdmFsdWVzIGluIG1ldGhvZCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gQUJJLnJhd0RlY29kZShzaWcucmV0YXJncywgZGF0YSlcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5naWZ5ICh0eXBlLCB2YWx1ZSkge1xyXG4gIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2FkZHJlc3MnKSB8fCB0eXBlLnN0YXJ0c1dpdGgoJ2J5dGVzJykpIHtcclxuICAgIHJldHVybiAnMHgnICsgdmFsdWUudG9TdHJpbmcoJ2hleCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXHJcbiAgfVxyXG59XHJcblxyXG5BQkkuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHR5cGVzLCB2YWx1ZXMpIHtcclxuICB2YXIgcmV0ID0gW11cclxuXHJcbiAgZm9yICh2YXIgaSBpbiB0eXBlcykge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlc1tpXVxyXG4gICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldXHJcblxyXG4gICAgLy8gaWYgaXQgaXMgYW4gYXJyYXkgdHlwZSwgY29uY2F0IHRoZSBpdGVtc1xyXG4gICAgaWYgKC9eW15cXFtdK1xcWy4qXFxdJC8udGVzdCh0eXBlKSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkodHlwZSwgaXRlbSlcclxuICAgICAgfSkuam9pbignLCAnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSBzdHJpbmdpZnkodHlwZSwgdmFsdWUpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0LnB1c2godmFsdWUpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmV0XHJcbn1cclxuXHJcbkFCSS5zb2xpZGl0eVBhY2sgPSBmdW5jdGlvbiAodHlwZXMsIHZhbHVlcykge1xyXG4gIGlmICh0eXBlcy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVyIG9mIHR5cGVzIGFyZSBub3QgbWF0Y2hpbmcgdGhlIHZhbHVlcycpXHJcbiAgfVxyXG5cclxuICB2YXIgc2l6ZSwgbnVtXHJcbiAgdmFyIHJldCA9IFtdXHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIHZhciB0eXBlID0gZWxlbWVudGFyeU5hbWUodHlwZXNbaV0pXHJcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV1cclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ2J5dGVzJykge1xyXG4gICAgICByZXQucHVzaCh2YWx1ZSlcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0LnB1c2goQnVmZmVyLmZyb20odmFsdWUsICd1dGY4JykpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICByZXQucHVzaChCdWZmZXIuZnJvbSh2YWx1ZSA/ICcwMScgOiAnMDAnLCAnaGV4JykpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhZGRyZXNzJykge1xyXG4gICAgICByZXQucHVzaCh1dGlscy5zZXRMZW5ndGhMZWZ0KHZhbHVlLCAyMCkpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xyXG4gICAgICBzaXplID0gcGFyc2VUeXBlTih0eXBlKVxyXG4gICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDMyKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJ5dGVzPE4+IHdpZHRoOiAnICsgc2l6ZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0LnB1c2godXRpbHMuc2V0TGVuZ3RoUmlnaHQodmFsdWUsIHNpemUpKVxyXG4gICAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ3VpbnQnKSkge1xyXG4gICAgICBzaXplID0gcGFyc2VUeXBlTih0eXBlKVxyXG4gICAgICBpZiAoKHNpemUgJSA4KSB8fCAoc2l6ZSA8IDgpIHx8IChzaXplID4gMjU2KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1aW50PE4+IHdpZHRoOiAnICsgc2l6ZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbnVtID0gcGFyc2VOdW1iZXIodmFsdWUpXHJcbiAgICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBzaXplKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCB1aW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBzaXplICsgJyB2cyAnICsgbnVtLmJpdExlbmd0aCgpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXQucHVzaChudW0udG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCBzaXplIC8gOCkpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgnaW50JykpIHtcclxuICAgICAgc2l6ZSA9IHBhcnNlVHlwZU4odHlwZSlcclxuICAgICAgaWYgKChzaXplICUgOCkgfHwgKHNpemUgPCA4KSB8fCAoc2l6ZSA+IDI1NikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50PE4+IHdpZHRoOiAnICsgc2l6ZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbnVtID0gcGFyc2VOdW1iZXIodmFsdWUpXHJcbiAgICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBzaXplKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCBpbnQgZXhjZWVkcyB3aWR0aDogJyArIHNpemUgKyAnIHZzICcgKyBudW0uYml0TGVuZ3RoKCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldC5wdXNoKG51bS50b1R3b3Moc2l6ZSkudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCBzaXplIC8gOCkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGSVhNRTogc3VwcG9ydCBhbGwgb3RoZXIgdHlwZXNcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocmV0KVxyXG59XHJcblxyXG5BQkkuc29saWRpdHlTSEEzID0gZnVuY3Rpb24gKHR5cGVzLCB2YWx1ZXMpIHtcclxuICByZXR1cm4gdXRpbHMua2VjY2FrMjU2KEFCSS5zb2xpZGl0eVBhY2sodHlwZXMsIHZhbHVlcykpXHJcbn1cclxuXHJcbkFCSS5zb2xpZGl0eVNIQTI1NiA9IGZ1bmN0aW9uICh0eXBlcywgdmFsdWVzKSB7XHJcbiAgcmV0dXJuIHV0aWxzLnNoYTI1NihBQkkuc29saWRpdHlQYWNrKHR5cGVzLCB2YWx1ZXMpKVxyXG59XHJcblxyXG5BQkkuc29saWRpdHlSSVBFTUQxNjAgPSBmdW5jdGlvbiAodHlwZXMsIHZhbHVlcykge1xyXG4gIHJldHVybiB1dGlscy5yaXBlbWQxNjAoQUJJLnNvbGlkaXR5UGFjayh0eXBlcywgdmFsdWVzKSwgdHJ1ZSlcclxufVxyXG5cclxuLy8gU2VycGVudCdzIHVzZXJzIGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgZW5jb2RpbmdcclxuLy8gLSBzOiBzdHJpbmdcclxuLy8gLSBiOiBieXRlc1xyXG4vLyAtIGI8Tj46IGJ5dGVzPE4+XHJcbi8vIC0gaTogaW50MjU2XHJcbi8vIC0gYTogaW50MjU2W11cclxuXHJcbmZ1bmN0aW9uIGlzTnVtZXJpYyAoYykge1xyXG4gIC8vIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3Q/IFNlZW1zIHRvIHdvcmtcclxuICByZXR1cm4gKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpXHJcbn1cclxuXHJcbi8vIEZvciBhIFwiZG9jdW1lbnRhdGlvblwiIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9zZXJwZW50L2Jsb2IvZGV2ZWxvcC9wcmVwcm9jZXNzLmNwcFxyXG5BQkkuZnJvbVNlcnBlbnQgPSBmdW5jdGlvbiAoc2lnKSB7XHJcbiAgdmFyIHJldCA9IFtdXHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWcubGVuZ3RoOyBpKyspIHtcclxuICAgIHZhciB0eXBlID0gc2lnW2ldXHJcbiAgICBpZiAodHlwZSA9PT0gJ3MnKSB7XHJcbiAgICAgIHJldC5wdXNoKCdieXRlcycpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiJykge1xyXG4gICAgICB2YXIgdG1wID0gJ2J5dGVzJ1xyXG4gICAgICB2YXIgaiA9IGkgKyAxXHJcbiAgICAgIHdoaWxlICgoaiA8IHNpZy5sZW5ndGgpICYmIGlzTnVtZXJpYyhzaWdbal0pKSB7XHJcbiAgICAgICAgdG1wICs9IHNpZ1tqXSAtICcwJ1xyXG4gICAgICAgIGorK1xyXG4gICAgICB9XHJcbiAgICAgIGkgPSBqIC0gMVxyXG4gICAgICByZXQucHVzaCh0bXApXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpJykge1xyXG4gICAgICByZXQucHVzaCgnaW50MjU2JylcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2EnKSB7XHJcbiAgICAgIHJldC5wdXNoKCdpbnQyNTZbXScpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogJyArIHR5cGUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXRcclxufVxyXG5cclxuQUJJLnRvU2VycGVudCA9IGZ1bmN0aW9uICh0eXBlcykge1xyXG4gIHZhciByZXQgPSBbXVxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIHZhciB0eXBlID0gdHlwZXNbaV1cclxuICAgIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XHJcbiAgICAgIHJldC5wdXNoKCdzJylcclxuICAgIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCdieXRlcycpKSB7XHJcbiAgICAgIHJldC5wdXNoKCdiJyArIHBhcnNlVHlwZU4odHlwZSkpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnQyNTYnKSB7XHJcbiAgICAgIHJldC5wdXNoKCdpJylcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ludDI1NltdJykge1xyXG4gICAgICByZXQucHVzaCgnYScpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogJyArIHR5cGUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXQuam9pbignJylcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBBQklcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG5leHBvcnRzLkJOID0gQk47XG52YXIgcmxwID0gcmVxdWlyZShcInJscFwiKTtcbmV4cG9ydHMucmxwID0gcmxwO1xudmFyIGNyZWF0ZUtlY2Nha0hhc2ggPSByZXF1aXJlKCdrZWNjYWsnKTtcbnZhciBzZWNwMjU2azEgPSByZXF1aXJlKCdzZWNwMjU2azEnKTtcbmV4cG9ydHMuc2VjcDI1NmsxID0gc2VjcDI1NmsxO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIGV0aGpzVXRpbCA9IHJlcXVpcmUoJ2V0aGpzLXV0aWwnKTtcbk9iamVjdC5hc3NpZ24oZXhwb3J0cywgZXRoanNVdGlsKTtcbi8qKlxuICogVGhlIG1heCBpbnRlZ2VyIHRoYXQgdGhpcyBWTSBjYW4gaGFuZGxlXG4gKi9cbmV4cG9ydHMuTUFYX0lOVEVHRVIgPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLCAxNik7XG4vKipcbiAqIDJeMjU2XG4gKi9cbmV4cG9ydHMuVFdPX1BPVzI1NiA9IG5ldyBCTignMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLCAxNik7XG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X05VTExfUyA9ICdjNWQyNDYwMTg2ZjcyMzNjOTI3ZTdkYjJkY2M3MDNjMGU1MDBiNjUzY2E4MjI3M2I3YmZhZDgwNDVkODVhNDcwJztcbi8qKlxuICogS2VjY2FrLTI1NiBoYXNoIG9mIG51bGxcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfTlVMTCA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X05VTExfUywgJ2hleCcpO1xuLyoqXG4gKiBLZWNjYWstMjU2IG9mIGFuIFJMUCBvZiBhbiBlbXB0eSBhcnJheVxuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9STFBfQVJSQVlfUyA9ICcxZGNjNGRlOGRlYzc1ZDdhYWI4NWI1NjdiNmNjZDQxYWQzMTI0NTFiOTQ4YTc0MTNmMGExNDJmZDQwZDQ5MzQ3Jztcbi8qKlxuICogS2VjY2FrLTI1NiBvZiBhbiBSTFAgb2YgYW4gZW1wdHkgYXJyYXlcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZID0gQnVmZmVyLmZyb20oZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZX1MsICdoZXgnKTtcbi8qKlxuICogS2VjY2FrLTI1NiBoYXNoIG9mIHRoZSBSTFAgb2YgbnVsbFxuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9STFBfUyA9ICc1NmU4MWYxNzFiY2M1NWE2ZmY4MzQ1ZTY5MmMwZjg2ZTViNDhlMDFiOTk2Y2FkYzAwMTYyMmZiNWUzNjNiNDIxJztcbi8qKlxuICogS2VjY2FrLTI1NiBoYXNoIG9mIHRoZSBSTFAgb2YgbnVsbFxuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9STFAgPSBCdWZmZXIuZnJvbShleHBvcnRzLktFQ0NBSzI1Nl9STFBfUywgJ2hleCcpO1xuLyoqXG4gKiBSZXR1cm5zIGEgYnVmZmVyIGZpbGxlZCB3aXRoIDBzLlxuICogQHBhcmFtIGJ5dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGJ1ZmZlciBzaG91bGQgYmVcbiAqL1xuZXhwb3J0cy56ZXJvcyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoYnl0ZXMpLmZpbGwoMCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgemVybyBhZGRyZXNzLlxuICovXG5leHBvcnRzLnplcm9BZGRyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhZGRyZXNzTGVuZ3RoID0gMjA7XG4gICAgdmFyIGFkZHIgPSBleHBvcnRzLnplcm9zKGFkZHJlc3NMZW5ndGgpO1xuICAgIHJldHVybiBleHBvcnRzLmJ1ZmZlclRvSGV4KGFkZHIpO1xufTtcbi8qKlxuICogTGVmdCBQYWRzIGFuIGBBcnJheWAgb3IgYEJ1ZmZlcmAgd2l0aCBsZWFkaW5nIHplcm9zIHRpbGwgaXQgaGFzIGBsZW5ndGhgIGJ5dGVzLlxuICogT3IgaXQgdHJ1bmNhdGVzIHRoZSBiZWdpbm5pbmcgaWYgaXQgZXhjZWVkcy5cbiAqIEBwYXJhbSBtc2cgdGhlIHZhbHVlIHRvIHBhZCAoQnVmZmVyfEFycmF5KVxuICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBvdXRwdXQgc2hvdWxkIGJlXG4gKiBAcGFyYW0gcmlnaHQgd2hldGhlciB0byBzdGFydCBwYWRkaW5nIGZvcm0gdGhlIGxlZnQgb3IgcmlnaHRcbiAqIEByZXR1cm4gKEJ1ZmZlcnxBcnJheSlcbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhMZWZ0ID0gZnVuY3Rpb24gKG1zZywgbGVuZ3RoLCByaWdodCkge1xuICAgIGlmIChyaWdodCA9PT0gdm9pZCAwKSB7IHJpZ2h0ID0gZmFsc2U7IH1cbiAgICB2YXIgYnVmID0gZXhwb3J0cy56ZXJvcyhsZW5ndGgpO1xuICAgIG1zZyA9IGV4cG9ydHMudG9CdWZmZXIobXNnKTtcbiAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgaWYgKG1zZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIG1zZy5jb3B5KGJ1Zik7XG4gICAgICAgICAgICByZXR1cm4gYnVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtc2cuc2xpY2UoMCwgbGVuZ3RoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChtc2cubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBtc2cuY29weShidWYsIGxlbmd0aCAtIG1zZy5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXNnLnNsaWNlKC1sZW5ndGgpO1xuICAgIH1cbn07XG5leHBvcnRzLnNldExlbmd0aCA9IGV4cG9ydHMuc2V0TGVuZ3RoTGVmdDtcbi8qKlxuICogUmlnaHQgUGFkcyBhbiBgQXJyYXlgIG9yIGBCdWZmZXJgIHdpdGggbGVhZGluZyB6ZXJvcyB0aWxsIGl0IGhhcyBgbGVuZ3RoYCBieXRlcy5cbiAqIE9yIGl0IHRydW5jYXRlcyB0aGUgYmVnaW5uaW5nIGlmIGl0IGV4Y2VlZHMuXG4gKiBAcGFyYW0gbXNnIHRoZSB2YWx1ZSB0byBwYWQgKEJ1ZmZlcnxBcnJheSlcbiAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBieXRlcyB0aGUgb3V0cHV0IHNob3VsZCBiZVxuICogQHJldHVybiAoQnVmZmVyfEFycmF5KVxuICovXG5leHBvcnRzLnNldExlbmd0aFJpZ2h0ID0gZnVuY3Rpb24gKG1zZywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuc2V0TGVuZ3RoKG1zZywgbGVuZ3RoLCB0cnVlKTtcbn07XG4vKipcbiAqIFRyaW1zIGxlYWRpbmcgemVyb3MgZnJvbSBhIGBCdWZmZXJgIG9yIGFuIGBBcnJheWAuXG4gKiBAcGFyYW0gYSAoQnVmZmVyfEFycmF5fFN0cmluZylcbiAqIEByZXR1cm4gKEJ1ZmZlcnxBcnJheXxTdHJpbmcpXG4gKi9cbmV4cG9ydHMudW5wYWQgPSBmdW5jdGlvbiAoYSkge1xuICAgIGEgPSBldGhqc1V0aWwuc3RyaXBIZXhQcmVmaXgoYSk7XG4gICAgdmFyIGZpcnN0ID0gYVswXTtcbiAgICB3aGlsZSAoYS5sZW5ndGggPiAwICYmIGZpcnN0LnRvU3RyaW5nKCkgPT09ICcwJykge1xuICAgICAgICBhID0gYS5zbGljZSgxKTtcbiAgICAgICAgZmlyc3QgPSBhWzBdO1xuICAgIH1cbiAgICByZXR1cm4gYTtcbn07XG5leHBvcnRzLnN0cmlwWmVyb3MgPSBleHBvcnRzLnVucGFkO1xuLyoqXG4gKiBBdHRlbXB0cyB0byB0dXJuIGEgdmFsdWUgaW50byBhIGBCdWZmZXJgLiBBcyBpbnB1dCBpdCBzdXBwb3J0cyBgQnVmZmVyYCwgYFN0cmluZ2AsIGBOdW1iZXJgLCBudWxsL3VuZGVmaW5lZCwgYEJOYCBhbmQgb3RoZXIgb2JqZWN0cyB3aXRoIGEgYHRvQXJyYXkoKWAgbWV0aG9kLlxuICogQHBhcmFtIHYgdGhlIHZhbHVlXG4gKi9cbmV4cG9ydHMudG9CdWZmZXIgPSBmdW5jdGlvbiAodikge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHYpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICB2ID0gQnVmZmVyLmZyb20odik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5pc0hleFN0cmluZyh2KSkge1xuICAgICAgICAgICAgICAgIHYgPSBCdWZmZXIuZnJvbShleHBvcnRzLnBhZFRvRXZlbihleHBvcnRzLnN0cmlwSGV4UHJlZml4KHYpKSwgJ2hleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdiA9IEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdiA9IGV4cG9ydHMuaW50VG9CdWZmZXIodik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQk4uaXNCTih2KSkge1xuICAgICAgICAgICAgdiA9IHYudG9BcnJheUxpa2UoQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2LnRvQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgICAgICAgIHYgPSBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcbi8qKlxuICogQ29udmVydHMgYSBgQnVmZmVyYCB0byBhIGBOdW1iZXJgLlxuICogQHBhcmFtIGJ1ZiBgQnVmZmVyYCBvYmplY3QgdG8gY29udmVydFxuICogQHRocm93cyBJZiB0aGUgaW5wdXQgbnVtYmVyIGV4Y2VlZHMgNTMgYml0cy5cbiAqL1xuZXhwb3J0cy5idWZmZXJUb0ludCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICByZXR1cm4gbmV3IEJOKGV4cG9ydHMudG9CdWZmZXIoYnVmKSkudG9OdW1iZXIoKTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgYEJ1ZmZlcmAgaW50byBhIGhleCBgU3RyaW5nYC5cbiAqIEBwYXJhbSBidWYgYEJ1ZmZlcmAgb2JqZWN0IHRvIGNvbnZlcnRcbiAqL1xuZXhwb3J0cy5idWZmZXJUb0hleCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICBidWYgPSBleHBvcnRzLnRvQnVmZmVyKGJ1Zik7XG4gICAgcmV0dXJuICcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpO1xufTtcbi8qKlxuICogSW50ZXJwcmV0cyBhIGBCdWZmZXJgIGFzIGEgc2lnbmVkIGludGVnZXIgYW5kIHJldHVybnMgYSBgQk5gLiBBc3N1bWVzIDI1Ni1iaXQgbnVtYmVycy5cbiAqIEBwYXJhbSBudW0gU2lnbmVkIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0cy5mcm9tU2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICAgIHJldHVybiBuZXcgQk4obnVtKS5mcm9tVHdvcygyNTYpO1xufTtcbi8qKlxuICogQ29udmVydHMgYSBgQk5gIHRvIGFuIHVuc2lnbmVkIGludGVnZXIgYW5kIHJldHVybnMgaXQgYXMgYSBgQnVmZmVyYC4gQXNzdW1lcyAyNTYtYml0IG51bWJlcnMuXG4gKiBAcGFyYW0gbnVtXG4gKi9cbmV4cG9ydHMudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIChudW0pIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20obnVtLnRvVHdvcygyNTYpLnRvQXJyYXkoKSk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIEtlY2NhayBoYXNoIG9mIHRoZSBpbnB1dFxuICogQHBhcmFtIGEgVGhlIGlucHV0IGRhdGEgKEJ1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyKVxuICogQHBhcmFtIGJpdHMgVGhlIEtlY2NhayB3aWR0aFxuICovXG5leHBvcnRzLmtlY2NhayA9IGZ1bmN0aW9uIChhLCBiaXRzKSB7XG4gICAgaWYgKGJpdHMgPT09IHZvaWQgMCkgeyBiaXRzID0gMjU2OyB9XG4gICAgYSA9IGV4cG9ydHMudG9CdWZmZXIoYSk7XG4gICAgaWYgKCFiaXRzKVxuICAgICAgICBiaXRzID0gMjU2O1xuICAgIHJldHVybiBjcmVhdGVLZWNjYWtIYXNoKFwia2VjY2FrXCIgKyBiaXRzKVxuICAgICAgICAudXBkYXRlKGEpXG4gICAgICAgIC5kaWdlc3QoKTtcbn07XG4vKipcbiAqIENyZWF0ZXMgS2VjY2FrLTI1NiBoYXNoIG9mIHRoZSBpbnB1dCwgYWxpYXMgZm9yIGtlY2NhayhhLCAyNTYpLlxuICogQHBhcmFtIGEgVGhlIGlucHV0IGRhdGEgKEJ1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyKVxuICovXG5leHBvcnRzLmtlY2NhazI1NiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMua2VjY2FrKGEpO1xufTtcbi8qKlxuICogQ3JlYXRlcyBTSEEyNTYgaGFzaCBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gYSBUaGUgaW5wdXQgZGF0YSAoQnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXIpXG4gKi9cbmV4cG9ydHMuc2hhMjU2ID0gZnVuY3Rpb24gKGEpIHtcbiAgICBhID0gZXhwb3J0cy50b0J1ZmZlcihhKTtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgICAgLnVwZGF0ZShhKVxuICAgICAgICAuZGlnZXN0KCk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIFJJUEVNRDE2MCBoYXNoIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBhIFRoZSBpbnB1dCBkYXRhIChCdWZmZXJ8QXJyYXl8U3RyaW5nfE51bWJlcilcbiAqIEBwYXJhbSBwYWRkZWQgV2hldGhlciBpdCBzaG91bGQgYmUgcGFkZGVkIHRvIDI1NiBiaXRzIG9yIG5vdFxuICovXG5leHBvcnRzLnJpcGVtZDE2MCA9IGZ1bmN0aW9uIChhLCBwYWRkZWQpIHtcbiAgICBhID0gZXhwb3J0cy50b0J1ZmZlcihhKTtcbiAgICB2YXIgaGFzaCA9IGNyZWF0ZUhhc2goJ3JtZDE2MCcpXG4gICAgICAgIC51cGRhdGUoYSlcbiAgICAgICAgLmRpZ2VzdCgpO1xuICAgIGlmIChwYWRkZWQgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuc2V0TGVuZ3RoKGhhc2gsIDMyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgIH1cbn07XG4vKipcbiAqIENyZWF0ZXMgU0hBLTMgaGFzaCBvZiB0aGUgUkxQIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gYSBUaGUgaW5wdXQgZGF0YVxuICovXG5leHBvcnRzLnJscGhhc2ggPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiBleHBvcnRzLmtlY2NhayhybHAuZW5jb2RlKGEpKTtcbn07XG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJpdmF0ZSBrZXkgc2F0aXNmaWVzIHRoZSBydWxlcyBvZiB0aGUgY3VydmUgc2VjcDI1NmsxLlxuICovXG5leHBvcnRzLmlzVmFsaWRQcml2YXRlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gc2VjcDI1NmsxLnByaXZhdGVLZXlWZXJpZnkocHJpdmF0ZUtleSk7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHB1YmxpYyBrZXkgc2F0aXNmaWVzIHRoZSBydWxlcyBvZiB0aGUgY3VydmUgc2VjcDI1NmsxXG4gKiBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiBFdGhlcmV1bS5cbiAqIEBwYXJhbSBwdWJsaWNLZXkgVGhlIHR3byBwb2ludHMgb2YgYW4gdW5jb21wcmVzc2VkIGtleSwgdW5sZXNzIHNhbml0aXplIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSBzYW5pdGl6ZSBBY2NlcHQgcHVibGljIGtleXMgaW4gb3RoZXIgZm9ybWF0c1xuICovXG5leHBvcnRzLmlzVmFsaWRQdWJsaWMgPSBmdW5jdGlvbiAocHVibGljS2V5LCBzYW5pdGl6ZSkge1xuICAgIGlmIChzYW5pdGl6ZSA9PT0gdm9pZCAwKSB7IHNhbml0aXplID0gZmFsc2U7IH1cbiAgICBpZiAocHVibGljS2V5Lmxlbmd0aCA9PT0gNjQpIHtcbiAgICAgICAgLy8gQ29udmVydCB0byBTRUMxIGZvciBzZWNwMjU2azFcbiAgICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkoQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzRdKSwgcHVibGljS2V5XSkpO1xuICAgIH1cbiAgICBpZiAoIXNhbml0aXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkocHVibGljS2V5KTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIGFkZHJlc3Mgb2YgYSBnaXZlbiBwdWJsaWMga2V5LlxuICogQWNjZXB0cyBcIkV0aGVyZXVtIHB1YmxpYyBrZXlzXCIgYW5kIFNFQzEgZW5jb2RlZCBrZXlzLlxuICogQHBhcmFtIHB1YktleSBUaGUgdHdvIHBvaW50cyBvZiBhbiB1bmNvbXByZXNzZWQga2V5LCB1bmxlc3Mgc2FuaXRpemUgaXMgZW5hYmxlZFxuICogQHBhcmFtIHNhbml0aXplIEFjY2VwdCBwdWJsaWMga2V5cyBpbiBvdGhlciBmb3JtYXRzXG4gKi9cbmV4cG9ydHMucHViVG9BZGRyZXNzID0gZnVuY3Rpb24gKHB1YktleSwgc2FuaXRpemUpIHtcbiAgICBpZiAoc2FuaXRpemUgPT09IHZvaWQgMCkgeyBzYW5pdGl6ZSA9IGZhbHNlOyB9XG4gICAgcHViS2V5ID0gZXhwb3J0cy50b0J1ZmZlcihwdWJLZXkpO1xuICAgIGlmIChzYW5pdGl6ZSAmJiBwdWJLZXkubGVuZ3RoICE9PSA2NCkge1xuICAgICAgICBwdWJLZXkgPSBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChwdWJLZXksIGZhbHNlKS5zbGljZSgxKTtcbiAgICB9XG4gICAgYXNzZXJ0KHB1YktleS5sZW5ndGggPT09IDY0KTtcbiAgICAvLyBPbmx5IHRha2UgdGhlIGxvd2VyIDE2MGJpdHMgb2YgdGhlIGhhc2hcbiAgICByZXR1cm4gZXhwb3J0cy5rZWNjYWsocHViS2V5KS5zbGljZSgtMjApO1xufTtcbmV4cG9ydHMucHVibGljVG9BZGRyZXNzID0gZXhwb3J0cy5wdWJUb0FkZHJlc3M7XG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIHB1YmxpYyBrZXkgb2YgYSBnaXZlbiBwcml2YXRlIGtleS5cbiAqIEBwYXJhbSBwcml2YXRlS2V5IEEgcHJpdmF0ZSBrZXkgbXVzdCBiZSAyNTYgYml0cyB3aWRlXG4gKi9cbmV4cG9ydHMucHJpdmF0ZVRvUHVibGljID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgICBwcml2YXRlS2V5ID0gZXhwb3J0cy50b0J1ZmZlcihwcml2YXRlS2V5KTtcbiAgICAvLyBza2lwIHRoZSB0eXBlIGZsYWcgYW5kIHVzZSB0aGUgWCwgWSBwb2ludHNcbiAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNyZWF0ZShwcml2YXRlS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIHB1YmxpYyBrZXkgdG8gdGhlIEV0aGVyZXVtIGZvcm1hdC5cbiAqL1xuZXhwb3J0cy5pbXBvcnRQdWJsaWMgPSBmdW5jdGlvbiAocHVibGljS2V5KSB7XG4gICAgcHVibGljS2V5ID0gZXhwb3J0cy50b0J1ZmZlcihwdWJsaWNLZXkpO1xuICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSA2NCkge1xuICAgICAgICBwdWJsaWNLZXkgPSBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChwdWJsaWNLZXksIGZhbHNlKS5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHB1YmxpY0tleTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIEVDRFNBIHNpZ25hdHVyZSBvZiBhIG1lc3NhZ2UgaGFzaC5cbiAqL1xuZXhwb3J0cy5lY3NpZ24gPSBmdW5jdGlvbiAobXNnSGFzaCwgcHJpdmF0ZUtleSwgY2hhaW5JZCkge1xuICAgIHZhciBzaWcgPSBzZWNwMjU2azEuc2lnbihtc2dIYXNoLCBwcml2YXRlS2V5KTtcbiAgICB2YXIgcmVjb3ZlcnkgPSBzaWcucmVjb3Zlcnk7XG4gICAgdmFyIHJldCA9IHtcbiAgICAgICAgcjogc2lnLnNpZ25hdHVyZS5zbGljZSgwLCAzMiksXG4gICAgICAgIHM6IHNpZy5zaWduYXR1cmUuc2xpY2UoMzIsIDY0KSxcbiAgICAgICAgdjogY2hhaW5JZCA/IHJlY292ZXJ5ICsgKGNoYWluSWQgKiAyICsgMzUpIDogcmVjb3ZlcnkgKyAyNyxcbiAgICB9O1xuICAgIHJldHVybiByZXQ7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBrZWNjYWstMjU2IGhhc2ggb2YgYG1lc3NhZ2VgLCBwcmVmaXhlZCB3aXRoIHRoZSBoZWFkZXIgdXNlZCBieSB0aGUgYGV0aF9zaWduYCBSUEMgY2FsbC5cbiAqIFRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbiBjYW4gYmUgZmVkIGludG8gYGVjc2lnbmAgdG8gcHJvZHVjZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGBldGhfc2lnbmBcbiAqIGNhbGwgZm9yIGEgZ2l2ZW4gYG1lc3NhZ2VgLCBvciBmZWQgdG8gYGVjcmVjb3ZlcmAgYWxvbmcgd2l0aCBhIHNpZ25hdHVyZSB0byByZWNvdmVyIHRoZSBwdWJsaWMga2V5XG4gKiB1c2VkIHRvIHByb2R1Y2UgdGhlIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0cy5oYXNoUGVyc29uYWxNZXNzYWdlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICB2YXIgcHJlZml4ID0gZXhwb3J0cy50b0J1ZmZlcihcIlxcdTAwMTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG5cIiArIG1lc3NhZ2UubGVuZ3RoLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBleHBvcnRzLmtlY2NhayhCdWZmZXIuY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKSk7XG59O1xuLyoqXG4gKiBFQ0RTQSBwdWJsaWMga2V5IHJlY292ZXJ5IGZyb20gc2lnbmF0dXJlLlxuICogQHJldHVybnMgUmVjb3ZlcmVkIHB1YmxpYyBrZXlcbiAqL1xuZXhwb3J0cy5lY3JlY292ZXIgPSBmdW5jdGlvbiAobXNnSGFzaCwgdiwgciwgcywgY2hhaW5JZCkge1xuICAgIHZhciBzaWduYXR1cmUgPSBCdWZmZXIuY29uY2F0KFtleHBvcnRzLnNldExlbmd0aChyLCAzMiksIGV4cG9ydHMuc2V0TGVuZ3RoKHMsIDMyKV0sIDY0KTtcbiAgICB2YXIgcmVjb3ZlcnkgPSBjYWxjdWxhdGVTaWdSZWNvdmVyeSh2LCBjaGFpbklkKTtcbiAgICBpZiAoIWlzVmFsaWRTaWdSZWNvdmVyeShyZWNvdmVyeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSB2IHZhbHVlJyk7XG4gICAgfVxuICAgIHZhciBzZW5kZXJQdWJLZXkgPSBzZWNwMjU2azEucmVjb3Zlcihtc2dIYXNoLCBzaWduYXR1cmUsIHJlY292ZXJ5KTtcbiAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQoc2VuZGVyUHViS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG59O1xuLyoqXG4gKiBDb252ZXJ0IHNpZ25hdHVyZSBwYXJhbWV0ZXJzIGludG8gdGhlIGZvcm1hdCBvZiBgZXRoX3NpZ25gIFJQQyBtZXRob2QuXG4gKiBAcmV0dXJucyBTaWduYXR1cmVcbiAqL1xuZXhwb3J0cy50b1JwY1NpZyA9IGZ1bmN0aW9uICh2LCByLCBzLCBjaGFpbklkKSB7XG4gICAgdmFyIHJlY292ZXJ5ID0gY2FsY3VsYXRlU2lnUmVjb3ZlcnkodiwgY2hhaW5JZCk7XG4gICAgaWYgKCFpc1ZhbGlkU2lnUmVjb3ZlcnkocmVjb3ZlcnkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgdiB2YWx1ZScpO1xuICAgIH1cbiAgICAvLyBnZXRoIChhbmQgdGhlIFJQQyBldGhfc2lnbiBtZXRob2QpIHVzZXMgdGhlIDY1IGJ5dGUgZm9ybWF0IHVzZWQgYnkgQml0Y29pblxuICAgIHJldHVybiBleHBvcnRzLmJ1ZmZlclRvSGV4KEJ1ZmZlci5jb25jYXQoW2V4cG9ydHMuc2V0TGVuZ3RoTGVmdChyLCAzMiksIGV4cG9ydHMuc2V0TGVuZ3RoTGVmdChzLCAzMiksIGV4cG9ydHMudG9CdWZmZXIodildKSk7XG59O1xuLyoqXG4gKiBDb252ZXJ0IHNpZ25hdHVyZSBmb3JtYXQgb2YgdGhlIGBldGhfc2lnbmAgUlBDIG1ldGhvZCB0byBzaWduYXR1cmUgcGFyYW1ldGVyc1xuICogTk9URTogYWxsIGJlY2F1c2Ugb2YgYSBidWcgaW4gZ2V0aDogaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL2dvLWV0aGVyZXVtL2lzc3Vlcy8yMDUzXG4gKi9cbmV4cG9ydHMuZnJvbVJwY1NpZyA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgICB2YXIgYnVmID0gZXhwb3J0cy50b0J1ZmZlcihzaWcpO1xuICAgIC8vIE5PVEU6IHdpdGggcG90ZW50aWFsIGludHJvZHVjdGlvbiBvZiBjaGFpbklkIHRoaXMgbWlnaHQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKGJ1Zi5sZW5ndGggIT09IDY1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoJyk7XG4gICAgfVxuICAgIHZhciB2ID0gYnVmWzY0XTtcbiAgICAvLyBzdXBwb3J0IGJvdGggdmVyc2lvbnMgb2YgYGV0aF9zaWduYCByZXNwb25zZXNcbiAgICBpZiAodiA8IDI3KSB7XG4gICAgICAgIHYgKz0gMjc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHY6IHYsXG4gICAgICAgIHI6IGJ1Zi5zbGljZSgwLCAzMiksXG4gICAgICAgIHM6IGJ1Zi5zbGljZSgzMiwgNjQpLFxuICAgIH07XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBldGhlcmV1bSBhZGRyZXNzIG9mIGEgZ2l2ZW4gcHJpdmF0ZSBrZXkuXG4gKiBAcGFyYW0gcHJpdmF0ZUtleSBBIHByaXZhdGUga2V5IG11c3QgYmUgMjU2IGJpdHMgd2lkZVxuICovXG5leHBvcnRzLnByaXZhdGVUb0FkZHJlc3MgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICAgIHJldHVybiBleHBvcnRzLnB1YmxpY1RvQWRkcmVzcyhleHBvcnRzLnByaXZhdGVUb1B1YmxpYyhwcml2YXRlS2V5KSk7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGFkZHJlc3MgaXMgYSB2YWxpZC4gQWNjZXB0cyBjaGVja3N1bW1lZCBhZGRyZXNzZXMgdG9vLlxuICovXG5leHBvcnRzLmlzVmFsaWRBZGRyZXNzID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICByZXR1cm4gL14weFswLTlhLWZBLUZdezQwfSQvLnRlc3QoYWRkcmVzcyk7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBhZGRyZXNzIGlzIGEgemVybyBhZGRyZXNzLlxuICovXG5leHBvcnRzLmlzWmVyb0FkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgIHZhciB6ZXJvQWRkciA9IGV4cG9ydHMuemVyb0FkZHJlc3MoKTtcbiAgICByZXR1cm4gemVyb0FkZHIgPT09IGV4cG9ydHMuYWRkSGV4UHJlZml4KGFkZHJlc3MpO1xufTtcbi8qKlxuICogUmV0dXJucyBhIGNoZWNrc3VtbWVkIGFkZHJlc3MuXG4gKi9cbmV4cG9ydHMudG9DaGVja3N1bUFkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgIGFkZHJlc3MgPSBldGhqc1V0aWwuc3RyaXBIZXhQcmVmaXgoYWRkcmVzcykudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgaGFzaCA9IGV4cG9ydHMua2VjY2FrKGFkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB2YXIgcmV0ID0gJzB4JztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KGhhc2hbaV0sIDE2KSA+PSA4KSB7XG4gICAgICAgICAgICByZXQgKz0gYWRkcmVzc1tpXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0ICs9IGFkZHJlc3NbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWRkcmVzcyBpcyBhIHZhbGlkIGNoZWNrc3VtbWVkIGFkZHJlc3MuXG4gKi9cbmV4cG9ydHMuaXNWYWxpZENoZWNrc3VtQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykgJiYgZXhwb3J0cy50b0NoZWNrc3VtQWRkcmVzcyhhZGRyZXNzKSA9PT0gYWRkcmVzcztcbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhZGRyZXNzIG9mIGEgbmV3bHkgY3JlYXRlZCBjb250cmFjdC5cbiAqIEBwYXJhbSBmcm9tIFRoZSBhZGRyZXNzIHdoaWNoIGlzIGNyZWF0aW5nIHRoaXMgbmV3IGFkZHJlc3NcbiAqIEBwYXJhbSBub25jZSBUaGUgbm9uY2Ugb2YgdGhlIGZyb20gYWNjb3VudFxuICovXG5leHBvcnRzLmdlbmVyYXRlQWRkcmVzcyA9IGZ1bmN0aW9uIChmcm9tLCBub25jZSkge1xuICAgIGZyb20gPSBleHBvcnRzLnRvQnVmZmVyKGZyb20pO1xuICAgIHZhciBub25jZUJOID0gbmV3IEJOKG5vbmNlKTtcbiAgICBpZiAobm9uY2VCTi5pc1plcm8oKSkge1xuICAgICAgICAvLyBpbiBSTFAgd2Ugd2FudCB0byBlbmNvZGUgbnVsbCBpbiB0aGUgY2FzZSBvZiB6ZXJvIG5vbmNlXG4gICAgICAgIC8vIHJlYWQgdGhlIFJMUCBkb2N1bWVudGF0aW9uIGZvciBhbiBhbnN3ZXIgaWYgeW91IGRhcmVcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMucmxwaGFzaChbZnJvbSwgbnVsbF0pLnNsaWNlKC0yMCk7XG4gICAgfVxuICAgIC8vIE9ubHkgdGFrZSB0aGUgbG93ZXIgMTYwYml0cyBvZiB0aGUgaGFzaFxuICAgIHJldHVybiBleHBvcnRzLnJscGhhc2goW2Zyb20sIEJ1ZmZlci5mcm9tKG5vbmNlQk4udG9BcnJheSgpKV0pLnNsaWNlKC0yMCk7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWRkcmVzcyBmb3IgYSBjb250cmFjdCBjcmVhdGVkIHVzaW5nIENSRUFURTIuXG4gKiBAcGFyYW0gZnJvbSBUaGUgYWRkcmVzcyB3aGljaCBpcyBjcmVhdGluZyB0aGlzIG5ldyBhZGRyZXNzXG4gKiBAcGFyYW0gc2FsdCBBIHNhbHRcbiAqIEBwYXJhbSBpbml0Q29kZSBUaGUgaW5pdCBjb2RlIG9mIHRoZSBjb250cmFjdCBiZWluZyBjcmVhdGVkXG4gKi9cbmV4cG9ydHMuZ2VuZXJhdGVBZGRyZXNzMiA9IGZ1bmN0aW9uIChmcm9tLCBzYWx0LCBpbml0Q29kZSkge1xuICAgIHZhciBmcm9tQnVmID0gZXhwb3J0cy50b0J1ZmZlcihmcm9tKTtcbiAgICB2YXIgc2FsdEJ1ZiA9IGV4cG9ydHMudG9CdWZmZXIoc2FsdCk7XG4gICAgdmFyIGluaXRDb2RlQnVmID0gZXhwb3J0cy50b0J1ZmZlcihpbml0Q29kZSk7XG4gICAgYXNzZXJ0KGZyb21CdWYubGVuZ3RoID09PSAyMCk7XG4gICAgYXNzZXJ0KHNhbHRCdWYubGVuZ3RoID09PSAzMik7XG4gICAgdmFyIGFkZHJlc3MgPSBleHBvcnRzLmtlY2NhazI1NihCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbSgnZmYnLCAnaGV4JyksIGZyb21CdWYsIHNhbHRCdWYsIGV4cG9ydHMua2VjY2FrMjU2KGluaXRDb2RlQnVmKV0pKTtcbiAgICByZXR1cm4gYWRkcmVzcy5zbGljZSgtMjApO1xufTtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzdXBwbGllZCBhZGRyZXNzIGJlbG9uZ3MgdG8gYSBwcmVjb21waWxlZCBhY2NvdW50IChCeXphbnRpdW0pLlxuICovXG5leHBvcnRzLmlzUHJlY29tcGlsZWQgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgIHZhciBhID0gZXhwb3J0cy51bnBhZChhZGRyZXNzKTtcbiAgICByZXR1cm4gYS5sZW5ndGggPT09IDEgJiYgYVswXSA+PSAxICYmIGFbMF0gPD0gODtcbn07XG4vKipcbiAqIEFkZHMgXCIweFwiIHRvIGEgZ2l2ZW4gYFN0cmluZ2AgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBzdGFydCB3aXRoIFwiMHhcIi5cbiAqL1xuZXhwb3J0cy5hZGRIZXhQcmVmaXggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiBldGhqc1V0aWwuaXNIZXhQcmVmaXhlZChzdHIpID8gc3RyIDogJzB4JyArIHN0cjtcbn07XG4vKipcbiAqIFZhbGlkYXRlIGEgRUNEU0Egc2lnbmF0dXJlLlxuICogQHBhcmFtIGhvbWVzdGVhZE9yTGF0ZXIgSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBiZWluZyB1c2VkIG9uIGVpdGhlciB0aGUgaG9tZXN0ZWFkIGhhcmRmb3JrIG9yIGEgbGF0ZXIgb25lXG4gKi9cbmV4cG9ydHMuaXNWYWxpZFNpZ25hdHVyZSA9IGZ1bmN0aW9uICh2LCByLCBzLCBob21lc3RlYWRPckxhdGVyLCBjaGFpbklkKSB7XG4gICAgaWYgKGhvbWVzdGVhZE9yTGF0ZXIgPT09IHZvaWQgMCkgeyBob21lc3RlYWRPckxhdGVyID0gdHJ1ZTsgfVxuICAgIHZhciBTRUNQMjU2SzFfTl9ESVZfMiA9IG5ldyBCTignN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1ZDU3NmU3MzU3YTQ1MDFkZGZlOTJmNDY2ODFiMjBhMCcsIDE2KTtcbiAgICB2YXIgU0VDUDI1NksxX04gPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDEnLCAxNik7XG4gICAgaWYgKHIubGVuZ3RoICE9PSAzMiB8fCBzLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRTaWdSZWNvdmVyeShjYWxjdWxhdGVTaWdSZWNvdmVyeSh2LCBjaGFpbklkKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgckJOID0gbmV3IEJOKHIpO1xuICAgIHZhciBzQk4gPSBuZXcgQk4ocyk7XG4gICAgaWYgKHJCTi5pc1plcm8oKSB8fCByQk4uZ3QoU0VDUDI1NksxX04pIHx8IHNCTi5pc1plcm8oKSB8fCBzQk4uZ3QoU0VDUDI1NksxX04pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGhvbWVzdGVhZE9yTGF0ZXIgJiYgc0JOLmNtcChTRUNQMjU2SzFfTl9ESVZfMikgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgYEJ1ZmZlcmAgb3IgYEFycmF5YCB0byBKU09OLlxuICogQHBhcmFtIGJhIChCdWZmZXJ8QXJyYXkpXG4gKiBAcmV0dXJuIChBcnJheXxTdHJpbmd8bnVsbClcbiAqL1xuZXhwb3J0cy5iYVRvSlNPTiA9IGZ1bmN0aW9uIChiYSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYmEpKSB7XG4gICAgICAgIHJldHVybiBcIjB4XCIgKyBiYS50b1N0cmluZygnaGV4Jyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goZXhwb3J0cy5iYVRvSlNPTihiYVtpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59O1xuLyoqXG4gKiBEZWZpbmVzIHByb3BlcnRpZXMgb24gYSBgT2JqZWN0YC4gSXQgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHVuZGVybHlpbmcgZGF0YSBpcyBiaW5hcnkuXG4gKiBAcGFyYW0gc2VsZiB0aGUgYE9iamVjdGAgdG8gZGVmaW5lIHByb3BlcnRpZXMgb25cbiAqIEBwYXJhbSBmaWVsZHMgYW4gYXJyYXkgZmllbGRzIHRvIGRlZmluZS4gRmllbGRzIGNhbiBjb250YWluOlxuICogKiBgbmFtZWAgLSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydGllc1xuICogKiBgbGVuZ3RoYCAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGZpZWxkIGNhbiBoYXZlXG4gKiAqIGBhbGxvd0xlc3NgIC0gaWYgdGhlIGZpZWxkIGNhbiBiZSBsZXNzIHRoYW4gdGhlIGxlbmd0aFxuICogKiBgYWxsb3dFbXB0eWBcbiAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gYmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydHMuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChzZWxmLCBmaWVsZHMsIGRhdGEpIHtcbiAgICBzZWxmLnJhdyA9IFtdO1xuICAgIHNlbGYuX2ZpZWxkcyA9IFtdO1xuICAgIC8vIGF0dGFjaCB0aGUgYHRvSlNPTmBcbiAgICBzZWxmLnRvSlNPTiA9IGZ1bmN0aW9uIChsYWJlbCkge1xuICAgICAgICBpZiAobGFiZWwgPT09IHZvaWQgMCkgeyBsYWJlbCA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgdmFyIG9ial8xID0ge307XG4gICAgICAgICAgICBzZWxmLl9maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICBvYmpfMVtmaWVsZF0gPSBcIjB4XCIgKyBzZWxmW2ZpZWxkXS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYmpfMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwb3J0cy5iYVRvSlNPTihzZWxmLnJhdyk7XG4gICAgfTtcbiAgICBzZWxmLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHJscC5lbmNvZGUoc2VsZi5yYXcpO1xuICAgIH07XG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkLCBpKSB7XG4gICAgICAgIHNlbGYuX2ZpZWxkcy5wdXNoKGZpZWxkLm5hbWUpO1xuICAgICAgICBmdW5jdGlvbiBnZXR0ZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5yYXdbaV07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dGVyKHYpIHtcbiAgICAgICAgICAgIHYgPSBleHBvcnRzLnRvQnVmZmVyKHYpO1xuICAgICAgICAgICAgaWYgKHYudG9TdHJpbmcoJ2hleCcpID09PSAnMDAnICYmICFmaWVsZC5hbGxvd1plcm8pIHtcbiAgICAgICAgICAgICAgICB2ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmFsbG93TGVzcyAmJiBmaWVsZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2ID0gZXhwb3J0cy5zdHJpcFplcm9zKHYpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPj0gdi5sZW5ndGgsIFwiVGhlIGZpZWxkIFwiICsgZmllbGQubmFtZSArIFwiIG11c3Qgbm90IGhhdmUgbW9yZSBcIiArIGZpZWxkLmxlbmd0aCArIFwiIGJ5dGVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIShmaWVsZC5hbGxvd1plcm8gJiYgdi5sZW5ndGggPT09IDApICYmIGZpZWxkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPT09IHYubGVuZ3RoLCBcIlRoZSBmaWVsZCBcIiArIGZpZWxkLm5hbWUgKyBcIiBtdXN0IGhhdmUgYnl0ZSBsZW5ndGggb2YgXCIgKyBmaWVsZC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yYXdbaV0gPSB2O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBmaWVsZC5uYW1lLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiBnZXR0ZXIsXG4gICAgICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmaWVsZC5kZWZhdWx0KSB7XG4gICAgICAgICAgICBzZWxmW2ZpZWxkLm5hbWVdID0gZmllbGQuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhdHRhY2ggYWxpYXNcbiAgICAgICAgaWYgKGZpZWxkLmFsaWFzKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQuYWxpYXMsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc2V0OiBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgZ2V0OiBnZXR0ZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGlmIHRoZSBjb25zdHVjdG9yIGlzIHBhc3NlZCBkYXRhXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGV0aGpzVXRpbC5zdHJpcEhleFByZWZpeChkYXRhKSwgJ2hleCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBybHAuZGVjb2RlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiBzZWxmLl9maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBudW1iZXIgb2YgZmllbGRzIGluIGRhdGEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhbGwgdGhlIGl0ZW1zIGFyZSBidWZmZXJzXG4gICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgICAgICBzZWxmW3NlbGYuX2ZpZWxkc1tpXV0gPSBleHBvcnRzLnRvQnVmZmVyKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB2YXIga2V5c18xID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5c18xLmluZGV4T2YoZmllbGQubmFtZSkgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBzZWxmW2ZpZWxkLm5hbWVdID0gZGF0YVtmaWVsZC5uYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5c18xLmluZGV4T2YoZmllbGQuYWxpYXMpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZltmaWVsZC5hbGlhc10gPSBkYXRhW2ZpZWxkLmFsaWFzXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRhdGEnKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5mdW5jdGlvbiBjYWxjdWxhdGVTaWdSZWNvdmVyeSh2LCBjaGFpbklkKSB7XG4gICAgcmV0dXJuIGNoYWluSWQgPyB2IC0gKDIgKiBjaGFpbklkICsgMzUpIDogdiAtIDI3O1xufVxuZnVuY3Rpb24gaXNWYWxpZFNpZ1JlY292ZXJ5KHJlY292ZXJ5KSB7XG4gICAgcmV0dXJuIHJlY292ZXJ5ID09PSAwIHx8IHJlY292ZXJ5ID09PSAxO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiOyhmdW5jdGlvbihnbG9iYWwpIHtcblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHsgc2V0VGltZW91dChmbiwgMCk7IH1cbmlmICh0eXBlb2YgcHJvY2VzcyAhPSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbicpIHtcblx0Ly8gbm9kZS5qcyBhbmQgdGhlIGxpa2Vcblx0bmV4dFRpY2sgPSBwcm9jZXNzLm5leHRUaWNrO1xufVxuXG5mdW5jdGlvbiBzZW1hcGhvcmUoY2FwYWNpdHkpIHtcblx0dmFyIHNlbWFwaG9yZSA9IHtcblx0XHRjYXBhY2l0eTogY2FwYWNpdHkgfHwgMSxcblx0XHRjdXJyZW50OiAwLFxuXHRcdHF1ZXVlOiBbXSxcblx0XHRmaXJzdEhlcmU6IGZhbHNlLFxuXG5cdFx0dGFrZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoc2VtYXBob3JlLmZpcnN0SGVyZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgXHRcdFx0c2VtYXBob3JlLmN1cnJlbnQrKztcbiAgICAgICAgXHRcdFx0c2VtYXBob3JlLmZpcnN0SGVyZSA9IHRydWU7XG4gICAgICAgIFx0XHRcdHZhciBpc0ZpcnN0ID0gMTtcbiAgICAgIFx0XHRcdH0gZWxzZSB7XG4gICAgICAgIFx0XHRcdHZhciBpc0ZpcnN0ID0gMDtcbiAgICAgIFx0XHRcdH1cblx0XHRcdHZhciBpdGVtID0geyBuOiAxIH07XG5cblx0XHRcdGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0aXRlbS50YXNrID0gYXJndW1lbnRzWzBdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXRlbS5uID0gYXJndW1lbnRzWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSAge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PSAnZnVuY3Rpb24nKSBpdGVtLnRhc2sgPSBhcmd1bWVudHNbMV07XG5cdFx0XHRcdGVsc2UgaXRlbS5uID0gYXJndW1lbnRzWzFdO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdGFzayA9IGl0ZW0udGFzaztcblx0XHRcdGl0ZW0udGFzayA9IGZ1bmN0aW9uKCkgeyB0YXNrKHNlbWFwaG9yZS5sZWF2ZSk7IH07XG5cblx0XHRcdGlmIChzZW1hcGhvcmUuY3VycmVudCArIGl0ZW0ubiAtIGlzRmlyc3QgPiBzZW1hcGhvcmUuY2FwYWNpdHkpIHtcbiAgICAgICAgXHRcdFx0aWYgKGlzRmlyc3QgPT09IDEpIHtcbiAgICAgICAgXHRcdFx0XHRzZW1hcGhvcmUuY3VycmVudC0tO1xuICAgICAgICBcdFx0XHRcdHNlbWFwaG9yZS5maXJzdEhlcmUgPSBmYWxzZTtcbiAgICAgICAgXHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2VtYXBob3JlLnF1ZXVlLnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbWFwaG9yZS5jdXJyZW50ICs9IGl0ZW0ubiAtIGlzRmlyc3Q7XG5cdFx0XHRpdGVtLnRhc2soc2VtYXBob3JlLmxlYXZlKTtcbiAgICAgIFx0XHRcdGlmIChpc0ZpcnN0ID09PSAxKSBzZW1hcGhvcmUuZmlyc3RIZXJlID0gZmFsc2U7XG5cdFx0fSxcblxuXHRcdGxlYXZlOiBmdW5jdGlvbihuKSB7XG5cdFx0XHRuID0gbiB8fCAxO1xuXG5cdFx0XHRzZW1hcGhvcmUuY3VycmVudCAtPSBuO1xuXG5cdFx0XHRpZiAoIXNlbWFwaG9yZS5xdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKHNlbWFwaG9yZS5jdXJyZW50IDwgMCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignbGVhdmUgY2FsbGVkIHRvbyBtYW55IHRpbWVzLicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaXRlbSA9IHNlbWFwaG9yZS5xdWV1ZVswXTtcblxuXHRcdFx0aWYgKGl0ZW0ubiArIHNlbWFwaG9yZS5jdXJyZW50ID4gc2VtYXBob3JlLmNhcGFjaXR5KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2VtYXBob3JlLnF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzZW1hcGhvcmUuY3VycmVudCArPSBpdGVtLm47XG5cblx0XHRcdG5leHRUaWNrKGl0ZW0udGFzayk7XG5cdFx0fSxcblxuXHRcdGF2YWlsYWJsZTogZnVuY3Rpb24obikge1xuXHRcdFx0biA9IG4gfHwgMTtcblx0XHRcdHJldHVybihzZW1hcGhvcmUuY3VycmVudCArIG4gPD0gc2VtYXBob3JlLmNhcGFjaXR5KTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIHNlbWFwaG9yZTtcbn07XG5cbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBub2RlIGV4cG9ydFxuICAgIG1vZHVsZS5leHBvcnRzID0gc2VtYXBob3JlO1xufSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBhbWQgZXhwb3J0XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbWFwaG9yZTtcbiAgICB9KTtcbn0gZWxzZSB7XG4gICAgLy8gYnJvd3NlciBnbG9iYWxcbiAgICBnbG9iYWwuc2VtYXBob3JlID0gc2VtYXBob3JlO1xufVxufSh0aGlzKSk7XG4iLCJjb25zdCBjcmVhdGVQYXlsb2FkID0gcmVxdWlyZSgnLi9jcmVhdGUtcGF5bG9hZC5qcycpXG5cbm1vZHVsZS5leHBvcnRzID0gZXN0aW1hdGVHYXNcblxuLypcblxuVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW0vZ28tZXRoZXJldW0vaXNzdWVzLzI1NzdcblxuKi9cblxuXG5mdW5jdGlvbiBlc3RpbWF0ZUdhcyhwcm92aWRlciwgdHhQYXJhbXMsIGNiKSB7XG4gIHByb3ZpZGVyLnNlbmRBc3luYyhjcmVhdGVQYXlsb2FkKHtcbiAgICBtZXRob2Q6ICdldGhfZXN0aW1hdGVHYXMnLFxuICAgIHBhcmFtczogW3R4UGFyYW1zXVxuICB9KSwgZnVuY3Rpb24oZXJyLCByZXMpe1xuICAgIGlmIChlcnIpIHtcbiAgICAgIC8vIGhhbmRsZSBzaW1wbGUgdmFsdWUgdHJhbnNmZXIgY2FzZVxuICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnbm8gY29udHJhY3QgY29kZSBhdCBnaXZlbiBhZGRyZXNzJykge1xuICAgICAgICByZXR1cm4gY2IobnVsbCwgJzB4Y2YwOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2IoZXJyKSAgICAgICAgXG4gICAgICB9XG4gICAgfVxuICAgIGNiKG51bGwsIHJlcy5yZXN1bHQpXG4gIH0pXG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +*/var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,s,f=a(t),u=1;uthis.once("latest",t)),this._currentBlock)}async start(t={}){this._isRunning||(this._isRunning=!0,t.fromBlock?await this._setTrackingBlock(await this._fetchBlockByNumber(t.fromBlock)):await this._setTrackingBlock(await this._fetchLatestBlock()),this._provider.on?await this._initSubscription():this._performSync().catch(t=>{t&&console.error(t)}))}async stop(){this._isRunning=!1,this._provider.on&&await this._removeSubscription()}async _setTrackingBlock(t){if(this._trackingBlock&&this._trackingBlock.hash===t.hash)return;const e=this._trackingBlockTimestamp,r=Date.now();e&&r-e>this._syncingTimeout?(this._trackingBlockTimestamp=null,await this._warpToLatest()):(this._trackingBlock=t,this._trackingBlockTimestamp=r,this.emit("block",t))}async _setCurrentBlock(t){if(this._currentBlock&&this._currentBlock.hash===t.hash)return;const e=this._currentBlock;this._currentBlock=t,this.emit("latest",t),this.emit("sync",{newBlock:t,oldBlock:e})}async _warpToLatest(){await this._setTrackingBlock(await this._fetchLatestBlock())}async _pollForNextBlock(){setTimeout(()=>this._performSync(),this._pollingInterval)}async _performSync(){if(!this._isRunning)return;const t=this.getTrackingBlock();if(!t)throw new Error("RpcBlockTracker - tracking block is missing");const e=s(t.number);try{const r=await this._fetchBlockByNumber(e);r?(await this._setTrackingBlock(r),this._performSync()):(await this._setCurrentBlock(t),this._pollForNextBlock())}catch(e){e.message.includes("index out of range")||e.message.includes("Couldn't find block by reference")?(await this._setCurrentBlock(t),this._pollForNextBlock()):(console.error(e),this._pollForNextBlock())}}async _handleNewBlockNotification(t,e){e.id==this._subscriptionId&&(t&&(this.emit("error",t),await this._removeSubscription()),await this._setTrackingBlock(await this._fetchBlockByNumber(e.result.number)))}async _initSubscription(){this._provider.on("data",this._handleNewBlockNotification);let t=await o(this._provider.sendAsync||this._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_subscribe",params:["newHeads"]});this._subscriptionId=t.result}async _removeSubscription(){if(!this._subscriptionId)throw new Error("Not subscribed.");this._provider.removeListener("data",this._handleNewBlockNotification),await o(this._provider.sendAsync||this._provider.send)({jsonrpc:"2.0",id:(new Date).getTime(),method:"eth_unsubscribe",params:[this._subscriptionId]}),delete this._subscriptionId}_fetchLatestBlock(){return o(this._query.getBlockByNumber).call(this._query,"latest",!0)}_fetchBlockByNumber(t){const e=a.formatHex(t);return o(this._query.getBlockByNumber).call(this._query,e,!0)}}},function(t,e,r){const n=r(58),i=r(221)();function o(t){this.currentProvider=t}function a(t){return function(){const e=this;var r=[].slice.call(arguments),n=r.pop();e.sendAsync({method:t,params:r},n)}}function s(t,e){return function(){const r=this;var n=[].slice.call(arguments),i=n.pop();n.length-1&&t%1==0&&t=t.params.length?t.params:"eth_getBlockByNumber"===t.method?t.params.slice(1):t.params.slice(0,e)}function a(t){switch(t.method){case"eth_getStorageAt":return 2;case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":return 1;case"eth_getBlockByNumber":return 0;default:return}}function s(t){switch(t.method){case"web3_clientVersion":case"web3_sha3":case"eth_protocolVersion":case"eth_getBlockTransactionCountByHash":case"eth_getUncleCountByBlockHash":case"eth_getCode":case"eth_getBlockByHash":case"eth_getTransactionByHash":case"eth_getTransactionByBlockHashAndIndex":case"eth_getTransactionReceipt":case"eth_getUncleByBlockHashAndIndex":case"eth_getCompilers":case"eth_compileLLL":case"eth_compileSolidity":case"eth_compileSerpent":case"shh_version":return"perma";case"eth_getBlockByNumber":case"eth_getBlockTransactionCountByNumber":case"eth_getUncleCountByBlockNumber":case"eth_getTransactionByBlockNumberAndIndex":case"eth_getUncleByBlockNumberAndIndex":return"fork";case"eth_gasPrice":case"eth_blockNumber":case"eth_getBalance":case"eth_getStorageAt":case"eth_getTransactionCount":case"eth_call":case"eth_estimateGas":case"eth_getFilterLogs":case"eth_getLogs":return"block";case"net_version":case"net_peerCount":case"net_listening":case"eth_syncing":case"eth_sign":case"eth_coinbase":case"eth_mining":case"eth_hashrate":case"eth_accounts":case"eth_sendTransaction":case"eth_sendRawTransaction":case"eth_newFilter":case"eth_newBlockFilter":case"eth_newPendingTransactionFilter":case"eth_uninstallFilter":case"eth_getFilterChanges":case"eth_getWork":case"eth_submitWork":case"eth_submitHashrate":case"db_putString":case"db_getString":case"db_putHex":case"db_getHex":case"shh_post":case"shh_newIdentity":case"shh_hasIdentity":case"shh_newGroup":case"shh_addToGroup":case"shh_newFilter":case"shh_uninstallFilter":case"shh_getFilterChanges":case"shh_getMessages":return"never"}}t.exports={cacheIdentifierForPayload:function(t,e={}){if(!i(t))return null;const{includeBlockRef:r}=e,a=r?t.params:o(t);return t.method+":"+n(a)},canCache:i,blockTagForPayload:function(t){var e=a(t);if(e>=t.params.length)return null;return t.params[e]},paramsWithoutBlockTag:o,blockTagParamIndex:a,cacheTypeForPayload:s}},function(t,e,r){var n="undefined"!=typeof JSON?JSON:r(258);t.exports=function(t,e){e||(e={}),"function"==typeof e&&(e={cmp:e});var r=e.space||"";"number"==typeof r&&(r=Array(r+1).join(" "));var a,s="boolean"==typeof e.cycles&&e.cycles,f=e.replacer||function(t,e){return e},u=e.cmp&&(a=e.cmp,function(t){return function(e,r){var n={key:e,value:t[e]},i={key:r,value:t[r]};return a(n,i)}}),c=[];return function t(e,a,h,d){var l=r?"\n"+new Array(d+1).join(r):"",p=r?": ":":";if(h&&h.toJSON&&"function"==typeof h.toJSON&&(h=h.toJSON()),void 0!==(h=f.call(e,a,h))){if("object"!=typeof h||null===h)return n.stringify(h);if(i(h)){for(var b=[],g=0;g="0"&&n<="9";)e+=n,f();if("."===n)for(e+=".";f()&&n>="0"&&n<="9";)e+=n;if("e"===n||"E"===n)for(e+=n,f(),"-"!==n&&"+"!==n||(e+=n,f());n>="0"&&n<="9";)e+=n,f();if(t=+e,isFinite(t))return t;s("Bad number")},c=function(){var t,e,r,i="";if('"'===n)for(;f();){if('"'===n)return f(),i;if("\\"===n)if(f(),"u"===n){for(r=0,e=0;e<4&&(t=parseInt(f(),16),isFinite(t));e+=1)r=16*r+t;i+=String.fromCharCode(r)}else{if("string"!=typeof a[n])break;i+=a[n]}else i+=n}s("Bad string")},h=function(){for(;n&&n<=" ";)f()};o=function(){switch(h(),n){case"{":return function(){var t,e={};if("{"===n){if(f("{"),h(),"}"===n)return f("}"),e;for(;n;){if(t=c(),h(),f(":"),Object.hasOwnProperty.call(e,t)&&s('Duplicate key "'+t+'"'),e[t]=o(),h(),"}"===n)return f("}"),e;f(","),h()}}s("Bad object")}();case"[":return function(){var t=[];if("["===n){if(f("["),h(),"]"===n)return f("]"),t;for(;n;){if(t.push(o()),h(),"]"===n)return f("]"),t;f(","),h()}}s("Bad array")}();case'"':return c();case"-":return u();default:return n>="0"&&n<="9"?u():function(){switch(n){case"t":return f("t"),f("r"),f("u"),f("e"),!0;case"f":return f("f"),f("a"),f("l"),f("s"),f("e"),!1;case"n":return f("n"),f("u"),f("l"),f("l"),null}s("Unexpected '"+n+"'")}()}},t.exports=function(t,e){var a;return i=t,r=0,n=" ",a=o(),h(),n&&s("Syntax error"),"function"==typeof e?function t(r,n){var i,o,a=r[n];if(a&&"object"==typeof a)for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(void 0!==(o=t(a,i))?a[i]=o:delete a[i]);return e.call(r,n,a)}({"":a},""):a}},function(t,e){var r,n,i,o=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function s(t){return o.lastIndex=0,o.test(t)?'"'+t.replace(o,(function(t){var e=a[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+t+'"'}t.exports=function(t,e,o){var a;if(r="",n="","number"==typeof o)for(a=0;a0&&(h=setTimeout((function(){if(!u){u=!0,c.abort("timeout");var t=new Error("XMLHttpRequest timeout");t.code="ETIMEDOUT",i(t)}}),t.timeout)),c.setRequestHeader)for(s in b)b.hasOwnProperty(s)&&c.setRequestHeader(s,b[s]);else if(t.headers&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(t.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in t&&(c.responseType=t.responseType),"beforeSend"in t&&"function"==typeof t.beforeSend&&t.beforeSend(c),c.send(p||null),c}t.exports=f,t.exports.default=f,f.XMLHttpRequest=n.XMLHttpRequest||function(){},f.XDomainRequest="withCredentials"in new f.XMLHttpRequest?f.XMLHttpRequest:n.XDomainRequest,function(t,e){for(var r=0;r-32e3)throw new Error("Invalid error code");if(!(this instanceof c))return new c(t);i.call(this,"Server error",t)};n(c,i),i.ParseError=o,i.InvalidRequest=a,i.MethodNotFound=s,i.InvalidParams=f,i.InternalError=u,i.ServerError=c,t.exports=i},function(t,e,r){var n=r(123),i=r(272),o=r(125),a=r(273);t.exports.Backoff=n,t.exports.FunctionCall=a,t.exports.FibonacciStrategy=o,t.exports.ExponentialStrategy=i,t.exports.fibonacci=function(t){return new n(new o(t))},t.exports.exponential=function(t){return new n(new i(t))},t.exports.call=function(t,e,r){var n=Array.prototype.slice.call(arguments);return t=n[0],e=n.slice(1,n.length-1),r=n[n.length-1],new a(t,e,r)}},function(t,e,r){var n=r(23),i=t.exports=r(271);function o(t,e,r,i){r=r||"";var o=new t(n.format.apply(this,[r].concat(i)));throw Error.captureStackTrace(o,e),o}function a(t,e,r){o(i.IllegalArgumentError,t,e,r)}function s(t,e,r){o(i.IllegalStateError,t,e,r)}function f(t){var e=typeof t;if("object"==e){if(!t)return"null";if(t instanceof Array)return"array"}return e}function u(t){return function(e,r){var n=f(e);if(n==t)return e;a(arguments.callee,r||'Expected "'+t+'" but got "'+n+'".',Array.prototype.slice.call(arguments,2))}}t.exports.checkArgument=function(t,e){t||a(arguments.callee,e,Array.prototype.slice.call(arguments,2))},t.exports.checkState=function(t,e){t||s(arguments.callee,e,Array.prototype.slice.call(arguments,2))},t.exports.checkIsDef=function(t,e){if(void 0!==t)return t;a(arguments.callee,e||"Expected value to be defined but was undefined.",Array.prototype.slice.call(arguments,2))},t.exports.checkIsDefAndNotNull=function(t,e){if(null!=t)return t;a(arguments.callee,e||'Expected value to be defined and not null but got "'+f(t)+'".',Array.prototype.slice.call(arguments,2))},t.exports.checkIsString=u("string"),t.exports.checkIsArray=u("array"),t.exports.checkIsNumber=u("number"),t.exports.checkIsBoolean=u("boolean"),t.exports.checkIsFunction=u("function"),t.exports.checkIsObject=u("object")},function(t,e,r){var n=r(23);function i(t){Error.call(this,t),this.message=t}function o(t){Error.call(this,t),this.message=t}n.inherits(i,Error),i.prototype.name="IllegalArgumentError",n.inherits(o,Error),o.prototype.name="IllegalStateError",t.exports.IllegalStateError=o,t.exports.IllegalArgumentError=i},function(t,e,r){var n=r(23),i=r(85),o=r(124);function a(t){o.call(this,t),this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay(),this.factor_=a.DEFAULT_FACTOR,t&&void 0!==t.factor&&(i.checkArgument(t.factor>1,"Exponential factor should be greater than 1 but got %s.",t.factor),this.factor_=t.factor)}n.inherits(a,o),a.DEFAULT_FACTOR=2,a.prototype.next_=function(){return this.backoffDelay_=Math.min(this.nextBackoffDelay_,this.getMaxDelay()),this.nextBackoffDelay_=this.backoffDelay_*this.factor_,this.backoffDelay_},a.prototype.reset_=function(){this.backoffDelay_=0,this.nextBackoffDelay_=this.getInitialDelay()},t.exports=a},function(t,e,r){var n=r(15),i=r(85),o=r(23),a=r(123),s=r(125);function f(t,e,r){n.EventEmitter.call(this),i.checkIsFunction(t,"Expected fn to be a function."),i.checkIsArray(e,"Expected args to be an array."),i.checkIsFunction(r,"Expected callback to be a function."),this.function_=t,this.arguments_=e,this.callback_=r,this.lastResult_=[],this.numRetries_=0,this.backoff_=null,this.strategy_=null,this.failAfter_=-1,this.retryPredicate_=f.DEFAULT_RETRY_PREDICATE_,this.state_=f.State_.PENDING}o.inherits(f,n.EventEmitter),f.State_={PENDING:0,RUNNING:1,COMPLETED:2,ABORTED:3},f.DEFAULT_RETRY_PREDICATE_=function(t){return!0},f.prototype.isPending=function(){return this.state_==f.State_.PENDING},f.prototype.isRunning=function(){return this.state_==f.State_.RUNNING},f.prototype.isCompleted=function(){return this.state_==f.State_.COMPLETED},f.prototype.isAborted=function(){return this.state_==f.State_.ABORTED},f.prototype.setStrategy=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.strategy_=t,this},f.prototype.retryIf=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.retryPredicate_=t,this},f.prototype.getLastResult=function(){return this.lastResult_.concat()},f.prototype.getNumRetries=function(){return this.numRetries_},f.prototype.failAfter=function(t){return i.checkState(this.isPending(),"FunctionCall in progress."),this.failAfter_=t,this},f.prototype.abort=function(){this.isCompleted()||this.isAborted()||(this.isRunning()&&this.backoff_.reset(),this.state_=f.State_.ABORTED,this.lastResult_=[new Error("Backoff aborted.")],this.emit("abort"),this.doCallback_())},f.prototype.start=function(t){i.checkState(!this.isAborted(),"FunctionCall is aborted."),i.checkState(this.isPending(),"FunctionCall already started.");var e=this.strategy_||new s;this.backoff_=t?t(e):new a(e),this.backoff_.on("ready",this.doCall_.bind(this,!0)),this.backoff_.on("fail",this.doCallback_.bind(this)),this.backoff_.on("backoff",this.handleBackoff_.bind(this)),this.failAfter_>0&&this.backoff_.failAfter(this.failAfter_),this.state_=f.State_.RUNNING,this.doCall_(!1)},f.prototype.doCall_=function(t){t&&this.numRetries_++;var e=["call"].concat(this.arguments_);n.EventEmitter.prototype.emit.apply(this,e);var r=this.handleFunctionCallback_.bind(this);this.function_.apply(null,this.arguments_.concat(r))},f.prototype.doCallback_=function(){this.callback_.apply(null,this.lastResult_)},f.prototype.handleFunctionCallback_=function(){if(!this.isAborted()){var t=Array.prototype.slice.call(arguments);this.lastResult_=t,n.EventEmitter.prototype.emit.apply(this,["callback"].concat(t));var e=t[0];e&&this.retryPredicate_(e)?this.backoff_.backoff(e):(this.state_=f.State_.COMPLETED,this.doCallback_())}},f.prototype.handleBackoff_=function(t,e,r){this.emit("backoff",t,e,r)},t.exports=f},function(t,e){},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){if(e=(0,o.default)(e||i.default),!(0,n.default)(t))return e(new Error("First argument to waterfall must be an array of functions"));if(!t.length)return e();var r=0;function u(e){var n=(0,f.default)(t[r++]);e.push((0,s.default)(c)),n.apply(null,e)}function c(n){if(n||r===t.length)return e.apply(null,arguments);u((0,a.default)(arguments,1))}u([])};var n=u(r(121)),i=u(r(51)),o=u(r(81)),a=u(r(60)),s=u(r(83)),f=u(r(39));function u(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){(0,i.default)(n.default,t,e)};var n=o(r(113)),i=o(r(277));function o(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,r){r=r||n.default;var s=(0,i.default)(e)?[]:{};t(e,(function(t,e,r){(0,a.default)(t)((function(t,n){arguments.length>2&&(n=(0,o.default)(arguments,1)),s[e]=n,r(t)}))}),(function(t){r(t,s)}))};var n=s(r(51)),i=s(r(59)),o=s(r(60)),a=s(r(39));function s(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},function(t,e,r){const n=r(73),i=r(279);function o(t){const e=new Error("Expect argument to be non-empty array");if("object"!=typeof t||!t.length)throw e;const r=t.map((function(t){return"bytes"===t.type?n.toBuffer(t.value):t.value})),o=t.map((function(t){return t.type})),a=t.map((function(t){if(!t.name)throw e;return t.type+" "+t.name}));return i.soliditySHA3(["bytes32","bytes32"],[i.soliditySHA3(new Array(t.length).fill("string"),a),i.soliditySHA3(o,r)])}function a(t,e){const r=n.toBuffer(e),i=n.fromRpcSig(r);return n.ecrecover(t,i.v,i.r,i.s)}function s(t){const e=n.toBuffer(t.data);return a(n.hashPersonalMessage(e),t.sig)}function f(t,e){for(var r=""+t;r.lengtho)throw new Error("Elements exceed array size: "+o);for(l in h=[],t=t.slice(0,t.lastIndexOf("[")),"string"==typeof r&&(r=JSON.parse(r)),r)h.push(d(t,r[l]));if("dynamic"===o){var p=d("uint256",r.length);h.unshift(p)}return e.concat(h)}if("bytes"===t)return r=e.from(r),h=e.concat([d("uint256",r.length),r]),r.length%32!=0&&(h=e.concat([h,n.zeros(32-r.length%32)])),h;if(t.startsWith("bytes")){if((o=s(t))<1||o>32)throw new Error("Invalid bytes width: "+o);return n.setLengthRight(r,32)}if(t.startsWith("uint")){if((o=s(t))%8||o<8||o>256)throw new Error("Invalid uint width: "+o);if((a=c(r)).bitLength()>o)throw new Error("Supplied uint exceeds width: "+o+" vs "+a.bitLength());if(a<0)throw new Error("Supplied uint is negative");return a.toArrayLike(e,"be",32)}if(t.startsWith("int")){if((o=s(t))%8||o<8||o>256)throw new Error("Invalid int width: "+o);if((a=c(r)).bitLength()>o)throw new Error("Supplied int exceeds width: "+o+" vs "+a.bitLength());return a.toTwos(256).toArrayLike(e,"be",32)}if(t.startsWith("ufixed")){if(o=f(t),(a=c(r))<0)throw new Error("Supplied ufixed is negative");return d("uint256",a.mul(new i(2).pow(new i(o[1]))))}if(t.startsWith("fixed"))return o=f(t),d("int256",c(r).mul(new i(2).pow(new i(o[1]))));throw new Error("Unsupported or invalid type: "+t)}function l(t,r,n){var o,a,s,f;if("string"==typeof t&&(t=p(t)),"address"===t.name)return l(t.rawType,r,n).toArrayLike(e,"be",20).toString("hex");if("bool"===t.name)return l(t.rawType,r,n).toString()===new i(1).toString();if("string"===t.name){var u=l(t.rawType,r,n);return e.from(u,"utf8").toString()}if(t.isArray){for(s=[],o=t.size,"dynamic"===t.size&&(n=l("uint256",r,n).toNumber(),o=l("uint256",r,n).toNumber(),n+=32),f=0;ft.size)throw new Error("Decoded int exceeds width: "+t.size+" vs "+a.bitLength());return a}if(t.name.startsWith("int")){if((a=new i(r.slice(n,n+32),16,"be").fromTwos(256)).bitLength()>t.size)throw new Error("Decoded uint exceeds width: "+t.size+" vs "+a.bitLength());return a}if(t.name.startsWith("ufixed")){if(o=new i(2).pow(new i(t.size[1])),!(a=l("uint256",r,n)).mod(o).isZero())throw new Error("Decimals not supported yet");return a.div(o)}if(t.name.startsWith("fixed")){if(o=new i(2).pow(new i(t.size[1])),!(a=l("int256",r,n)).mod(o).isZero())throw new Error("Decimals not supported yet");return a.div(o)}throw new Error("Unsupported or invalid type: "+t.name)}function p(t){var e,r,n;if(g(t)){e=u(t);var i=t.slice(0,t.lastIndexOf("["));return i=p(i),r={isArray:!0,name:t,size:e,memoryUsage:"dynamic"===e?32:i.memoryUsage*e,subArray:i}}switch(t){case"address":n="uint160";break;case"bool":n="uint8";break;case"string":n="bytes"}if(r={rawType:n,name:t,memoryUsage:32},t.startsWith("bytes")&&"bytes"!==t||t.startsWith("uint")||t.startsWith("int")?r.size=s(t):(t.startsWith("ufixed")||t.startsWith("fixed"))&&(r.size=f(t)),t.startsWith("bytes")&&"bytes"!==t&&(r.size<1||r.size>32))throw new Error("Invalid bytes width: "+r.size);if((t.startsWith("uint")||t.startsWith("int"))&&(r.size%8||r.size<8||r.size>256))throw new Error("Invalid int/uint width: "+r.size);return r}function b(t){return"string"===t||"bytes"===t||"dynamic"===u(t)}function g(t){return t.lastIndexOf("]")===t.length-1}function y(t,e){return t.startsWith("address")||t.startsWith("bytes")?"0x"+e.toString("hex"):e.toString()}o.eventID=function(t,r){var i=t+"("+r.map(a).join(",")+")";return n.keccak256(e.from(i))},o.methodID=function(t,e){return o.eventID(t,e).slice(0,4)},o.rawEncode=function(t,r){var n=[],i=[],o=0;t.forEach((function(t){if(g(t)){var e=u(t);o+="dynamic"!==e?32*e:32}else o+=32}));for(var s=0;sd)throw new Error("Elements exceed array size: "+d)}var l=r.map((function(t){return o.solidityHexValue(h,t,256)}));return e.concat(l)}if("bytes"===t)return r;if("string"===t)return e.from(r,"utf8");if("bool"===t){i=i||8;var p=Array(i/4).join("0");return e.from(r?p+"1":p+"0","hex")}if("address"===t){var b=20;return i&&(b=i/8),n.setLengthLeft(r,b)}if(t.startsWith("bytes")){if((a=s(t))<1||a>32)throw new Error("Invalid bytes width: "+a);return n.setLengthRight(r,a)}if(t.startsWith("uint")){if((a=s(t))%8||a<8||a>256)throw new Error("Invalid uint width: "+a);if((f=c(r)).bitLength()>a)throw new Error("Supplied uint exceeds width: "+a+" vs "+f.bitLength());return i=i||a,f.toArrayLike(e,"be",i/8)}if(t.startsWith("int")){if((a=s(t))%8||a<8||a>256)throw new Error("Invalid int width: "+a);if((f=c(r)).bitLength()>a)throw new Error("Supplied int exceeds width: "+a+" vs "+f.bitLength());return i=i||a,f.toTwos(a).toArrayLike(e,"be",i/8)}throw new Error("Unsupported or invalid type: "+t)},o.solidityPack=function(t,r){if(t.length!==r.length)throw new Error("Number of types are not matching the values");for(var n=[],i=0;i="0"&&e<="9");)o+=t[a]-"0",a++;n=a-1,r.push(o)}else if("i"===i)r.push("int256");else{if("a"!==i)throw new Error("Unsupported or invalid type: "+i);r.push("int256[]")}}return r},o.toSerpent=function(t){for(var e=[],r=0;r=8?o+=t[a].toUpperCase():o+=t[a];return o},e.isValidChecksumAddress=function(t,r){return e.isValidAddress(t)&&e.toChecksumAddress(t,r)===t},e.generateAddress=function(e,r){e=s.toBuffer(e);var n=new a(r);return n.isZero()?f.rlphash([e,null]).slice(-20):f.rlphash([e,t.from(n.toArray())]).slice(-20)},e.generateAddress2=function(e,r,i){var o=s.toBuffer(e),a=s.toBuffer(r),u=s.toBuffer(i);return n(20===o.length),n(32===a.length),f.keccak256(t.concat([t.from("ff","hex"),o,a,f.keccak256(u)])).slice(-20)},e.isPrecompiled=function(t){var e=s.unpad(t);return 1===e.length&&e[0]>=1&&e[0]<=8},e.isValidPrivate=function(t){return o.privateKeyVerify(t)},e.isValidPublic=function(e,r){return void 0===r&&(r=!1),64===e.length?o.publicKeyVerify(t.concat([t.from([4]),e])):!!r&&o.publicKeyVerify(e)},e.pubToAddress=function(t,e){return void 0===e&&(e=!1),t=s.toBuffer(t),e&&64!==t.length&&(t=o.publicKeyConvert(t,!1).slice(1)),n(64===t.length),f.keccak(t).slice(-20)},e.publicToAddress=e.pubToAddress,e.privateToAddress=function(t){return e.publicToAddress(e.privateToPublic(t))},e.privateToPublic=function(t){return t=s.toBuffer(t),o.publicKeyCreate(t,!1).slice(1)},e.importPublic=function(t){return 64!==(t=s.toBuffer(t)).length&&(t=o.publicKeyConvert(t,!1).slice(1)),t}}).call(this,r(6).Buffer)},function(t,e,r){"use strict";t.exports=r(285)(r(288))},function(t,e,r){"use strict";const n=r(286),i=r(287);t.exports=function(t){const e=n(t),r=i(t);return function(t,n){switch("string"==typeof t?t.toLowerCase():t){case"keccak224":return new e(1152,448,null,224,n);case"keccak256":return new e(1088,512,null,256,n);case"keccak384":return new e(832,768,null,384,n);case"keccak512":return new e(576,1024,null,512,n);case"sha3-224":return new e(1152,448,6,224,n);case"sha3-256":return new e(1088,512,6,256,n);case"sha3-384":return new e(832,768,6,384,n);case"sha3-512":return new e(576,1024,6,512,n);case"shake128":return new r(1344,256,31,n);case"shake256":return new r(1088,512,31,n);default:throw new Error("Invald algorithm: "+t)}}}},function(t,e,r){"use strict";const n=r(14).Buffer,i=r(33).Transform,o=r(11);t.exports=function(t){function e(e,r,n,o,a){i.call(this,a),this._rate=e,this._capacity=r,this._delimitedSuffix=n,this._hashBitLength=o,this._options=a,this._state=new t,this._state.initialize(e,r),this._finalized=!1}return o(e,i),e.prototype._transform=function(t,e,r){let n=null;try{this.update(t,e)}catch(t){n=t}r(n)},e.prototype._flush=function(t){let e=null;try{this.push(this.digest())}catch(t){e=t}t(e)},e.prototype.update=function(t,e){if(!n.isBuffer(t)&&"string"!=typeof t)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Digest already called");return n.isBuffer(t)||(t=n.from(t,e)),this._state.absorb(t),this},e.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0,this._delimitedSuffix&&this._state.absorbLastFewBits(this._delimitedSuffix);let e=this._state.squeeze(this._hashBitLength/8);return void 0!==t&&(e=e.toString(t)),this._resetState(),e},e.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},e.prototype._clone=function(){const t=new e(this._rate,this._capacity,this._delimitedSuffix,this._hashBitLength,this._options);return this._state.copy(t._state),t._finalized=this._finalized,t},e}},function(t,e,r){"use strict";const n=r(14).Buffer,i=r(33).Transform,o=r(11);t.exports=function(t){function e(e,r,n,o){i.call(this,o),this._rate=e,this._capacity=r,this._delimitedSuffix=n,this._options=o,this._state=new t,this._state.initialize(e,r),this._finalized=!1}return o(e,i),e.prototype._transform=function(t,e,r){let n=null;try{this.update(t,e)}catch(t){n=t}r(n)},e.prototype._flush=function(){},e.prototype._read=function(t){this.push(this.squeeze(t))},e.prototype.update=function(t,e){if(!n.isBuffer(t)&&"string"!=typeof t)throw new TypeError("Data must be a string or a buffer");if(this._finalized)throw new Error("Squeeze already called");return n.isBuffer(t)||(t=n.from(t,e)),this._state.absorb(t),this},e.prototype.squeeze=function(t,e){this._finalized||(this._finalized=!0,this._state.absorbLastFewBits(this._delimitedSuffix));let r=this._state.squeeze(t);return void 0!==e&&(r=r.toString(e)),r},e.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},e.prototype._clone=function(){const t=new e(this._rate,this._capacity,this._delimitedSuffix,this._options);return this._state.copy(t._state),t._finalized=this._finalized,t},e}},function(t,e,r){"use strict";const n=r(14).Buffer,i=r(289);function o(){this.state=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.blockSize=null,this.count=0,this.squeezing=!1}o.prototype.initialize=function(t,e){for(let t=0;t<50;++t)this.state[t]=0;this.blockSize=t/8,this.count=0,this.squeezing=!1},o.prototype.absorb=function(t){for(let e=0;e>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0);return e},o.prototype.copy=function(t){for(let e=0;e<50;++e)t.state[e]=this.state[e];t.blockSize=this.blockSize,t.count=this.count,t.squeezing=this.squeezing},t.exports=o},function(t,e,r){"use strict";const n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];e.p1600=function(t){for(let e=0;e<24;++e){const r=t[0]^t[10]^t[20]^t[30]^t[40],i=t[1]^t[11]^t[21]^t[31]^t[41],o=t[2]^t[12]^t[22]^t[32]^t[42],a=t[3]^t[13]^t[23]^t[33]^t[43],s=t[4]^t[14]^t[24]^t[34]^t[44],f=t[5]^t[15]^t[25]^t[35]^t[45],u=t[6]^t[16]^t[26]^t[36]^t[46],c=t[7]^t[17]^t[27]^t[37]^t[47],h=t[8]^t[18]^t[28]^t[38]^t[48],d=t[9]^t[19]^t[29]^t[39]^t[49];let l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31);const b=t[0]^l,g=t[1]^p,y=t[10]^l,m=t[11]^p,v=t[20]^l,_=t[21]^p,w=t[30]^l,E=t[31]^p,S=t[40]^l,A=t[41]^p;l=r^(s<<1|f>>>31),p=i^(f<<1|s>>>31);const x=t[2]^l,M=t[3]^p,k=t[12]^l,I=t[13]^p,T=t[22]^l,R=t[23]^p,L=t[32]^l,P=t[33]^p,B=t[42]^l,C=t[43]^p;l=o^(u<<1|c>>>31),p=a^(c<<1|u>>>31);const O=t[4]^l,N=t[5]^p,j=t[14]^l,D=t[15]^p,q=t[24]^l,z=t[25]^p,U=t[34]^l,F=t[35]^p,K=t[44]^l,H=t[45]^p;l=s^(h<<1|d>>>31),p=f^(d<<1|h>>>31);const V=t[6]^l,Y=t[7]^p,W=t[16]^l,G=t[17]^p,Z=t[26]^l,J=t[27]^p,X=t[36]^l,$=t[37]^p,Q=t[46]^l,tt=t[47]^p;l=u^(r<<1|i>>>31),p=c^(i<<1|r>>>31);const et=t[8]^l,rt=t[9]^p,nt=t[18]^l,it=t[19]^p,ot=t[28]^l,at=t[29]^p,st=t[38]^l,ft=t[39]^p,ut=t[48]^l,ct=t[49]^p,ht=b,dt=g,lt=m<<4|y>>>28,pt=y<<4|m>>>28,bt=v<<3|_>>>29,gt=_<<3|v>>>29,yt=E<<9|w>>>23,mt=w<<9|E>>>23,vt=S<<18|A>>>14,_t=A<<18|S>>>14,wt=x<<1|M>>>31,Et=M<<1|x>>>31,St=I<<12|k>>>20,At=k<<12|I>>>20,xt=T<<10|R>>>22,Mt=R<<10|T>>>22,kt=P<<13|L>>>19,It=L<<13|P>>>19,Tt=B<<2|C>>>30,Rt=C<<2|B>>>30,Lt=N<<30|O>>>2,Pt=O<<30|N>>>2,Bt=j<<6|D>>>26,Ct=D<<6|j>>>26,Ot=z<<11|q>>>21,Nt=q<<11|z>>>21,jt=U<<15|F>>>17,Dt=F<<15|U>>>17,qt=H<<29|K>>>3,zt=K<<29|H>>>3,Ut=V<<28|Y>>>4,Ft=Y<<28|V>>>4,Kt=G<<23|W>>>9,Ht=W<<23|G>>>9,Vt=Z<<25|J>>>7,Yt=J<<25|Z>>>7,Wt=X<<21|$>>>11,Gt=$<<21|X>>>11,Zt=tt<<24|Q>>>8,Jt=Q<<24|tt>>>8,Xt=et<<27|rt>>>5,$t=rt<<27|et>>>5,Qt=nt<<20|it>>>12,te=it<<20|nt>>>12,ee=at<<7|ot>>>25,re=ot<<7|at>>>25,ne=st<<8|ft>>>24,ie=ft<<8|st>>>24,oe=ut<<14|ct>>>18,ae=ct<<14|ut>>>18;t[0]=ht^~St&Ot,t[1]=dt^~At&Nt,t[10]=Ut^~Qt&bt,t[11]=Ft^~te>,t[20]=wt^~Bt&Vt,t[21]=Et^~Ct&Yt,t[30]=Xt^~lt&xt,t[31]=$t^~pt&Mt,t[40]=Lt^~Kt&ee,t[41]=Pt^~Ht&re,t[2]=St^~Ot&Wt,t[3]=At^~Nt&Gt,t[12]=Qt^~bt&kt,t[13]=te^~gt&It,t[22]=Bt^~Vt&ne,t[23]=Ct^~Yt&ie,t[32]=lt^~xt&jt,t[33]=pt^~Mt&Dt,t[42]=Kt^~ee&yt,t[43]=Ht^~re&mt,t[4]=Ot^~Wt&oe,t[5]=Nt^~Gt&ae,t[14]=bt^~kt&qt,t[15]=gt^~It&zt,t[24]=Vt^~ne&vt,t[25]=Yt^~ie&_t,t[34]=xt^~jt&Zt,t[35]=Mt^~Dt&Jt,t[44]=ee^~yt&Tt,t[45]=re^~mt&Rt,t[6]=Wt^~oe&ht,t[7]=Gt^~ae&dt,t[16]=kt^~qt&Ut,t[17]=It^~zt&Ft,t[26]=ne^~vt&wt,t[27]=ie^~_t&Et,t[36]=jt^~Zt&Xt,t[37]=Dt^~Jt&$t,t[46]=yt^~Tt&Lt,t[47]=mt^~Rt&Pt,t[8]=oe^~ht&St,t[9]=ae^~dt&At,t[18]=qt^~Ut&Qt,t[19]=zt^~Ft&te,t[28]=vt^~wt&Bt,t[29]=_t^~Et&Ct,t[38]=Zt^~Xt<,t[39]=Jt^~$t&pt,t[48]=Tt^~Lt&Kt,t[49]=Rt^~Pt&Ht,t[0]^=n[2*e],t[1]^=n[2*e+1]}}},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=r(55),i=r(16),o=r(53),a=r(86);function s(t,e){return e?t-(2*e+35):t-27}function f(t){return 0===t||1===t}e.ecsign=function(t,e,r){var i=n.sign(t,e),o=i.recovery;return{r:i.signature.slice(0,32),s:i.signature.slice(32,64),v:r?o+(2*r+35):o+27}},e.ecrecover=function(e,r,i,a,u){var c=t.concat([o.setLength(i,32),o.setLength(a,32)],64),h=s(r,u);if(!f(h))throw new Error("Invalid signature v value");var d=n.recover(e,c,h);return n.publicKeyConvert(d,!1).slice(1)},e.toRpcSig=function(e,r,n,i){if(!f(s(e,i)))throw new Error("Invalid signature v value");return o.bufferToHex(t.concat([o.setLengthLeft(r,32),o.setLengthLeft(n,32),o.toBuffer(e)]))},e.fromRpcSig=function(t){var e=o.toBuffer(t);if(65!==e.length)throw new Error("Invalid signature length");var r=e[64];return r<27&&(r+=27),{v:r,r:e.slice(0,32),s:e.slice(32,64)}},e.isValidSignature=function(t,e,r,n,o){void 0===n&&(n=!0);var a=new i("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),u=new i("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);if(32!==e.length||32!==r.length)return!1;if(!f(s(t,o)))return!1;var c=new i(e),h=new i(r);return!(c.isZero()||c.gt(u)||h.isZero()||h.gt(u))&&(!n||1!==h.cmp(a))},e.hashPersonalMessage=function(e){var r=t.from("Ethereum Signed Message:\n"+e.length.toString(),"utf-8");return a.keccak(t.concat([r,e]))}}).call(this,r(6).Buffer)},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var n=r(79),i=r(38),o=r(57),a=r(53);e.defineProperties=function(e,r,s){if(e.raw=[],e._fields=[],e.toJSON=function(t){if(void 0===t&&(t=!1),t){var r={};return e._fields.forEach((function(t){r[t]="0x"+e[t].toString("hex")})),r}return a.baToJSON(e.raw)},e.serialize=function(){return o.encode(e.raw)},r.forEach((function(r,i){function o(){return e.raw[i]}function s(o){"00"!==(o=a.toBuffer(o)).toString("hex")||r.allowZero||(o=t.allocUnsafe(0)),r.allowLess&&r.length?(o=a.stripZeros(o),n(r.length>=o.length,"The field "+r.name+" must not have more "+r.length+" bytes")):r.allowZero&&0===o.length||!r.length||n(r.length===o.length,"The field "+r.name+" must have byte length of "+r.length),e.raw[i]=o}e._fields.push(r.name),Object.defineProperty(e,r.name,{enumerable:!0,configurable:!0,get:o,set:s}),r.default&&(e[r.name]=r.default),r.alias&&Object.defineProperty(e,r.alias,{enumerable:!1,configurable:!0,set:s,get:o})})),s)if("string"==typeof s&&(s=t.from(i.stripHexPrefix(s),"hex")),t.isBuffer(s)&&(s=o.decode(s)),Array.isArray(s)){if(s.length>e._fields.length)throw new Error("wrong number of fields in data");s.forEach((function(t,r){e[e._fields[r]]=a.toBuffer(t)}))}else{if("object"!=typeof s)throw new Error("invalid data");var f=Object.keys(s);r.forEach((function(t){-1!==f.indexOf(t.name)&&(e[t.name]=s[t.name]),-1!==f.indexOf(t.alias)&&(e[t.alias]=s[t.alias])}))}}}).call(this,r(6).Buffer)},function(t,e,r){(function(e){!function(r){"use strict";var n=function(t){setTimeout(t,0)};void 0!==e&&e&&"function"==typeof e.nextTick&&(n=e.nextTick),t.exports=function(t){var e={capacity:t||1,current:0,queue:[],firstHere:!1,take:function(){if(!1===e.firstHere){e.current++,e.firstHere=!0;var t=1}else t=0;var r={n:1};"function"==typeof arguments[0]?r.task=arguments[0]:r.n=arguments[0],arguments.length>=2&&("function"==typeof arguments[1]?r.task=arguments[1]:r.n=arguments[1]);var n=r.task;if(r.task=function(){n(e.leave)},e.current+r.n-t>e.capacity)return 1===t&&(e.current--,e.firstHere=!1),e.queue.push(r);e.current+=r.n-t,r.task(e.leave),1===t&&(e.firstHere=!1)},leave:function(t){if(t=t||1,e.current-=t,e.queue.length){var r=e.queue[0];r.n+e.current>e.capacity||(e.queue.shift(),e.current+=r.n,n(r.task))}else if(e.current<0)throw new Error("leave called too many times.")},available:function(t){return t=t||1,e.current+t<=e.capacity}};return e}}()}).call(this,r(12))},function(t,e,r){const n=r(52);t.exports=function(t,e,r){t.sendAsync(n({method:"eth_estimateGas",params:[e]}),(function(t,e){if(t)return"no contract code at given address"===t.message?r(null,"0xcf08"):r(t);r(null,e.result)}))}}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiU2NhdHRlckpTXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ibi5qcy9saWIvYm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3V0aWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9saWIvc3RyaW5nX2RlY29kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fd3JpdGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1hc3NlcnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGpzLXV0aWwvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC93cmFwQXN5bmMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2Vycm9ycy1icm93c2VyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLWJhc2Uvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvdXRpbC9jcmVhdGUtcGF5bG9hZC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtdXRpbC9kaXN0L2J5dGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zZWNwMjU2azEvZWxsaXB0aWMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9iYXNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ybHAvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMveHRlbmQvaW1tdXRhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHJpbmdfZGVjb2Rlci9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS93cml0YWJsZS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy11dGlsL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXNzZXJ0L2Fzc2VydC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9vbmNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9vbmx5T25jZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvc3VicHJvdmlkZXJzL3N1YnByb3ZpZGVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wcmVjb25kL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLWFiaS9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy11dGlsL2Rpc3QvaGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLWJhc2Uvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLWJhc2Uvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMjU2LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhNTEyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYnJvcmFuZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzI1Ni5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvNTEyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9pcy1oZXgtcHJlZml4ZWQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9lYWNoT2YuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2JyZWFrTG9vcC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvaW50ZXJuYWwvZWFjaE9mTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9kb0xpbWl0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9iYWNrb2ZmL2xpYi9iYWNrb2ZmLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9iYWNrb2ZmL2xpYi9zdHJhdGVneS9zdHJhdGVneS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmFja29mZi9saWIvc3RyYXRlZ3kvZmlib25hY2NpLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy93ZWIzLXByb3ZpZGVyLWVuZ2luZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvc3VicHJvdmlkZXJzL3JwYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvc3VicHJvdmlkZXJzL3dlYnNvY2tldC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvc3VicHJvdmlkZXJzL2hvb2tlZC13YWxsZXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9rZWNjYWsvanMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIvYXBpL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9rZWNjYWsvbGliL2FwaS9rZWNjYWsuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIvYXBpL3NoYWtlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9rZWNjYWsvbGliL2tlY2Nhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMva2VjY2FrL2xpYi9rZWNjYWstc3RhdGUtdW5yb2xsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zZWNwMjU2azEvbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zZWNwMjU2azEvbGliL2Fzc2VydC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc2VjcDI1NmsxL2xpYi9kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2JpcDY2L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zZWNwMjU2azEvbGliL2VsbGlwdGljL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9tZDUuanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2gtYmFzZS9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy91dGlsLWRlcHJlY2F0ZS9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLWJhc2Uvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZnJvbS1icm93c2VyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLWJhc2Uvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC1iYXNlL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc2hhLmpzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zaGEuanMvc2hhMS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTIyNC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvc2hhLmpzL3NoYTM4NC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL3Nob3J0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvbW9udC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlL2Vkd2FyZHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8xLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS8yMjQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzM4NC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9yaXBlbWQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3ByZWNvbXB1dGVkL3NlY3AyNTZrMS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9obWFjLWRyYmcvbGliL2htYWMtZHJiZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2tleS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL3NpZ25hdHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VkZHNhL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Eva2V5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Evc2lnbmF0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9zdHJpcC1oZXgtcHJlZml4L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoLWJsb2NrLXRyYWNrZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGgtcXVlcnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb24tcnBjLXJhbmRvbS1pZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvcGlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoLWJsb2NrLXRyYWNrZXIvc3JjL2hleFV0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2RvUGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvZWFjaE9mTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9pbnRlcm5hbC9nZXRJdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvYXN5bmNpZnkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL2luaXRpYWxQYXJhbXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3NldEltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvaW50ZXJuYWwvbWFwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9lYWNoU2VyaWVzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9hc3luYy9lYWNoTGltaXQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3dpdGhvdXRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvd2ViMy1wcm92aWRlci1lbmdpbmUvdXRpbC9zdG9wbGlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3V0aWwvcnBjLWNhY2hlLXV0aWxzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb25pZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3dlYjMtcHJvdmlkZXItZW5naW5lL3V0aWwvcmFuZG9tLWlkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy94aHIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2lzLWZ1bmN0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wYXJzZS1oZWFkZXJzL3BhcnNlLWhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2pzb24tcnBjLWVycm9yL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9qc29uLXJwYy1lcnJvci9saWIvZXJyb3JzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9iYWNrb2ZmL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9wcmVjb25kL2xpYi9jaGVja3MuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3ByZWNvbmQvbGliL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYmFja29mZi9saWIvc3RyYXRlZ3kvZXhwb25lbnRpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2JhY2tvZmYvbGliL2Z1bmN0aW9uX2NhbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL3dhdGVyZmFsbC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvYXN5bmMvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2FzeW5jL2ludGVybmFsL3BhcmFsbGVsLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGgtc2lnLXV0aWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLWFiaS9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLXV0aWwvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtdXRpbC9kaXN0L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtdXRpbC9kaXN0L2FjY291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9rZWNjYWsvanMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9rZWNjYWsvbGliL2FwaS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIvYXBpL2tlY2Nhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9wbHVnaW4td2ViMy9ub2RlX21vZHVsZXMvZXRoZXJldW1qcy1hYmkvbm9kZV9tb2R1bGVzL2tlY2Nhay9saWIvYXBpL3NoYWtlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLWFiaS9ub2RlX21vZHVsZXMva2VjY2FrL2xpYi9rZWNjYWsuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9rZWNjYWsvbGliL2tlY2Nhay1zdGF0ZS11bnJvbGwuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLXV0aWwvZGlzdC9zaWduYXR1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL2V0aGVyZXVtanMtYWJpL25vZGVfbW9kdWxlcy9ldGhlcmV1bWpzLXV0aWwvZGlzdC9vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvcGx1Z2luLXdlYjMvbm9kZV9tb2R1bGVzL3NlbWFwaG9yZS9saWIvc2VtYXBob3JlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3BsdWdpbi13ZWIzL25vZGVfbW9kdWxlcy93ZWIzLXByb3ZpZGVyLWVuZ2luZS91dGlsL2VzdGltYXRlLWdhcy5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlc29sdmUiLCJyZWplY3QiLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJlcnJvciIsImRvbmUiLCJQcm9taXNlIiwidGhlbiIsImZuIiwic2VsZiIsInRoaXMiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJTY2F0dGVySlMiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImxlbmd0aCIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsImJhc2U2NCIsImllZWU3NTQiLCJpc0FycmF5Iiwia01heExlbmd0aCIsIkJ1ZmZlciIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJjcmVhdGVCdWZmZXIiLCJ0aGF0IiwiUmFuZ2VFcnJvciIsIlVpbnQ4QXJyYXkiLCJfX3Byb3RvX18iLCJlbmNvZGluZ09yT2Zmc2V0IiwiRXJyb3IiLCJhbGxvY1Vuc2FmZSIsImZyb20iLCJBcnJheUJ1ZmZlciIsImFycmF5IiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJmcm9tQXJyYXlMaWtlIiwiZnJvbUFycmF5QnVmZmVyIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJzbGljZSIsImZyb21TdHJpbmciLCJvYmoiLCJpc0J1ZmZlciIsImxlbiIsImNoZWNrZWQiLCJjb3B5IiwiYnVmZmVyIiwidmFsIiwidHlwZSIsImRhdGEiLCJmcm9tT2JqZWN0IiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJ0b1N0cmluZyIsImlzVmlldyIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwidG9Mb3dlckNhc2UiLCJzbG93VG9TdHJpbmciLCJzdGFydCIsImVuZCIsImhleFNsaWNlIiwidXRmOFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwiYmFzZTY0U2xpY2UiLCJ1dGYxNmxlU2xpY2UiLCJzd2FwIiwiYiIsImJpZGlyZWN0aW9uYWxJbmRleE9mIiwiZGlyIiwiaXNOYU4iLCJhcnJheUluZGV4T2YiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiLCJhcnIiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJTdHJpbmciLCJyZWFkIiwiYnVmIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaiIsImhleFdyaXRlIiwib2Zmc2V0IiwiTnVtYmVyIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsInN0ciIsImJ5dGVBcnJheSIsInB1c2giLCJjaGFyQ29kZUF0IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwiZnJvbUJ5dGVBcnJheSIsIk1hdGgiLCJtaW4iLCJyZXMiLCJzZWNvbmRCeXRlIiwidGhpcmRCeXRlIiwiZm91cnRoQnl0ZSIsInRlbXBDb2RlUG9pbnQiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZnJvbUNoYXJDb2RlIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiU2xvd0J1ZmZlciIsImFsbG9jIiwiSU5TUEVDVF9NQVhfQllURVMiLCJnbG9iYWwiLCJmb28iLCJzdWJhcnJheSIsImUiLCJ0eXBlZEFycmF5U3VwcG9ydCIsInBvb2xTaXplIiwiX2F1Z21lbnQiLCJzcGVjaWVzIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsIm1hdGNoIiwiam9pbiIsInRoaXNTdGFydCIsInRoaXNFbmQiLCJ0aGlzQ29weSIsInRhcmdldENvcHkiLCJpbmNsdWRlcyIsImlzRmluaXRlIiwidG9KU09OIiwiQXJyYXkiLCJfYXJyIiwicmV0Iiwib3V0IiwidG9IZXgiLCJieXRlcyIsImNoZWNrT2Zmc2V0IiwiZXh0IiwiY2hlY2tJbnQiLCJvYmplY3RXcml0ZVVJbnQxNiIsImxpdHRsZUVuZGlhbiIsIm9iamVjdFdyaXRlVUludDMyIiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzbGljZUxlbiIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicG93IiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsImZsb29yIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0Iiwic2V0IiwiY29kZSIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwidG9CeXRlQXJyYXkiLCJ0cmltIiwicmVwbGFjZSIsInN0cmluZ3RyaW0iLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsImciLCJGdW5jdGlvbiIsIndpbmRvdyIsIl90eXBlb2YiLCJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJjdG9yIiwic3VwZXJDdG9yIiwic3VwZXJfIiwiVGVtcEN0b3IiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwicHJvY2VzcyIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsIm5vb3AiLCJuZXh0VGljayIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIl90eXBlb2YyIiwiaXRlcmF0b3IiLCJjb3B5UHJvcHMiLCJTYWZlQnVmZmVyIiwiUmVmbGVjdE93bktleXMiLCJSIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOdW1iZXJJc05hTiIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJfZXZlbnRzIiwiX2V2ZW50c0NvdW50IiwiX21heExpc3RlbmVycyIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCIkZ2V0TWF4TGlzdGVuZXJzIiwiX2FkZExpc3RlbmVyIiwibGlzdGVuZXIiLCJwcmVwZW5kIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwibmV3TGlzdGVuZXIiLCJ1bnNoaWZ0Iiwid2FybmVkIiwidyIsImVtaXR0ZXIiLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwidW53cmFwTGlzdGVuZXJzIiwiYXJyYXlDbG9uZSIsImxpc3RlbmVyQ291bnQiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJkb0Vycm9yIiwiZXIiLCJtZXNzYWdlIiwiY29udGV4dCIsImhhbmRsZXIiLCJwb3NpdGlvbiIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzaGlmdCIsImluZGV4IiwicG9wIiwic3BsaWNlT25lIiwia2V5cyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJhc3NlcnQiLCJtc2ciLCJpbmhlcml0cyIsIkJOIiwibnVtYmVyIiwiYmFzZSIsImVuZGlhbiIsImlzQk4iLCJuZWdhdGl2ZSIsIndvcmRzIiwicmVkIiwiX2luaXQiLCJ3b3JkU2l6ZSIsInBhcnNlSGV4IiwicGFyc2VCYXNlIiwibnVtIiwibGVmdCIsInJpZ2h0IiwiY21wIiwiX2luaXROdW1iZXIiLCJfaW5pdEFycmF5IiwiX3BhcnNlSGV4IiwiX3BhcnNlQmFzZSIsInN0cmlwIiwidG9BcnJheSIsImNlaWwiLCJsaW1iTGVuIiwibGltYlBvdyIsInRvdGFsIiwibW9kIiwid29yZCIsImltdWxuIiwiX2lhZGRuIiwiZGVzdCIsImNsb25lIiwiX2V4cGFuZCIsIl9ub3JtU2lnbiIsInplcm9zIiwiZ3JvdXBTaXplcyIsImdyb3VwQmFzZXMiLCJzbWFsbE11bFRvIiwiY2FycnkiLCJrIiwibmNhcnJ5IiwicndvcmQiLCJtYXhKIiwicGFkZGluZyIsImdyb3VwU2l6ZSIsImdyb3VwQmFzZSIsImlzWmVybyIsIm1vZG4iLCJpZGl2biIsInRvTnVtYmVyIiwidG9CdWZmZXIiLCJ0b0FycmF5TGlrZSIsIkFycmF5VHlwZSIsInJlcUxlbmd0aCIsInEiLCJhbmRsbiIsIml1c2hybiIsImNsejMyIiwiX2NvdW50Qml0cyIsIl96ZXJvQml0cyIsImJpdExlbmd0aCIsInplcm9CaXRzIiwidG9Ud29zIiwid2lkdGgiLCJhYnMiLCJpbm90biIsImlhZGRuIiwiZnJvbVR3b3MiLCJ0ZXN0biIsIm5vdG4iLCJpbmVnIiwiaXNOZWciLCJuZWciLCJpdW9yIiwiaW9yIiwib3IiLCJ1b3IiLCJpdWFuZCIsImlhbmQiLCJhbmQiLCJ1YW5kIiwiaXV4b3IiLCJpeG9yIiwieG9yIiwidXhvciIsImJ5dGVzTmVlZGVkIiwiYml0c0xlZnQiLCJzZXRuIiwiYml0Iiwid2JpdCIsImlhZGQiLCJpc3ViIiwiYWRkIiwiY29tYjEwTXVsVG8iLCJtaWQiLCJhMCIsImFsMCIsImFoMCIsImExIiwiYWwxIiwiYWgxIiwiYTIiLCJhbDIiLCJhaDIiLCJhMyIsImFsMyIsImFoMyIsImE0IiwiYWw0IiwiYWg0IiwiYTUiLCJhbDUiLCJhaDUiLCJhNiIsImFsNiIsImFoNiIsImE3IiwiYWw3IiwiYWg3IiwiYTgiLCJhbDgiLCJhaDgiLCJhOSIsImFsOSIsImFoOSIsImIwIiwiYmwwIiwiYmgwIiwiYjEiLCJibDEiLCJiaDEiLCJiMiIsImJsMiIsImJoMiIsImIzIiwiYmwzIiwiYmgzIiwiYjQiLCJibDQiLCJiaDQiLCJiNSIsImJsNSIsImJoNSIsImI2IiwiYmw2IiwiYmg2IiwiYjciLCJibDciLCJiaDciLCJiOCIsImJsOCIsImJoOCIsImI5IiwiYmw5IiwiYmg5IiwidzAiLCJpbXVsIiwidzEiLCJ3MiIsInczIiwidzQiLCJ3NSIsInc2IiwidzciLCJ3OCIsInc5IiwidzEwIiwidzExIiwidzEyIiwidzEzIiwidzE0IiwidzE1IiwidzE2IiwidzE3IiwidzE4IiwianVtYm9NdWxUbyIsIkZGVE0iLCJtdWxwIiwibXVsVG8iLCJobmNhcnJ5IiwiYmlnTXVsVG8iLCJtYWtlUkJUIiwiTiIsInJldkJpbiIsInJiIiwicGVybXV0ZSIsInJidCIsInJ3cyIsIml3cyIsInJ0d3MiLCJpdHdzIiwidHJhbnNmb3JtIiwicnR3ZGYiLCJjb3MiLCJQSSIsIml0d2RmIiwic2luIiwicnR3ZGZfIiwiaXR3ZGZfIiwicmUiLCJpZSIsInJvIiwiaW8iLCJyeCIsImd1ZXNzTGVuMTNiIiwib2RkIiwiY29uanVnYXRlIiwibm9ybWFsaXplMTNiIiwid3MiLCJyb3VuZCIsImNvbnZlcnQxM2IiLCJzdHViIiwicGgiLCJfIiwicndzdCIsIml3c3QiLCJucndzIiwibnJ3c3QiLCJuaXdzdCIsInJtd3MiLCJtdWxmIiwibXVsbiIsInNxciIsImlzcXIiLCJ0b0JpdEFycmF5IiwiaXVzaGxuIiwiYml0cyIsImNhcnJ5TWFzayIsIm5ld0NhcnJ5IiwiaXNobG4iLCJoaW50IiwiZXh0ZW5kZWQiLCJoIiwibWFzayIsIm1hc2tlZFdvcmRzIiwiaXNocm4iLCJzaGxuIiwidXNobG4iLCJzaHJuIiwidXNocm4iLCJpbWFza24iLCJtYXNrbiIsImlzdWJuIiwiYWRkbiIsInN1Ym4iLCJpYWJzIiwiX2lzaGxuc3VibXVsIiwiX3dvcmREaXYiLCJiaGkiLCJkaWZmIiwicWoiLCJkaXYiLCJkaXZtb2QiLCJwb3NpdGl2ZSIsImRpdm4iLCJ1bW9kIiwiZGl2Um91bmQiLCJkbSIsImhhbGYiLCJyMiIsImFjYyIsImVnY2QiLCJBIiwiQiIsIkMiLCJEIiwiaXNFdmVuIiwieXAiLCJ4cCIsImltIiwiaXNPZGQiLCJqbSIsImdjZCIsIl9pbnZtcCIsIngxIiwieDIiLCJkZWx0YSIsImNtcG4iLCJpbnZtIiwiYmluY24iLCJ1Y21wIiwiZ3RuIiwiZ3QiLCJndGVuIiwiZ3RlIiwibHRuIiwibHQiLCJsdGVuIiwibHRlIiwiZXFuIiwiZXEiLCJSZWQiLCJ0b1JlZCIsImN0eCIsImNvbnZlcnRUbyIsIl9mb3JjZVJlZCIsImZyb21SZWQiLCJjb252ZXJ0RnJvbSIsImZvcmNlUmVkIiwicmVkQWRkIiwicmVkSUFkZCIsInJlZFN1YiIsInJlZElTdWIiLCJyZWRTaGwiLCJzaGwiLCJyZWRNdWwiLCJfdmVyaWZ5MiIsInJlZElNdWwiLCJyZWRTcXIiLCJfdmVyaWZ5MSIsInJlZElTcXIiLCJyZWRTcXJ0Iiwic3FydCIsInJlZEludm0iLCJyZWROZWciLCJyZWRQb3ciLCJwcmltZXMiLCJrMjU2IiwicDIyNCIsInAxOTIiLCJwMjU1MTkiLCJNUHJpbWUiLCJ0bXAiLCJfdG1wIiwiSzI1NiIsIlAyMjQiLCJQMTkyIiwiUDI1NTE5IiwicHJpbWUiLCJfcHJpbWUiLCJNb250IiwiaW1vZCIsInJpbnYiLCJtaW52IiwiaXJlZHVjZSIsInJsZW4iLCJzcGxpdCIsImltdWxLIiwiaW5wdXQiLCJvdXRwdXQiLCJvdXRMZW4iLCJwcmV2IiwibmV4dCIsIm1vZDMiLCJvbmUiLCJuT25lIiwibHBvdyIsInoiLCJpbnYiLCJ3bmQiLCJjdXJyZW50IiwiY3VycmVudExlbiIsIm1vbnQiLCJ1IiwicG5hIiwib2JqZWN0S2V5cyIsIkR1cGxleCIsInV0aWwiLCJSZWFkYWJsZSIsIldyaXRhYmxlIiwidiIsIm1ldGhvZCIsIm9wdGlvbnMiLCJyZWFkYWJsZSIsImFsbG93SGFsZk9wZW4iLCJvbmVuZCIsIl93cml0YWJsZVN0YXRlIiwiZW5kZWQiLCJvbkVuZE5UIiwiaGlnaFdhdGVyTWFyayIsIl9yZWFkYWJsZVN0YXRlIiwiZGVzdHJveWVkIiwiX2Rlc3Ryb3kiLCJjYiIsIlJlZmVyZW5jZUVycm9yIiwiX3NldFByb3RvdHlwZU9mIiwicnVudGltZSIsIk9wIiwiaGFzT3duIiwiJFN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJDb250ZXh0IiwiX2ludm9rZSIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJHZW5TdGF0ZUV4ZWN1dGluZyIsIkdlblN0YXRlQ29tcGxldGVkIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwiQ29udGludWVTZW50aW5lbCIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVjb3JkIiwidHJ5Q2F0Y2giLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwibWFrZUludm9rZU1ldGhvZCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJ2YWx1ZXMiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJBc3luY0l0ZXJhdG9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJpbnZva2UiLCJyZXN1bHQiLCJfX2F3YWl0IiwidW53cmFwcGVkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsIm1hcmsiLCJhd3JhcCIsImFzeW5jIiwiaXRlciIsInJldmVyc2UiLCJza2lwVGVtcFJlc2V0IiwiY2hhckF0Iiwic3RvcCIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiYWNjaWRlbnRhbFN0cmljdE1vZGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVzY3JpcHRvcnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJmb3JtYXRSZWdFeHAiLCJmb3JtYXQiLCJmIiwiaXNTdHJpbmciLCJvYmplY3RzIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzTnVsbCIsImlzT2JqZWN0IiwiZGVwcmVjYXRlIiwibm9EZXByZWNhdGlvbiIsInRocm93RGVwcmVjYXRpb24iLCJ0cmFjZURlcHJlY2F0aW9uIiwidHJhY2UiLCJkZWJ1Z0Vudmlyb24iLCJkZWJ1Z3MiLCJvcHRzIiwic2VlbiIsInN0eWxpemUiLCJzdHlsaXplTm9Db2xvciIsImRlcHRoIiwiY29sb3JzIiwiaXNCb29sZWFuIiwic2hvd0hpZGRlbiIsIl9leHRlbmQiLCJpc1VuZGVmaW5lZCIsImN1c3RvbUluc3BlY3QiLCJzdHlsaXplV2l0aENvbG9yIiwiZm9ybWF0VmFsdWUiLCJzdHlsZVR5cGUiLCJzdHlsZSIsInN0eWxlcyIsInJlY3Vyc2VUaW1lcyIsImlzRnVuY3Rpb24iLCJwcmltaXRpdmUiLCJzaW1wbGUiLCJpc051bWJlciIsImZvcm1hdFByaW1pdGl2ZSIsInZpc2libGVLZXlzIiwiaGFzaCIsImlkeCIsImFycmF5VG9IYXNoIiwiaXNFcnJvciIsImZvcm1hdEVycm9yIiwiaXNSZWdFeHAiLCJSZWdFeHAiLCJpc0RhdGUiLCJEYXRlIiwiYnJhY2VzIiwidG9VVENTdHJpbmciLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdEFycmF5IiwibWFwIiwicmVkdWNlIiwiY3VyIiwibnVtTGluZXNFc3QiLCJyZWR1Y2VUb1NpbmdsZVN0cmluZyIsImRlc2MiLCJsaW5lIiwiYXIiLCJvYmplY3RUb1N0cmluZyIsInBhZCIsImRlYnVnbG9nIiwiTk9ERV9ERUJVRyIsInRvVXBwZXJDYXNlIiwidGVzdCIsInBpZCIsImlzTnVsbE9yVW5kZWZpbmVkIiwiaXNTeW1ib2wiLCJpc1ByaW1pdGl2ZSIsIm1vbnRocyIsInRpbWVzdGFtcCIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwicHJvcCIsImxvZyIsIm9yaWdpbiIsImtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCIsImNhbGxiYWNraWZ5T25SZWplY3RlZCIsInJlYXNvbiIsIm5ld1JlYXNvbiIsInByb21pc2lmeSIsIm9yaWdpbmFsIiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwicHJvbWlzZSIsImRlZmluZVByb3BlcnRpZXMiLCJjdXN0b20iLCJjYWxsYmFja2lmeSIsImNhbGxiYWNraWZpZWQiLCJtYXliZUNiIiwicmVqIiwidXRpbHMiLCJtaW5Bc3NlcnQiLCJtaW5VdGlscyIsInplcm8yIiwiZW5jb2RlIiwiZ2V0TkFGIiwibmFmIiwiZ2V0SlNGIiwiazEiLCJrMiIsImpzZiIsImQxIiwiZDIiLCJ1MSIsInUyIiwibTgiLCJtMTQiLCJtMjQiLCJjYWNoZWRQcm9wZXJ0eSIsImNvbXB1dGVyIiwicGFyc2VCeXRlcyIsImludEZyb21MRSIsIlN0cmluZ0RlY29kZXIiLCJuYiIsImVuYyIsIm5lbmMiLCJyZXRyaWVkIiwiX25vcm1hbGl6ZUVuY29kaW5nIiwibm9ybWFsaXplRW5jb2RpbmciLCJ0ZXh0IiwidXRmMTZUZXh0IiwidXRmMTZFbmQiLCJmaWxsTGFzdCIsInV0ZjhGaWxsTGFzdCIsImJhc2U2NFRleHQiLCJiYXNlNjRFbmQiLCJzaW1wbGVXcml0ZSIsInNpbXBsZUVuZCIsImxhc3ROZWVkIiwibGFzdFRvdGFsIiwibGFzdENoYXIiLCJ1dGY4Q2hlY2tCeXRlIiwiYnl0ZSIsInV0ZjhDaGVja0V4dHJhQnl0ZXMiLCJ1dGY4Q2hlY2tJbmNvbXBsZXRlIiwiaXNTdXJyb2dhdGVQYWlyIiwiaHRvbmwiLCJ6ZXJvOCIsInRvSGV4MzIiLCJqb2luMzIiLCJzcGxpdDMyIiwicm90cjMyIiwicm90bDMyIiwic3VtMzIiLCJzdW0zMl8zIiwic3VtMzJfNCIsInN1bTMyXzUiLCJzdW02NCIsImFoIiwiYWwiLCJiaCIsInN1bTY0X2hpIiwiYmwiLCJzdW02NF9sbyIsInN1bTY0XzRfaGkiLCJjaCIsImNsIiwiZGgiLCJkbCIsInN1bTY0XzRfbG8iLCJzdW02NF81X2hpIiwiZWgiLCJlbCIsInN1bTY0XzVfbG8iLCJyb3RyNjRfaGkiLCJyb3RyNjRfbG8iLCJzaHI2NF9oaSIsInNocjY0X2xvIiwiYjY0IiwibGVucyIsImdldExlbnMiLCJ2YWxpZExlbiIsInBsYWNlSG9sZGVyc0xlbiIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJOYU4iLCJydCIsIkxOMiIsImFyZzEiLCJhcmcyIiwiYXJnMyIsIlN0cmVhbSIsIkVFIiwiVHJhbnNmb3JtIiwiUGFzc1Rocm91Z2giLCJwaXBlIiwic291cmNlIiwib25kYXRhIiwiY2h1bmsiLCJwYXVzZSIsIm9uZHJhaW4iLCJyZXN1bWUiLCJfaXNTdGRpbyIsIm9uY2xvc2UiLCJkaWRPbkVuZCIsImRlc3Ryb3kiLCJvbmVycm9yIiwiY2xlYW51cCIsIkNvcmtlZFJlcXVlc3QiLCJfdGhpcyIsImNvcmtSZXEiLCJjYWxsYmFjayIsInBlbmRpbmdjYiIsImNvcmtlZFJlcXVlc3RzRnJlZSIsIm9uQ29ya2VkRmluaXNoIiwiYXN5bmNXcml0ZSIsInNldEltbWVkaWF0ZSIsIldyaXRhYmxlU3RhdGUiLCJpbnRlcm5hbFV0aWwiLCJPdXJVaW50OEFycmF5IiwicmVhbEhhc0luc3RhbmNlIiwiZGVzdHJveUltcGwiLCJub3AiLCJzdHJlYW0iLCJpc0R1cGxleCIsIm9iamVjdE1vZGUiLCJ3cml0YWJsZU9iamVjdE1vZGUiLCJod20iLCJ3cml0YWJsZUh3bSIsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsImRlZmF1bHRId20iLCJmaW5hbENhbGxlZCIsIm5lZWREcmFpbiIsImVuZGluZyIsImZpbmlzaGVkIiwibm9EZWNvZGUiLCJkZWNvZGVTdHJpbmdzIiwiZGVmYXVsdEVuY29kaW5nIiwid3JpdGluZyIsImNvcmtlZCIsInN5bmMiLCJidWZmZXJQcm9jZXNzaW5nIiwib253cml0ZSIsIndyaXRlY2IiLCJ3cml0ZWxlbiIsIm9ud3JpdGVTdGF0ZVVwZGF0ZSIsImZpbmlzaE1heWJlIiwiZXJyb3JFbWl0dGVkIiwib253cml0ZUVycm9yIiwibmVlZEZpbmlzaCIsImJ1ZmZlcmVkUmVxdWVzdCIsImNsZWFyQnVmZmVyIiwiYWZ0ZXJXcml0ZSIsImxhc3RCdWZmZXJlZFJlcXVlc3QiLCJwcmVmaW5pc2hlZCIsImJ1ZmZlcmVkUmVxdWVzdENvdW50IiwiX3dyaXRlIiwid3JpdGV2IiwiX3dyaXRldiIsImZpbmFsIiwiX2ZpbmFsIiwiZG9Xcml0ZSIsIm9ud3JpdGVEcmFpbiIsImhvbGRlciIsImFsbEJ1ZmZlcnMiLCJpc0J1ZiIsImNhbGxGaW5hbCIsIm5lZWQiLCJwcmVmaW5pc2giLCJnZXRCdWZmZXIiLCJoYXNJbnN0YW5jZSIsIl91aW50OEFycmF5VG9CdWZmZXIiLCJ3cml0ZUFmdGVyRW5kIiwidmFsaWQiLCJ2YWxpZENodW5rIiwibmV3Q2h1bmsiLCJkZWNvZGVDaHVuayIsImxhc3QiLCJ3cml0ZU9yQnVmZmVyIiwiY29yayIsInVuY29yayIsInNldERlZmF1bHRFbmNvZGluZyIsImVuZFdyaXRhYmxlIiwiX3VuZGVzdHJveSIsInVuZGVzdHJveSIsImVxdWFsIiwiaXNIZXhQcmVmaXhlZCIsInN0cmlwSGV4UHJlZml4IiwicGFkVG9FdmVuIiwiaW50VG9IZXgiLCJhcnJheUNvbnRhaW5zQXJyYXkiLCJzdXBlcnNldCIsInN1YnNldCIsInNvbWUiLCJCb29sZWFuIiwiaW50VG9CdWZmZXIiLCJoZXgiLCJnZXRCaW5hcnlTaXplIiwiZnJvbUFzY2lpIiwic3RyaW5nVmFsdWUiLCJmcm9tVXRmOCIsInRvQXNjaWkiLCJzdWJzdHJpbmciLCJ0b1V0ZjgiLCJnZXRLZXlzIiwicGFyYW1zIiwiYWxsb3dFbXB0eSIsImlzSGV4U3RyaW5nIiwiaXNBc3luYyIsIl9hc3luY2lmeSIsIl9hc3luY2lmeTIiLCJkZWZhdWx0Iiwic3VwcG9ydHNTeW1ib2wiLCJhc3luY0ZuIiwiY29kZXMiLCJjcmVhdGVFcnJvclR5cGUiLCJCYXNlIiwiTm9kZUVycm9yIiwiX0Jhc2UiLCJnZXRNZXNzYWdlIiwib25lT2YiLCJleHBlY3RlZCIsInRoaW5nIiwiZGV0ZXJtaW5lciIsInNlYXJjaCIsInRoaXNfbGVuIiwiZW5kc1dpdGgiLCJIYXNoIiwiYmxvY2tTaXplIiwiZmluYWxTaXplIiwiX2Jsb2NrIiwiX2ZpbmFsU2l6ZSIsIl9ibG9ja1NpemUiLCJfbGVuIiwidXBkYXRlIiwiYmxvY2siLCJhY2N1bSIsImFzc2lnbmVkIiwicmVtYWluZGVyIiwiX3VwZGF0ZSIsImRpZ2VzdCIsInJlbSIsImxvd0JpdHMiLCJoaWdoQml0cyIsIl9oYXNoIiwiUmVhZGFibGVTdGF0ZSIsIkVFbGlzdGVuZXJDb3VudCIsImRlYnVnVXRpbCIsImRlYnVnIiwiQnVmZmVyTGlzdCIsImtQcm94eUV2ZW50cyIsInJlYWRhYmxlT2JqZWN0TW9kZSIsInJlYWRhYmxlSHdtIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwicGlwZXMiLCJwaXBlc0NvdW50IiwiZmxvd2luZyIsImVuZEVtaXR0ZWQiLCJyZWFkaW5nIiwibmVlZFJlYWRhYmxlIiwiZW1pdHRlZFJlYWRhYmxlIiwicmVhZGFibGVMaXN0ZW5pbmciLCJyZXN1bWVTY2hlZHVsZWQiLCJhd2FpdERyYWluIiwicmVhZGluZ01vcmUiLCJkZWNvZGVyIiwiX3JlYWQiLCJyZWFkYWJsZUFkZENodW5rIiwiYWRkVG9Gcm9udCIsInNraXBDaHVua0NoZWNrIiwiZW1pdFJlYWRhYmxlIiwib25Fb2ZDaHVuayIsImNodW5rSW52YWxpZCIsImFkZENodW5rIiwibWF5YmVSZWFkTW9yZSIsIm5lZWRNb3JlRGF0YSIsImlzUGF1c2VkIiwic2V0RW5jb2RpbmciLCJNQVhfSFdNIiwiaG93TXVjaFRvUmVhZCIsImhlYWQiLCJjb21wdXRlTmV3SGlnaFdhdGVyTWFyayIsImVtaXRSZWFkYWJsZV8iLCJmbG93IiwibWF5YmVSZWFkTW9yZV8iLCJuUmVhZGluZ05leHRUaWNrIiwicmVzdW1lXyIsImZyb21MaXN0IiwiY2xlYXIiLCJoYXNTdHJpbmdzIiwidGFpbCIsImNvcHlGcm9tQnVmZmVyU3RyaW5nIiwiY29weUZyb21CdWZmZXIiLCJmcm9tTGlzdFBhcnRpYWwiLCJlbmRSZWFkYWJsZSIsImVuZFJlYWRhYmxlTlQiLCJ4cyIsIm5PcmlnIiwiZG9SZWFkIiwicGlwZU9wdHMiLCJlbmRGbiIsInN0ZG91dCIsInN0ZGVyciIsInVucGlwZSIsIm9udW5waXBlIiwidW5waXBlSW5mbyIsImhhc1VucGlwZWQiLCJvbmZpbmlzaCIsImNsZWFuZWRVcCIsInBpcGVPbkRyYWluIiwiaW5jcmVhc2VkQXdhaXREcmFpbiIsImV2ZW50IiwiZGVzdHMiLCJzcGxpY2UiLCJldiIsInBhdXNlZCIsIl9mcm9tTGlzdCIsImVtaXRFcnJvck5UIiwicmVhZGFibGVEZXN0cm95ZWQiLCJ3cml0YWJsZURlc3Ryb3llZCIsImFmdGVyVHJhbnNmb3JtIiwidHMiLCJfdHJhbnNmb3JtU3RhdGUiLCJ0cmFuc2Zvcm1pbmciLCJ3cml0ZWNodW5rIiwicnMiLCJuZWVkVHJhbnNmb3JtIiwid3JpdGVlbmNvZGluZyIsIl90cmFuc2Zvcm0iLCJmbHVzaCIsIl9mbHVzaCIsIl90aGlzMiIsImVycjIiLCJCbG9ja0hhc2giLCJwZW5kaW5nIiwicGVuZGluZ1RvdGFsIiwib3V0U2l6ZSIsImhtYWNTdHJlbmd0aCIsInBhZExlbmd0aCIsIl9kZWx0YTgiLCJfZGVsdGEzMiIsIl9wYWQiLCJfZGlnZXN0IiwiZ2V0UmFuZG9tSWQiLCJleHRlbmQiLCJpZCIsImpzb25ycGMiLCJldGhqc1V0aWwiLCJzZXRMZW5ndGhMZWZ0Iiwic2V0TGVuZ3RoIiwic2V0TGVuZ3RoUmlnaHQiLCJ1bnBhZCIsImZpcnN0Iiwic3RyaXBaZXJvcyIsImJ1ZmZlclRvSW50IiwiYnVmZmVyVG9IZXgiLCJmcm9tU2lnbmVkIiwidG9VbnNpZ25lZCIsImFkZEhleFByZWZpeCIsImJhVG9KU09OIiwiYmEiLCJUaW1lb3V0IiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2NvcGUiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbG9zZSIsInVucmVmIiwicmVmIiwiZW5yb2xsIiwiaXRlbSIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsIkJhc2VDdXJ2ZSIsImNvbmYiLCJ6ZXJvIiwidHdvIiwicG9pbnRGcm9tSlNPTiIsImdSZWQiLCJfd25hZlQxIiwiX3duYWZUMiIsIl93bmFmVDMiLCJfd25hZlQ0IiwiX2JpdExlbmd0aCIsImFkanVzdENvdW50IiwicmVkTiIsIl9tYXh3ZWxsVHJpY2siLCJCYXNlUG9pbnQiLCJjdXJ2ZSIsInByZWNvbXB1dGVkIiwicG9pbnQiLCJ2YWxpZGF0ZSIsIl9maXhlZE5hZk11bCIsImRvdWJsZXMiLCJfZ2V0RG91YmxlcyIsIkkiLCJzdGVwIiwicmVwciIsIm5hZlciLCJqcG9pbnQiLCJtaXhlZEFkZCIsInBvaW50cyIsInRvUCIsIl93bmFmTXVsIiwibmFmUG9pbnRzIiwiX2dldE5BRlBvaW50cyIsImRibHAiLCJfd25hZk11bEFkZCIsImRlZlciLCJjb2VmZnMiLCJqYWNvYmlhblJlc3VsdCIsInduZFdpZHRoIiwiY29tYiIsInRvSiIsImphIiwiamIiLCJkZWNvZGVQb2ludCIsInBvaW50RnJvbVgiLCJlbmNvZGVDb21wcmVzc2VkIiwiX2VuY29kZSIsImNvbXBhY3QiLCJnZXRYIiwiZ2V0WSIsInByZWNvbXB1dGUiLCJwb3dlciIsImJldGEiLCJfZ2V0QmV0YSIsIl9oYXNEb3VibGVzIiwiZGJsIiwic2FmZVBhcnNlSW50IiwiZW5jb2RlTGVuZ3RoIiwiaGV4TGVuZ3RoIiwiaW50ZWdlciIsImlucHV0QnVmIiwiZGVjb2RlIiwiZGVjb2RlZCIsIl9kZWNvZGUiLCJsbGVuZ3RoIiwiaW5uZXJSZW1haW5kZXIiLCJ0b3RhbExlbmd0aCIsImdldExlbmd0aCIsImlucHV0QnVmZmVyIiwiaXNMZW5ndGgiLCJhcnJheUxpa2UiLCJuZXdMZW4iLCJuZXdBcnIiLCJfY2xhc3NDYWxsQ2hlY2siLCJyZWdpc3RlckltbWVkaWF0ZSIsImh0bWwiLCJjaGFubmVsIiwibWVzc2FnZVByZWZpeCIsIm9uR2xvYmFsTWVzc2FnZSIsIm5leHRIYW5kbGUiLCJ0YXNrc0J5SGFuZGxlIiwiY3VycmVudGx5UnVubmluZ0FUYXNrIiwiZG9jIiwiZG9jdW1lbnQiLCJhdHRhY2hUbyIsInJ1bklmUHJlc2VudCIsInBvc3RNZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMiLCJvbGRPbk1lc3NhZ2UiLCJvbm1lc3NhZ2UiLCJjYW5Vc2VQb3N0TWVzc2FnZSIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDEiLCJwb3J0MiIsImNyZWF0ZUVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JpcHQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwicmFuZG9tIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwidGFzayIsImNvbmZpZyIsImxvY2FsU3RvcmFnZSIsImNyZWF0ZUtlY2Nha0hhc2giLCJzZWNwMjU2azEiLCJybHAiLCJjcmVhdGVIYXNoIiwiYXNzaWduIiwiTUFYX0lOVEVHRVIiLCJUV09fUE9XMjU2IiwiS0VDQ0FLMjU2X05VTExfUyIsIlNIQTNfTlVMTF9TIiwiS0VDQ0FLMjU2X05VTEwiLCJTSEEzX05VTEwiLCJLRUNDQUsyNTZfUkxQX0FSUkFZX1MiLCJTSEEzX1JMUF9BUlJBWV9TIiwiS0VDQ0FLMjU2X1JMUF9BUlJBWSIsIlNIQTNfUkxQX0FSUkFZIiwiS0VDQ0FLMjU2X1JMUF9TIiwiU0hBM19STFBfUyIsIktFQ0NBSzI1Nl9STFAiLCJTSEEzX1JMUCIsInplcm9BZGRyZXNzIiwia2VjY2FrIiwia2VjY2FrMjU2Iiwic2hhMyIsInNoYTI1NiIsInJpcGVtZDE2MCIsInBhZGRlZCIsInJscGhhc2giLCJpc1ZhbGlkUHJpdmF0ZSIsInByaXZhdGVLZXkiLCJwcml2YXRlS2V5VmVyaWZ5IiwiaXNWYWxpZFB1YmxpYyIsInB1YmxpY0tleSIsInNhbml0aXplIiwicHVibGljS2V5VmVyaWZ5IiwicHViVG9BZGRyZXNzIiwicHVibGljVG9BZGRyZXNzIiwicHViS2V5IiwicHVibGljS2V5Q29udmVydCIsInByaXZhdGVUb1B1YmxpYyIsInB1YmxpY0tleUNyZWF0ZSIsImltcG9ydFB1YmxpYyIsImVjc2lnbiIsIm1zZ0hhc2giLCJzaWciLCJzaWduIiwic2lnbmF0dXJlIiwicmVjb3ZlcnkiLCJoYXNoUGVyc29uYWxNZXNzYWdlIiwicHJlZml4IiwiZWNyZWNvdmVyIiwic2VuZGVyUHViS2V5IiwicmVjb3ZlciIsInRvUnBjU2lnIiwiZnJvbVJwY1NpZyIsInByaXZhdGVUb0FkZHJlc3MiLCJpc1ZhbGlkQWRkcmVzcyIsImFkZHJlc3MiLCJpc1plcm9BZGRyZXNzIiwidG9DaGVja3N1bUFkZHJlc3MiLCJpc1ZhbGlkQ2hlY2tzdW1BZGRyZXNzIiwiZ2VuZXJhdGVBZGRyZXNzIiwibm9uY2UiLCJpc1ByZWNvbXBpbGVkIiwiaXNWYWxpZFNpZ25hdHVyZSIsImhvbWVzdGVhZCIsIlNFQ1AyNTZLMV9OX0RJVl8yIiwiU0VDUDI1NksxX04iLCJmaWVsZHMiLCJyYXciLCJfZmllbGRzIiwibGFiZWwiLCJmaWVsZCIsInNlcmlhbGl6ZSIsInNldHRlciIsImFsbG93WmVybyIsImFsbG93TGVzcyIsImFsaWFzIiwiTUQ1IiwiUklQRU1EMTYwIiwic2hhIiwiYWxnIiwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJlb3MiLCJjYWxsZWQiLCJfa2V5Iiwib25sZWdhY3lmaW5pc2giLCJ3cml0YWJsZUVuZGVkIiwicmVhZGFibGVFbmRlZCIsIm9ucmVxdWVzdCIsInJlcSIsInNldEhlYWRlciIsImFib3J0IiwiaXNSZXF1ZXN0Iiwid2VicGFja1BvbHlmaWxsIiwicGF0aHMiLCJjaGlsZHJlbiIsInByZSIsImN1cnZlcyIsIlByZXNldEN1cnZlIiwic2hvcnQiLCJlZHdhcmRzIiwiaXNJbmZpbml0eSIsImRlZmluZUN1cnZlIiwic2hhMzg0Iiwic2hhNTEyIiwibGFtYmRhIiwiYmFzaXMiLCJjb21tb24iLCJyaXBlbWQiLCJobWFjIiwic2hhMSIsInNoYTIyNCIsIm9iamVjdEFzc2lnbiIsInBTbGljZSIsImZ1bmN0aW9uc0hhdmVOYW1lcyIsInBUb1N0cmluZyIsImFycmJ1ZiIsIkRhdGFWaWV3Iiwib2siLCJyZWdleCIsImdldE5hbWUiLCJmdW5jIiwidHJ1bmNhdGUiLCJzb21ldGhpbmciLCJyYXduYW1lIiwiZmFpbCIsIm9wZXJhdG9yIiwic3RhY2tTdGFydEZ1bmN0aW9uIiwiQXNzZXJ0aW9uRXJyb3IiLCJfZGVlcEVxdWFsIiwic3RyaWN0IiwibWVtb3MiLCJnZXRUaW1lIiwibXVsdGlsaW5lIiwibGFzdEluZGV4IiwiaWdub3JlQ2FzZSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsImFjdHVhbEluZGV4IiwiYWN0dWFsVmlzaXRlZE9iamVjdHMiLCJhSXNBcmdzIiwiaXNBcmd1bWVudHMiLCJiSXNBcmdzIiwia2EiLCJrYiIsInNvcnQiLCJvYmpFcXVpdiIsImV4cGVjdGVkRXhjZXB0aW9uIiwiaXNQcm90b3R5cGVPZiIsIl90aHJvd3MiLCJzaG91bGRUaHJvdyIsIl90cnlCbG9jayIsInVzZXJQcm92aWRlZE1lc3NhZ2UiLCJpc1VuZXhwZWN0ZWRFeGNlcHRpb24iLCJnZW5lcmF0ZWRNZXNzYWdlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJzdGFjayIsImZuX25hbWUiLCJuZXh0X2xpbmUiLCJub3RFcXVhbCIsImRlZXBFcXVhbCIsImRlZXBTdHJpY3RFcXVhbCIsIm5vdERlZXBFcXVhbCIsIm5vdERlZXBTdHJpY3RFcXVhbCIsInN0cmljdEVxdWFsIiwibm90U3RyaWN0RXF1YWwiLCJ0aHJvd3MiLCJkb2VzTm90VGhyb3ciLCJpZkVycm9yIiwiZ2V0UmF3VGFnIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiY2FsbEZuIiwiY3JlYXRlUGF5bG9hZCIsIlN1YlByb3ZpZGVyIiwic2V0RW5naW5lIiwiZW5naW5lIiwiY3VycmVudEJsb2NrIiwiaGFuZGxlUmVxdWVzdCIsInBheWxvYWQiLCJlbWl0UGF5bG9hZCIsInNlbmRBc3luYyIsImJ5dGVzXzEiLCJIYXNoQmFzZSIsIl9ibG9ja09mZnNldCIsIl9sZW5ndGgiLCJfZmluYWxpemVkIiwidGhyb3dJZk5vdFN0cmluZ09yQnVmZmVyIiwiY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yIiwiZ2V0SGlnaFdhdGVyTWFyayIsIl9yZXF1aXJlJGNvZGVzIiwiRVJSX0lOVkFMSURfQVJHX1RZUEUiLCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwiZXJyb3JPckRlc3Ryb3kiLCJlbWl0Q2xvc2UiLCJhdXRvRGVzdHJveSIsImNvbnRlbnQiLCJ1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyIsImNvbnN1bWUiLCJ3U3RhdGUiLCJlbWl0RXJyb3JBbmRDbG9zZU5UIiwiZW1pdENsb3NlTlQiLCJyU3RhdGUiLCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLCJkdXBsZXhLZXkiLCJoaWdoV2F0ZXJNYXJrRnJvbSIsIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwiRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyIsIkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCIsIksiLCJXIiwiU2hhMjU2IiwiX3ciLCJtYWoiLCJzaWdtYTAiLCJzaWdtYTEiLCJnYW1tYTAiLCJfYSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiTSIsIlQxIiwiVDIiLCJIIiwiU2hhNTEyIiwiQ2giLCJ4bCIsIkdhbW1hMCIsIkdhbW1hMGwiLCJHYW1tYTEiLCJHYW1tYTFsIiwiZ2V0Q2FycnkiLCJfYWgiLCJfYmgiLCJfY2giLCJfZGgiLCJfZWgiLCJfZmgiLCJfZ2giLCJfaGgiLCJfYWwiLCJfYmwiLCJfY2wiLCJfZGwiLCJfZWwiLCJfZmwiLCJfZ2wiLCJfaGwiLCJmaCIsImdoIiwiaGgiLCJmbCIsImdsIiwiaGwiLCJ4aCIsImdhbW1hMGwiLCJnYW1tYTEiLCJnYW1tYTFsIiwiV2k3aCIsIldpN2wiLCJXaTE2aCIsIldpMTZsIiwiV2lsIiwiV2loIiwibWFqaCIsIm1hamwiLCJzaWdtYTBoIiwic2lnbWEwbCIsInNpZ21hMWgiLCJzaWdtYTFsIiwiS2loIiwiS2lsIiwiY2hoIiwiY2hsIiwidDFsIiwidDFoIiwidDJsIiwidDJoIiwid3JpdGVJbnQ2NEJFIiwiUmFuZCIsInJhbmQiLCJnZW5lcmF0ZSIsIl9yYW5kIiwiZ2V0Qnl0ZXMiLCJnZXRCeXRlIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwibXNDcnlwdG8iLCJyYW5kb21CeXRlcyIsImNoMzIiLCJtYWozMiIsInAzMiIsImZ0XzEiLCJzMF8yNTYiLCJzMV8yNTYiLCJnMF8yNTYiLCJnMV8yNTYiLCJzaGFDb21tb24iLCJzaGEyNTZfSyIsIlNIQTI1NiIsInNoYTUxMl9LIiwiU0hBNTEyIiwiY2g2NF9oaSIsInloIiwieWwiLCJ6aCIsImNoNjRfbG8iLCJ6bCIsIm1hajY0X2hpIiwibWFqNjRfbG8iLCJzMF81MTJfaGkiLCJzMF81MTJfbG8iLCJzMV81MTJfaGkiLCJzMV81MTJfbG8iLCJnMF81MTJfaGkiLCJnMF81MTJfbG8iLCJnMV81MTJfaGkiLCJnMV81MTJfbG8iLCJfcHJlcGFyZUJsb2NrIiwiYzBfaGkiLCJjMF9sbyIsImMxX2hpIiwiYzFfbG8iLCJjMl9oaSIsImMyX2xvIiwiYzNfaGkiLCJjM19sbyIsImM0X2hpIiwiYzRfbG8iLCJUMV9oaSIsIlQxX2xvIiwiVDJfaGkiLCJUMl9sbyIsImNvbGwiLCJpdGVyYXRlZSIsIl9pc0FycmF5TGlrZTIiLCJlYWNoT2ZBcnJheUxpa2UiLCJlYWNoT2ZHZW5lcmljIiwiX3dyYXBBc3luYzIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2JyZWFrTG9vcDIiLCJfZWFjaE9mTGltaXQyIiwiX2RvTGltaXQyIiwiX25vb3AyIiwiX29uY2UyIiwiX29ubHlPbmNlMiIsImNvbXBsZXRlZCIsIml0ZXJhdG9yQ2FsbGJhY2siLCJmcmVlR2xvYmFsIiwiZnJlZVNlbGYiLCJyb290IiwiTUFYX1NBRkVfSU5URUdFUiIsIm5leHRFbGVtIiwiX2l0ZXJhdG9yMiIsInJ1bm5pbmciLCJsb29waW5nIiwiaXRlcmF0ZWVDYWxsYmFjayIsInJlcGxlbmlzaCIsImVsZW0iLCJwcmVjb25kIiwiQmFja29mZiIsImJhY2tvZmZTdHJhdGVneSIsImJhY2tvZmZTdHJhdGVneV8iLCJtYXhOdW1iZXJPZlJldHJ5XyIsImJhY2tvZmZOdW1iZXJfIiwiYmFja29mZkRlbGF5XyIsInRpbWVvdXRJRF8iLCJoYW5kbGVycyIsImJhY2tvZmYiLCJvbkJhY2tvZmZfIiwiZmFpbEFmdGVyIiwibWF4TnVtYmVyT2ZSZXRyeSIsImNoZWNrQXJndW1lbnQiLCJjaGVja1N0YXRlIiwiaXNEZWYiLCJCYWNrb2ZmU3RyYXRlZ3kiLCJpbml0aWFsRGVsYXkiLCJtYXhEZWxheSIsImluaXRpYWxEZWxheV8iLCJtYXhEZWxheV8iLCJyYW5kb21pc2F0aW9uRmFjdG9yIiwicmFuZG9taXNhdGlvbkZhY3Rvcl8iLCJnZXRNYXhEZWxheSIsImdldEluaXRpYWxEZWxheSIsImJhY2tvZmZEZWxheSIsIm5leHRfIiwicmFuZG9taXNhdGlvbk11bHRpcGxlIiwicmVzZXRfIiwiRmlib25hY2NpQmFja29mZlN0cmF0ZWd5IiwibmV4dEJhY2tvZmZEZWxheV8iLCJldGhVdGlsIiwiRXRoQmxvY2tUcmFja2VyIiwiZWFjaFNlcmllcyIsIlN0b3BsaWdodCIsIldlYjNQcm92aWRlckVuZ2luZSIsImRpcmVjdFByb3ZpZGVyIiwiX2hhbmRsZUFzeW5jIiwiYmxvY2tUcmFja2VyUHJvdmlkZXIiLCJfYmxvY2tUcmFja2VyIiwiYmxvY2tUcmFja2VyIiwicHJvdmlkZXIiLCJwb2xsaW5nSW50ZXJ2YWwiLCJqc29uQmxvY2siLCJidWZmZXJCbG9jayIsInBhcmVudEhhc2giLCJtaXhIYXNoIiwic2hhM1VuY2xlcyIsImxvZ3NCbG9vbSIsInRyYW5zYWN0aW9uc1Jvb3QiLCJzdGF0ZVJvb3QiLCJyZWNlaXB0c1Jvb3QiLCJyZWNlaXB0Um9vdCIsIm1pbmVyIiwiZGlmZmljdWx0eSIsInRvdGFsRGlmZmljdWx0eSIsImV4dHJhRGF0YSIsImdhc0xpbWl0IiwiZ2FzVXNlZCIsInRyYW5zYWN0aW9ucyIsInRvQnVmZmVyQmxvY2siLCJfc2V0Q3VycmVudEJsb2NrIiwiX3JlYWR5IiwiZ28iLCJfcHJvdmlkZXJzIiwiY2F0Y2giLCJfcnVubmluZyIsImlzUnVubmluZyIsImFkZFByb3ZpZGVyIiwicmVtb3ZlUHJvdmlkZXIiLCJzZW5kIiwiYXdhaXQiLCJjdXJyZW50UHJvdmlkZXIiLCJfZXJyb3IiLCJfcmVzdWx0IiwicmVzdWx0T2JqIiwiYWZ0ZXIiLCJTdWJwcm92aWRlciIsIkpzb25ScGNFcnJvciIsIlJwY1NvdXJjZSIsInJwY1VybCIsInRhcmdldFVybCIsIm5ld1BheWxvYWQiLCJ4aHIiLCJ1cmkiLCJoZWFkZXJzIiwiYm9keSIsInJlamVjdFVuYXV0aG9yaXplZCIsIkludGVybmFsRXJyb3IiLCJzdGF0dXNDb2RlIiwiTWV0aG9kTm90Rm91bmQiLCJwYXJzZSIsIldlYlNvY2tldCIsIldlYnNvY2tldFN1YnByb3ZpZGVyIiwic3VwZXIiLCJfYmFja29mZiIsImV4cG9uZW50aWFsIiwiX2Nvbm5lY3RUaW1lIiwiX2xvZyIsIl9vcmlnaW4iLCJfcGVuZGluZ1JlcXVlc3RzIiwiTWFwIiwiX3NvY2tldCIsIl91bmhhbmRsZWRSZXF1ZXN0cyIsIl91cmwiLCJfaGFuZGxlU29ja2V0Q2xvc2UiLCJfaGFuZGxlU29ja2V0TWVzc2FnZSIsIl9oYW5kbGVTb2NrZXRPcGVuIiwiX29wZW5Tb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsIm5vdyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYXMiLCJvcmlnaW5hbFJlcSIsImRlbGV0ZSIsInJlcXVlc3QiLCJ3YXRlcmZhbGwiLCJwYXJhbGxlbCIsInNpZ1V0aWwiLCJTZW1hcGhvcmUiLCJlc3RpbWF0ZUdhcyIsImhleFJlZ2V4IiwiSG9va2VkV2FsbGV0U3VicHJvdmlkZXIiLCJub25jZUxvY2siLCJnZXRBY2NvdW50cyIsInByb2Nlc3NUcmFuc2FjdGlvbiIsInByb2Nlc3NNZXNzYWdlIiwicHJvY2Vzc1BlcnNvbmFsTWVzc2FnZSIsInByb2Nlc3NUeXBlZE1lc3NhZ2UiLCJhcHByb3ZlVHJhbnNhY3Rpb24iLCJhdXRvQXBwcm92ZSIsImFwcHJvdmVNZXNzYWdlIiwiYXBwcm92ZVBlcnNvbmFsTWVzc2FnZSIsImFwcHJvdmVUeXBlZE1lc3NhZ2UiLCJzaWduVHJhbnNhY3Rpb24iLCJtdXN0UHJvdmlkZUluQ29uc3RydWN0b3IiLCJzaWduTWVzc2FnZSIsInNpZ25QZXJzb25hbE1lc3NhZ2UiLCJzaWduVHlwZWRNZXNzYWdlIiwicmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlIiwicHVibGlzaFRyYW5zYWN0aW9uIiwiZ2V0R2FzUHJpY2UiLCJpc1ZhbGlkSGV4IiwibWV0aG9kTmFtZSIsInR4UGFyYW1zIiwibXNnUGFyYW1zIiwiZXh0cmFQYXJhbXMiLCJfcGFyaXR5UmVxdWVzdHMiLCJfcGFyaXR5UmVxdWVzdENvdW50IiwiYWNjb3VudHMiLCJ2YWxpZGF0ZVRyYW5zYWN0aW9uIiwicHJvY2Vzc1NpZ25UcmFuc2FjdGlvbiIsInZhbGlkYXRlTWVzc2FnZSIsImZpeGVkIiwicmVzZW1ibGVzRGF0YSIsInJlc2VtYmxlc0FkZHJlc3MiLCJ2YWxpZGF0ZVBlcnNvbmFsTWVzc2FnZSIsInZhbGlkYXRlVHlwZWRNZXNzYWdlIiwicGFyaXR5UG9zdFRyYW5zYWN0aW9uIiwicGFyaXR5UG9zdFNpZ24iLCJyZXF1ZXN0SWQiLCJwYXJpdHlDaGVja1JlcXVlc3QiLCJhY2NvdW50IiwiZGlkQXBwcm92ZSIsImNoZWNrQXBwcm92YWwiLCJmaW5hbGl6ZUFuZFN1Ym1pdFR4IiwiZmluYWxpemVUeCIsInJlcUlkIiwidHhIYXNoIiwic2VuZGVySGV4IiwidmFsaWRhdGVTZW5kZXIiLCJzZW5kZXJJc1ZhbGlkIiwic2VuZGVyQWRkcmVzcyIsInRha2UiLCJmaWxsSW5UeEV4dHJhcyIsImxlYXZlIiwic2lnbmVkVHgiLCJ0eCIsInJhd1R4IiwidGFza3MiLCJnYXNQcmljZSIsImdhcyIsInRvIiwiY2xvbmVUeFBhcmFtcyIsInRhc2tSZXN1bHRzIiwiZXRoTmV0d29yayIsImlkR2V0dGVyIiwic29ja2V0U2VydmljZSIsIlNvY2tldFNlcnZpY2UiLCJTY2F0dGVyRXRoZXJldW1XYWxsZXQiLCJzZW5kQXBpUmVxdWVzdCIsImZpbHRlciIsImJsb2NrY2hhaW4iLCJCbG9ja2NoYWlucyIsIkVUSCIsInRyYW5zYWN0aW9uIiwibm9OZXR3b3JrIiwicmVxdWlyZWRGaWVsZHMiLCJhYmkiLCJzaWduYXR1cmVFcnJvciIsIm5ldHdvcmsiLCJzaWduYXR1cmVzIiwicmV0dXJuZWRGaWVsZHMiLCJmaWVsZHNDYWxsYmFjayIsIlNjYXR0ZXJFVEgiLCJQbHVnaW5UeXBlcyIsIkJMT0NLQ0hBSU5fU1VQUE9SVCIsIl9zIiwiX25ldHdvcmsiLCJfd2ViMyIsIk5ldHdvcmsiLCJmcm9tSnNvbiIsImZ1bGxob3N0IiwiUHJvdmlkZXJFbmdpbmUiLCJ3ZWIzIiwid2FsbGV0U3VicHJvdmlkZXIiLCJwcm90b2NvbCIsIlJwY1N1YnByb3ZpZGVyIiwiUGx1Z2luIiwiY3JlYXRlS2VjY2FrIiwiY3JlYXRlU2hha2UiLCJLZWNjYWtTdGF0ZSIsIktlY2NhayIsIlNoYWtlIiwiYWxnb3JpdGhtIiwicmF0ZSIsImNhcGFjaXR5IiwiZGVsaW1pdGVkU3VmZml4IiwiaGFzaEJpdExlbmd0aCIsIl9yYXRlIiwiX2NhcGFjaXR5IiwiX2RlbGltaXRlZFN1ZmZpeCIsIl9oYXNoQml0TGVuZ3RoIiwiX29wdGlvbnMiLCJfc3RhdGUiLCJpbml0aWFsaXplIiwiYWJzb3JiIiwiYWJzb3JiTGFzdEZld0JpdHMiLCJzcXVlZXplIiwiX3Jlc2V0U3RhdGUiLCJfY2xvbmUiLCJkYXRhQnl0ZUxlbmd0aCIsImtlY2Nha1N0YXRlIiwic3F1ZWV6aW5nIiwicDE2MDAiLCJQMTYwMF9ST1VORF9DT05TVEFOVFMiLCJsbzAiLCJoaTAiLCJsbzEiLCJoaTEiLCJsbzIiLCJoaTIiLCJsbzMiLCJoaTMiLCJsbzQiLCJoaTQiLCJ0MXNsbzAiLCJ0MXNoaTAiLCJ0MXNsbzUiLCJ0MXNoaTUiLCJ0MXNsbzEwIiwidDFzaGkxMCIsInQxc2xvMTUiLCJ0MXNoaTE1IiwidDFzbG8yMCIsInQxc2hpMjAiLCJ0MXNsbzEiLCJ0MXNoaTEiLCJ0MXNsbzYiLCJ0MXNoaTYiLCJ0MXNsbzExIiwidDFzaGkxMSIsInQxc2xvMTYiLCJ0MXNoaTE2IiwidDFzbG8yMSIsInQxc2hpMjEiLCJ0MXNsbzIiLCJ0MXNoaTIiLCJ0MXNsbzciLCJ0MXNoaTciLCJ0MXNsbzEyIiwidDFzaGkxMiIsInQxc2xvMTciLCJ0MXNoaTE3IiwidDFzbG8yMiIsInQxc2hpMjIiLCJ0MXNsbzMiLCJ0MXNoaTMiLCJ0MXNsbzgiLCJ0MXNoaTgiLCJ0MXNsbzEzIiwidDFzaGkxMyIsInQxc2xvMTgiLCJ0MXNoaTE4IiwidDFzbG8yMyIsInQxc2hpMjMiLCJ0MXNsbzQiLCJ0MXNoaTQiLCJ0MXNsbzkiLCJ0MXNoaTkiLCJ0MXNsbzE0IiwidDFzaGkxNCIsInQxc2xvMTkiLCJ0MXNoaTE5IiwidDFzbG8yNCIsInQxc2hpMjQiLCJ0MnNsbzAiLCJ0MnNoaTAiLCJ0MnNsbzE2IiwidDJzaGkxNiIsInQyc2xvNyIsInQyc2hpNyIsInQyc2xvMjMiLCJ0MnNoaTIzIiwidDJzbG8xNCIsInQyc2hpMTQiLCJ0MnNsbzEwIiwidDJzaGkxMCIsInQyc2xvMSIsInQyc2hpMSIsInQyc2xvMTciLCJ0MnNoaTE3IiwidDJzbG84IiwidDJzaGk4IiwidDJzbG8yNCIsInQyc2hpMjQiLCJ0MnNsbzIwIiwidDJzaGkyMCIsInQyc2xvMTEiLCJ0MnNoaTExIiwidDJzbG8yIiwidDJzaGkyIiwidDJzbG8xOCIsInQyc2hpMTgiLCJ0MnNsbzkiLCJ0MnNoaTkiLCJ0MnNsbzUiLCJ0MnNoaTUiLCJ0MnNsbzIxIiwidDJzaGkyMSIsInQyc2xvMTIiLCJ0MnNoaTEyIiwidDJzbG8zIiwidDJzaGkzIiwidDJzbG8xOSIsInQyc2hpMTkiLCJ0MnNsbzE1IiwidDJzaGkxNSIsInQyc2xvNiIsInQyc2hpNiIsInQyc2xvMjIiLCJ0MnNoaTIyIiwidDJzbG8xMyIsInQyc2hpMTMiLCJ0MnNsbzQiLCJ0MnNoaTQiLCJkZXIiLCJtZXNzYWdlcyIsImluaXRDb21wcmVzc2VkVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJDT01QUkVTU0VEX1RZUEVfSU5WQUxJRCIsIkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRCIsInByaXZhdGVLZXlFeHBvcnQiLCJjb21wcmVzc2VkIiwiaXNCdWZmZXJMZW5ndGgiLCJFQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRCIsInByaXZhdGVLZXlJbXBvcnQiLCJFQ19QUklWQVRFX0tFWV9JTVBPUlRfREVSX0ZBSUwiLCJwcml2YXRlS2V5TmVnYXRlIiwicHJpdmF0ZUtleU1vZEludmVyc2UiLCJwcml2YXRlS2V5VHdlYWtBZGQiLCJ0d2VhayIsIlRXRUFLX1RZUEVfSU5WQUxJRCIsIlRXRUFLX0xFTkdUSF9JTlZBTElEIiwicHJpdmF0ZUtleVR3ZWFrTXVsIiwiRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQiLCJpc0J1ZmZlckxlbmd0aDIiLCJFQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEIiwicHVibGljS2V5VHdlYWtBZGQiLCJwdWJsaWNLZXlUd2Vha011bCIsInB1YmxpY0tleUNvbWJpbmUiLCJwdWJsaWNLZXlzIiwiRUNfUFVCTElDX0tFWVNfVFlQRV9JTlZBTElEIiwiaXNMZW5ndGhHVFplcm8iLCJFQ19QVUJMSUNfS0VZU19MRU5HVEhfSU5WQUxJRCIsInNpZ25hdHVyZU5vcm1hbGl6ZSIsIkVDRFNBX1NJR05BVFVSRV9UWVBFX0lOVkFMSUQiLCJFQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQiLCJzaWduYXR1cmVFeHBvcnQiLCJzaWdPYmoiLCJzaWduYXR1cmVJbXBvcnQiLCJFQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwiLCJzaWduYXR1cmVJbXBvcnRMYXgiLCJNU0czMl9UWVBFX0lOVkFMSUQiLCJNU0czMl9MRU5HVEhfSU5WQUxJRCIsIm5vbmNlZm4iLCJPUFRJT05TX1RZUEVfSU5WQUxJRCIsIk9QVElPTlNfREFUQV9UWVBFX0lOVkFMSUQiLCJPUFRJT05TX0RBVEFfTEVOR1RIX0lOVkFMSUQiLCJPUFRJT05TX05PTkNFRk5fVFlQRV9JTlZBTElEIiwidmVyaWZ5IiwiUkVDT1ZFUllfSURfVFlQRV9JTlZBTElEIiwiaXNOdW1iZXJJbkludGVydmFsIiwiUkVDT1ZFUllfSURfVkFMVUVfSU5WQUxJRCIsImVjZGgiLCJlY2RoVW5zYWZlIiwibGVuZ3RoMSIsImxlbmd0aDIiLCJiaXA2NiIsIkVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEIiwiRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRCIsImxlbmIiLCJsZW5SIiwicG9zUiIsImxlblMiLCJwb3NTIiwibGVuYnl0ZSIsInJpbmRleCIsInNsZW4iLCJzaW5kZXgiLCJydmFsdWUiLCJzdmFsdWUiLCJjaGVjayIsIkVDIiwiZWMiLCJlY3BhcmFtcyIsImxvYWRQdWJsaWNLZXkiLCJ4QnVmZmVyIiwia2V5UGFpciIsInB1YiIsImxvYWRDb21wcmVzc2VkUHVibGljS2V5IiwieUJ1ZmZlciIsIngzIiwibG9hZFVuY29tcHJlc3NlZFB1YmxpY0tleSIsImJuIiwiRUNfUFJJVkFURV9LRVlfRVhQT1JUX0RFUl9GQUlMIiwia2V5RnJvbVByaXZhdGUiLCJnZXRQdWJsaWMiLCJFQ19QUklWQVRFX0tFWV9SQU5HRV9JTlZBTElEIiwiRUNfUFJJVkFURV9LRVlfVFdFQUtfQUREX0ZBSUwiLCJFQ19QUklWQVRFX0tFWV9UV0VBS19NVUxfRkFJTCIsIkVDX1BVQkxJQ19LRVlfQ1JFQVRFX0ZBSUwiLCJwYWlyIiwiRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMIiwiRUNfUFVCTElDX0tFWV9UV0VBS19BRERfRkFJTCIsIkVDX1BVQkxJQ19LRVlfVFdFQUtfTVVMX0ZBSUwiLCJwYWlycyIsIkVDX1BVQkxJQ19LRVlfQ09NQklORV9GQUlMIiwiRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0ZBSUwiLCJuaCIsImdldE5vbmNlIiwiY291bnRlciIsIkVDRFNBX1NJR05fRkFJTCIsImNhbm9uaWNhbCIsInBlcnMiLCJyZWNvdmVyeVBhcmFtIiwic2lnciIsInNpZ3MiLCJyZWNvdmVyUHViS2V5IiwiRUNEU0FfUkVDT1ZFUl9GQUlMIiwic2hhcmVkIiwic2NhbGFyIiwiRUNESF9GQUlMIiwiQVJSQVkxNiIsInJvdGwiLCJmbkYiLCJmbkciLCJmbkgiLCJmbkkiLCJwaXBlbGluZSIsImVudW1lcmFibGVPbmx5Iiwic3ltYm9scyIsInN5bSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9nZXRTdHJpbmciLCJfZ2V0QnVmZmVyIiwiX29iamVjdFNwcmVhZCIsIl9PYmplY3Qkc2V0UHJvdG90eXBlTyIsImtMYXN0UmVzb2x2ZSIsImtMYXN0UmVqZWN0Iiwia0Vycm9yIiwia0VuZGVkIiwia0xhc3RQcm9taXNlIiwia0hhbmRsZVByb21pc2UiLCJrU3RyZWFtIiwiY3JlYXRlSXRlclJlc3VsdCIsInJlYWRBbmRSZXNvbHZlIiwib25SZWFkYWJsZSIsIkFzeW5jSXRlcmF0b3JQcm90b3R5cGUiLCJSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUiLCJsYXN0UHJvbWlzZSIsIndyYXBGb3JOZXh0IiwiX09iamVjdCRjcmVhdGUiLCJFUlJfTUlTU0lOR19BUkdTIiwic3RyZWFtcyIsInBvcENhbGxiYWNrIiwiZGVzdHJveXMiLCJjbG9zZWQiLCJkZXN0cm95ZXIiLCJ6ciIsInNsIiwic3IiLCJociIsImZuMSIsImZuMiIsImZuMyIsImZuNCIsImZuNSIsImJyIiwiY3IiLCJkciIsInRsIiwidHIiLCJBbGdvcml0aG0iLCJTaGEiLCJyb3RsMzAiLCJmdCIsIlNoYTEiLCJyb3RsNSIsIlNoYTIyNCIsIlNoYTM4NCIsIkNpcGhlckJhc2UiLCJoYXNoTW9kZSIsIl9maW5hbE9yRGlnZXN0IiwiX19maW5hbCIsIl9kZWNvZGVyIiwiX2VuY29kaW5nIiwiaW5wdXRFbmMiLCJvdXRwdXRFbmMiLCJvdXREYXRhIiwiX3RvU3RyaW5nIiwic2V0QXV0b1BhZGRpbmciLCJnZXRBdXRoVGFnIiwic2V0QXV0aFRhZyIsInNldEFBRCIsImZpbiIsImVsbGlwdGljIiwiZWRkc2EiLCJTaG9ydEN1cnZlIiwidGludiIsInplcm9BIiwidGhyZWVBIiwiZW5kbyIsIl9nZXRFbmRvbW9ycGhpc20iLCJfZW5kb1duYWZUMSIsIl9lbmRvV25hZlQyIiwiUG9pbnQiLCJpc1JlZCIsImluZiIsIkpQb2ludCIsInpPbmUiLCJiZXRhcyIsIl9nZXRFbmRvUm9vdHMiLCJsYW1iZGFzIiwidmVjIiwiX2dldEVuZG9CYXNpcyIsIm50aW52IiwicHJldlIiLCJhcHJ4U3FydCIsInkxIiwieTIiLCJsZW4xIiwiX2VuZG9TcGxpdCIsInYxIiwidjIiLCJjMSIsImMyIiwicDEiLCJwMiIsInExIiwicTIiLCJheCIsInJocyIsIl9lbmRvV25hZk11bEFkZCIsIm5wb2ludHMiLCJuY29lZmZzIiwiZnJvbUpTT04iLCJlbmRvTXVsIiwib2JqMnBvaW50IiwibngiLCJueSIsInlzMSIsImR5aW52IiwibXVsQWRkIiwiam11bEFkZCIsIl9wcmVjb21wdXRlIiwibmVnYXRlIiwiemludiIsInppbnYyIiwiYXkiLCJwejIiLCJ6MiIsInMxIiwiczIiLCJoMiIsImgzIiwibnoiLCJqeCIsImp5IiwianoiLCJqejQiLCJqeWQiLCJqeDIiLCJqeWQyIiwianlkNCIsInQxIiwidDIiLCJkbnkiLCJfemVyb0RibCIsIl90aHJlZURibCIsIl9kYmwiLCJ4eCIsInl5IiwieXl5eSIsInl5eXk4IiwiYzgiLCJnYW1tYSIsImFscGhhIiwiYmV0YTQiLCJiZXRhOCIsImdnYW1tYTgiLCJqeTIiLCJqeGQ0IiwianlkOCIsInRycGwiLCJ6eiIsIm1tIiwiZWUiLCJ5eXU0Iiwia2Jhc2UiLCJ6MyIsInB6MyIsImVxWFRvUCIsInpzIiwieGMiLCJNb250Q3VydmUiLCJpNCIsImEyNCIsIm5vcm1hbGl6ZSIsImFhIiwiYmIiLCJkaWZmQWRkIiwiZGEiLCJqdW1sQWRkIiwib3RoZXIiLCJFZHdhcmRzQ3VydmUiLCJ0d2lzdGVkIiwibU9uZUEiLCJkZCIsIm9uZUMiLCJfbXVsQSIsIl9tdWxDIiwibGhzIiwicG9pbnRGcm9tWSIsIl9leHREYmwiLCJudCIsIl9wcm9qRGJsIiwiX2V4dEFkZCIsIl9wcm9qQWRkIiwiemkiLCJzaGExX0siLCJTSEExIiwiU0hBMjI0IiwiU0hBMzg0IiwiS2giLCJFIiwiQWgiLCJCaCIsIkRoIiwiRWgiLCJUIiwicmgiLCJzaCIsIkhtYWMiLCJpbm5lciIsIm91dGVyIiwiSG1hY0RSQkciLCJLZXlQYWlyIiwiU2lnbmF0dXJlIiwicHJpdiIsImZyb21Qcml2YXRlIiwia2V5RnJvbVB1YmxpYyIsImZyb21QdWJsaWMiLCJnZW5LZXlQYWlyIiwiZHJiZyIsInBlcnNFbmMiLCJlbnRyb3B5IiwiZW50cm9weUVuYyIsIm5zMiIsIl90cnVuY2F0ZVRvTiIsInRydW5jT25seSIsImJrZXkiLCJnZXRQcml2YXRlIiwibnMxIiwia3AiLCJrcFgiLCJzaW52IiwiaXNZT2RkIiwiaXNTZWNvbmRLZXkiLCJySW52IiwiZ2V0S2V5UmVjb3ZlcnlQYXJhbSIsIlEiLCJRcHJpbWUiLCJwcmVkUmVzaXN0IiwibWluRW50cm9weSIsIl9yZXNlZWQiLCJyZXNlZWRJbnRlcnZhbCIsIlYiLCJub25jZUVuYyIsInNlZWQiLCJfaG1hYyIsImttYWMiLCJyZXNlZWQiLCJhZGRFbmMiLCJ0ZW1wIiwiX2ltcG9ydFByaXZhdGUiLCJwcml2RW5jIiwiX2ltcG9ydFB1YmxpYyIsInB1YkVuYyIsImRlcml2ZSIsIl9pbXBvcnRERVIiLCJQb3NpdGlvbiIsInBsYWNlIiwiaW5pdGlhbCIsIm9jdGV0TGVuIiwicm1QYWRkaW5nIiwiY29uc3RydWN0TGVuZ3RoIiwib2N0ZXRzIiwidG9ERVIiLCJiYWNrSGFsZiIsIkVERFNBIiwicG9pbnRDbGFzcyIsImVuY29kaW5nTGVuZ3RoIiwic2VjcmV0Iiwia2V5RnJvbVNlY3JldCIsImhhc2hJbnQiLCJSZW5jb2RlZCIsImVuY29kZVBvaW50Iiwic18iLCJwdWJCeXRlcyIsIlMiLCJtYWtlU2lnbmF0dXJlIiwiU0ciLCJmcm9tU2VjcmV0IiwibGFzdEl4Iiwibm9ybWVkIiwieElzT2RkIiwiZW5jb2RlSW50IiwiZGVjb2RlSW50IiwiaXNQb2ludCIsIl9zZWNyZXQiLCJfcHViIiwiX3B1YkJ5dGVzIiwicHJpdkJ5dGVzIiwiZ2V0U2VjcmV0IiwiX1IiLCJfUyIsIl9SZW5jb2RlZCIsIl9TZW5jb2RlZCIsIlNlbmNvZGVkIiwidG9CeXRlcyIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvT2JqZWN0IiwidGVzdDEiLCJ0ZXN0MiIsInRlc3QzIiwibGV0dGVyIiwic2hvdWxkVXNlTmF0aXZlIiwiRXRoUXVlcnkiLCJwaWZ5IiwiaGV4VXRpbHMiLCJpbmNyZW1lbnRIZXhOdW1iZXIiLCJzZWMiLCJfcHJvdmlkZXIiLCJfcXVlcnkiLCJfcG9sbGluZ0ludGVydmFsIiwiX3N5bmNpbmdUaW1lb3V0Iiwic3luY2luZ1RpbWVvdXQiLCJfdHJhY2tpbmdCbG9jayIsIl90cmFja2luZ0Jsb2NrVGltZXN0YW1wIiwiX2N1cnJlbnRCbG9jayIsIl9pc1J1bm5pbmciLCJfcGVyZm9ybVN5bmMiLCJfaGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24iLCJmcm9tQmxvY2siLCJfc2V0VHJhY2tpbmdCbG9jayIsIl9mZXRjaEJsb2NrQnlOdW1iZXIiLCJfZmV0Y2hMYXRlc3RCbG9jayIsIl9pbml0U3Vic2NyaXB0aW9uIiwiX3JlbW92ZVN1YnNjcmlwdGlvbiIsIm5ld0Jsb2NrIiwicHJldmlvdXMiLCJfd2FycFRvTGF0ZXN0Iiwib2xkQmxvY2siLCJ0cmFja2luZ0Jsb2NrIiwiZ2V0VHJhY2tpbmdCbG9jayIsIm5leHROdW1iZXIiLCJfcG9sbEZvck5leHRCbG9jayIsIm5vdGlmaWNhdGlvbiIsIl9zdWJzY3JpcHRpb25JZCIsImdldEJsb2NrQnlOdW1iZXIiLCJoZXhOdW1iZXIiLCJjbGVhbkhleCIsImZvcm1hdEhleCIsImNyZWF0ZVJhbmRvbUlkIiwiZ2VuZXJhdGVGbkZvciIsImdlbmVyYXRlRm5XaXRoRGVmYXVsdEJsb2NrRm9yIiwiYXJnQ291bnQiLCJnZXRCYWxhbmNlIiwiZ2V0Q29kZSIsImdldFRyYW5zYWN0aW9uQ291bnQiLCJnZXRTdG9yYWdlQXQiLCJwcm90b2NvbFZlcnNpb24iLCJzeW5jaW5nIiwiY29pbmJhc2UiLCJtaW5pbmciLCJoYXNocmF0ZSIsImJsb2NrTnVtYmVyIiwiZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoIiwiZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlOdW1iZXIiLCJnZXRVbmNsZUNvdW50QnlCbG9ja0hhc2giLCJnZXRVbmNsZUNvdW50QnlCbG9ja051bWJlciIsInNlbmRUcmFuc2FjdGlvbiIsInNlbmRSYXdUcmFuc2FjdGlvbiIsImdldEJsb2NrQnlIYXNoIiwiZ2V0VHJhbnNhY3Rpb25CeUhhc2giLCJnZXRUcmFuc2FjdGlvbkJ5QmxvY2tIYXNoQW5kSW5kZXgiLCJnZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCIsImdldFRyYW5zYWN0aW9uUmVjZWlwdCIsImdldFVuY2xlQnlCbG9ja0hhc2hBbmRJbmRleCIsImdldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4IiwiZ2V0Q29tcGlsZXJzIiwiY29tcGlsZUxMTCIsImNvbXBpbGVTb2xpZGl0eSIsImNvbXBpbGVTZXJwZW50IiwibmV3RmlsdGVyIiwibmV3QmxvY2tGaWx0ZXIiLCJuZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXIiLCJ1bmluc3RhbGxGaWx0ZXIiLCJnZXRGaWx0ZXJDaGFuZ2VzIiwiZ2V0RmlsdGVyTG9ncyIsImdldExvZ3MiLCJnZXRXb3JrIiwic3VibWl0V29yayIsInN1Ym1pdEhhc2hyYXRlIiwicmVzcG9uc2UiLCJpZENvdW50ZXIiLCJwcm9jZXNzRm4iLCJQIiwibXVsdGlBcmdzIiwicmVzdWx0cyIsImV4Y2x1ZGUiLCJleGNsdWRlTWFpbiIsInBhdHRlcm4iLCJpbmNsdWRlIiwiYWxsIiwiaGV4TnVtIiwic3RyaXBwZWQiLCJfZG9QYXJhbGxlbDIiLCJfbWFwMiIsIl9lYWNoT2YyIiwiYmFzZUdldFRhZyIsImFzeW5jVGFnIiwiZnVuY1RhZyIsImdlblRhZyIsInByb3h5VGFnIiwidGFnIiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwidW5tYXNrZWQiLCJfZWFjaE9mTGltaXQzIiwiY3JlYXRlQXJyYXlJdGVyYXRvciIsIl9nZXRJdGVyYXRvcjIiLCJjcmVhdGVFUzIwMTVJdGVyYXRvciIsIm9rZXlzIiwiX2tleXMyIiwiYXJyYXlMaWtlS2V5cyIsImJhc2VLZXlzIiwiaXNBcnJheUxpa2UiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaXNUeXBlZEFycmF5IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsInN0dWJGYWxzZSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwicmVJc1VpbnQiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIkN0b3IiLCJvdmVyQXJnIiwiX2luaXRpYWxQYXJhbXMyIiwiX2lzT2JqZWN0MiIsImludm9rZUNhbGxiYWNrIiwiX3NldEltbWVkaWF0ZTIiLCJyZXRocm93IiwiX3NsaWNlMiIsIl9zbGljZSIsImhhc05leHRUaWNrIiwiaGFzU2V0SW1tZWRpYXRlIiwiZmFsbGJhY2siLCJfZGVmZXIiLCJkZWZlciIsImVhY2hmbiIsIl9pdGVyYXRlZSIsIl9lYWNoTGltaXQyIiwiX3dpdGhvdXRJbmRleDIiLCJpc0xvY2tlZCIsImNhbkNhY2hlIiwiY2FjaGVUeXBlRm9yUGF5bG9hZCIsInBhcmFtc1dpdGhvdXRCbG9ja1RhZyIsImJsb2NrVGFnUGFyYW1JbmRleCIsImNhY2hlSWRlbnRpZmllckZvclBheWxvYWQiLCJpbmNsdWRlQmxvY2tSZWYiLCJibG9ja1RhZ0ZvclBheWxvYWQiLCJqc29uIiwic3BhY2UiLCJjeWNsZXMiLCJyZXBsYWNlciIsIm5vZGUiLCJhb2JqIiwiYm9iaiIsInBhcmVudCIsImxldmVsIiwiaW5kZW50IiwiY29sb25TZXBhcmF0b3IiLCJrZXlWYWx1ZSIsImF0IiwiZXNjYXBlZSIsInVmZmZmIiwid2hpdGUiLCJyZXZpdmVyIiwid2FsayIsImdhcCIsInJlcCIsImVzY2FwYWJsZSIsIm1ldGEiLCJxdW90ZSIsInBhcnRpYWwiLCJtaW5kIiwiZXh0cmFEaWdpdHMiLCJkYXRlUGFydCIsImV4dHJhUGFydCIsInBhcnNlSGVhZGVycyIsInh0ZW5kIiwiaW5pdFBhcmFtcyIsImNyZWF0ZVhIUiIsIl9jcmVhdGVYSFIiLCJnZXRCb2R5IiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VYTUwiLCJmaXJlZm94QnVnVGFrZW5FZmZlY3QiLCJub2RlTmFtZSIsImdldFhtbCIsImlzSnNvbiIsImVycm9yRnVuYyIsImV2dCIsInRpbWVvdXRUaW1lciIsImZhaWx1cmVSZXNwb25zZSIsImxvYWRGdW5jIiwiYWJvcnRlZCIsInN0YXR1cyIsInVzZVhEUiIsInVybCIsInJhd1JlcXVlc3QiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJjb3JzIiwiWERvbWFpblJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsIm9ubG9hZCIsIm9ucHJvZ3Jlc3MiLCJvbmFib3J0Iiwib250aW1lb3V0Iiwib3BlbiIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiaXNFbXB0eSIsImJlZm9yZVNlbmQiLCJmb3JFYWNoQXJyYXkiLCJ3aW4iLCJhbGVydCIsImNvbmZpcm0iLCJwcm9tcHQiLCJoZWFkZXJzQXJyIiwicm93IiwiUGFyc2VFcnJvciIsIkludmFsaWRSZXF1ZXN0IiwiSW52YWxpZFBhcmFtcyIsIlNlcnZlckVycm9yIiwiRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kiLCJGdW5jdGlvbkNhbGwiLCJGaWJvbmFjY2lTdHJhdGVneSIsIkV4cG9uZW50aWFsU3RyYXRlZ3kiLCJmaWJvbmFjY2kiLCJ2YXJncyIsImVycm9ycyIsImZhaWxDaGVjayIsIkV4Y2VwdGlvbkNvbnN0cnVjdG9yIiwiY2FsbGVlIiwibWVzc2FnZUZvcm1hdCIsImZvcm1hdEFyZ3MiLCJmYWlsQXJndW1lbnRDaGVjayIsIklsbGVnYWxBcmd1bWVudEVycm9yIiwiZmFpbFN0YXRlQ2hlY2siLCJJbGxlZ2FsU3RhdGVFcnJvciIsInR5cGVPZiIsInR5cGVDaGVjayIsImV4cGVjdCIsImNoZWNrSXNEZWYiLCJjaGVja0lzRGVmQW5kTm90TnVsbCIsImNoZWNrSXNTdHJpbmciLCJjaGVja0lzQXJyYXkiLCJjaGVja0lzTnVtYmVyIiwiY2hlY2tJc0Jvb2xlYW4iLCJjaGVja0lzRnVuY3Rpb24iLCJjaGVja0lzT2JqZWN0IiwiZmFjdG9yXyIsIkRFRkFVTFRfRkFDVE9SIiwiZmFjdG9yIiwiZnVuY3Rpb25fIiwiYXJndW1lbnRzXyIsImNhbGxiYWNrXyIsImxhc3RSZXN1bHRfIiwibnVtUmV0cmllc18iLCJiYWNrb2ZmXyIsInN0cmF0ZWd5XyIsImZhaWxBZnRlcl8iLCJyZXRyeVByZWRpY2F0ZV8iLCJERUZBVUxUX1JFVFJZX1BSRURJQ0FURV8iLCJzdGF0ZV8iLCJTdGF0ZV8iLCJQRU5ESU5HIiwiUlVOTklORyIsIkNPTVBMRVRFRCIsIkFCT1JURUQiLCJpc1BlbmRpbmciLCJpc0NvbXBsZXRlZCIsImlzQWJvcnRlZCIsInNldFN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJyZXRyeUlmIiwicmV0cnlQcmVkaWNhdGUiLCJnZXRMYXN0UmVzdWx0IiwiZ2V0TnVtUmV0cmllcyIsImRvQ2FsbGJhY2tfIiwiYmFja29mZkZhY3RvcnkiLCJkb0NhbGxfIiwiaGFuZGxlQmFja29mZl8iLCJpc1JldHJ5IiwiZXZlbnRBcmdzIiwiaGFuZGxlRnVuY3Rpb25DYWxsYmFja18iLCJkZWxheSIsIl9pc0FycmF5MiIsInRhc2tJbmRleCIsIm5leHRUYXNrIiwiX3BhcmFsbGVsMiIsImV0aEFiaSIsInR5cGVkU2lnbmF0dXJlSGFzaCIsInR5cGVkRGF0YSIsInNjaGVtYSIsInNvbGlkaXR5U0hBMyIsInJlY292ZXJQdWJsaWNLZXkiLCJzaWdQYXJhbXMiLCJnZXRQdWJsaWNLZXlGb3IiLCJwYWRXaXRoWmVyb2VzIiwibXlTdHJpbmciLCJjb25jYXRTaWciLCJyU2lnIiwic1NpZyIsInZTaWciLCJyU3RyIiwic1N0ciIsInZTdHIiLCJwZXJzb25hbFNpZ24iLCJzZW5kZXIiLCJleHRyYWN0UHVibGljS2V5IiwiaGFzaEJ1ZmZlciIsInNpZ25UeXBlZERhdGEiLCJyZWNvdmVyVHlwZWRTaWduYXR1cmUiLCJBQkkiLCJlbGVtZW50YXJ5TmFtZSIsInN0YXJ0c1dpdGgiLCJwYXJzZVR5cGVOIiwiZXhlYyIsInBhcnNlVHlwZU54TSIsInBhcnNlVHlwZUFycmF5IiwicGFyc2VOdW1iZXIiLCJwYXJzZVNpZ25hdHVyZSIsInJldGFyZ3MiLCJlbmNvZGVTaW5nbGUiLCJkZWNvZGVTaW5nbGUiLCJwYXJzZWRUeXBlIiwicGFyc2VUeXBlIiwicmF3VHlwZSIsInN1YkFycmF5IiwibWVtb3J5VXNhZ2UiLCJpc0R5bmFtaWMiLCJldmVudElEIiwibWV0aG9kSUQiLCJyYXdFbmNvZGUiLCJoZWFkTGVuZ3RoIiwicmF3RGVjb2RlIiwic2ltcGxlRW5jb2RlIiwic2ltcGxlRGVjb2RlIiwic29saWRpdHlIZXhWYWx1ZSIsImJpdHNpemUiLCJzdWJUeXBlIiwiYXJyYXlTaXplIiwiYXJyYXlWYWx1ZXMiLCJieXRlc2l6ZSIsInNvbGlkaXR5UGFjayIsInNvbGlkaXR5U0hBMjU2Iiwic29saWRpdHlSSVBFTUQxNjAiLCJmcm9tU2VycGVudCIsInRvU2VycGVudCIsIl9fZXhwb3J0IiwiaGFzaF8xIiwiYWRkciIsImVpcDExOTFDaGFpbklkIiwibm9uY2VCTiIsImdlbmVyYXRlQWRkcmVzczIiLCJzYWx0IiwiaW5pdENvZGUiLCJmcm9tQnVmIiwic2FsdEJ1ZiIsImluaXRDb2RlQnVmIiwiY2FsY3VsYXRlU2lnUmVjb3ZlcnkiLCJjaGFpbklkIiwiaXNWYWxpZFNpZ1JlY292ZXJ5IiwiaG9tZXN0ZWFkT3JMYXRlciIsInJCTiIsInNCTiIsIm9ial8xIiwia2V5c18xIiwic2VtYXBob3JlIiwiZmlyc3RIZXJlIiwiaXNGaXJzdCIsImF2YWlsYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2dCQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQRSxHQUE4QixpQkFBVkYsR0FBc0JBLEdBQVNB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LElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFDMUYsSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxHQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sSUFDMUYsR0FBTSxFQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxHQUFNLEdBQU0sSUFDMUYsR0FBTSxJQUFNLEVBQU0sR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFDMUYsSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sR0FDMUYsSUFBTSxJQUFNLEdBQU0sR0FBTSxHQUFNLEVBQU0sRUFBTSxFQUFNLElBQU0sR0FBTSxFQUFNLEdBQU0sRUFFeEUsRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFDMUYsSUFHRWtvRSxFQUFxQzVvRSxFQUFPVSxLQUFLLENBRW5ELEdBQU0sSUFBTSxFQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxHQUVoRCxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUMxRixFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUUxRixJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxFQUFNLEVBQU0sRUFBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEdBQU0sSUFBTSxHQUMxRixJQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sR0FBTSxFQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUFNLEVBQU0sRUFBTSxFQUMxRixHQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxJQUMxRixHQUFNLEVBQU0sRUFBTSxJQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLEdBQU0sSUFBTSxJQUFNLEdBQU0sR0FBTSxJQUMxRixHQUFNLElBQU0sR0FBTSxHQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxJQUFNLElBQU0sR0FBTSxHQUMxRixFQUFNLElBQU0sSUFBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sR0FBTSxHQUFNLElBQU0sR0FBTSxJQUFNLElBQU0sSUFBTSxHQUMxRixJQUFNLElBQU0sRUFBTSxHQUFNLEVBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUMxRixJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLElBQU0sSUFBTSxJQUFNLEdBQU0sSUFBTSxHQUFNLElBQU0sSUFBTSxHQUMxRixJQUFNLElBQU0sR0FBTSxHQUFNLEdBQU0sRUFBTSxFQUFNLEVBQU0sSUFB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SXJ3RSxFQUFHMEwsRUFBR3ZFLEVBQUdwSCxFQUFHc3FELEVBQUUsR0FBSSxXQUFZLElBQ3RDdHFELEVBQUlzd0UsRUFBSXR3RSxFQUFHQyxFQUFHMEwsRUFBR3ZFLEVBQUdrakQsRUFBRSxJQUFLLFdBQVksSUFDdkNsakQsRUFBSWtwRSxFQUFJbHBFLEVBQUdwSCxFQUFHQyxFQUFHMEwsRUFBRzIrQyxFQUFFLEdBQUksV0FBWSxJQUN0QzMrQyxFQUFJMmtFLEVBQUkza0UsRUFBR3ZFLEVBQUdwSCxFQUFHQyxFQUFHcXFELEVBQUUsSUFBSyxXQUFZLEdBQ3ZDcnFELEVBQUlxd0UsRUFBSXJ3RSxFQUFHMEwsRUFBR3ZFLEVBQUdwSCxFQUFHc3FELEVBQUUsR0FBSSxXQUFZLElBQ3RDdHFELEVBQUlzd0UsRUFBSXR3RSxFQUFHQyxFQUFHMEwsRUFBR3ZFLEVBQUdrakQsRUFBRSxJQUFLLFdBQVksSUFDdkNsakQsRUFBSWtwRSxFQUFJbHBFLEVBQUdwSCxFQUFHQyxFQUFHMEwsRUFBRzIrQyxFQUFFLEdBQUksV0FBWSxJQUN0QzMrQyxFQUFJMmtFLEVBQUkza0UsRUFBR3ZFLEVBQUdwSCxFQUFHQyxFQUFHcXFELEVBQUUsR0FBSSxXQUFZLEdBQ3RDcnFELEVBQUlxd0UsRUFBSXJ3RSxFQUFHMEwsRUFBR3ZFLEVBQUdwSCxFQUFHc3FELEVBQUUsSUFBSyxXQUFZLElBQ3ZDdHFELEVBQUlzd0UsRUFBSXR3RSxFQUFHQyxFQUFHMEwsRUFBR3ZFLEVBQUdrakQsRUFBRSxHQUFJLFdBQVksSUFDdENsakQsRUFBSWtwRSxFQUFJbHBFLEVBQUdwSCxFQUFHQyxFQUFHMEwsRUFBRzIrQyxFQUFFLElBQUssV0FBWSxJQUN2QzMrQyxFQUFJMmtFLEVBQUkza0UsRUFBR3ZFLEVBQUdwSCxFQUFHQyxFQUFHcXFELEVBQUUsR0FBSSxXQUFZLEdBQ3RDcnFELEVBQUlxd0UsRUFBSXJ3RSxFQUFHMEwsRUFBR3ZFLEVBQUdwSCxFQUFHc3FELEVBQUUsSUFBSyxXQUFZLElBQ3ZDdHFELEVBQUlzd0UsRUFBSXR3RSxFQUFHQyxF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RyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFDbkQsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksSUFHaER3aUIsRUFBSyxDQUNQLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQ2xELEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQ25ELEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQ2xELEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQ2xELEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLElBR2hEQyxFQUFLLENBQ1AsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFDckQsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FDcEQsR0FBSSxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFDckQsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FDcEQsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FHbkRDLEVBQUssQ0FDUCxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUNyRCxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxHQUNwRCxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxHQUFJLEdBQUksRUFBRyxFQUNyRCxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUNyRCxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxJQUdsRGhtQixFQUFLLENBQUMsRUFBWSxXQUFZLFdBQVksV0FBWSxZQUN0RGltQixFQUFLLENBQUMsV0FBWSxXQUFZLFdBQVksV0FBWSxHQUUxRCxTQUFTN3hCLElBQ1AwRyxFQUFTdm5ELEtBQUsyQyxLQUFNLElBR3BCQSxLQUFLcW5ELEdBQUssV0FDVnJuRCxLQUFLc25ELEdBQUssV0FDVnRuRCxLQUFLdW5ELEdBQUssV0FDVnZuRCxLQUFLd25ELEdBQUssVUFDVnhuRCxLQUFLeW5ELEdBQUssV0F3RlosU0FBU2dtQixFQUFNdGtFLEVBQUd4SyxHQUNoQixPQUFRd0ssR0FBS3hLLEVBQU13SyxJQUFPLEdBQUt4SyxFQUdqQyxTQUFTcXhFLEVBQUs5bUUsRUFBR3ZFLEVBQUdwSCxFQUFHQyxFQUFHaUwsRUFBR25MLEVBQUd5YixFQUFHOVosR0FDakMsT0FBUXd1RSxFQUFNdmtFLEdBQUt2RSxFQUFJcEgsRUFBSUMsR0FBS0YsRUFBSXliLEVBQUssRUFBRzlaLEdBQUt3SixFQUFLLEVBR3hELFNBQVN3bkUsRUFBSy9tRSxFQUFHdkUsRUFBR3BILEVBQUdDLEVBQUdpTCxFQUFHbkwsRUFBR3liLEVBQUc5WixHQUNqQyxPQUFRd3VFLEVBQU12a0UsR0FBTXZFLEVBQUlwSCxHQUFRb0gsRUFBS25ILEdBQU1GLEVBQUl5YixFQUFLLEVBQUc5WixHQUFLd0osRUFBSyxFQUduRSxTQUFTeW5FLEVBQUtobkUsRUFBR3ZFLEVBQUdwSCxFQUFHQyxFQUFHaUwsRUFBR25MLEVBQUd5YixFQUFHOVosR0FDakMsT0FBUXd1RSxFQUFNdmtFLElBQU12RSxHQUFNcEgsR0FBTUMsR0FBS0YsRUFBSXliLEVBQUssRUFBRzlaLEdBQUt3SixFQUFLLEVBRzdELFNBQVMwbkUsRUFBS2puRSxFQUFHdkUsRUFBR3BILEVBQUdDLEVBQUdpTCxFQUFHbkwsRUFBR3liLEVBQUc5WixHQUNqQyxPQUFRd3VFLEVBQU12a0UsR0FBTXZFLEVBQUluSCxFQUFNRCxHQUFNQyxHQUFPRixFQUFJeWIsRUFBSyxFQUFHOVosR0FBS3dKLEVBQUssRUFHbkUsU0FBUzJuRSxFQUFLbG5FLEVBQUd2RSxFQUFHcEgsRUFBR0MsRUFBR2lMLEVBQUduTCxFQUFHeWIsRUFBRzlaLEdBQ2pDLE9BQVF3dUUsRUFBTXZrRSxHQUFLdkUsR0FBS3BILEdBQU1DLElBQU9GLEVBQUl5YixFQUFLLEVBQUc5WixHQUFLd0osRUFBSyxFQTFHN0Q4TixFQUFTMm5DLEVBQVcwRyxHQUVwQjFHLEVBQVVwL0MsVUFBVTZxQyxRQUFVLFdBRTVCLElBREEsSUFBSTd5QixFQUFRMDJELEVBQ0g1bkUsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQUdrUixFQUFNbFIsR0FBSzVGLEtBQUtrcEMsT0FBTzU4QixZQUFnQixFQUFKMUcsR0FlaEUsSUFiQSxJQUFJNDNCLEVBQWUsRUFBVng5QixLQUFLcW5ELEdBQ1YxcEIsRUFBZSxFQUFWMzlCLEtBQUtzbkQsR0FDVnZwQixFQUFlLEVBQVYvOUIsS0FBS3VuRCxHQUNWdHBCLEVBQWUsRUFBVmorQixLQUFLd25ELEdBQ1ZucEIsRUFBZSxFQUFWcitCLEtBQUt5bkQsR0FFVmp3QixFQUFlLEVBQVZ4M0IsS0FBS3FuRCxHQUNWZ3BCLEVBQWUsRUFBVnJ3RSxLQUFLc25ELEdBQ1ZncEIsRUFBZSxFQUFWdHdFLEtBQUt1bkQsR0FDVmdwQixFQUFlLEVBQVZ2d0UsS0FBS3duRCxHQUNWaHlDLEVBQWUsRUFBVnhWLEtBQUt5bkQsR0FHTHZxRCxFQUFJLEVBQUdBLEVBQUksR0FBSUEsR0FBSyxFQUFHLENBQzlCLElBQUlzekUsRUFDQUMsRUFDQXZ6RSxFQUFJLElBQ05zekUsRUFBS1IsRUFBSXh5QyxFQUFJRyxFQUFJSSxFQUFJRSxFQUFJSSxFQUFJdm5CLEVBQU1zMkMsRUFBR2x3RCxJQUFLNHNELEVBQUcsR0FBSStsQixFQUFHM3lFLElBQ3JEdXpFLEVBQUtMLEVBQUk1NEMsRUFBSTY0QyxFQUFJQyxFQUFJQyxFQUFJLzZELEVBQUlzQixFQUFNODRELEVBQUcxeUUsSUFBSzZ5RSxFQUFHLEdBQUlELEVBQUc1eUUsS0FDNUNBLEVBQUksSUFDYnN6RSxFQUFLUCxFQUFJenlDLEVBQUlHLEVBQUlJLEVBQUlFLEVBQUlJLEVBQUl2bkIsRUFBTXMyQyxFQUFHbHdELElBQUs0c0QsRUFBRyxHQUFJK2xCLEVBQUczeUUsSUFDckR1ekUsRUFBS04sRUFBSTM0QyxFQUFJNjRDLEVBQUlDLEVBQUlDLEVBQUkvNkQsRUFBSXNCLEVBQU04NEQsRUFBRzF5RSxJQUFLNnlFLEVBQUcsR0FBSUQsRUFBRzV5RSxLQUM1Q0EsRUFBSSxJQUNic3pFLEVBQUtOLEVBQUkxeUMsRUFBSUcsRUFBSUksRUFBSUUsRUFBSUksRUFBSXZuQixFQUFNczJDLEVBQUdsd0QsSUFBSzRzRCxFQUFHLEdBQUkrbEIsRUFBRzN5RSxJQUNyRHV6RSxFQUFLUCxFQUFJMTRDLEVBQUk2NEMsRUFBSUMsRUFBSUMsRUFBSS82RCxFQUFJc0IsRUFBTTg0RCxFQUFHMXlFLElBQUs2eUUsRUFBRyxHQUFJRCxFQUFHNXlFLEtBQzVDQSxFQUFJLElBQ2JzekUsRUFBS0wsRUFBSTN5QyxFQUFJRyxFQUFJSSxFQUFJRSxFQUFJSSxFQUFJdm5CLEVBQU1zMkMsRUFBR2x3RCxJQUFLNHNELEVBQUcsR0FBSStsQixFQUFHM3lFLElBQ3JEdXpFLEVBQUtSLEVBQUl6NEMsRUFBSTY0QyxFQUFJQyxFQUFJQyxFQUFJLzZELEVBQUlzQixFQUFNODRELEVBQUcxeUUsSUFBSzZ5RSxFQUFHLEdBQUlELEVBQUc1eUUsTUFFckRzekUsRUFBS0osRUFBSTV5QyxFQUFJRyxFQUFJSSxFQUFJRSxFQUFJSSxFQUFJdm5CLEVBQU1zMkMsRUFBR2x3RCxJQUFLNHNELEVBQUcsR0FBSStsQixFQUFHM3lFLElBQ3JEdXpFLEVBQUtULEVBQUl4NEMsRUFBSTY0QyxFQUFJQyxFQUFJQyxFQUFJLzZELEVBQUlzQixFQUFNODRELEVBQUcxeUUsSUFBSzZ5RSxFQUFHLEdBQUlELEVBQUc1eUUsS0FHdkRzZ0MsRUFBS2EsRUFDTEEsRUFBS0osRUFDTEEsRUFBS3d2QyxFQUFLMXZDLEVBQUksSUFDZEEsRUFBS0osRUFDTEEsRUFBSzZ5QyxFQUVMaDVDLEVBQUtoaUIsRUFDTEEsRUFBSys2RCxFQUNMQSxFQUFLOUMsRUFBSzZDLEVBQUksSUFDZEEsRUFBS0QsRUFDTEEsRUFBS0ksRUFJUCxJQUFJcnlFLEVBQUs0QixLQUFLc25ELEdBQUt2cEIsRUFBS3d5QyxFQUFNLEVBQzlCdndFLEtBQUtzbkQsR0FBTXRuRCxLQUFLdW5ELEdBQUt0cEIsRUFBS3pvQixFQUFNLEVBQ2hDeFYsS0FBS3VuRCxHQUFNdm5ELEtBQUt3bkQsR0FBS25wQixFQUFLN0csRUFBTSxFQUNoQ3gzQixLQUFLd25ELEdBQU14bkQsS0FBS3luRCxHQUFLanFCLEVBQUs2eUMsRUFBTSxFQUNoQ3J3RSxLQUFLeW5ELEdBQU16bkQsS0FBS3FuRCxHQUFLMXBCLEVBQUsyeUMsRUFBTSxFQUNoQ3R3RSxLQUFLcW5ELEdBQUtqcEQsR0FHWjgvQyxFQUFVcC9DLFVBQVVveEMsUUFBVSxXQUU1Qmx3QyxLQUFLa3BDLE9BQU9scEMsS0FBSzZrRCxnQkFBa0IsSUFDL0I3a0QsS0FBSzZrRCxhQUFlLEtBQ3RCN2tELEtBQUtrcEMsT0FBT3BnQyxLQUFLLEVBQUc5SSxLQUFLNmtELGFBQWMsSUFDdkM3a0QsS0FBSzJwQyxVQUNMM3BDLEtBQUs2a0QsYUFBZSxHQUd0QjdrRCxLQUFLa3BDLE9BQU9wZ0MsS0FBSyxFQUFHOUksS0FBSzZrRCxhQUFjLElBQ3ZDN2tELEtBQUtrcEMsT0FBT2g4QixjQUFjbE4sS0FBSzhrRCxRQUFRLEdBQUksSUFDM0M5a0QsS0FBS2twQyxPQUFPaDhCLGNBQWNsTixLQUFLOGtELFFBQVEsR0FBSSxJQUMzQzlrRCxLQUFLMnBDLFVBR0wsSUFBSXZtQyxFQUFTN0IsRUFBTzZHLE1BQVE3RyxFQUFPNkcsTUFBTSxJQUFNLElBQUk3RyxFQUFPLElBTTFELE9BTEE2QixFQUFPdUssYUFBYTNOLEtBQUtxbkQsR0FBSSxHQUM3QmprRCxFQUFPdUssYUFBYTNOLEtBQUtzbkQsR0FBSSxHQUM3QmxrRCxFQUFPdUssYUFBYTNOLEtBQUt1bkQsR0FBSSxHQUM3Qm5rRCxFQUFPdUssYUFBYTNOLEtBQUt3bkQsR0FBSSxJQUM3QnBrRCxFQUFPdUssYUFBYTNOLEtBQUt5bkQsR0FBSSxJQUN0QnJrRCxHQTJCVG5HLEVBQU9ELFFBQVVraEQsRyxpQkNsS2JsaEQsRUFBVUMsRUFBT0QsUUFBVSxTQUFjeWhFLEdBQzNDQSxFQUFZQSxFQUFVejZELGNBRXRCLElBQUkwc0UsRUFBWTF6RSxFQUFReWhFLEdBQ3hCLElBQUtpUyxFQUFXLE1BQU0sSUFBSTN1RSxNQUFNMDhELEVBQVksK0NBRTVDLE9BQU8sSUFBSWlTLElBR0x2eUIsSUFBTSxFQUFRLEtBQ3RCbmhELEVBQVFrakQsS0FBTyxFQUFRLEtBQ3ZCbGpELEVBQVFtakQsT0FBUyxFQUFRLEtBQ3pCbmpELEVBQVEyOUMsT0FBUyxFQUFRLEtBQ3pCMzlDLEVBQVEyaUQsT0FBUyxFQUFRLEtBQ3pCM2lELEVBQVE0aUQsT0FBUyxFQUFRLE0sZ0JDTnpCLElBQUlycEMsRUFBVyxFQUFRLElBQ25Cd3lCLEVBQU8sRUFBUSxJQUNmeG5DLEVBQVMsRUFBUSxJQUFlQSxPQUVoQ3NsRCxFQUFJLENBQ04sV0FBWSxZQUFZLFlBQWdCLFdBR3RDQyxFQUFJLElBQUl2OEMsTUFBTSxJQUVsQixTQUFTb21FLElBQ1Azd0UsS0FBS3FULE9BQ0xyVCxLQUFLZ25ELEdBQUtGLEVBRVYvZCxFQUFLMXJDLEtBQUsyQyxLQUFNLEdBQUksSUFtQnRCLFNBQVM0d0UsRUFBUXg1RCxHQUNmLE9BQVFBLEdBQU8sR0FBT0EsSUFBUSxFQUdoQyxTQUFTeTVELEVBQUk1eEUsRUFBRzBGLEVBQUdwSCxFQUFHQyxHQUNwQixPQUFVLElBQU55QixFQUFpQjBGLEVBQUlwSCxHQUFRb0gsRUFBS25ILEVBQzVCLElBQU55QixFQUFpQjBGLEVBQUlwSCxFQUFNb0gsRUFBSW5ILEVBQU1ELEVBQUlDLEVBQ3RDbUgsRUFBSXBILEVBQUlDLEVBdkJqQitZLEVBQVNvNkQsRUFBSzVuQyxHQUVkNG5DLEVBQUk3eEUsVUFBVXVVLEtBQU8sV0FPbkIsT0FOQXJULEtBQUtxbkQsR0FBSyxXQUNWcm5ELEtBQUtzbkQsR0FBSyxXQUNWdG5ELEtBQUt1bkQsR0FBSyxXQUNWdm5ELEtBQUt3bkQsR0FBSyxVQUNWeG5ELEtBQUt5bkQsR0FBSyxXQUVIem5ELE1BaUJUMndFLEVBQUk3eEUsVUFBVTZxQyxRQUFVLFNBQVVrZSxHQVNoQyxJQVJBLElBZmN6d0MsRUFlVjB2QyxFQUFJOW1ELEtBQUtnbkQsR0FFVDk5QyxFQUFjLEVBQVZsSixLQUFLcW5ELEdBQ1QxaUQsRUFBYyxFQUFWM0UsS0FBS3NuRCxHQUNUL3BELEVBQWMsRUFBVnlDLEtBQUt1bkQsR0FDVC9wRCxFQUFjLEVBQVZ3QyxLQUFLd25ELEdBQ1QvK0MsRUFBYyxFQUFWekksS0FBS3luRCxHQUVKdnFELEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUFHNHBELEVBQUU1cEQsR0FBSzJxRCxFQUFFdDdDLFlBQWdCLEVBQUpyUCxHQUNsRCxLQUFPQSxFQUFJLEtBQU1BLEVBQUc0cEQsRUFBRTVwRCxHQUFLNHBELEVBQUU1cEQsRUFBSSxHQUFLNHBELEVBQUU1cEQsRUFBSSxHQUFLNHBELEVBQUU1cEQsRUFBSSxJQUFNNHBELEVBQUU1cEQsRUFBSSxJQUVuRSxJQUFLLElBQUkwSSxFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFBRyxDQUMzQixJQUFJM0csS0FBTzJHLEVBQUksSUFDWHhILEVBQW9ELElBNUI1Q2daLEVBNEJHbE8sSUEzQkYsRUFBTWtPLElBQVEsSUEyQlB5NUQsRUFBRzV4RSxFQUFHMEYsRUFBR3BILEVBQUdDLEdBQUtpTCxFQUFJcStDLEVBQUVsaEQsR0FBS2loRCxFQUFFNW5ELEdBRWxEd0osRUFBSWpMLEVBQ0pBLEVBQUlELEVBQ0pBLEVBQUlxekUsRUFBT2pzRSxHQUNYQSxFQUFJdUUsRUFDSkEsRUFBSTlLLEVBR040QixLQUFLcW5ELEdBQU1uK0MsRUFBSWxKLEtBQUtxbkQsR0FBTSxFQUMxQnJuRCxLQUFLc25ELEdBQU0zaUQsRUFBSTNFLEtBQUtzbkQsR0FBTSxFQUMxQnRuRCxLQUFLdW5ELEdBQU1ocUQsRUFBSXlDLEtBQUt1bkQsR0FBTSxFQUMxQnZuRCxLQUFLd25ELEdBQU1ocUQsRUFBSXdDLEtBQUt3bkQsR0FBTSxFQUMxQnhuRCxLQUFLeW5ELEdBQU1oL0MsRUFBSXpJLEtBQUt5bkQsR0FBTSxHQUc1QmtwQixFQUFJN3hFLFVBQVVrckMsTUFBUSxXQUNwQixJQUFJZ2UsRUFBSXptRCxFQUFPUyxZQUFZLElBUTNCLE9BTkFnbUQsRUFBRXA2QyxhQUF1QixFQUFWNU4sS0FBS3FuRCxHQUFRLEdBQzVCVyxFQUFFcDZDLGFBQXVCLEVBQVY1TixLQUFLc25ELEdBQVEsR0FDNUJVLEVBQUVwNkMsYUFBdUIsRUFBVjVOLEtBQUt1bkQsR0FBUSxHQUM1QlMsRUFBRXA2QyxhQUF1QixFQUFWNU4sS0FBS3duRCxHQUFRLElBQzVCUSxFQUFFcDZDLGFBQXVCLEVBQVY1TixLQUFLeW5ELEdBQVEsSUFFckJPLEdBR1QvcUQsRUFBT0QsUUFBVTJ6RSxHLGdCQ3BGakIsSUFBSXA2RCxFQUFXLEVBQVEsSUFDbkJ3eUIsRUFBTyxFQUFRLElBQ2Z4bkMsRUFBUyxFQUFRLElBQWVBLE9BRWhDc2xELEVBQUksQ0FDTixXQUFZLFlBQVksWUFBZ0IsV0FHdENDLEVBQUksSUFBSXY4QyxNQUFNLElBRWxCLFNBQVN1bUUsSUFDUDl3RSxLQUFLcVQsT0FDTHJULEtBQUtnbkQsR0FBS0YsRUFFVi9kLEVBQUsxckMsS0FBSzJDLEtBQU0sR0FBSSxJQW1CdEIsU0FBUyt3RSxFQUFPMzVELEdBQ2QsT0FBUUEsR0FBTyxFQUFNQSxJQUFRLEdBRy9CLFNBQVN3NUQsRUFBUXg1RCxHQUNmLE9BQVFBLEdBQU8sR0FBT0EsSUFBUSxFQUdoQyxTQUFTeTVELEVBQUk1eEUsRUFBRzBGLEVBQUdwSCxFQUFHQyxHQUNwQixPQUFVLElBQU55QixFQUFpQjBGLEVBQUlwSCxHQUFRb0gsRUFBS25ILEVBQzVCLElBQU55QixFQUFpQjBGLEVBQUlwSCxFQUFNb0gsRUFBSW5ILEVBQU1ELEVBQUlDLEVBQ3RDbUgsRUFBSXBILEVBQUlDLEVBM0JqQitZLEVBQVN1NkQsRUFBTS9uQyxHQUVmK25DLEVBQUtoeUUsVUFBVXVVLEtBQU8sV0FPcEIsT0FOQXJULEtBQUtxbkQsR0FBSyxXQUNWcm5ELEtBQUtzbkQsR0FBSyxXQUNWdG5ELEtBQUt1bkQsR0FBSyxXQUNWdm5ELEtBQUt3bkQsR0FBSyxVQUNWeG5ELEtBQUt5bkQsR0FBSyxXQUVIem5ELE1BcUJUOHdFLEVBQUtoeUUsVUFBVTZxQyxRQUFVLFNBQVVrZSxHQVNqQyxJQVJBLElBbkJjendDLEVBbUJWMHZDLEVBQUk5bUQsS0FBS2duRCxHQUVUOTlDLEVBQWMsRUFBVmxKLEtBQUtxbkQsR0FDVDFpRCxFQUFjLEVBQVYzRSxLQUFLc25ELEdBQ1QvcEQsRUFBYyxFQUFWeUMsS0FBS3VuRCxHQUNUL3BELEVBQWMsRUFBVndDLEtBQUt3bkQsR0FDVC8rQyxFQUFjLEVBQVZ6SSxLQUFLeW5ELEdBRUp2cUQsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQUc0cEQsRUFBRTVwRCxHQUFLMnFELEVBQUV0N0MsWUFBZ0IsRUFBSnJQLEdBQ2xELEtBQU9BLEVBQUksS0FBTUEsRUFBRzRwRCxFQUFFNXBELElBNUJSa2EsRUE0Qm1CMHZDLEVBQUU1cEQsRUFBSSxHQUFLNHBELEVBQUU1cEQsRUFBSSxHQUFLNHBELEVBQUU1cEQsRUFBSSxJQUFNNHBELEVBQUU1cEQsRUFBSSxNQTNCMUQsRUFBTWthLElBQVEsR0E2QjdCLElBQUssSUFBSXhSLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUFHLENBQzNCLElBQUkzRyxLQUFPMkcsRUFBSSxJQUNYeEgsRUFBSzJ5RSxFQUFNN25FLEdBQUsybkUsRUFBRzV4RSxFQUFHMEYsRUFBR3BILEVBQUdDLEdBQUtpTCxFQUFJcStDLEVBQUVsaEQsR0FBS2loRCxFQUFFNW5ELEdBQU0sRUFFeER3SixFQUFJakwsRUFDSkEsRUFBSUQsRUFDSkEsRUFBSXF6RSxFQUFPanNFLEdBQ1hBLEVBQUl1RSxFQUNKQSxFQUFJOUssRUFHTjRCLEtBQUtxbkQsR0FBTW4rQyxFQUFJbEosS0FBS3FuRCxHQUFNLEVBQzFCcm5ELEtBQUtzbkQsR0FBTTNpRCxFQUFJM0UsS0FBS3NuRCxHQUFNLEVBQzFCdG5ELEtBQUt1bkQsR0FBTWhxRCxFQUFJeUMsS0FBS3VuRCxHQUFNLEVBQzFCdm5ELEtBQUt3bkQsR0FBTWhxRCxFQUFJd0MsS0FBS3duRCxHQUFNLEVBQzFCeG5ELEtBQUt5bkQsR0FBTWgvQyxFQUFJekksS0FBS3luRCxHQUFNLEdBRzVCcXBCLEVBQUtoeUUsVUFBVWtyQyxNQUFRLFdBQ3JCLElBQUlnZSxFQUFJem1ELEVBQU9TLFlBQVksSUFRM0IsT0FOQWdtRCxFQUFFcDZDLGFBQXVCLEVBQVY1TixLQUFLcW5ELEdBQVEsR0FDNUJXLEVBQUVwNkMsYUFBdUIsRUFBVjVOLEtBQUtzbkQsR0FBUSxHQUM1QlUsRUFBRXA2QyxhQUF1QixFQUFWNU4sS0FBS3VuRCxHQUFRLEdBQzVCUyxFQUFFcDZDLGFBQXVCLEVBQVY1TixLQUFLd25ELEdBQVEsSUFDNUJRLEVBQUVwNkMsYUFBdUIsRUFBVjVOLEtBQUt5bkQsR0FBUSxJQUVyQk8sR0FHVC9xRCxFQUFPRCxRQUFVOHpFLEcsZ0JDMUZqQixJQUFJdjZELEVBQVcsRUFBUSxJQUNuQnd3QyxFQUFTLEVBQVEsS0FDakJoZSxFQUFPLEVBQVEsSUFDZnhuQyxFQUFTLEVBQVEsSUFBZUEsT0FFaEN1bEQsRUFBSSxJQUFJdjhDLE1BQU0sSUFFbEIsU0FBU3ltRSxJQUNQaHhFLEtBQUtxVCxPQUVMclQsS0FBS2duRCxHQUFLRixFQUVWL2QsRUFBSzFyQyxLQUFLMkMsS0FBTSxHQUFJLElBR3RCdVcsRUFBU3k2RCxFQUFRanFCLEdBRWpCaXFCLEVBQU9seUUsVUFBVXVVLEtBQU8sV0FVdEIsT0FUQXJULEtBQUtxbkQsR0FBSyxXQUNWcm5ELEtBQUtzbkQsR0FBSyxVQUNWdG5ELEtBQUt1bkQsR0FBSyxVQUNWdm5ELEtBQUt3bkQsR0FBSyxXQUNWeG5ELEtBQUt5bkQsR0FBSyxXQUNWem5ELEtBQUswbkQsR0FBSyxXQUNWMW5ELEtBQUsybkQsR0FBSyxXQUNWM25ELEtBQUs0bkQsR0FBSyxXQUVINW5ELE1BR1RneEUsRUFBT2x5RSxVQUFVa3JDLE1BQVEsV0FDdkIsSUFBSWdlLEVBQUl6bUQsRUFBT1MsWUFBWSxJQVUzQixPQVJBZ21ELEVBQUVwNkMsYUFBYTVOLEtBQUtxbkQsR0FBSSxHQUN4QlcsRUFBRXA2QyxhQUFhNU4sS0FBS3NuRCxHQUFJLEdBQ3hCVSxFQUFFcDZDLGFBQWE1TixLQUFLdW5ELEdBQUksR0FDeEJTLEVBQUVwNkMsYUFBYTVOLEtBQUt3bkQsR0FBSSxJQUN4QlEsRUFBRXA2QyxhQUFhNU4sS0FBS3luRCxHQUFJLElBQ3hCTyxFQUFFcDZDLGFBQWE1TixLQUFLMG5ELEdBQUksSUFDeEJNLEVBQUVwNkMsYUFBYTVOLEtBQUsybkQsR0FBSSxJQUVqQkssR0FHVC9xRCxFQUFPRCxRQUFVZzBFLEcsZ0JDcERqQixJQUFJejZELEVBQVcsRUFBUSxJQUNuQnUyQyxFQUFTLEVBQVEsS0FDakIvakIsRUFBTyxFQUFRLElBQ2Z4bkMsRUFBUyxFQUFRLElBQWVBLE9BRWhDdWxELEVBQUksSUFBSXY4QyxNQUFNLEtBRWxCLFNBQVMwbUUsSUFDUGp4RSxLQUFLcVQsT0FDTHJULEtBQUtnbkQsR0FBS0YsRUFFVi9kLEVBQUsxckMsS0FBSzJDLEtBQU0sSUFBSyxLQUd2QnVXLEVBQVMwNkQsRUFBUW5rQixHQUVqQm1rQixFQUFPbnlFLFVBQVV1VSxLQUFPLFdBbUJ0QixPQWxCQXJULEtBQUt5b0QsSUFBTSxXQUNYem9ELEtBQUswb0QsSUFBTSxXQUNYMW9ELEtBQUsyb0QsSUFBTSxXQUNYM29ELEtBQUs0b0QsSUFBTSxVQUNYNW9ELEtBQUs2b0QsSUFBTSxXQUNYN29ELEtBQUs4b0QsSUFBTSxXQUNYOW9ELEtBQUsrb0QsSUFBTSxXQUNYL29ELEtBQUtncEQsSUFBTSxXQUVYaHBELEtBQUtpcEQsSUFBTSxXQUNYanBELEtBQUtrcEQsSUFBTSxVQUNYbHBELEtBQUttcEQsSUFBTSxVQUNYbnBELEtBQUtvcEQsSUFBTSxXQUNYcHBELEtBQUtxcEQsSUFBTSxXQUNYcnBELEtBQUtzcEQsSUFBTSxXQUNYdHBELEtBQUt1cEQsSUFBTSxXQUNYdnBELEtBQUt3cEQsSUFBTSxXQUVKeHBELE1BR1RpeEUsRUFBT255RSxVQUFVa3JDLE1BQVEsV0FDdkIsSUFBSWdlLEVBQUl6bUQsRUFBT1MsWUFBWSxJQUUzQixTQUFTdXBELEVBQWN2bUMsRUFBRzduQixFQUFHMkksR0FDM0JraUQsRUFBRXA2QyxhQUFhb1gsRUFBR2xmLEdBQ2xCa2lELEVBQUVwNkMsYUFBYXpRLEVBQUcySSxFQUFTLEdBVTdCLE9BUEF5bEQsRUFBYXZyRCxLQUFLeW9ELElBQUt6b0QsS0FBS2lwRCxJQUFLLEdBQ2pDc0MsRUFBYXZyRCxLQUFLMG9ELElBQUsxb0QsS0FBS2twRCxJQUFLLEdBQ2pDcUMsRUFBYXZyRCxLQUFLMm9ELElBQUszb0QsS0FBS21wRCxJQUFLLElBQ2pDb0MsRUFBYXZyRCxLQUFLNG9ELElBQUs1b0QsS0FBS29wRCxJQUFLLElBQ2pDbUMsRUFBYXZyRCxLQUFLNm9ELElBQUs3b0QsS0FBS3FwRCxJQUFLLElBQ2pDa0MsRUFBYXZyRCxLQUFLOG9ELElBQUs5b0QsS0FBS3NwRCxJQUFLLElBRTFCdEIsR0FHVC9xRCxFQUFPRCxRQUFVaTBFLEcsZ0JDeERqQixJQUFJMXZFLEVBQVMsRUFBUSxJQUFlQSxPQUNoQ2svQixFQUFZLEVBQVEsSUFBVUEsVUFDOUJ0RixFQUFnQixFQUFRLElBQWtCQSxjQUc5QyxTQUFTKzFDLEVBQVlDLEdBQ25CMXdDLEVBQVVwakMsS0FBSzJDLE1BQ2ZBLEtBQUtteEUsU0FBK0IsaUJBQWJBLEVBQ25CbnhFLEtBQUtteEUsU0FDUG54RSxLQUFLbXhFLEdBQVlueEUsS0FBS294RSxlQUV0QnB4RSxLQUFLMmtDLE1BQVEza0MsS0FBS294RSxlQUVoQnB4RSxLQUFLNGtDLFNBQ1A1a0MsS0FBS3F4RSxRQUFVcnhFLEtBQUs0a0MsT0FDcEI1a0MsS0FBSzRrQyxPQUFTLE1BRWhCNWtDLEtBQUtzeEUsU0FBVyxLQUNoQnR4RSxLQUFLdXhFLFVBQVksS0FmSixFQUFRLEdBaUJ2Qmg3RCxDQUFTMjZELEVBQVl6d0MsR0FFckJ5d0MsRUFBV3B5RSxVQUFVd3FDLE9BQVMsU0FBVS9sQyxFQUFNaXVFLEVBQVVDLEdBQ2xDLGlCQUFUbHVFLElBQ1RBLEVBQU9oQyxFQUFPVSxLQUFLc0IsRUFBTWl1RSxJQUczQixJQUFJRSxFQUFVMXhFLEtBQUsycEMsUUFBUXBtQyxHQUMzQixPQUFJdkQsS0FBS214RSxTQUFpQm54RSxNQUV0Qnl4RSxJQUNGQyxFQUFVMXhFLEtBQUsyeEUsVUFBVUQsRUFBU0QsSUFHN0JDLElBR1RSLEVBQVdweUUsVUFBVTh5RSxlQUFpQixhQUN0Q1YsRUFBV3B5RSxVQUFVK3lFLFdBQWEsV0FDaEMsTUFBTSxJQUFJOXZFLE1BQU0sZ0RBR2xCbXZFLEVBQVdweUUsVUFBVWd6RSxXQUFhLFdBQ2hDLE1BQU0sSUFBSS92RSxNQUFNLGdEQUdsQm12RSxFQUFXcHlFLFVBQVVpekUsT0FBUyxXQUM1QixNQUFNLElBQUlod0UsTUFBTSwyQ0FHbEJtdkUsRUFBV3B5RSxVQUFVc3dDLFdBQWEsU0FBVTdyQyxFQUFNc2dCLEVBQUdpSSxHQUNuRCxJQUFJMXJCLEVBQ0osSUFDTUosS0FBS214RSxTQUNQbnhFLEtBQUsycEMsUUFBUXBtQyxHQUVidkQsS0FBSzBHLEtBQUsxRyxLQUFLMnBDLFFBQVFwbUMsSUFFekIsTUFBT2tGLEdBQ1BySSxFQUFNcUksRUFDTixRQUNBcWpCLEVBQUsxckIsS0FHVDh3RSxFQUFXcHlFLFVBQVV3d0MsT0FBUyxTQUFVM3ZDLEdBQ3RDLElBQUlTLEVBQ0osSUFDRUosS0FBSzBHLEtBQUsxRyxLQUFLcXhFLFdBQ2YsTUFBTzVvRSxHQUNQckksRUFBTXFJLEVBR1I5SSxFQUFLUyxJQUVQOHdFLEVBQVdweUUsVUFBVXN5RSxlQUFpQixTQUFVSyxHQUM5QyxJQUFJQyxFQUFVMXhFLEtBQUtxeEUsV0FBYTl2RSxFQUFPNkcsTUFBTSxHQUk3QyxPQUhJcXBFLElBQ0ZDLEVBQVUxeEUsS0FBSzJ4RSxVQUFVRCxFQUFTRCxHQUFXLElBRXhDQyxHQUdUUixFQUFXcHlFLFVBQVU2eUUsVUFBWSxTQUFVeHpFLEVBQU9rOUIsRUFBSzIyQyxHQU1yRCxHQUxLaHlFLEtBQUtzeEUsV0FDUnR4RSxLQUFLc3hFLFNBQVcsSUFBSW4yQyxFQUFjRSxHQUNsQ3I3QixLQUFLdXhFLFVBQVlsMkMsR0FHZnI3QixLQUFLdXhFLFlBQWNsMkMsRUFBSyxNQUFNLElBQUl0NUIsTUFBTSwwQkFFNUMsSUFBSTJJLEVBQU0xSyxLQUFLc3hFLFNBQVMxdUUsTUFBTXpFLEdBSzlCLE9BSkk2ekUsSUFDRnRuRSxHQUFPMUssS0FBS3N4RSxTQUFTbnRFLE9BR2hCdUcsR0FHVHpOLEVBQU9ELFFBQVVrMEUsRyw2Q0NoR2pCLElBQUllLEVBQVdqMUUsRUFFZmkxRSxFQUFTMWdFLFFBQVUsRUFBUSxLQUFtQkEsUUFDOUMwZ0UsRUFBU3A0QyxNQUFRLEVBQVEsSUFDekJvNEMsRUFBU3htQixLQUFPLEVBQVEsS0FDeEJ3bUIsRUFBU3orQixNQUFRLEVBQVEsS0FDekJ5K0IsRUFBUzV5QixPQUFTLEVBQVEsSUFHMUI0eUIsRUFBU2hILEdBQUssRUFBUSxLQUN0QmdILEVBQVNDLE1BQVEsRUFBUSxNLDJqRUNWekIsSUFBSXI0QyxFQUFRLEVBQVEsSUFDaEJyakIsRUFBSyxFQUFRLElBQ2JELEVBQVcsRUFBUSxJQUNuQjZ4QixFQUFPLEVBQVEsSUFFZi94QixFQUFTd2pCLEVBQU14akIsT0FFbkIsU0FBUzg3RCxFQUFXei9CLEdBQ2xCdEssRUFBSy9xQyxLQUFLMkMsS0FBTSxRQUFTMHlDLEdBRXpCMXlDLEtBQUtrSixFQUFJLElBQUlzTixFQUFHazhCLEVBQUt4cEMsRUFBRyxJQUFJMGYsTUFBTTVvQixLQUFLK1csS0FDdkMvVyxLQUFLMkUsRUFBSSxJQUFJNlIsRUFBR2s4QixFQUFLL3RDLEVBQUcsSUFBSWlrQixNQUFNNW9CLEtBQUsrVyxLQUN2Qy9XLEtBQUtveUUsS0FBT3B5RSxLQUFLNHlDLElBQUkzb0IsVUFFckJqcUIsS0FBS3F5RSxNQUFxQyxJQUE3QnJ5RSxLQUFLa0osRUFBRThmLFVBQVVuQixLQUFLLEdBQ25DN25CLEtBQUtzeUUsT0FBbUQsSUFBMUN0eUUsS0FBS2tKLEVBQUU4ZixVQUFVMWIsSUFBSXROLEtBQUtoQixHQUFHNm9CLE1BQU0sR0FHakQ3bkIsS0FBS3V5RSxLQUFPdnlFLEtBQUt3eUUsaUJBQWlCOS9CLEdBQ2xDMXlDLEtBQUt5eUUsWUFBYyxJQUFJbG9FLE1BQU0sR0FDN0J2SyxLQUFLMHlFLFlBQWMsSUFBSW5vRSxNQUFNLEdBb08vQixTQUFTb29FLEVBQU1uL0IsRUFBT3JxQyxFQUFHQyxFQUFHd3BFLEdBQzFCeHFDLEVBQUttTCxVQUFVbDJDLEtBQUsyQyxLQUFNd3pDLEVBQU8sVUFDdkIsT0FBTnJxQyxHQUFvQixPQUFOQyxHQUNoQnBKLEtBQUttSixFQUFJLEtBQ1RuSixLQUFLb0osRUFBSSxLQUNUcEosS0FBSzZ5RSxLQUFNLElBRVg3eUUsS0FBS21KLEVBQUksSUFBSXFOLEVBQUdyTixFQUFHLElBQ25CbkosS0FBS29KLEVBQUksSUFBSW9OLEVBQUdwTixFQUFHLElBRWZ3cEUsSUFDRjV5RSxLQUFLbUosRUFBRStmLFNBQVNscEIsS0FBS3d6QyxNQUFNejhCLEtBQzNCL1csS0FBS29KLEVBQUU4ZixTQUFTbHBCLEtBQUt3ekMsTUFBTXo4QixNQUV4Qi9XLEtBQUttSixFQUFFNE4sTUFDVi9XLEtBQUttSixFQUFJbkosS0FBS21KLEVBQUV5ZixNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixNQUM5Qi9XLEtBQUtvSixFQUFFMk4sTUFDVi9XLEtBQUtvSixFQUFJcEosS0FBS29KLEVBQUV3ZixNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixNQUNuQy9XLEtBQUs2eUUsS0FBTSxHQTZOZixTQUFTQyxFQUFPdC9CLEVBQU9ycUMsRUFBR0MsRUFBRytpQixHQUMzQmljLEVBQUttTCxVQUFVbDJDLEtBQUsyQyxLQUFNd3pDLEVBQU8sWUFDdkIsT0FBTnJxQyxHQUFvQixPQUFOQyxHQUFvQixPQUFOK2lCLEdBQzlCbnNCLEtBQUttSixFQUFJbkosS0FBS3d6QyxNQUFNeG5CLElBQ3BCaHNCLEtBQUtvSixFQUFJcEosS0FBS3d6QyxNQUFNeG5CLElBQ3BCaHNCLEtBQUttc0IsRUFBSSxJQUFJM1YsRUFBRyxLQUVoQnhXLEtBQUttSixFQUFJLElBQUlxTixFQUFHck4sRUFBRyxJQUNuQm5KLEtBQUtvSixFQUFJLElBQUlvTixFQUFHcE4sRUFBRyxJQUNuQnBKLEtBQUttc0IsRUFBSSxJQUFJM1YsRUFBRzJWLEVBQUcsS0FFaEJuc0IsS0FBS21KLEVBQUU0TixNQUNWL1csS0FBS21KLEVBQUluSixLQUFLbUosRUFBRXlmLE1BQU01b0IsS0FBS3d6QyxNQUFNejhCLE1BQzlCL1csS0FBS29KLEVBQUUyTixNQUNWL1csS0FBS29KLEVBQUlwSixLQUFLb0osRUFBRXdmLE1BQU01b0IsS0FBS3d6QyxNQUFNejhCLE1BQzlCL1csS0FBS21zQixFQUFFcFYsTUFDVi9XLEtBQUttc0IsRUFBSW5zQixLQUFLbXNCLEVBQUV2RCxNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixNQUVuQy9XLEtBQUsreUUsS0FBTy95RSxLQUFLbXNCLElBQU1uc0IsS0FBS3d6QyxNQUFNeG5CLElBbmVwQ3pWLEVBQVM0N0QsRUFBWS9wQyxHQUNyQm5yQyxFQUFPRCxRQUFVbTFFLEVBRWpCQSxFQUFXcnpFLFVBQVUwekUsaUJBQW1CLFNBQTBCOS9CLEdBRWhFLEdBQUsxeUMsS0FBS3F5RSxPQUFVcnlFLEtBQUs4TyxHQUFNOU8sS0FBS3JCLEdBQXdCLElBQW5CcUIsS0FBS2hCLEVBQUV1YSxLQUFLLEdBQXJELENBSUEsSUFBSXM4QixFQUNBZ0ssRUFDSixHQUFJbk4sRUFBS21ELEtBQ1BBLEVBQU8sSUFBSXIvQixFQUFHazhCLEVBQUttRCxLQUFNLElBQUlqdEIsTUFBTTVvQixLQUFLK1csU0FDbkMsQ0FDTCxJQUFJaThELEVBQVFoekUsS0FBS2l6RSxjQUFjanpFLEtBQUtoQixHQUdwQzYyQyxHQURBQSxFQUFPbTlCLEVBQU0sR0FBR3o3RCxJQUFJeTdELEVBQU0sSUFBTSxFQUFJQSxFQUFNLEdBQUtBLEVBQU0sSUFDekNwcUQsTUFBTTVvQixLQUFLK1csS0FFekIsR0FBSTI3QixFQUFLbU4sT0FDUEEsRUFBUyxJQUFJcnBDLEVBQUdrOEIsRUFBS21OLE9BQVEsUUFDeEIsQ0FFTCxJQUFJcXpCLEVBQVVsekUsS0FBS2l6RSxjQUFjanpFLEtBQUtyQixHQUNzQixJQUF4RHFCLEtBQUs4TyxFQUFFcEQsSUFBSXduRSxFQUFRLElBQUkvcEUsRUFBRW9PLElBQUl2WCxLQUFLOE8sRUFBRTNGLEVBQUVzZ0IsT0FBT29zQixJQUMvQ2dLLEVBQVNxekIsRUFBUSxJQUVqQnJ6QixFQUFTcXpCLEVBQVEsR0FDakI3OEQsRUFBMkQsSUFBcERyVyxLQUFLOE8sRUFBRXBELElBQUltMEMsR0FBUTEyQyxFQUFFb08sSUFBSXZYLEtBQUs4TyxFQUFFM0YsRUFBRXNnQixPQUFPb3NCLE1BaUJwRCxNQUFPLENBQ0xBLEtBQU1BLEVBQ05nSyxPQUFRQSxFQUNSQyxNQWRFcE4sRUFBS29OLE1BQ0NwTixFQUFLb04sTUFBTTdvQixLQUFJLFNBQVNrOEMsR0FDOUIsTUFBTyxDQUNManFFLEVBQUcsSUFBSXNOLEVBQUcyOEQsRUFBSWpxRSxFQUFHLElBQ2pCdkUsRUFBRyxJQUFJNlIsRUFBRzI4RCxFQUFJeHVFLEVBQUcsUUFJYjNFLEtBQUtvekUsY0FBY3Z6QixNQVUvQnN5QixFQUFXcnpFLFVBQVVtMEUsY0FBZ0IsU0FBdUI3N0QsR0FJMUQsSUFBSUwsRUFBTUssSUFBUXBYLEtBQUtoQixFQUFJZ0IsS0FBSytXLElBQU1QLEVBQUdnVyxLQUFLcFYsR0FDMUNnN0QsRUFBTyxJQUFJNTdELEVBQUcsR0FBR29TLE1BQU03UixHQUFLa1QsVUFDNUJvcEQsRUFBUWpCLEVBQUtsb0QsU0FFYmpyQixFQUFJLElBQUl1WCxFQUFHLEdBQUdvUyxNQUFNN1IsR0FBS21ULFNBQVNILFVBQVVOLE9BQU8yb0QsR0FJdkQsTUFBTyxDQUZFaUIsRUFBTWxxRCxPQUFPbHFCLEdBQUcrcEIsVUFDaEJxcUQsRUFBTWhxRCxPQUFPcHFCLEdBQUcrcEIsWUFJM0JtcEQsRUFBV3J6RSxVQUFVczBFLGNBQWdCLFNBQXVCdnpCLEdBMkIxRCxJQXpCQSxJQVlJdGpDLEVBQ0E4QixFQUVBM0IsRUFDQThCLEVBRUEzQixFQUNBOEIsRUFFQTIwRCxFQUVBdDFFLEVBQ0FtTCxFQXhCQW9xRSxFQUFXdnpFLEtBQUtyQixFQUFFNG1CLE1BQU1sZSxLQUFLMEYsTUFBTS9NLEtBQUtyQixFQUFFeWIsWUFBYyxJQUl4RHFTLEVBQUlvekIsRUFDSjd5QixFQUFJaHRCLEtBQUtyQixFQUFFNFosUUFDWG1QLEVBQUssSUFBSWxSLEVBQUcsR0FDWmc5RCxFQUFLLElBQUloOUQsRUFBRyxHQUNabVIsRUFBSyxJQUFJblIsRUFBRyxHQUNaaTlELEVBQUssSUFBSWo5RCxFQUFHLEdBYVp0WixFQUFJLEVBR2EsSUFBZHV2QixFQUFFNUUsS0FBSyxJQUFVLENBQ3RCLElBQUkvTixFQUFJa1QsRUFBRTdHLElBQUlzRyxHQUNkenVCLEVBQUlndkIsRUFBRTFmLElBQUl3TSxFQUFFcE8sSUFBSStnQixJQUNoQnRqQixFQUFJd2UsRUFBR3JhLElBQUl3TSxFQUFFcE8sSUFBSWdjLElBQ2pCLElBQUl0ZSxFQUFJcXFFLEVBQUdubUUsSUFBSXdNLEVBQUVwTyxJQUFJOG5FLElBRXJCLElBQUs5MkQsR0FBTTFlLEVBQUV1WixJQUFJZzhELEdBQVksRUFDM0JoM0QsRUFBSysyRCxFQUFNdDRELE1BQ1hxRCxFQUFLcUosRUFDTGhMLEVBQUsxZSxFQUFFZ2QsTUFDUHdELEVBQUtyVixPQUNBLEdBQUl1VCxHQUFjLEtBQU54ZixFQUNqQixNQUVGbzJFLEVBQVF0MUUsRUFFUmd2QixFQUFJUCxFQUNKQSxFQUFJenVCLEVBQ0oycEIsRUFBS0QsRUFDTEEsRUFBS3ZlLEVBQ0xzcUUsRUFBS0QsRUFDTEEsRUFBS3BxRSxFQUVQeVQsRUFBSzdlLEVBQUVnZCxNQUNQMkQsRUFBS3hWLEVBRUwsSUFBSXVxRSxFQUFPaDNELEVBQUc0SCxNQUFNbEksSUFBSW9DLEVBQUc4RixPQWlCM0IsT0FoQld6SCxFQUFHeUgsTUFBTWxJLElBQUl1QyxFQUFHMkYsT0FDbEIvTSxJQUFJbThELElBQVMsSUFDcEI3MkQsRUFBS04sRUFDTG9DLEVBQUtOLEdBSUgzQixFQUFHN0YsV0FDTDZGLEVBQUtBLEVBQUcxQixNQUNSd0QsRUFBS0EsRUFBR3hELE9BRU42QixFQUFHaEcsV0FDTGdHLEVBQUtBLEVBQUc3QixNQUNSMkQsRUFBS0EsRUFBRzNELE9BR0gsQ0FDTCxDQUFFOVIsRUFBR3dULEVBQUkvWCxFQUFHNlosR0FDWixDQUFFdFYsRUFBRzJULEVBQUlsWSxFQUFHZ2EsS0FJaEJ3ekQsRUFBV3J6RSxVQUFVNjBFLFdBQWEsU0FBb0I1NkQsR0FDcEQsSUFBSSttQyxFQUFROS9DLEtBQUt1eUUsS0FBS3p5QixNQUNsQjh6QixFQUFLOXpCLEVBQU0sR0FDWCt6QixFQUFLL3pCLEVBQU0sR0FFWGcwQixFQUFLRCxFQUFHbHZFLEVBQUUrRyxJQUFJcU4sR0FBR3lOLFNBQVN4bUIsS0FBS3JCLEdBQy9CbzFFLEVBQUtILEVBQUdqdkUsRUFBRXFXLE1BQU10UCxJQUFJcU4sR0FBR3lOLFNBQVN4bUIsS0FBS3JCLEdBRXJDcTFFLEVBQUtGLEVBQUdwb0UsSUFBSWtvRSxFQUFHMXFFLEdBQ2YrcUUsRUFBS0YsRUFBR3JvRSxJQUFJbW9FLEVBQUczcUUsR0FDZmdyRSxFQUFLSixFQUFHcG9FLElBQUlrb0UsRUFBR2p2RSxHQUNmd3ZFLEVBQUtKLEVBQUdyb0UsSUFBSW1vRSxFQUFHbHZFLEdBS25CLE1BQU8sQ0FBRTAxQixHQUZBdGhCLEVBQUV6TCxJQUFJMG1FLEdBQUkxbUUsSUFBSTJtRSxHQUVOMzVDLEdBRFI0NUMsRUFBRzkzRCxJQUFJKzNELEdBQUluNUQsUUFJdEJtM0QsRUFBV3J6RSxVQUFVdTJDLFdBQWEsU0FBb0Jsc0MsRUFBR2thLElBQ3ZEbGEsRUFBSSxJQUFJcU4sRUFBR3JOLEVBQUcsS0FDUDROLE1BQ0w1TixFQUFJQSxFQUFFeWYsTUFBTTVvQixLQUFLK1csTUFFbkIsSUFBSTA4RCxFQUFLdHFFLEVBQUV5Z0IsU0FBU0gsT0FBT3RnQixHQUFHaWdCLFFBQVFqZ0IsRUFBRXNnQixPQUFPenBCLEtBQUtrSixJQUFJa2dCLFFBQVFwcEIsS0FBSzJFLEdBQ2pFeUUsRUFBSXFxRSxFQUFHMXBELFVBQ1gsR0FBNkMsSUFBekMzZ0IsRUFBRXdnQixTQUFTUCxPQUFPb3FELEdBQUlsOEQsSUFBSXZYLEtBQUsyeUMsTUFDakMsTUFBTSxJQUFJNXdDLE1BQU0saUJBSWxCLElBQUl1bEIsRUFBUWxlLEVBQUU0ZixVQUFVMUIsUUFJeEIsT0FISWpFLElBQVFpRSxJQUFVakUsR0FBT2lFLEtBQzNCbGUsRUFBSUEsRUFBRThnQixVQUVEbHFCLEtBQUswekMsTUFBTXZxQyxFQUFHQyxJQUd2QitvRSxFQUFXcnpFLFVBQVU2MEMsU0FBVyxTQUFrQkQsR0FDaEQsR0FBSUEsRUFBTW0vQixJQUNSLE9BQU8sRUFFVCxJQUFJMXBFLEVBQUl1cUMsRUFBTXZxQyxFQUNWQyxFQUFJc3FDLEVBQU10cUMsRUFFVmdyRSxFQUFLcDBFLEtBQUtrSixFQUFFdWdCLE9BQU90Z0IsR0FDbkJrckUsRUFBTWxyRSxFQUFFeWdCLFNBQVNILE9BQU90Z0IsR0FBR2lnQixRQUFRZ3JELEdBQUlockQsUUFBUXBwQixLQUFLMkUsR0FDeEQsT0FBMkMsSUFBcEN5RSxFQUFFd2dCLFNBQVNOLFFBQVErcUQsR0FBS3hzRCxLQUFLLElBR3RDc3FELEVBQVdyekUsVUFBVXcxRSxnQkFDakIsU0FBeUJqZ0MsRUFBUVEsRUFBUUMsR0FHM0MsSUFGQSxJQUFJeS9CLEVBQVV2MEUsS0FBS3l5RSxZQUNmK0IsRUFBVXgwRSxLQUFLMHlFLFlBQ1Z4MUUsRUFBSSxFQUFHQSxFQUFJbTNDLEVBQU94ekMsT0FBUTNELElBQUssQ0FDdEMsSUFBSXN1QixFQUFReHJCLEtBQUsyekUsV0FBVzkrQixFQUFPMzNDLElBQy9COEIsRUFBSXExQyxFQUFPbjNDLEdBQ1gyNEMsRUFBTzcyQyxFQUFFODJDLFdBRVR0cUIsRUFBTTZPLEdBQUd4akIsV0FDWDJVLEVBQU02TyxHQUFHdmYsT0FDVDliLEVBQUlBLEVBQUVnYyxLQUFJLElBRVJ3USxFQUFNOE8sR0FBR3pqQixXQUNYMlUsRUFBTThPLEdBQUd4ZixPQUNUKzZCLEVBQU9BLEVBQUs3NkIsS0FBSSxJQUdsQnU1RCxFQUFZLEVBQUpyM0UsR0FBUzhCLEVBQ2pCdTFFLEVBQVksRUFBSnIzRSxFQUFRLEdBQUsyNEMsRUFDckIyK0IsRUFBWSxFQUFKdDNFLEdBQVNzdUIsRUFBTTZPLEdBQ3ZCbTZDLEVBQVksRUFBSnQzRSxFQUFRLEdBQUtzdUIsRUFBTThPLEdBSzdCLElBSEEsSUFBSS95QixFQUFNdkgsS0FBSzIwQyxZQUFZLEVBQUc0L0IsRUFBU0MsRUFBYSxFQUFKdDNFLEVBQU80M0MsR0FHOUNsdkMsRUFBSSxFQUFHQSxFQUFRLEVBQUoxSSxFQUFPMEksSUFDekIydUUsRUFBUTN1RSxHQUFLLEtBQ2I0dUUsRUFBUTV1RSxHQUFLLEtBRWYsT0FBTzJCLEdBd0JUZ1AsRUFBU284RCxFQUFPdnFDLEVBQUttTCxXQUVyQjQrQixFQUFXcnpFLFVBQVU0MEMsTUFBUSxTQUFldnFDLEVBQUdDLEVBQUd3cEUsR0FDaEQsT0FBTyxJQUFJRCxFQUFNM3lFLEtBQU1tSixFQUFHQyxFQUFHd3BFLElBRy9CVCxFQUFXcnpFLFVBQVUrekMsY0FBZ0IsU0FBdUI5dkMsRUFBS2dVLEdBQy9ELE9BQU80N0QsRUFBTThCLFNBQVN6MEUsS0FBTStDLEVBQUtnVSxJQUduQzQ3RCxFQUFNN3pFLFVBQVVnM0MsU0FBVyxXQUN6QixHQUFLOTFDLEtBQUt3ekMsTUFBTSsrQixLQUFoQixDQUdBLElBQUluekIsRUFBTXAvQyxLQUFLeXpDLFlBQ2YsR0FBSTJMLEdBQU9BLEVBQUl2SixLQUNiLE9BQU91SixFQUFJdkosS0FFYixJQUFJQSxFQUFPNzFDLEtBQUt3ekMsTUFBTUUsTUFBTTF6QyxLQUFLbUosRUFBRXNnQixPQUFPenBCLEtBQUt3ekMsTUFBTSsrQixLQUFLMThCLE1BQU83MUMsS0FBS29KLEdBQ3RFLEdBQUlnMkMsRUFBSyxDQUNQLElBQUk1TCxFQUFReHpDLEtBQUt3ekMsTUFDYmtoQyxFQUFVLFNBQVMxMUUsR0FDckIsT0FBT3cwQyxFQUFNRSxNQUFNMTBDLEVBQUVtSyxFQUFFc2dCLE9BQU8rcEIsRUFBTSsrQixLQUFLMThCLE1BQU83MkMsRUFBRW9LLElBRXBEZzJDLEVBQUl2SixLQUFPQSxFQUNYQSxFQUFLcEMsWUFBYyxDQUNqQm9DLEtBQU0sS0FDTjFiLElBQUtpbEIsRUFBSWpsQixLQUFPLENBQ2Q5TixJQUFLK3lCLEVBQUlqbEIsSUFBSTlOLElBQ2Jnb0IsT0FBUStLLEVBQUlqbEIsSUFBSWthLE9BQU9wZCxJQUFJeTlDLElBRTdCN2dDLFFBQVN1TCxFQUFJdkwsU0FBVyxDQUN0QkcsS0FBTW9MLEVBQUl2TCxRQUFRRyxLQUNsQkssT0FBUStLLEVBQUl2TCxRQUFRUSxPQUFPcGQsSUFBSXk5QyxLQUlyQyxPQUFPNytCLElBR1Q4OEIsRUFBTTd6RSxVQUFVd0wsT0FBUyxXQUN2QixPQUFLdEssS0FBS3l6QyxZQUdILENBQUV6ekMsS0FBS21KLEVBQUduSixLQUFLb0osRUFBR3BKLEtBQUt5ekMsYUFBZSxDQUMzQ0ksUUFBUzd6QyxLQUFLeXpDLFlBQVlJLFNBQVcsQ0FDbkNHLEtBQU1oMEMsS0FBS3l6QyxZQUFZSSxRQUFRRyxLQUMvQkssT0FBUXIwQyxLQUFLeXpDLFlBQVlJLFFBQVFRLE9BQU94eEMsTUFBTSxJQUVoRHMzQixJQUFLbjZCLEtBQUt5ekMsWUFBWXRaLEtBQU8sQ0FDM0I5TixJQUFLcnNCLEtBQUt5ekMsWUFBWXRaLElBQUk5TixJQUMxQmdvQixPQUFRcjBDLEtBQUt5ekMsWUFBWXRaLElBQUlrYSxPQUFPeHhDLE1BQU0sTUFUckMsQ0FBRTdDLEtBQUttSixFQUFHbkosS0FBS29KLElBYzFCdXBFLEVBQU04QixTQUFXLFNBQWtCamhDLEVBQU96d0MsRUFBS2dVLEdBQzFCLGlCQUFSaFUsSUFDVEEsRUFBTW14QixLQUFLaWlDLE1BQU1wekQsSUFDbkIsSUFBSXdFLEVBQU1pc0MsRUFBTUUsTUFBTTN3QyxFQUFJLEdBQUlBLEVBQUksR0FBSWdVLEdBQ3RDLElBQUtoVSxFQUFJLEdBQ1AsT0FBT3dFLEVBRVQsU0FBU290RSxFQUFVNXhFLEdBQ2pCLE9BQU95d0MsRUFBTUUsTUFBTTN3QyxFQUFJLEdBQUlBLEVBQUksR0FBSWdVLEdBR3JDLElBQUlxb0MsRUFBTXI4QyxFQUFJLEdBWWQsT0FYQXdFLEVBQUlrc0MsWUFBYyxDQUNoQm9DLEtBQU0sS0FDTmhDLFFBQVN1TCxFQUFJdkwsU0FBVyxDQUN0QkcsS0FBTW9MLEVBQUl2TCxRQUFRRyxLQUNsQkssT0FBUSxDQUFFOXNDLEdBQU04QixPQUFPKzFDLEVBQUl2TCxRQUFRUSxPQUFPcGQsSUFBSTA5QyxLQUVoRHg2QyxJQUFLaWxCLEVBQUlqbEIsS0FBTyxDQUNkOU4sSUFBSyt5QixFQUFJamxCLElBQUk5TixJQUNiZ29CLE9BQVEsQ0FBRTlzQyxHQUFNOEIsT0FBTysxQyxFQUFJamxCLElBQUlrYSxPQUFPcGQsSUFBSTA5QyxNQUd2Q3B0RSxHQUdUb3JFLEVBQU03ekUsVUFBVThLLFFBQVUsV0FDeEIsT0FBSTVKLEtBQUt5L0MsYUFDQSxzQkFDRixnQkFBa0J6L0MsS0FBS21KLEVBQUU2ZixVQUFVcmxCLFNBQVMsR0FBSSxHQUNuRCxPQUFTM0QsS0FBS29KLEVBQUU0ZixVQUFVcmxCLFNBQVMsR0FBSSxHQUFLLEtBR2xEZ3ZFLEVBQU03ekUsVUFBVTJnRCxXQUFhLFdBQzNCLE9BQU96L0MsS0FBSzZ5RSxLQUdkRixFQUFNN3pFLFVBQVVzZCxJQUFNLFNBQWFwZCxHQUVqQyxHQUFJZ0IsS0FBSzZ5RSxJQUNQLE9BQU83ekUsRUFHVCxHQUFJQSxFQUFFNnpFLElBQ0osT0FBTzd5RSxLQUdULEdBQUlBLEtBQUswb0IsR0FBRzFwQixHQUNWLE9BQU9nQixLQUFLZzJDLE1BR2QsR0FBSWgyQyxLQUFLZ2IsTUFBTTBOLEdBQUcxcEIsR0FDaEIsT0FBT2dCLEtBQUt3ekMsTUFBTUUsTUFBTSxLQUFNLE1BR2hDLEdBQXdCLElBQXBCMXpDLEtBQUttSixFQUFFb08sSUFBSXZZLEVBQUVtSyxHQUNmLE9BQU9uSixLQUFLd3pDLE1BQU1FLE1BQU0sS0FBTSxNQUVoQyxJQUFJbjJDLEVBQUl5QyxLQUFLb0osRUFBRWlnQixPQUFPcnFCLEVBQUVvSyxHQUNOLElBQWQ3TCxFQUFFc3FCLEtBQUssS0FDVHRxQixFQUFJQSxFQUFFa3NCLE9BQU96cEIsS0FBS21KLEVBQUVrZ0IsT0FBT3JxQixFQUFFbUssR0FBRzhnQixZQUNsQyxJQUFJMnFELEVBQUtyM0UsRUFBRXFzQixTQUFTTixRQUFRdHBCLEtBQUttSixHQUFHbWdCLFFBQVF0cUIsRUFBRW1LLEdBQzFDMHJFLEVBQUt0M0UsRUFBRWtzQixPQUFPenBCLEtBQUttSixFQUFFa2dCLE9BQU91ckQsSUFBS3RyRCxRQUFRdHBCLEtBQUtvSixHQUNsRCxPQUFPcEosS0FBS3d6QyxNQUFNRSxNQUFNa2hDLEVBQUlDLElBRzlCbEMsRUFBTTd6RSxVQUFVazNDLElBQU0sV0FDcEIsR0FBSWgyQyxLQUFLNnlFLElBQ1AsT0FBTzd5RSxLQUdULElBQUk4MEUsRUFBTTkwRSxLQUFLb0osRUFBRStmLE9BQU9ucEIsS0FBS29KLEdBQzdCLEdBQW9CLElBQWhCMHJFLEVBQUlqdEQsS0FBSyxHQUNYLE9BQU83bkIsS0FBS3d6QyxNQUFNRSxNQUFNLEtBQU0sTUFFaEMsSUFBSXhxQyxFQUFJbEosS0FBS3d6QyxNQUFNdHFDLEVBRWZ5ZSxFQUFLM25CLEtBQUttSixFQUFFeWdCLFNBQ1ptckQsRUFBUUQsRUFBSTdxRCxVQUNaMXNCLEVBQUlvcUIsRUFBR3dCLE9BQU94QixHQUFJeUIsUUFBUXpCLEdBQUl5QixRQUFRbGdCLEdBQUd1Z0IsT0FBT3NyRCxHQUVoREgsRUFBS3IzRSxFQUFFcXNCLFNBQVNOLFFBQVF0cEIsS0FBS21KLEVBQUVnZ0IsT0FBT25wQixLQUFLbUosSUFDM0MwckUsRUFBS3QzRSxFQUFFa3NCLE9BQU96cEIsS0FBS21KLEVBQUVrZ0IsT0FBT3VyRCxJQUFLdHJELFFBQVF0cEIsS0FBS29KLEdBQ2xELE9BQU9wSixLQUFLd3pDLE1BQU1FLE1BQU1raEMsRUFBSUMsSUFHOUJsQyxFQUFNN3pFLFVBQVUyMkMsS0FBTyxXQUNyQixPQUFPejFDLEtBQUttSixFQUFFNmYsV0FHaEIycEQsRUFBTTd6RSxVQUFVNDJDLEtBQU8sV0FDckIsT0FBTzExQyxLQUFLb0osRUFBRTRmLFdBR2hCMnBELEVBQU03ekUsVUFBVTRNLElBQU0sU0FBYXFOLEdBRWpDLE9BREFBLEVBQUksSUFBSXZDLEVBQUd1QyxFQUFHLElBQ1YvWSxLQUFLeS9DLGFBQ0F6L0MsS0FDQUEsS0FBSysxQyxZQUFZaDlCLEdBQ2pCL1ksS0FBS3d6QyxNQUFNSSxhQUFhNXpDLEtBQU0rWSxHQUM5Qi9ZLEtBQUt3ekMsTUFBTSsrQixLQUNYdnlFLEtBQUt3ekMsTUFBTThnQyxnQkFBZ0IsQ0FBRXQwRSxNQUFRLENBQUUrWSxJQUV2Qy9ZLEtBQUt3ekMsTUFBTWUsU0FBU3YwQyxLQUFNK1ksSUFHckM0NUQsRUFBTTd6RSxVQUFVazJFLE9BQVMsU0FBZ0IzNkMsRUFBSTQ1QyxFQUFJMzVDLEdBQy9DLElBQUkrWixFQUFTLENBQUVyMEMsS0FBTWkwRSxHQUNqQnAvQixFQUFTLENBQUV4YSxFQUFJQyxHQUNuQixPQUFJdDZCLEtBQUt3ekMsTUFBTSsrQixLQUNOdnlFLEtBQUt3ekMsTUFBTThnQyxnQkFBZ0JqZ0MsRUFBUVEsR0FFbkM3MEMsS0FBS3d6QyxNQUFNbUIsWUFBWSxFQUFHTixFQUFRUSxFQUFRLElBR3JEODlCLEVBQU03ekUsVUFBVW0yRSxRQUFVLFNBQWlCNTZDLEVBQUk0NUMsRUFBSTM1QyxHQUNqRCxJQUFJK1osRUFBUyxDQUFFcjBDLEtBQU1pMEUsR0FDakJwL0IsRUFBUyxDQUFFeGEsRUFBSUMsR0FDbkIsT0FBSXQ2QixLQUFLd3pDLE1BQU0rK0IsS0FDTnZ5RSxLQUFLd3pDLE1BQU04Z0MsZ0JBQWdCamdDLEVBQVFRLEdBQVEsR0FFM0M3MEMsS0FBS3d6QyxNQUFNbUIsWUFBWSxFQUFHTixFQUFRUSxFQUFRLEdBQUcsSUFHeEQ4OUIsRUFBTTd6RSxVQUFVNHBCLEdBQUssU0FBWTFwQixHQUMvQixPQUFPZ0IsT0FBU2hCLEdBQ1RnQixLQUFLNnlFLE1BQVE3ekUsRUFBRTZ6RSxNQUNWN3lFLEtBQUs2eUUsS0FBMkIsSUFBcEI3eUUsS0FBS21KLEVBQUVvTyxJQUFJdlksRUFBRW1LLElBQWdDLElBQXBCbkosS0FBS29KLEVBQUVtTyxJQUFJdlksRUFBRW9LLEtBR2hFdXBFLEVBQU03ekUsVUFBVWtjLElBQU0sU0FBYWs2RCxHQUNqQyxHQUFJbDFFLEtBQUs2eUUsSUFDUCxPQUFPN3lFLEtBRVQsSUFBSXVILEVBQU12SCxLQUFLd3pDLE1BQU1FLE1BQU0xekMsS0FBS21KLEVBQUduSixLQUFLb0osRUFBRThnQixVQUMxQyxHQUFJZ3JELEdBQWVsMUUsS0FBS3l6QyxZQUFhLENBQ25DLElBQUkyTCxFQUFNcC9DLEtBQUt5ekMsWUFDWDBoQyxFQUFTLFNBQVNuMkUsR0FDcEIsT0FBT0EsRUFBRWdjLE9BRVh6VCxFQUFJa3NDLFlBQWMsQ0FDaEJ0WixJQUFLaWxCLEVBQUlqbEIsS0FBTyxDQUNkOU4sSUFBSyt5QixFQUFJamxCLElBQUk5TixJQUNiZ29CLE9BQVErSyxFQUFJamxCLElBQUlrYSxPQUFPcGQsSUFBSWsrQyxJQUU3QnRoQyxRQUFTdUwsRUFBSXZMLFNBQVcsQ0FDdEJHLEtBQU1vTCxFQUFJdkwsUUFBUUcsS0FDbEJLLE9BQVErSyxFQUFJdkwsUUFBUVEsT0FBT3BkLElBQUlrK0MsS0FJckMsT0FBTzV0RSxHQUdUb3JFLEVBQU03ekUsVUFBVW0yQyxJQUFNLFdBQ3BCLE9BQUlqMUMsS0FBSzZ5RSxJQUNBN3lFLEtBQUt3ekMsTUFBTVcsT0FBTyxLQUFNLEtBQU0sTUFFN0JuMEMsS0FBS3d6QyxNQUFNVyxPQUFPbjBDLEtBQUttSixFQUFHbkosS0FBS29KLEVBQUdwSixLQUFLd3pDLE1BQU14bkIsTUF3QnpEelYsRUFBU3U4RCxFQUFRMXFDLEVBQUttTCxXQUV0QjQrQixFQUFXcnpFLFVBQVVxMUMsT0FBUyxTQUFnQmhyQyxFQUFHQyxFQUFHK2lCLEdBQ2xELE9BQU8sSUFBSTJtRCxFQUFPOXlFLEtBQU1tSixFQUFHQyxFQUFHK2lCLElBR2hDMm1ELEVBQU9oMEUsVUFBVXcxQyxJQUFNLFdBQ3JCLEdBQUl0MEMsS0FBS3kvQyxhQUNQLE9BQU96L0MsS0FBS3d6QyxNQUFNRSxNQUFNLEtBQU0sTUFFaEMsSUFBSTBoQyxFQUFPcDFFLEtBQUttc0IsRUFBRWxDLFVBQ2RvckQsRUFBUUQsRUFBS3hyRCxTQUNid3FELEVBQUtwMEUsS0FBS21KLEVBQUVzZ0IsT0FBTzRyRCxHQUNuQkMsRUFBS3QxRSxLQUFLb0osRUFBRXFnQixPQUFPNHJELEdBQU81ckQsT0FBTzJyRCxHQUVyQyxPQUFPcDFFLEtBQUt3ekMsTUFBTUUsTUFBTTBnQyxFQUFJa0IsSUFHOUJ4QyxFQUFPaDBFLFVBQVVrYyxJQUFNLFdBQ3JCLE9BQU9oYixLQUFLd3pDLE1BQU1XLE9BQU9uMEMsS0FBS21KLEVBQUduSixLQUFLb0osRUFBRThnQixTQUFVbHFCLEtBQUttc0IsSUFHekQybUQsRUFBT2gwRSxVQUFVc2QsSUFBTSxTQUFhcGQsR0FFbEMsR0FBSWdCLEtBQUt5L0MsYUFDUCxPQUFPemdELEVBR1QsR0FBSUEsRUFBRXlnRCxhQUNKLE9BQU96L0MsS0FHVCxJQUFJdTFFLEVBQU12MkUsRUFBRW10QixFQUFFdkMsU0FDVjRyRCxFQUFLeDFFLEtBQUttc0IsRUFBRXZDLFNBQ1o4USxFQUFLMTZCLEtBQUttSixFQUFFc2dCLE9BQU84ckQsR0FDbkI1NkMsRUFBSzM3QixFQUFFbUssRUFBRXNnQixPQUFPK3JELEdBQ2hCQyxFQUFLejFFLEtBQUtvSixFQUFFcWdCLE9BQU84ckQsRUFBSTlyRCxPQUFPenFCLEVBQUVtdEIsSUFDaEN1cEQsRUFBSzEyRSxFQUFFb0ssRUFBRXFnQixPQUFPK3JELEVBQUcvckQsT0FBT3pwQixLQUFLbXNCLElBRS9CbkgsRUFBSTBWLEVBQUdyUixPQUFPc1IsR0FDZDM4QixFQUFJeTNFLEVBQUdwc0QsT0FBT3FzRCxHQUNsQixHQUFrQixJQUFkMXdELEVBQUU2QyxLQUFLLEdBQ1QsT0FBa0IsSUFBZDdwQixFQUFFNnBCLEtBQUssR0FDRjduQixLQUFLd3pDLE1BQU1XLE9BQU8sS0FBTSxLQUFNLE1BRTlCbjBDLEtBQUtnMkMsTUFHaEIsSUFBSTIvQixFQUFLM3dELEVBQUU0RSxTQUNQZ3NELEVBQUtELEVBQUdsc0QsT0FBT3pFLEdBQ2ZnSSxFQUFJME4sRUFBR2pSLE9BQU9rc0QsR0FFZGYsRUFBSzUyRSxFQUFFNHJCLFNBQVNSLFFBQVF3c0QsR0FBSXRzRCxRQUFRMEQsR0FBRzFELFFBQVEwRCxHQUMvQzZuRCxFQUFLNzJFLEVBQUV5ckIsT0FBT3VELEVBQUUxRCxRQUFRc3JELElBQUt0ckQsUUFBUW1zRCxFQUFHaHNELE9BQU9tc0QsSUFDL0NDLEVBQUs3MUUsS0FBS21zQixFQUFFMUMsT0FBT3pxQixFQUFFbXRCLEdBQUcxQyxPQUFPekUsR0FFbkMsT0FBT2hsQixLQUFLd3pDLE1BQU1XLE9BQU95Z0MsRUFBSUMsRUFBSWdCLElBR25DL0MsRUFBT2gwRSxVQUFVczFDLFNBQVcsU0FBa0JwMUMsR0FFNUMsR0FBSWdCLEtBQUt5L0MsYUFDUCxPQUFPemdELEVBQUVpMkMsTUFHWCxHQUFJajJDLEVBQUV5Z0QsYUFDSixPQUFPei9DLEtBR1QsSUFBSXcxRSxFQUFLeDFFLEtBQUttc0IsRUFBRXZDLFNBQ1o4USxFQUFLMTZCLEtBQUttSixFQUNWd3hCLEVBQUszN0IsRUFBRW1LLEVBQUVzZ0IsT0FBTytyRCxHQUNoQkMsRUFBS3oxRSxLQUFLb0osRUFDVnNzRSxFQUFLMTJFLEVBQUVvSyxFQUFFcWdCLE9BQU8rckQsR0FBSS9yRCxPQUFPenBCLEtBQUttc0IsR0FFaENuSCxFQUFJMFYsRUFBR3JSLE9BQU9zUixHQUNkMzhCLEVBQUl5M0UsRUFBR3BzRCxPQUFPcXNELEdBQ2xCLEdBQWtCLElBQWQxd0QsRUFBRTZDLEtBQUssR0FDVCxPQUFrQixJQUFkN3BCLEVBQUU2cEIsS0FBSyxHQUNGN25CLEtBQUt3ekMsTUFBTVcsT0FBTyxLQUFNLEtBQU0sTUFFOUJuMEMsS0FBS2cyQyxNQUdoQixJQUFJMi9CLEVBQUszd0QsRUFBRTRFLFNBQ1Bnc0QsRUFBS0QsRUFBR2xzRCxPQUFPekUsR0FDZmdJLEVBQUkwTixFQUFHalIsT0FBT2tzRCxHQUVkZixFQUFLNTJFLEVBQUU0ckIsU0FBU1IsUUFBUXdzRCxHQUFJdHNELFFBQVEwRCxHQUFHMUQsUUFBUTBELEdBQy9DNm5ELEVBQUs3MkUsRUFBRXlyQixPQUFPdUQsRUFBRTFELFFBQVFzckQsSUFBS3RyRCxRQUFRbXNELEVBQUdoc0QsT0FBT21zRCxJQUMvQ0MsRUFBSzcxRSxLQUFLbXNCLEVBQUUxQyxPQUFPekUsR0FFdkIsT0FBT2hsQixLQUFLd3pDLE1BQU1XLE9BQU95Z0MsRUFBSUMsRUFBSWdCLElBR25DL0MsRUFBT2gwRSxVQUFVNDFDLEtBQU8sU0FBY3pvQyxHQUNwQyxHQUFZLElBQVJBLEVBQ0YsT0FBT2pNLEtBQ1QsR0FBSUEsS0FBS3kvQyxhQUNQLE9BQU96L0MsS0FDVCxJQUFLaU0sRUFDSCxPQUFPak0sS0FBS2cyQyxNQUVkLEdBQUloMkMsS0FBS3d6QyxNQUFNNitCLE9BQVNyeUUsS0FBS3d6QyxNQUFNOCtCLE9BQVEsQ0FFekMsSUFEQSxJQUFJdDBFLEVBQUlnQyxLQUNDOUMsRUFBSSxFQUFHQSxFQUFJK08sRUFBSy9PLElBQ3ZCYyxFQUFJQSxFQUFFZzRDLE1BQ1IsT0FBT2g0QyxFQUtULElBQUlrTCxFQUFJbEosS0FBS3d6QyxNQUFNdHFDLEVBQ2ZrcEUsRUFBT3B5RSxLQUFLd3pDLE1BQU00K0IsS0FFbEIwRCxFQUFLOTFFLEtBQUttSixFQUNWNHNFLEVBQUsvMUUsS0FBS29KLEVBQ1Y0c0UsRUFBS2gyRSxLQUFLbXNCLEVBQ1Y4cEQsRUFBTUQsRUFBR3BzRCxTQUFTQSxTQUdsQnNzRCxFQUFNSCxFQUFHNXNELE9BQU80c0QsR0FDcEIsSUFBUzc0RSxFQUFJLEVBQUdBLEVBQUkrTyxFQUFLL08sSUFBSyxDQUM1QixJQUFJaTVFLEVBQU1MLEVBQUdsc0QsU0FDVHdzRCxFQUFPRixFQUFJdHNELFNBQ1h5c0QsRUFBT0QsRUFBS3hzRCxTQUNacnNCLEVBQUk0NEUsRUFBSWh0RCxPQUFPZ3RELEdBQUsvc0QsUUFBUStzRCxHQUFLL3NELFFBQVFsZ0IsRUFBRXVnQixPQUFPd3NELElBRWxESyxFQUFLUixFQUFHcnNELE9BQU8yc0QsR0FDZnhCLEVBQUtyM0UsRUFBRXFzQixTQUFTTixRQUFRZ3RELEVBQUdudEQsT0FBT210RCxJQUNsQ0MsRUFBS0QsRUFBR2h0RCxRQUFRc3JELEdBQ2hCNEIsRUFBTWo1RSxFQUFFa3NCLE9BQU84c0QsR0FDbkJDLEVBQU1BLEVBQUlwdEQsUUFBUW90RCxHQUFLbHRELFFBQVErc0QsR0FDL0IsSUFBSVIsRUFBS0ssRUFBSXpzRCxPQUFPdXNELEdBQ2hCOTRFLEVBQUksRUFBSStPLElBQ1ZncUUsRUFBTUEsRUFBSXhzRCxPQUFPNHNELElBRW5CUCxFQUFLbEIsRUFDTG9CLEVBQUtILEVBQ0xLLEVBQU1NLEVBR1IsT0FBT3gyRSxLQUFLd3pDLE1BQU1XLE9BQU8yaEMsRUFBSUksRUFBSXpzRCxPQUFPMm9ELEdBQU80RCxJQUdqRGxELEVBQU9oMEUsVUFBVWszQyxJQUFNLFdBQ3JCLE9BQUloMkMsS0FBS3kvQyxhQUNBei9DLEtBRUxBLEtBQUt3ekMsTUFBTTYrQixNQUNOcnlFLEtBQUt5MkUsV0FDTHoyRSxLQUFLd3pDLE1BQU04K0IsT0FDWHR5RSxLQUFLMDJFLFlBRUwxMkUsS0FBSzIyRSxRQUdoQjdELEVBQU9oMEUsVUFBVTIzRSxTQUFXLFdBQzFCLElBQUk3QixFQUNBQyxFQUNBZ0IsRUFFSixHQUFJNzFFLEtBQUsreUUsS0FBTSxDQU1iLElBQUk2RCxFQUFLNTJFLEtBQUttSixFQUFFeWdCLFNBRVppdEQsRUFBSzcyRSxLQUFLb0osRUFBRXdnQixTQUVaa3RELEVBQU9ELEVBQUdqdEQsU0FFVjNxQixFQUFJZSxLQUFLbUosRUFBRWdnQixPQUFPMHRELEdBQUlqdEQsU0FBU04sUUFBUXN0RCxHQUFJdHRELFFBQVF3dEQsR0FDdkQ3M0UsRUFBSUEsRUFBRW1xQixRQUFRbnFCLEdBRWQsSUFBSTNCLEVBQUlzNUUsRUFBR3p0RCxPQUFPeXRELEdBQUl4dEQsUUFBUXd0RCxHQUUxQng0RSxFQUFJZCxFQUFFc3NCLFNBQVNOLFFBQVFycUIsR0FBR3FxQixRQUFRcnFCLEdBR2xDODNFLEVBQVFELEVBQUsxdEQsUUFBUTB0RCxHQUV6QkMsR0FEQUEsRUFBUUEsRUFBTTN0RCxRQUFRMnRELElBQ1IzdEQsUUFBUTJ0RCxHQUd0Qm5DLEVBQUt4MkUsRUFFTHkyRSxFQUFLdjNFLEVBQUVtc0IsT0FBT3hxQixFQUFFcXFCLFFBQVFsckIsSUFBSWtyQixRQUFReXRELEdBRXBDbEIsRUFBSzcxRSxLQUFLb0osRUFBRStmLE9BQU9ucEIsS0FBS29KLE9BQ25CLENBTUwsSUFBSUYsRUFBSWxKLEtBQUttSixFQUFFeWdCLFNBRVhqbEIsRUFBSTNFLEtBQUtvSixFQUFFd2dCLFNBRVhyc0IsRUFBSW9ILEVBQUVpbEIsU0FFTnBzQixFQUFJd0MsS0FBS21KLEVBQUVnZ0IsT0FBT3hrQixHQUFHaWxCLFNBQVNOLFFBQVFwZ0IsR0FBR29nQixRQUFRL3JCLEdBQ3JEQyxFQUFJQSxFQUFFNHJCLFFBQVE1ckIsR0FFZCxJQUFJaUwsRUFBSVMsRUFBRWlnQixPQUFPamdCLEdBQUdrZ0IsUUFBUWxnQixHQUV4QjZxQixFQUFJdHJCLEVBQUVtaEIsU0FHTm90RCxFQUFLejVFLEVBQUU2ckIsUUFBUTdyQixHQUVuQnk1RSxHQURBQSxFQUFLQSxFQUFHNXRELFFBQVE0dEQsSUFDUjV0RCxRQUFRNHRELEdBR2hCcEMsRUFBSzdnRCxFQUFFekssUUFBUTlyQixHQUFHOHJCLFFBQVE5ckIsR0FFMUJxM0UsRUFBS3BzRSxFQUFFZ2hCLE9BQU9qc0IsRUFBRThyQixRQUFRc3JELElBQUt0ckQsUUFBUTB0RCxHQUdyQ25CLEdBREFBLEVBQUs3MUUsS0FBS29KLEVBQUVxZ0IsT0FBT3pwQixLQUFLbXNCLElBQ2hCL0MsUUFBUXlzRCxHQUdsQixPQUFPNzFFLEtBQUt3ekMsTUFBTVcsT0FBT3lnQyxFQUFJQyxFQUFJZ0IsSUFHbkMvQyxFQUFPaDBFLFVBQVU0M0UsVUFBWSxXQUMzQixJQUFJOUIsRUFDQUMsRUFDQWdCLEVBRUosR0FBSTcxRSxLQUFLK3lFLEtBQU0sQ0FNYixJQUFJNkQsRUFBSzUyRSxLQUFLbUosRUFBRXlnQixTQUVaaXRELEVBQUs3MkUsS0FBS29KLEVBQUV3Z0IsU0FFWmt0RCxFQUFPRCxFQUFHanRELFNBRVYzcUIsRUFBSWUsS0FBS21KLEVBQUVnZ0IsT0FBTzB0RCxHQUFJanRELFNBQVNOLFFBQVFzdEQsR0FBSXR0RCxRQUFRd3RELEdBQ3ZENzNFLEVBQUlBLEVBQUVtcUIsUUFBUW5xQixHQUVkLElBQUkzQixFQUFJczVFLEVBQUd6dEQsT0FBT3l0RCxHQUFJeHRELFFBQVF3dEQsR0FBSXh0RCxRQUFRcHBCLEtBQUt3ekMsTUFBTXRxQyxHQUVqRDlLLEVBQUlkLEVBQUVzc0IsU0FBU04sUUFBUXJxQixHQUFHcXFCLFFBQVFycUIsR0FFdEMyMUUsRUFBS3gyRSxFQUVMLElBQUkyNEUsRUFBUUQsRUFBSzF0RCxRQUFRMHRELEdBRXpCQyxHQURBQSxFQUFRQSxFQUFNM3RELFFBQVEydEQsSUFDUjN0RCxRQUFRMnRELEdBQ3RCbEMsRUFBS3YzRSxFQUFFbXNCLE9BQU94cUIsRUFBRXFxQixRQUFRbHJCLElBQUlrckIsUUFBUXl0RCxHQUVwQ2xCLEVBQUs3MUUsS0FBS29KLEVBQUUrZixPQUFPbnBCLEtBQUtvSixPQUNuQixDQUtMLElBQUl3ZSxFQUFRNW5CLEtBQUttc0IsRUFBRXZDLFNBRWZxdEQsRUFBUWozRSxLQUFLb0osRUFBRXdnQixTQUVmaXNCLEVBQU83MUMsS0FBS21KLEVBQUVzZ0IsT0FBT3d0RCxHQUVyQkMsRUFBUWwzRSxLQUFLbUosRUFBRWtnQixPQUFPekIsR0FBTzZCLE9BQU96cEIsS0FBS21KLEVBQUVnZ0IsT0FBT3ZCLElBQ3REc3ZELEVBQVFBLEVBQU0vdEQsT0FBTyt0RCxHQUFPOXRELFFBQVE4dEQsR0FFcEMsSUFBSUMsRUFBUXRoQyxFQUFLenNCLFFBQVF5c0IsR0FFckJ1aEMsR0FESkQsRUFBUUEsRUFBTS90RCxRQUFRK3RELElBQ0podUQsT0FBT2d1RCxHQUN6QnZDLEVBQUtzQyxFQUFNdHRELFNBQVNOLFFBQVE4dEQsR0FFNUJ2QixFQUFLNzFFLEtBQUtvSixFQUFFK2YsT0FBT25wQixLQUFLbXNCLEdBQUd2QyxTQUFTTixRQUFRMnRELEdBQU8zdEQsUUFBUTFCLEdBRTNELElBQUl5dkQsRUFBVUosRUFBTXJ0RCxTQUdwQnl0RCxHQURBQSxHQURBQSxFQUFVQSxFQUFRanVELFFBQVFpdUQsSUFDUmp1RCxRQUFRaXVELElBQ1JqdUQsUUFBUWl1RCxHQUMxQnhDLEVBQUtxQyxFQUFNenRELE9BQU8wdEQsRUFBTTd0RCxRQUFRc3JELElBQUt0ckQsUUFBUSt0RCxHQUcvQyxPQUFPcjNFLEtBQUt3ekMsTUFBTVcsT0FBT3lnQyxFQUFJQyxFQUFJZ0IsSUFHbkMvQyxFQUFPaDBFLFVBQVU2M0UsS0FBTyxXQUN0QixJQUFJenRFLEVBQUlsSixLQUFLd3pDLE1BQU10cUMsRUFHZjRzRSxFQUFLOTFFLEtBQUttSixFQUNWNHNFLEVBQUsvMUUsS0FBS29KLEVBQ1Y0c0UsRUFBS2gyRSxLQUFLbXNCLEVBQ1Y4cEQsRUFBTUQsRUFBR3BzRCxTQUFTQSxTQUVsQnVzRCxFQUFNTCxFQUFHbHNELFNBQ1QwdEQsRUFBTXZCLEVBQUduc0QsU0FFVHJzQixFQUFJNDRFLEVBQUlodEQsT0FBT2d0RCxHQUFLL3NELFFBQVErc0QsR0FBSy9zRCxRQUFRbGdCLEVBQUV1Z0IsT0FBT3dzRCxJQUVsRHNCLEVBQU96QixFQUFHM3NELE9BQU8yc0QsR0FFakJRLEdBREppQixFQUFPQSxFQUFLbnVELFFBQVFtdUQsSUFDTjl0RCxPQUFPNnRELEdBQ2pCMUMsRUFBS3IzRSxFQUFFcXNCLFNBQVNOLFFBQVFndEQsRUFBR250RCxPQUFPbXRELElBQ2xDQyxFQUFLRCxFQUFHaHRELFFBQVFzckQsR0FFaEI0QyxFQUFPRixFQUFJMXRELFNBR2Y0dEQsR0FEQUEsR0FEQUEsRUFBT0EsRUFBS3B1RCxRQUFRb3VELElBQ1JwdUQsUUFBUW91RCxJQUNScHVELFFBQVFvdUQsR0FDcEIsSUFBSTNDLEVBQUt0M0UsRUFBRWtzQixPQUFPOHNELEdBQUlqdEQsUUFBUWt1RCxHQUMxQjNCLEVBQUtFLEVBQUc1c0QsT0FBTzRzRCxHQUFJdHNELE9BQU91c0QsR0FFOUIsT0FBT2gyRSxLQUFLd3pDLE1BQU1XLE9BQU95Z0MsRUFBSUMsRUFBSWdCLElBR25DL0MsRUFBT2gwRSxVQUFVMjRFLEtBQU8sV0FDdEIsSUFBS3ozRSxLQUFLd3pDLE1BQU02K0IsTUFDZCxPQUFPcnlFLEtBQUtnMkMsTUFBTTU1QixJQUFJcGMsTUFNeEIsSUFBSTQyRSxFQUFLNTJFLEtBQUttSixFQUFFeWdCLFNBRVppdEQsRUFBSzcyRSxLQUFLb0osRUFBRXdnQixTQUVaOHRELEVBQUsxM0UsS0FBS21zQixFQUFFdkMsU0FFWmt0RCxFQUFPRCxFQUFHanRELFNBRVZ0c0IsRUFBSXM1RSxFQUFHenRELE9BQU95dEQsR0FBSXh0RCxRQUFRd3RELEdBRTFCZSxFQUFLcjZFLEVBQUVzc0IsU0FFUG5oQixFQUFJekksS0FBS21KLEVBQUVnZ0IsT0FBTzB0RCxHQUFJanRELFNBQVNOLFFBQVFzdEQsR0FBSXR0RCxRQUFRd3RELEdBS25EYyxHQUZKbnZFLEdBREFBLEdBREFBLEVBQUlBLEVBQUUyZ0IsUUFBUTNnQixJQUNSMGdCLE9BQU8xZ0IsR0FBRzJnQixRQUFRM2dCLElBQ2xCNmdCLFFBQVFxdUQsSUFFSC90RCxTQUVQeHJCLEVBQUkwNEUsRUFBSzF0RCxRQUFRMHRELEdBR3JCMTRFLEdBREFBLEdBREFBLEVBQUlBLEVBQUVnckIsUUFBUWhyQixJQUNSZ3JCLFFBQVFockIsSUFDUmdyQixRQUFRaHJCLEdBRWQsSUFBSXF1QixFQUFJbnZCLEVBQUU4ckIsUUFBUTNnQixHQUFHbWhCLFNBQVNOLFFBQVFxdUQsR0FBSXJ1RCxRQUFRc3VELEdBQUl0dUQsUUFBUWxyQixHQUUxRHk1RSxFQUFPaEIsRUFBR3B0RCxPQUFPZ0QsR0FFckJvckQsR0FEQUEsRUFBT0EsRUFBS3p1RCxRQUFReXVELElBQ1J6dUQsUUFBUXl1RCxHQUNwQixJQUFJakQsRUFBSzUwRSxLQUFLbUosRUFBRXNnQixPQUFPbXVELEdBQUl0dUQsUUFBUXV1RCxHQUVuQ2pELEdBREFBLEVBQUtBLEVBQUd4ckQsUUFBUXdyRCxJQUNSeHJELFFBQVF3ckQsR0FFaEIsSUFBSUMsRUFBSzcwRSxLQUFLb0osRUFBRXFnQixPQUFPZ0QsRUFBRWhELE9BQU9yckIsRUFBRWtyQixRQUFRbUQsSUFBSW5ELFFBQVE3Z0IsRUFBRWdoQixPQUFPbXVELEtBRy9EL0MsR0FEQUEsR0FEQUEsRUFBS0EsRUFBR3pyRCxRQUFReXJELElBQ1J6ckQsUUFBUXlyRCxJQUNSenJELFFBQVF5ckQsR0FFaEIsSUFBSWdCLEVBQUs3MUUsS0FBS21zQixFQUFFaEQsT0FBTzFnQixHQUFHbWhCLFNBQVNOLFFBQVFvdUQsR0FBSXB1RCxRQUFRc3VELEdBRXZELE9BQU81M0UsS0FBS3d6QyxNQUFNVyxPQUFPeWdDLEVBQUlDLEVBQUlnQixJQUduQy9DLEVBQU9oMEUsVUFBVTRNLElBQU0sU0FBYXFOLEVBQUcrK0QsR0FHckMsT0FGQS8rRCxFQUFJLElBQUl2QyxFQUFHdUMsRUFBRysrRCxHQUVQOTNFLEtBQUt3ekMsTUFBTWUsU0FBU3YwQyxLQUFNK1ksSUFHbkMrNUQsRUFBT2gwRSxVQUFVNHBCLEdBQUssU0FBWTFwQixHQUNoQyxHQUFlLFdBQVhBLEVBQUVzRSxLQUNKLE9BQU90RCxLQUFLMG9CLEdBQUcxcEIsRUFBRWkyQyxPQUVuQixHQUFJajFDLE9BQVNoQixFQUNYLE9BQU8sRUFHVCxJQUFJdzJFLEVBQUt4MUUsS0FBS21zQixFQUFFdkMsU0FDWjJyRCxFQUFNdjJFLEVBQUVtdEIsRUFBRXZDLFNBQ2QsR0FBMkQsSUFBdkQ1cEIsS0FBS21KLEVBQUVzZ0IsT0FBTzhyRCxHQUFLanNELFFBQVF0cUIsRUFBRW1LLEVBQUVzZ0IsT0FBTytyRCxJQUFLM3RELEtBQUssR0FDbEQsT0FBTyxFQUdULElBQUlrd0QsRUFBS3ZDLEVBQUcvckQsT0FBT3pwQixLQUFLbXNCLEdBQ3BCNnJELEVBQU16QyxFQUFJOXJELE9BQU96cUIsRUFBRW10QixHQUN2QixPQUE4RCxJQUF2RG5zQixLQUFLb0osRUFBRXFnQixPQUFPdXVELEdBQUsxdUQsUUFBUXRxQixFQUFFb0ssRUFBRXFnQixPQUFPc3VELElBQUtsd0QsS0FBSyxJQUd6RGlyRCxFQUFPaDBFLFVBQVVtNUUsT0FBUyxTQUFnQjl1RSxHQUN4QyxJQUFJK3VFLEVBQUtsNEUsS0FBS21zQixFQUFFdkMsU0FDWnpHLEVBQUtoYSxFQUFFeWYsTUFBTTVvQixLQUFLd3pDLE1BQU16OEIsS0FBSzBTLE9BQU95dUQsR0FDeEMsR0FBdUIsSUFBbkJsNEUsS0FBS21KLEVBQUVvTyxJQUFJNEwsR0FDYixPQUFPLEVBSVQsSUFGQSxJQUFJZzFELEVBQUtodkUsRUFBRW9QLFFBQ1BuYSxFQUFJNEIsS0FBS3d6QyxNQUFNSCxLQUFLNXBCLE9BQU95dUQsS0FDdEIsQ0FFUCxHQURBQyxFQUFHajhELEtBQUtsYyxLQUFLd3pDLE1BQU03MEMsR0FDZnc1RSxFQUFHNWdFLElBQUl2WCxLQUFLd3pDLE1BQU14MEMsSUFBTSxFQUMxQixPQUFPLEVBR1QsR0FEQW1rQixFQUFHaUcsUUFBUWhyQixHQUNZLElBQW5CNEIsS0FBS21KLEVBQUVvTyxJQUFJNEwsR0FDYixPQUFPLElBSWIydkQsRUFBT2gwRSxVQUFVOEssUUFBVSxXQUN6QixPQUFJNUosS0FBS3kvQyxhQUNBLHVCQUNGLGlCQUFtQnovQyxLQUFLbUosRUFBRXhGLFNBQVMsR0FBSSxHQUMxQyxPQUFTM0QsS0FBS29KLEVBQUV6RixTQUFTLEdBQUksR0FDN0IsT0FBUzNELEtBQUttc0IsRUFBRXhvQixTQUFTLEdBQUksR0FBSyxLQUd4Q212RSxFQUFPaDBFLFVBQVUyZ0QsV0FBYSxXQUU1QixPQUEwQixJQUFuQnovQyxLQUFLbXNCLEVBQUV0RSxLQUFLLEssNkJDcjZCckIsSUFBSXJSLEVBQUssRUFBUSxJQUNiRCxFQUFXLEVBQVEsSUFDbkI2eEIsRUFBTyxFQUFRLElBRWZ2TyxFQUFRLEVBQVEsSUFFcEIsU0FBU3UrQyxFQUFVMWxDLEdBQ2pCdEssRUFBSy9xQyxLQUFLMkMsS0FBTSxPQUFRMHlDLEdBRXhCMXlDLEtBQUtrSixFQUFJLElBQUlzTixFQUFHazhCLEVBQUt4cEMsRUFBRyxJQUFJMGYsTUFBTTVvQixLQUFLK1csS0FDdkMvVyxLQUFLMkUsRUFBSSxJQUFJNlIsRUFBR2s4QixFQUFLL3RDLEVBQUcsSUFBSWlrQixNQUFNNW9CLEtBQUsrVyxLQUN2Qy9XLEtBQUtxNEUsR0FBSyxJQUFJN2hFLEVBQUcsR0FBR29TLE1BQU01b0IsS0FBSytXLEtBQUtrVCxVQUNwQ2pxQixLQUFLNHlDLElBQU0sSUFBSXA4QixFQUFHLEdBQUdvUyxNQUFNNW9CLEtBQUsrVyxLQUNoQy9XLEtBQUtzNEUsSUFBTXQ0RSxLQUFLcTRFLEdBQUc1dUQsT0FBT3pwQixLQUFLa0osRUFBRWlnQixPQUFPbnBCLEtBQUs0eUMsTUFjL0MsU0FBUysvQixFQUFNbi9CLEVBQU9ycUMsRUFBR2dqQixHQUN2QmljLEVBQUttTCxVQUFVbDJDLEtBQUsyQyxLQUFNd3pDLEVBQU8sY0FDdkIsT0FBTnJxQyxHQUFvQixPQUFOZ2pCLEdBQ2hCbnNCLEtBQUttSixFQUFJbkosS0FBS3d6QyxNQUFNeG5CLElBQ3BCaHNCLEtBQUttc0IsRUFBSW5zQixLQUFLd3pDLE1BQU1iLE9BRXBCM3lDLEtBQUttSixFQUFJLElBQUlxTixFQUFHck4sRUFBRyxJQUNuQm5KLEtBQUttc0IsRUFBSSxJQUFJM1YsRUFBRzJWLEVBQUcsSUFDZG5zQixLQUFLbUosRUFBRTROLE1BQ1YvVyxLQUFLbUosRUFBSW5KLEtBQUttSixFQUFFeWYsTUFBTTVvQixLQUFLd3pDLE1BQU16OEIsTUFDOUIvVyxLQUFLbXNCLEVBQUVwVixNQUNWL1csS0FBS21zQixFQUFJbnNCLEtBQUttc0IsRUFBRXZELE1BQU01b0IsS0FBS3d6QyxNQUFNejhCLE9BdkJ2Q1IsRUFBUzZoRSxFQUFXaHdDLEdBQ3BCbnJDLEVBQU9ELFFBQVVvN0UsRUFFakJBLEVBQVV0NUUsVUFBVTYwQyxTQUFXLFNBQWtCRCxHQUMvQyxJQUFJdnFDLEVBQUl1cUMsRUFBTTZrQyxZQUFZcHZFLEVBQ3RCd2UsRUFBS3hlLEVBQUV5Z0IsU0FDUHlxRCxFQUFNMXNELEVBQUc4QixPQUFPdGdCLEdBQUdnZ0IsT0FBT3hCLEVBQUc4QixPQUFPenBCLEtBQUtrSixJQUFJaWdCLE9BQU9oZ0IsR0FHeEQsT0FBK0IsSUFGdkJrckUsRUFBSXRxRCxVQUVISCxTQUFTclMsSUFBSTg4RCxJQWlCeEI5OUQsRUFBU284RCxFQUFPdnFDLEVBQUttTCxXQUVyQjZrQyxFQUFVdDVFLFVBQVVzMkMsWUFBYyxTQUFxQnhxQyxFQUFPeXdCLEdBQzVELE9BQU9yN0IsS0FBSzB6QyxNQUFNN1osRUFBTWhpQixRQUFRak4sRUFBT3l3QixHQUFNLElBRy9DKzhDLEVBQVV0NUUsVUFBVTQwQyxNQUFRLFNBQWV2cUMsRUFBR2dqQixHQUM1QyxPQUFPLElBQUl3bUQsRUFBTTN5RSxLQUFNbUosRUFBR2dqQixJQUc1QmlzRCxFQUFVdDVFLFVBQVUrekMsY0FBZ0IsU0FBdUI5dkMsR0FDekQsT0FBTzR2RSxFQUFNOEIsU0FBU3owRSxLQUFNK0MsSUFHOUI0dkUsRUFBTTd6RSxVQUFVNjJDLFdBQWEsYUFJN0JnOUIsRUFBTTd6RSxVQUFVeTJDLFFBQVUsV0FDeEIsT0FBT3YxQyxLQUFLeTFDLE9BQU81OUIsUUFBUSxLQUFNN1gsS0FBS3d6QyxNQUFNeDBDLEVBQUVxRCxlQUdoRHN3RSxFQUFNOEIsU0FBVyxTQUFrQmpoQyxFQUFPendDLEdBQ3hDLE9BQU8sSUFBSTR2RSxFQUFNbi9CLEVBQU96d0MsRUFBSSxHQUFJQSxFQUFJLElBQU15d0MsRUFBTXhuQixNQUdsRDJtRCxFQUFNN3pFLFVBQVU4SyxRQUFVLFdBQ3hCLE9BQUk1SixLQUFLeS9DLGFBQ0Esc0JBQ0YsZ0JBQWtCei9DLEtBQUttSixFQUFFNmYsVUFBVXJsQixTQUFTLEdBQUksR0FDbkQsT0FBUzNELEtBQUttc0IsRUFBRW5ELFVBQVVybEIsU0FBUyxHQUFJLEdBQUssS0FHbERndkUsRUFBTTd6RSxVQUFVMmdELFdBQWEsV0FFM0IsT0FBMEIsSUFBbkJ6L0MsS0FBS21zQixFQUFFdEUsS0FBSyxJQUdyQjhxRCxFQUFNN3pFLFVBQVVrM0MsSUFBTSxXQUtwQixJQUVJd2lDLEVBRkl4NEUsS0FBS21KLEVBQUVnZ0IsT0FBT25wQixLQUFLbXNCLEdBRWhCdkMsU0FJUDZ1RCxFQUZJejRFLEtBQUttSixFQUFFa2dCLE9BQU9ycEIsS0FBS21zQixHQUVoQnZDLFNBRVByc0IsRUFBSWk3RSxFQUFHbnZELE9BQU9vdkQsR0FFZDdELEVBQUs0RCxFQUFHL3VELE9BQU9ndkQsR0FFZjVDLEVBQUt0NEUsRUFBRWtzQixPQUFPZ3ZELEVBQUd0dkQsT0FBT25wQixLQUFLd3pDLE1BQU04a0MsSUFBSTd1RCxPQUFPbHNCLEtBQ2xELE9BQU95QyxLQUFLd3pDLE1BQU1FLE1BQU1raEMsRUFBSWlCLElBRzlCbEQsRUFBTTd6RSxVQUFVc2QsSUFBTSxXQUNwQixNQUFNLElBQUlyYSxNQUFNLHNDQUdsQjR3RSxFQUFNN3pFLFVBQVU0NUUsUUFBVSxTQUFpQjE1RSxFQUFHaW5CLEdBSzVDLElBQUkvYyxFQUFJbEosS0FBS21KLEVBQUVnZ0IsT0FBT25wQixLQUFLbXNCLEdBRXZCeG5CLEVBQUkzRSxLQUFLbUosRUFBRWtnQixPQUFPcnBCLEtBQUttc0IsR0FFdkI1dUIsRUFBSXlCLEVBQUVtSyxFQUFFZ2dCLE9BQU9ucUIsRUFBRW10QixHQUlqQndzRCxFQUZJMzVFLEVBQUVtSyxFQUFFa2dCLE9BQU9ycUIsRUFBRW10QixHQUVWMUMsT0FBT3ZnQixHQUVkMmtCLEVBQUt0d0IsRUFBRWtzQixPQUFPOWtCLEdBRWRpd0UsRUFBSzN1RCxFQUFLa0csRUFBRTFDLE9BQU9rdkQsRUFBR3h2RCxPQUFPMEUsR0FBSWpFLFVBRWpDaXNELEVBQUs1dkQsRUFBSzljLEVBQUVzZ0IsT0FBT2t2RCxFQUFHcnZELFFBQVF1RSxHQUFJakUsVUFDdEMsT0FBTzVwQixLQUFLd3pDLE1BQU1FLE1BQU1raEMsRUFBSWlCLElBRzlCbEQsRUFBTTd6RSxVQUFVNE0sSUFBTSxTQUFhcU4sR0FNakMsSUFMQSxJQUFJM2EsRUFBSTJhLEVBQUVSLFFBQ05yUCxFQUFJbEosS0FDSjJFLEVBQUkzRSxLQUFLd3pDLE1BQU1FLE1BQU0sS0FBTSxNQUd0Qmh2QixFQUFPLEdBQWtCLElBQWR0bUIsRUFBRXlwQixLQUFLLEdBQVV6cEIsRUFBRTRiLE9BQU8sR0FDNUMwSyxFQUFLaGUsS0FBS3RJLEVBQUUyYixNQUFNLElBRXBCLElBQUssSUFBSTdjLEVBQUl3bkIsRUFBSzdqQixPQUFTLEVBQUczRCxHQUFLLEVBQUdBLElBQ3BCLElBQVp3bkIsRUFBS3huQixJQUVQZ00sRUFBSUEsRUFBRXd2RSxRQUFRL3pFLEVBUlYzRSxNQVVKMkUsRUFBSUEsRUFBRXF4QyxRQUdOcnhDLEVBQUl1RSxFQUFFd3ZFLFFBQVEvekUsRUFiVjNFLE1BZUprSixFQUFJQSxFQUFFOHNDLE9BR1YsT0FBT3J4QyxHQUdUZ3VFLEVBQU03ekUsVUFBVWsyRSxPQUFTLFdBQ3ZCLE1BQU0sSUFBSWp6RSxNQUFNLHNDQUdsQjR3RSxFQUFNN3pFLFVBQVU4NUUsUUFBVSxXQUN4QixNQUFNLElBQUk3MkUsTUFBTSxzQ0FHbEI0d0UsRUFBTTd6RSxVQUFVNHBCLEdBQUssU0FBWW13RCxHQUMvQixPQUF5QyxJQUFsQzc0RSxLQUFLeTFDLE9BQU9sK0IsSUFBSXNoRSxFQUFNcGpDLFNBRy9CazlCLEVBQU03ekUsVUFBVXk1RSxVQUFZLFdBRzFCLE9BRkF2NEUsS0FBS21KLEVBQUluSixLQUFLbUosRUFBRXNnQixPQUFPenBCLEtBQUttc0IsRUFBRWxDLFdBQzlCanFCLEtBQUttc0IsRUFBSW5zQixLQUFLd3pDLE1BQU14bkIsSUFDYmhzQixNQUdUMnlFLEVBQU03ekUsVUFBVTIyQyxLQUFPLFdBSXJCLE9BRkF6MUMsS0FBS3U0RSxZQUVFdjRFLEtBQUttSixFQUFFNmYsWSw2QkM5S2hCLElBQUk2USxFQUFRLEVBQVEsSUFDaEJyakIsRUFBSyxFQUFRLElBQ2JELEVBQVcsRUFBUSxJQUNuQjZ4QixFQUFPLEVBQVEsSUFFZi94QixFQUFTd2pCLEVBQU14akIsT0FFbkIsU0FBU3lpRSxFQUFhcG1DLEdBRXBCMXlDLEtBQUsrNEUsUUFBMkIsSUFBUCxFQUFUcm1DLEVBQUt4cEMsR0FDckJsSixLQUFLZzVFLE1BQVFoNUUsS0FBSys0RSxVQUE2QixJQUFSLEVBQVRybUMsRUFBS3hwQyxHQUNuQ2xKLEtBQUsra0IsU0FBVy9rQixLQUFLZzVFLE1BRXJCNXdDLEVBQUsvcUMsS0FBSzJDLEtBQU0sVUFBVzB5QyxHQUUzQjF5QyxLQUFLa0osRUFBSSxJQUFJc04sRUFBR2s4QixFQUFLeHBDLEVBQUcsSUFBSXFkLEtBQUt2bUIsS0FBSytXLElBQUl6WixHQUMxQzBDLEtBQUtrSixFQUFJbEosS0FBS2tKLEVBQUUwZixNQUFNNW9CLEtBQUsrVyxLQUMzQi9XLEtBQUt6QyxFQUFJLElBQUlpWixFQUFHazhCLEVBQUtuMUMsRUFBRyxJQUFJcXJCLE1BQU01b0IsS0FBSytXLEtBQ3ZDL1csS0FBSyt6RSxHQUFLL3pFLEtBQUt6QyxFQUFFcXNCLFNBQ2pCNXBCLEtBQUt4QyxFQUFJLElBQUlnWixFQUFHazhCLEVBQUtsMUMsRUFBRyxJQUFJb3JCLE1BQU01b0IsS0FBSytXLEtBQ3ZDL1csS0FBS2k1RSxHQUFLajVFLEtBQUt4QyxFQUFFMnJCLE9BQU9ucEIsS0FBS3hDLEdBRTdCNlksR0FBUXJXLEtBQUsrNEUsU0FBd0MsSUFBN0IvNEUsS0FBS3pDLEVBQUV5ckIsVUFBVW5CLEtBQUssSUFDOUM3bkIsS0FBS2s1RSxLQUF3QixJQUFQLEVBQVR4bUMsRUFBS24xQyxHQXdGcEIsU0FBU28xRSxFQUFNbi9CLEVBQU9ycUMsRUFBR0MsRUFBRytpQixFQUFHL3RCLEdBQzdCZ3FDLEVBQUttTCxVQUFVbDJDLEtBQUsyQyxLQUFNd3pDLEVBQU8sY0FDdkIsT0FBTnJxQyxHQUFvQixPQUFOQyxHQUFvQixPQUFOK2lCLEdBQzlCbnNCLEtBQUttSixFQUFJbkosS0FBS3d6QyxNQUFNYixLQUNwQjN5QyxLQUFLb0osRUFBSXBKLEtBQUt3ekMsTUFBTXhuQixJQUNwQmhzQixLQUFLbXNCLEVBQUluc0IsS0FBS3d6QyxNQUFNeG5CLElBQ3BCaHNCLEtBQUs1QixFQUFJNEIsS0FBS3d6QyxNQUFNYixLQUNwQjN5QyxLQUFLK3lFLE1BQU8sSUFFWi95RSxLQUFLbUosRUFBSSxJQUFJcU4sRUFBR3JOLEVBQUcsSUFDbkJuSixLQUFLb0osRUFBSSxJQUFJb04sRUFBR3BOLEVBQUcsSUFDbkJwSixLQUFLbXNCLEVBQUlBLEVBQUksSUFBSTNWLEVBQUcyVixFQUFHLElBQU1uc0IsS0FBS3d6QyxNQUFNeG5CLElBQ3hDaHNCLEtBQUs1QixFQUFJQSxHQUFLLElBQUlvWSxFQUFHcFksRUFBRyxJQUNuQjRCLEtBQUttSixFQUFFNE4sTUFDVi9XLEtBQUttSixFQUFJbkosS0FBS21KLEVBQUV5ZixNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixNQUM5Qi9XLEtBQUtvSixFQUFFMk4sTUFDVi9XLEtBQUtvSixFQUFJcEosS0FBS29KLEVBQUV3ZixNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixNQUM5Qi9XLEtBQUttc0IsRUFBRXBWLE1BQ1YvVyxLQUFLbXNCLEVBQUluc0IsS0FBS21zQixFQUFFdkQsTUFBTTVvQixLQUFLd3pDLE1BQU16OEIsTUFDL0IvVyxLQUFLNUIsSUFBTTRCLEtBQUs1QixFQUFFMlksTUFDcEIvVyxLQUFLNUIsRUFBSTRCLEtBQUs1QixFQUFFd3FCLE1BQU01b0IsS0FBS3d6QyxNQUFNejhCLE1BQ25DL1csS0FBSyt5RSxLQUFPL3lFLEtBQUttc0IsSUFBTW5zQixLQUFLd3pDLE1BQU14bkIsSUFHOUJoc0IsS0FBS3d6QyxNQUFNenVCLFdBQWEva0IsS0FBSzVCLElBQy9CNEIsS0FBSzVCLEVBQUk0QixLQUFLbUosRUFBRXNnQixPQUFPenBCLEtBQUtvSixHQUN2QnBKLEtBQUsreUUsT0FDUi95RSxLQUFLNUIsRUFBSTRCLEtBQUs1QixFQUFFcXJCLE9BQU96cEIsS0FBS21zQixFQUFFbEMsY0FqSHRDMVQsRUFBU3VpRSxFQUFjMXdDLEdBQ3ZCbnJDLEVBQU9ELFFBQVU4N0UsRUFFakJBLEVBQWFoNkUsVUFBVXE2RSxNQUFRLFNBQWUvaEUsR0FDNUMsT0FBSXBYLEtBQUtnNUUsTUFDQTVoRSxFQUFJOFMsU0FFSmxxQixLQUFLa0osRUFBRXVnQixPQUFPclMsSUFHekIwaEUsRUFBYWg2RSxVQUFVczZFLE1BQVEsU0FBZWhpRSxHQUM1QyxPQUFJcFgsS0FBS2s1RSxLQUNBOWhFLEVBRUFwWCxLQUFLekMsRUFBRWtzQixPQUFPclMsSUFJekIwaEUsRUFBYWg2RSxVQUFVcTFDLE9BQVMsU0FBZ0JockMsRUFBR0MsRUFBRytpQixFQUFHL3RCLEdBQ3ZELE9BQU80QixLQUFLMHpDLE1BQU12cUMsRUFBR0MsRUFBRytpQixFQUFHL3RCLElBRzdCMDZFLEVBQWFoNkUsVUFBVXUyQyxXQUFhLFNBQW9CbHNDLEVBQUdrYSxJQUN6RGxhLEVBQUksSUFBSXFOLEVBQUdyTixFQUFHLEtBQ1A0TixNQUNMNU4sRUFBSUEsRUFBRXlmLE1BQU01b0IsS0FBSytXLE1BRW5CLElBQUk0USxFQUFLeGUsRUFBRXlnQixTQUNQeXFELEVBQU1yMEUsS0FBSyt6RSxHQUFHMXFELE9BQU9ycEIsS0FBS2tKLEVBQUV1Z0IsT0FBTzlCLElBQ25DMHhELEVBQU1yNUUsS0FBS2dzQixJQUFJM0MsT0FBT3JwQixLQUFLK3pFLEdBQUd0cUQsT0FBT3pwQixLQUFLeEMsR0FBR2lzQixPQUFPOUIsSUFFcEQ4ckQsRUFBS1ksRUFBSTVxRCxPQUFPNHZELEVBQUlwdkQsV0FDcEI3Z0IsRUFBSXFxRSxFQUFHMXBELFVBQ1gsR0FBNkMsSUFBekMzZ0IsRUFBRXdnQixTQUFTUCxPQUFPb3FELEdBQUlsOEQsSUFBSXZYLEtBQUsyeUMsTUFDakMsTUFBTSxJQUFJNXdDLE1BQU0saUJBRWxCLElBQUl1bEIsRUFBUWxlLEVBQUU0ZixVQUFVMUIsUUFJeEIsT0FISWpFLElBQVFpRSxJQUFVakUsR0FBT2lFLEtBQzNCbGUsRUFBSUEsRUFBRThnQixVQUVEbHFCLEtBQUswekMsTUFBTXZxQyxFQUFHQyxJQUd2QjB2RSxFQUFhaDZFLFVBQVV3NkUsV0FBYSxTQUFvQmx3RSxFQUFHaWEsSUFDekRqYSxFQUFJLElBQUlvTixFQUFHcE4sRUFBRyxLQUNQMk4sTUFDTDNOLEVBQUlBLEVBQUV3ZixNQUFNNW9CLEtBQUsrVyxNQUduQixJQUFJMDhELEVBQUtycUUsRUFBRXdnQixTQUNQeXZELEVBQU01RixFQUFHcHFELE9BQU9ycEIsS0FBSyt6RSxJQUNyQk0sRUFBTVosRUFBR2hxRCxPQUFPenBCLEtBQUt4QyxHQUFHaXNCLE9BQU96cEIsS0FBSyt6RSxJQUFJMXFELE9BQU9ycEIsS0FBS2tKLEdBQ3BEeWUsRUFBSzB4RCxFQUFJNXZELE9BQU80cUQsRUFBSXBxRCxXQUV4QixHQUEwQixJQUF0QnRDLEVBQUdwUSxJQUFJdlgsS0FBSzJ5QyxNQUFhLENBQzNCLEdBQUl0dkIsRUFDRixNQUFNLElBQUl0aEIsTUFBTSxpQkFFaEIsT0FBTy9CLEtBQUswekMsTUFBTTF6QyxLQUFLMnlDLEtBQU12cEMsR0FHakMsSUFBSUQsRUFBSXdlLEVBQUdvQyxVQUNYLEdBQTZDLElBQXpDNWdCLEVBQUV5Z0IsU0FBU1AsT0FBTzFCLEdBQUlwUSxJQUFJdlgsS0FBSzJ5QyxNQUNqQyxNQUFNLElBQUk1d0MsTUFBTSxpQkFLbEIsT0FISW9ILEVBQUU2ZixVQUFVMUIsVUFBWWpFLElBQzFCbGEsRUFBSUEsRUFBRStnQixVQUVEbHFCLEtBQUswekMsTUFBTXZxQyxFQUFHQyxJQUd2QjB2RSxFQUFhaDZFLFVBQVU2MEMsU0FBVyxTQUFrQkQsR0FDbEQsR0FBSUEsRUFBTStMLGFBQ1IsT0FBTyxFQUdUL0wsRUFBTTZrQyxZQUVOLElBQUk1d0QsRUFBSytyQixFQUFNdnFDLEVBQUV5Z0IsU0FDYjZwRCxFQUFLLy9CLEVBQU10cUMsRUFBRXdnQixTQUNieXZELEVBQU0xeEQsRUFBRzhCLE9BQU96cEIsS0FBS2tKLEdBQUdpZ0IsT0FBT3NxRCxHQUMvQlksRUFBTXIwRSxLQUFLK3pFLEdBQUd0cUQsT0FBT3pwQixLQUFLZ3NCLElBQUk3QyxPQUFPbnBCLEtBQUt4QyxFQUFFaXNCLE9BQU85QixHQUFJOEIsT0FBT2dxRCxLQUVsRSxPQUF3QixJQUFqQjRGLEVBQUk5aEUsSUFBSTg4RCxJQWtDakI5OUQsRUFBU284RCxFQUFPdnFDLEVBQUttTCxXQUVyQnVsQyxFQUFhaDZFLFVBQVUrekMsY0FBZ0IsU0FBdUI5dkMsR0FDNUQsT0FBTzR2RSxFQUFNOEIsU0FBU3owRSxLQUFNK0MsSUFHOUIrMUUsRUFBYWg2RSxVQUFVNDBDLE1BQVEsU0FBZXZxQyxFQUFHQyxFQUFHK2lCLEVBQUcvdEIsR0FDckQsT0FBTyxJQUFJdTBFLEVBQU0zeUUsS0FBTW1KLEVBQUdDLEVBQUcraUIsRUFBRy90QixJQUdsQ3UwRSxFQUFNOEIsU0FBVyxTQUFrQmpoQyxFQUFPendDLEdBQ3hDLE9BQU8sSUFBSTR2RSxFQUFNbi9CLEVBQU96d0MsRUFBSSxHQUFJQSxFQUFJLEdBQUlBLEVBQUksS0FHOUM0dkUsRUFBTTd6RSxVQUFVOEssUUFBVSxXQUN4QixPQUFJNUosS0FBS3kvQyxhQUNBLHNCQUNGLGdCQUFrQnovQyxLQUFLbUosRUFBRTZmLFVBQVVybEIsU0FBUyxHQUFJLEdBQ25ELE9BQVMzRCxLQUFLb0osRUFBRTRmLFVBQVVybEIsU0FBUyxHQUFJLEdBQ3ZDLE9BQVMzRCxLQUFLbXNCLEVBQUVuRCxVQUFVcmxCLFNBQVMsR0FBSSxHQUFLLEtBR2xEZ3ZFLEVBQU03ekUsVUFBVTJnRCxXQUFhLFdBRTNCLE9BQTBCLElBQW5Cei9DLEtBQUttSixFQUFFMGUsS0FBSyxLQUNPLElBQXZCN25CLEtBQUtvSixFQUFFbU8sSUFBSXZYLEtBQUttc0IsSUFDaEJuc0IsS0FBSyt5RSxNQUFxQyxJQUE3Qi95RSxLQUFLb0osRUFBRW1PLElBQUl2WCxLQUFLd3pDLE1BQU1qMkMsS0FHeENvMUUsRUFBTTd6RSxVQUFVeTZFLFFBQVUsV0FNeEIsSUFBSXJ3RSxFQUFJbEosS0FBS21KLEVBQUV5Z0IsU0FFWGpsQixFQUFJM0UsS0FBS29KLEVBQUV3Z0IsU0FFWHJzQixFQUFJeUMsS0FBS21zQixFQUFFdkMsU0FDZnJzQixFQUFJQSxFQUFFNnJCLFFBQVE3ckIsR0FFZCxJQUFJQyxFQUFJd0MsS0FBS3d6QyxNQUFNMmxDLE1BQU1qd0UsR0FFckJULEVBQUl6SSxLQUFLbUosRUFBRWdnQixPQUFPbnBCLEtBQUtvSixHQUFHd2dCLFNBQVNOLFFBQVFwZ0IsR0FBR29nQixRQUFRM2tCLEdBRXREbUssRUFBSXRSLEVBQUUyckIsT0FBT3hrQixHQUVib3ZCLEVBQUlqbEIsRUFBRXVhLE9BQU85ckIsR0FFYnluQixFQUFJeG5CLEVBQUU2ckIsT0FBTzFrQixHQUViaXdFLEVBQUtuc0UsRUFBRWdoQixPQUFPc0ssR0FFZDhnRCxFQUFLL2xFLEVBQUUyYSxPQUFPekUsR0FFZHcwRCxFQUFLL3dFLEVBQUVnaEIsT0FBT3pFLEdBRWQ2d0QsRUFBSzloRCxFQUFFdEssT0FBTzNhLEdBQ2xCLE9BQU85TyxLQUFLd3pDLE1BQU1FLE1BQU1raEMsRUFBSUMsRUFBSWdCLEVBQUkyRCxJQUd0QzdHLEVBQU03ekUsVUFBVTI2RSxTQUFXLFdBUXpCLElBTUk3RSxFQUNBQyxFQUNBZ0IsRUFSQWx4RSxFQUFJM0UsS0FBS21KLEVBQUVnZ0IsT0FBT25wQixLQUFLb0osR0FBR3dnQixTQUUxQnJzQixFQUFJeUMsS0FBS21KLEVBQUV5Z0IsU0FFWHBzQixFQUFJd0MsS0FBS29KLEVBQUV3Z0IsU0FLZixHQUFJNXBCLEtBQUt3ekMsTUFBTXVsQyxRQUFTLENBRXRCLElBRUlobEQsR0FGQXRyQixFQUFJekksS0FBS3d6QyxNQUFNMmxDLE1BQU01N0UsSUFFZjRyQixPQUFPM3JCLEdBQ2pCLEdBQUl3QyxLQUFLK3lFLEtBRVA2QixFQUFLandFLEVBQUUwa0IsT0FBTzlyQixHQUFHOHJCLE9BQU83ckIsR0FBR2lzQixPQUFPc0ssRUFBRTFLLE9BQU9ycEIsS0FBS3d6QyxNQUFNWixNQUV0RGlpQyxFQUFLOWdELEVBQUV0SyxPQUFPaGhCLEVBQUU0Z0IsT0FBTzdyQixJQUV2QnE0RSxFQUFLOWhELEVBQUVuSyxTQUFTUCxPQUFPMEssR0FBRzFLLE9BQU8wSyxPQUM1QixDQUVMLElBQUkvTyxFQUFJaGxCLEtBQUttc0IsRUFBRXZDLFNBRVhoa0IsRUFBSW11QixFQUFFMUssT0FBT3JFLEdBQUdzRSxRQUFRdEUsR0FFNUI0dkQsRUFBS2p3RSxFQUFFMGtCLE9BQU85ckIsR0FBRytyQixRQUFROXJCLEdBQUdpc0IsT0FBTzdqQixHQUVuQ2l2RSxFQUFLOWdELEVBQUV0SyxPQUFPaGhCLEVBQUU0Z0IsT0FBTzdyQixJQUV2QnE0RSxFQUFLOWhELEVBQUV0SyxPQUFPN2pCLFFBRVgsQ0FFTCxJQUFJNkMsRUFBSWxMLEVBQUU0ckIsT0FBTzNyQixHQUVid25CLEVBQUlobEIsS0FBS3d6QyxNQUFNNGxDLE1BQU1wNUUsS0FBS21zQixHQUFHdkMsU0FFN0Joa0IsRUFBSTZDLEVBQUU0Z0IsT0FBT3JFLEdBQUdxRSxPQUFPckUsR0FFM0I0dkQsRUFBSzUwRSxLQUFLd3pDLE1BQU00bEMsTUFBTXowRSxFQUFFMmtCLFFBQVE3Z0IsSUFBSWdoQixPQUFPN2pCLEdBRTNDaXZFLEVBQUs3MEUsS0FBS3d6QyxNQUFNNGxDLE1BQU0zd0UsR0FBR2doQixPQUFPbHNCLEVBQUUrckIsUUFBUTlyQixJQUUxQ3E0RSxFQUFLcHRFLEVBQUVnaEIsT0FBTzdqQixHQUVoQixPQUFPNUYsS0FBS3d6QyxNQUFNRSxNQUFNa2hDLEVBQUlDLEVBQUlnQixJQUdsQ2xELEVBQU03ekUsVUFBVWszQyxJQUFNLFdBQ3BCLE9BQUloMkMsS0FBS3kvQyxhQUNBei9DLEtBR0xBLEtBQUt3ekMsTUFBTXp1QixTQUNOL2tCLEtBQUt1NUUsVUFFTHY1RSxLQUFLeTVFLFlBR2hCOUcsRUFBTTd6RSxVQUFVNDZFLFFBQVUsU0FBaUIxNkUsR0FNekMsSUFBSWtLLEVBQUlsSixLQUFLb0osRUFBRWlnQixPQUFPcnBCLEtBQUttSixHQUFHc2dCLE9BQU96cUIsRUFBRW9LLEVBQUVpZ0IsT0FBT3JxQixFQUFFbUssSUFFOUN4RSxFQUFJM0UsS0FBS29KLEVBQUUrZixPQUFPbnBCLEtBQUttSixHQUFHc2dCLE9BQU96cUIsRUFBRW9LLEVBQUUrZixPQUFPbnFCLEVBQUVtSyxJQUU5QzVMLEVBQUl5QyxLQUFLNUIsRUFBRXFyQixPQUFPenBCLEtBQUt3ekMsTUFBTXlsQyxJQUFJeHZELE9BQU96cUIsRUFBRVosR0FFMUNaLEVBQUl3QyxLQUFLbXNCLEVBQUUxQyxPQUFPenFCLEVBQUVtdEIsRUFBRWhELE9BQU9ucUIsRUFBRW10QixJQUUvQjFqQixFQUFJOUQsRUFBRTBrQixPQUFPbmdCLEdBRWI2cUIsRUFBSXYyQixFQUFFNnJCLE9BQU85ckIsR0FFYnVSLEVBQUl0UixFQUFFMnJCLE9BQU81ckIsR0FFYnluQixFQUFJcmdCLEVBQUV3a0IsT0FBT2pnQixHQUViMHJFLEVBQUtuc0UsRUFBRWdoQixPQUFPc0ssR0FFZDhnRCxFQUFLL2xFLEVBQUUyYSxPQUFPekUsR0FFZHcwRCxFQUFLL3dFLEVBQUVnaEIsT0FBT3pFLEdBRWQ2d0QsRUFBSzloRCxFQUFFdEssT0FBTzNhLEdBQ2xCLE9BQU85TyxLQUFLd3pDLE1BQU1FLE1BQU1raEMsRUFBSUMsRUFBSWdCLEVBQUkyRCxJQUd0QzdHLEVBQU03ekUsVUFBVTY2RSxTQUFXLFNBQWtCMzZFLEdBTzNDLElBZ0JJNjFFLEVBQ0FnQixFQWpCQTNzRSxFQUFJbEosS0FBS21zQixFQUFFMUMsT0FBT3pxQixFQUFFbXRCLEdBRXBCeG5CLEVBQUl1RSxFQUFFMGdCLFNBRU5yc0IsRUFBSXlDLEtBQUttSixFQUFFc2dCLE9BQU96cUIsRUFBRW1LLEdBRXBCM0wsRUFBSXdDLEtBQUtvSixFQUFFcWdCLE9BQU96cUIsRUFBRW9LLEdBRXBCWCxFQUFJekksS0FBS3d6QyxNQUFNaDJDLEVBQUVpc0IsT0FBT2xzQixHQUFHa3NCLE9BQU9qc0IsR0FFbEN1MkIsRUFBSXB2QixFQUFFMGtCLE9BQU81Z0IsR0FFYnFHLEVBQUluSyxFQUFFd2tCLE9BQU8xZ0IsR0FFYmlpQixFQUFNMXFCLEtBQUttSixFQUFFZ2dCLE9BQU9ucEIsS0FBS29KLEdBQUdxZ0IsT0FBT3pxQixFQUFFbUssRUFBRWdnQixPQUFPbnFCLEVBQUVvSyxJQUFJa2dCLFFBQVEvckIsR0FBRytyQixRQUFROXJCLEdBQ3ZFbzNFLEVBQUsxckUsRUFBRXVnQixPQUFPc0ssR0FBR3RLLE9BQU9pQixHQWM1QixPQVhJMXFCLEtBQUt3ekMsTUFBTXVsQyxTQUVibEUsRUFBSzNyRSxFQUFFdWdCLE9BQU8zYSxHQUFHMmEsT0FBT2pzQixFQUFFNnJCLE9BQU9ycEIsS0FBS3d6QyxNQUFNMmxDLE1BQU01N0UsS0FFbERzNEUsRUFBSzloRCxFQUFFdEssT0FBTzNhLEtBR2QrbEUsRUFBSzNyRSxFQUFFdWdCLE9BQU8zYSxHQUFHMmEsT0FBT2pzQixFQUFFNnJCLE9BQU85ckIsSUFFakNzNEUsRUFBSzcxRSxLQUFLd3pDLE1BQU00bEMsTUFBTXJsRCxHQUFHdEssT0FBTzNhLElBRTNCOU8sS0FBS3d6QyxNQUFNRSxNQUFNa2hDLEVBQUlDLEVBQUlnQixJQUdsQ2xELEVBQU03ekUsVUFBVXNkLElBQU0sU0FBYXBkLEdBQ2pDLE9BQUlnQixLQUFLeS9DLGFBQ0F6Z0QsRUFDTEEsRUFBRXlnRCxhQUNHei9DLEtBRUxBLEtBQUt3ekMsTUFBTXp1QixTQUNOL2tCLEtBQUswNUUsUUFBUTE2RSxHQUViZ0IsS0FBSzI1RSxTQUFTMzZFLElBR3pCMnpFLEVBQU03ekUsVUFBVTRNLElBQU0sU0FBYXFOLEdBQ2pDLE9BQUkvWSxLQUFLKzFDLFlBQVloOUIsR0FDWi9ZLEtBQUt3ekMsTUFBTUksYUFBYTV6QyxLQUFNK1ksR0FFOUIvWSxLQUFLd3pDLE1BQU1lLFNBQVN2MEMsS0FBTStZLElBR3JDNDVELEVBQU03ekUsVUFBVWsyRSxPQUFTLFNBQWdCMzZDLEVBQUlyN0IsRUFBR3M3QixHQUM5QyxPQUFPdDZCLEtBQUt3ekMsTUFBTW1CLFlBQVksRUFBRyxDQUFFMzBDLEtBQU1oQixHQUFLLENBQUVxN0IsRUFBSUMsR0FBTSxHQUFHLElBRy9EcTRDLEVBQU03ekUsVUFBVW0yRSxRQUFVLFNBQWlCNTZDLEVBQUlyN0IsRUFBR3M3QixHQUNoRCxPQUFPdDZCLEtBQUt3ekMsTUFBTW1CLFlBQVksRUFBRyxDQUFFMzBDLEtBQU1oQixHQUFLLENBQUVxN0IsRUFBSUMsR0FBTSxHQUFHLElBRy9EcTRDLEVBQU03ekUsVUFBVXk1RSxVQUFZLFdBQzFCLEdBQUl2NEUsS0FBSyt5RSxLQUNQLE9BQU8veUUsS0FHVCxJQUFJNDVFLEVBQUs1NUUsS0FBS21zQixFQUFFbEMsVUFPaEIsT0FOQWpxQixLQUFLbUosRUFBSW5KLEtBQUttSixFQUFFc2dCLE9BQU9td0QsR0FDdkI1NUUsS0FBS29KLEVBQUlwSixLQUFLb0osRUFBRXFnQixPQUFPbXdELEdBQ25CNTVFLEtBQUs1QixJQUNQNEIsS0FBSzVCLEVBQUk0QixLQUFLNUIsRUFBRXFyQixPQUFPbXdELElBQ3pCNTVFLEtBQUttc0IsRUFBSW5zQixLQUFLd3pDLE1BQU14bkIsSUFDcEJoc0IsS0FBSyt5RSxNQUFPLEVBQ0wveUUsTUFHVDJ5RSxFQUFNN3pFLFVBQVVrYyxJQUFNLFdBQ3BCLE9BQU9oYixLQUFLd3pDLE1BQU1FLE1BQU0xekMsS0FBS21KLEVBQUUrZ0IsU0FDUGxxQixLQUFLb0osRUFDTHBKLEtBQUttc0IsRUFDTG5zQixLQUFLNUIsR0FBSzRCLEtBQUs1QixFQUFFOHJCLFdBRzNDeW9ELEVBQU03ekUsVUFBVTIyQyxLQUFPLFdBRXJCLE9BREF6MUMsS0FBS3U0RSxZQUNFdjRFLEtBQUttSixFQUFFNmYsV0FHaEIycEQsRUFBTTd6RSxVQUFVNDJDLEtBQU8sV0FFckIsT0FEQTExQyxLQUFLdTRFLFlBQ0V2NEUsS0FBS29KLEVBQUU0ZixXQUdoQjJwRCxFQUFNN3pFLFVBQVU0cEIsR0FBSyxTQUFZbXdELEdBQy9CLE9BQU83NEUsT0FBUzY0RSxHQUN5QixJQUFsQzc0RSxLQUFLeTFDLE9BQU9sK0IsSUFBSXNoRSxFQUFNcGpDLFNBQ1ksSUFBbEN6MUMsS0FBSzAxQyxPQUFPbitCLElBQUlzaEUsRUFBTW5qQyxTQUcvQmk5QixFQUFNN3pFLFVBQVVtNUUsT0FBUyxTQUFnQjl1RSxHQUN2QyxJQUFJZ2EsRUFBS2hhLEVBQUV5ZixNQUFNNW9CLEtBQUt3ekMsTUFBTXo4QixLQUFLMFMsT0FBT3pwQixLQUFLbXNCLEdBQzdDLEdBQXVCLElBQW5CbnNCLEtBQUttSixFQUFFb08sSUFBSTRMLEdBQ2IsT0FBTyxFQUlULElBRkEsSUFBSWcxRCxFQUFLaHZFLEVBQUVvUCxRQUNQbmEsRUFBSTRCLEtBQUt3ekMsTUFBTUgsS0FBSzVwQixPQUFPenBCLEtBQUttc0IsS0FDM0IsQ0FFUCxHQURBZ3NELEVBQUdqOEQsS0FBS2xjLEtBQUt3ekMsTUFBTTcwQyxHQUNmdzVFLEVBQUc1Z0UsSUFBSXZYLEtBQUt3ekMsTUFBTXgwQyxJQUFNLEVBQzFCLE9BQU8sRUFHVCxHQURBbWtCLEVBQUdpRyxRQUFRaHJCLEdBQ1ksSUFBbkI0QixLQUFLbUosRUFBRW9PLElBQUk0TCxHQUNiLE9BQU8sSUFLYnd2RCxFQUFNN3pFLFVBQVV3MUMsSUFBTXErQixFQUFNN3pFLFVBQVV5NUUsVUFDdEM1RixFQUFNN3pFLFVBQVVzMUMsU0FBV3UrQixFQUFNN3pFLFVBQVVzZCxLLDZCQzdhM0NwZixFQUFRa2pELEtBQU8sRUFBUSxLQUN2QmxqRCxFQUFRbWpELE9BQVMsRUFBUSxLQUN6Qm5qRCxFQUFRMjlDLE9BQVMsRUFBUSxLQUN6QjM5QyxFQUFRMmlELE9BQVMsRUFBUSxLQUN6QjNpRCxFQUFRNGlELE9BQVMsRUFBUSxNLDZCQ0p6QixJQUFJL2xCLEVBQVEsRUFBUSxJQUNoQmttQixFQUFTLEVBQVEsSUFDakIyTSxFQUFZLEVBQVEsS0FFcEJ6dkIsRUFBU3BELEVBQU1vRCxPQUNmQyxFQUFRckQsRUFBTXFELE1BQ2RHLEVBQVV4RCxFQUFNd0QsUUFDaEJndkIsRUFBT0ssRUFBVUwsS0FDakI1YyxFQUFZc1EsRUFBT3RRLFVBRW5Cb3FDLEVBQVMsQ0FDWCxXQUFZLFdBQ1osV0FBWSxZQUdkLFNBQVNDLElBQ1AsS0FBTTk1RSxnQkFBZ0I4NUUsR0FDcEIsT0FBTyxJQUFJQSxFQUVicnFDLEVBQVVweUMsS0FBSzJDLE1BQ2ZBLEtBQUtnbEIsRUFBSSxDQUNQLFdBQVksV0FBWSxXQUN4QixVQUFZLFlBQ2RobEIsS0FBSzhtRCxFQUFJLElBQUl2OEMsTUFBTSxJQUdyQnN2QixFQUFNdGpCLFNBQVN1akUsRUFBTXJxQyxHQUNyQnh5QyxFQUFPRCxRQUFVODhFLEVBRWpCQSxFQUFLOXdDLFVBQVksSUFDakI4d0MsRUFBS2xxQyxRQUFVLElBQ2ZrcUMsRUFBS2pxQyxhQUFlLEdBQ3BCaXFDLEVBQUtocUMsVUFBWSxHQUVqQmdxQyxFQUFLaDdFLFVBQVU2cUMsUUFBVSxTQUFpQnJ6QixFQUFLcFMsR0FHN0MsSUFGQSxJQUFJNGlELEVBQUk5bUQsS0FBSzhtRCxFQUVKNXBELEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUN0QjRwRCxFQUFFNXBELEdBQUtvWixFQUFJcFMsRUFBUWhILEdBRXJCLEtBQU1BLEVBQUk0cEQsRUFBRWptRCxPQUFRM0QsSUFDbEI0cEQsRUFBRTVwRCxHQUFLKy9CLEVBQU82cEIsRUFBRTVwRCxFQUFJLEdBQUs0cEQsRUFBRTVwRCxFQUFJLEdBQUs0cEQsRUFBRTVwRCxFQUFJLElBQU00cEQsRUFBRTVwRCxFQUFJLElBQUssR0FFN0QsSUFBSWdNLEVBQUlsSixLQUFLZ2xCLEVBQUUsR0FDWHJnQixFQUFJM0UsS0FBS2dsQixFQUFFLEdBQ1h6bkIsRUFBSXlDLEtBQUtnbEIsRUFBRSxHQUNYeG5CLEVBQUl3QyxLQUFLZ2xCLEVBQUUsR0FDWHZjLEVBQUl6SSxLQUFLZ2xCLEVBQUUsR0FFZixJQUFLOW5CLEVBQUksRUFBR0EsRUFBSTRwRCxFQUFFam1ELE9BQVEzRCxJQUFLLENBQzdCLElBQUkrQixLQUFPL0IsRUFBSSxJQUNYa0IsRUFBSWkvQixFQUFRSixFQUFPL3pCLEVBQUcsR0FBSW1qRCxFQUFLcHRELEVBQUcwRixFQUFHcEgsRUFBR0MsR0FBSWlMLEVBQUdxK0MsRUFBRTVwRCxHQUFJMjhFLEVBQU81NkUsSUFDaEV3SixFQUFJakwsRUFDSkEsRUFBSUQsRUFDSkEsRUFBSTAvQixFQUFPdDRCLEVBQUcsSUFDZEEsRUFBSXVFLEVBQ0pBLEVBQUk5SyxFQUdONEIsS0FBS2dsQixFQUFFLEdBQUtrWSxFQUFNbDlCLEtBQUtnbEIsRUFBRSxHQUFJOWIsR0FDN0JsSixLQUFLZ2xCLEVBQUUsR0FBS2tZLEVBQU1sOUIsS0FBS2dsQixFQUFFLEdBQUlyZ0IsR0FDN0IzRSxLQUFLZ2xCLEVBQUUsR0FBS2tZLEVBQU1sOUIsS0FBS2dsQixFQUFFLEdBQUl6bkIsR0FDN0J5QyxLQUFLZ2xCLEVBQUUsR0FBS2tZLEVBQU1sOUIsS0FBS2dsQixFQUFFLEdBQUl4bkIsR0FDN0J3QyxLQUFLZ2xCLEVBQUUsR0FBS2tZLEVBQU1sOUIsS0FBS2dsQixFQUFFLEdBQUl2YyxJQUcvQnF4RSxFQUFLaDdFLFVBQVVveEMsUUFBVSxTQUFnQjdVLEdBQ3ZDLE1BQVksUUFBUkEsRUFDS3hCLEVBQU1nRCxRQUFRNzhCLEtBQUtnbEIsRUFBRyxPQUV0QjZVLEVBQU1rRCxRQUFRLzhCLEtBQUtnbEIsRUFBRyxTLDZCQ3RFakMsSUFBSTZVLEVBQVEsRUFBUSxJQUNoQit5QixFQUFTLEVBQVEsS0FFckIsU0FBU210QixJQUNQLEtBQU0vNUUsZ0JBQWdCKzVFLEdBQ3BCLE9BQU8sSUFBSUEsRUFFYm50QixFQUFPdnZELEtBQUsyQyxNQUNaQSxLQUFLZ2xCLEVBQUksQ0FDUCxXQUFZLFVBQVksVUFBWSxXQUNwQyxXQUFZLFdBQVksV0FBWSxZQUV4QzZVLEVBQU10akIsU0FBU3dqRSxFQUFRbnRCLEdBQ3ZCM3ZELEVBQU9ELFFBQVUrOEUsRUFFakJBLEVBQU8vd0MsVUFBWSxJQUNuQit3QyxFQUFPbnFDLFFBQVUsSUFDakJtcUMsRUFBT2xxQyxhQUFlLElBQ3RCa3FDLEVBQU9qcUMsVUFBWSxHQUVuQmlxQyxFQUFPajdFLFVBQVVveEMsUUFBVSxTQUFnQjdVLEdBRXpDLE1BQVksUUFBUkEsRUFDS3hCLEVBQU1nRCxRQUFRNzhCLEtBQUtnbEIsRUFBRW5pQixNQUFNLEVBQUcsR0FBSSxPQUVsQ2czQixFQUFNa0QsUUFBUS84QixLQUFLZ2xCLEVBQUVuaUIsTUFBTSxFQUFHLEdBQUksUyw2QkN6QjdDLElBQUlnM0IsRUFBUSxFQUFRLElBRWhCaXpCLEVBQVMsRUFBUSxLQUVyQixTQUFTa3RCLElBQ1AsS0FBTWg2RSxnQkFBZ0JnNkUsR0FDcEIsT0FBTyxJQUFJQSxFQUVibHRCLEVBQU96dkQsS0FBSzJDLE1BQ1pBLEtBQUtnbEIsRUFBSSxDQUNQLFdBQVksV0FDWixXQUFZLFVBQ1osV0FBWSxVQUNaLFVBQVksV0FDWixXQUFZLFdBQ1osV0FBWSxXQUNaLFdBQVksV0FDWixXQUFZLFlBRWhCNlUsRUFBTXRqQixTQUFTeWpFLEVBQVFsdEIsR0FDdkI3dkQsRUFBT0QsUUFBVWc5RSxFQUVqQkEsRUFBT2h4QyxVQUFZLEtBQ25CZ3hDLEVBQU9wcUMsUUFBVSxJQUNqQm9xQyxFQUFPbnFDLGFBQWUsSUFDdEJtcUMsRUFBT2xxQyxVQUFZLElBRW5Ca3FDLEVBQU9sN0UsVUFBVW94QyxRQUFVLFNBQWdCN1UsR0FDekMsTUFBWSxRQUFSQSxFQUNLeEIsRUFBTWdELFFBQVE3OEIsS0FBS2dsQixFQUFFbmlCLE1BQU0sRUFBRyxJQUFLLE9BRW5DZzNCLEVBQU1rRCxRQUFRLzhCLEtBQUtnbEIsRUFBRW5pQixNQUFNLEVBQUcsSUFBSyxTLDZCQy9COUMsSUFBSWczQixFQUFRLEVBQVEsSUFDaEJrbUIsRUFBUyxFQUFRLElBRWpCOWlCLEVBQVNwRCxFQUFNb0QsT0FDZkMsRUFBUXJELEVBQU1xRCxNQUNkQyxFQUFVdEQsRUFBTXNELFFBQ2hCQyxFQUFVdkQsRUFBTXVELFFBQ2hCcVMsRUFBWXNRLEVBQU90USxVQUV2QixTQUFTeU8sSUFDUCxLQUFNbCtDLGdCQUFnQmsrQyxHQUNwQixPQUFPLElBQUlBLEVBRWJ6TyxFQUFVcHlDLEtBQUsyQyxNQUVmQSxLQUFLZ2xCLEVBQUksQ0FBRSxXQUFZLFdBQVksV0FBWSxVQUFZLFlBQzNEaGxCLEtBQUsyVyxPQUFTLFNBMERoQixTQUFTb2QsRUFBRW51QixFQUFHdUQsRUFBR0MsRUFBRytpQixHQUNsQixPQUFJdm1CLEdBQUssR0FDQXVELEVBQUlDLEVBQUkraUIsRUFDUnZtQixHQUFLLEdBQ0p1RCxFQUFJQyxHQUFRRCxFQUFLZ2pCLEVBQ2xCdm1CLEdBQUssSUFDSnVELEdBQU1DLEdBQU0raUIsRUFDYnZtQixHQUFLLEdBQ0p1RCxFQUFJZ2pCLEVBQU0vaUIsR0FBTStpQixFQUVqQmhqQixHQUFLQyxHQUFNK2lCLEdBR3RCLFNBQVMwNkIsRUFBRWpoRCxHQUNULE9BQUlBLEdBQUssR0FDQSxFQUNBQSxHQUFLLEdBQ0wsV0FDQUEsR0FBSyxHQUNMLFdBQ0FBLEdBQUssR0FDTCxXQUVBLFdBR1gsU0FBU3EwRSxFQUFHcjBFLEdBQ1YsT0FBSUEsR0FBSyxHQUNBLFdBQ0FBLEdBQUssR0FDTCxXQUNBQSxHQUFLLEdBQ0wsV0FDQUEsR0FBSyxHQUNMLFdBRUEsRUE1RlhpMEIsRUFBTXRqQixTQUFTMm5DLEVBQVd6TyxHQUMxQnp5QyxFQUFRNDlDLFVBQVlzRCxFQUVwQkEsRUFBVWxWLFVBQVksSUFDdEJrVixFQUFVdE8sUUFBVSxJQUNwQnNPLEVBQVVyTyxhQUFlLElBQ3pCcU8sRUFBVXBPLFVBQVksR0FFdEJvTyxFQUFVcC9DLFVBQVU2cUMsUUFBVSxTQUFnQnJ6QixFQUFLcFMsR0FXakQsSUFWQSxJQUFJNGlCLEVBQUk5bUIsS0FBS2dsQixFQUFFLEdBQ1grQixFQUFJL21CLEtBQUtnbEIsRUFBRSxHQUNYZ0MsRUFBSWhuQixLQUFLZ2xCLEVBQUUsR0FDWGlDLEVBQUlqbkIsS0FBS2dsQixFQUFFLEdBQ1hrMUQsRUFBSWw2RSxLQUFLZ2xCLEVBQUUsR0FDWG0xRCxFQUFLcnpELEVBQ0xzekQsRUFBS3J6RCxFQUNMbWhDLEVBQUtsaEMsRUFDTHF6RCxFQUFLcHpELEVBQ0xxekQsRUFBS0osRUFDQXQwRSxFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFBSyxDQUMzQixJQUFJMjBFLEVBQUlyOUMsRUFDTkQsRUFDRUcsRUFBUXRXLEVBQUdpTixFQUFFbnVCLEVBQUdtaEIsRUFBR0MsRUFBR0MsR0FBSTNRLEVBQUl0WSxFQUFFNEgsR0FBSzFCLEdBQVEyaUQsRUFBRWpoRCxJQUMvQzNHLEVBQUUyRyxJQUNKczBFLEdBQ0ZwekQsRUFBSW96RCxFQUNKQSxFQUFJanpELEVBQ0pBLEVBQUlnVyxFQUFPalcsRUFBRyxJQUNkQSxFQUFJRCxFQUNKQSxFQUFJd3pELEVBQ0pBLEVBQUlyOUMsRUFDRkQsRUFDRUcsRUFBUSs4QyxFQUFJcG1ELEVBQUUsR0FBS251QixFQUFHdzBFLEVBQUlseUIsRUFBSW15QixHQUFLL2pFLEVBQUlra0UsRUFBRzUwRSxHQUFLMUIsR0FBUSsxRSxFQUFHcjBFLElBQzFENjBFLEVBQUc3MEUsSUFDTDAwRSxHQUNGSCxFQUFLRyxFQUNMQSxFQUFLRCxFQUNMQSxFQUFLcDlDLEVBQU9pckIsRUFBSSxJQUNoQkEsRUFBS2t5QixFQUNMQSxFQUFLRyxFQUVQQSxFQUFJcDlDLEVBQVFuOUIsS0FBS2dsQixFQUFFLEdBQUlnQyxFQUFHcXpELEdBQzFCcjZFLEtBQUtnbEIsRUFBRSxHQUFLbVksRUFBUW45QixLQUFLZ2xCLEVBQUUsR0FBSWlDLEVBQUdxekQsR0FDbEN0NkUsS0FBS2dsQixFQUFFLEdBQUttWSxFQUFRbjlCLEtBQUtnbEIsRUFBRSxHQUFJazFELEVBQUdDLEdBQ2xDbjZFLEtBQUtnbEIsRUFBRSxHQUFLbVksRUFBUW45QixLQUFLZ2xCLEVBQUUsR0FBSThCLEVBQUdzekQsR0FDbENwNkUsS0FBS2dsQixFQUFFLEdBQUttWSxFQUFRbjlCLEtBQUtnbEIsRUFBRSxHQUFJK0IsRUFBR21oQyxHQUNsQ2xvRCxLQUFLZ2xCLEVBQUUsR0FBS3UxRCxHQUdkcjhCLEVBQVVwL0MsVUFBVW94QyxRQUFVLFNBQWdCN1UsR0FDNUMsTUFBWSxRQUFSQSxFQUNLeEIsRUFBTWdELFFBQVE3OEIsS0FBS2dsQixFQUFHLFVBRXRCNlUsRUFBTWtELFFBQVEvOEIsS0FBS2dsQixFQUFHLFdBMENqQyxJQUFJaG5CLEVBQUksQ0FDTixFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUNsRCxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUNuRCxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxHQUNsRCxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUNuRCxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FBSSxJQUdoRHc4RSxFQUFLLENBQ1AsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEVBQUcsR0FDbEQsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFDbkQsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksRUFBRyxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FDbEQsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FDbEQsR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsSUFHaER2N0UsRUFBSSxDQUNOLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQ3JELEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksRUFBRyxHQUFJLEdBQ3BELEdBQUksR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQ3JELEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQ3BELEVBQUcsR0FBSSxFQUFHLEdBQUksRUFBRyxFQUFHLEdBQUksR0FBSSxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksRUFBRyxFQUFHLEdBR25EdzdFLEVBQUssQ0FDUCxFQUFHLEVBQUcsRUFBRyxHQUFJLEdBQUksR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksR0FBSSxFQUNyRCxFQUFHLEdBQUksR0FBSSxFQUFH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RSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxrRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0Usa0VBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esc0VBSU5sYSxJQUFLLENBQ0g5TixJQUFLLEVBQ0xnb0IsT0FBUSxDQUNOLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0Usa0VBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxrRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLGtFQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0EsbUVBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLGtFQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsaUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0Usa0VBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG1FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxtRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VBRUYsQ0FDRSxtRUFDQSxvRUFFRixDQUNFLG1FQUNBLG9FQUVGLENBQ0UsbUVBQ0Esb0VB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QUVGLE1BQW9CLHNDQUFoQkEsRUFBSXFWLFFBQ0NvWSxFQUFHLEtBQU0sVUFFVEEsRUFBR3p0QixHQUdkeXRCLEVBQUcsS0FBTXRtQixFQUFJdXBCIiwiZmlsZSI6InNjYXR0ZXJqcy1wbHVnaW4td2ViMy5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTY1KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiLCJtb2R1bGUuZXhwb3J0cyA9IFNjYXR0ZXJKUzsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjazsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzOyIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyLnByb3RvdHlwZSlcblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gJGdldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gJGdldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9ICRnZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBSZWZsZWN0QXBwbHkodGhpcy5saXN0ZW5lciwgdGhpcy50YXJnZXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiIsIihmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBVdGlsc1xuICBmdW5jdGlvbiBhc3NlcnQgKHZhbCwgbXNnKSB7XG4gICAgaWYgKCF2YWwpIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbiAgfVxuXG4gIC8vIENvdWxkIHVzZSBgaW5oZXJpdHNgIG1vZHVsZSwgYnV0IGRvbid0IHdhbnQgdG8gbW92ZSBmcm9tIHNpbmdsZSBmaWxlXG4gIC8vIGFyY2hpdGVjdHVyZSB5ZXQuXG4gIGZ1bmN0aW9uIGluaGVyaXRzIChjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlO1xuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yO1xuICB9XG5cbiAgLy8gQk5cblxuICBmdW5jdGlvbiBCTiAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAoQk4uaXNCTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIHRoaXMud29yZHMgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIC8vIFJlZHVjdGlvbiBjb250ZXh0XG4gICAgdGhpcy5yZWQgPSBudWxsO1xuXG4gICAgaWYgKG51bWJlciAhPT0gbnVsbCkge1xuICAgICAgaWYgKGJhc2UgPT09ICdsZScgfHwgYmFzZSA9PT0gJ2JlJykge1xuICAgICAgICBlbmRpYW4gPSBiYXNlO1xuICAgICAgICBiYXNlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXQobnVtYmVyIHx8IDAsIGJhc2UgfHwgMTAsIGVuZGlhbiB8fCAnYmUnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCTjtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJOID0gQk47XG4gIH1cblxuICBCTi5CTiA9IEJOO1xuICBCTi53b3JkU2l6ZSA9IDI2O1xuXG4gIHZhciBCdWZmZXI7XG4gIHRyeSB7XG4gICAgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cblxuICBCTi5pc0JOID0gZnVuY3Rpb24gaXNCTiAobnVtKSB7XG4gICAgaWYgKG51bSBpbnN0YW5jZW9mIEJOKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIHR5cGVvZiBudW0gPT09ICdvYmplY3QnICYmXG4gICAgICBudW0uY29uc3RydWN0b3Iud29yZFNpemUgPT09IEJOLndvcmRTaXplICYmIEFycmF5LmlzQXJyYXkobnVtLndvcmRzKTtcbiAgfTtcblxuICBCTi5tYXggPSBmdW5jdGlvbiBtYXggKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA+IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5taW4gPSBmdW5jdGlvbiBtaW4gKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA8IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsIGJhc2UsIGVuZGlhbik7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBiYXNlID0gMTY7XG4gICAgfVxuICAgIGFzc2VydChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTtcblxuICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICBzdGFydCsrO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgdGhpcy5fcGFyc2VIZXgobnVtYmVyLCBzdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlQmFzZShudW1iZXIsIGJhc2UsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyWzBdID09PSAnLScpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXROdW1iZXIgPSBmdW5jdGlvbiBfaW5pdE51bWJlciAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICBudW1iZXIgPSAtbnVtYmVyO1xuICAgIH1cbiAgICBpZiAobnVtYmVyIDwgMHg0MDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyBudW1iZXIgJiAweDNmZmZmZmYgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKG51bWJlci5sZW5ndGggLyAzKTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIHZhciBvZmYgPSAwO1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxLCBqID0gMDsgaSA+PSAwOyBpIC09IDMpIHtcbiAgICAgICAgdyA9IG51bWJlcltpXSB8IChudW1iZXJbaSAtIDFdIDw8IDgpIHwgKG51bWJlcltpIC0gMl0gPDwgMTYpO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAgIHRoaXMud29yZHNbaiArIDFdID0gKHcgPj4+ICgyNiAtIG9mZikpICYgMHgzZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjQ7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgKyAxXSA8PCA4KSB8IChudW1iZXJbaSArIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlSGV4IChzdHIsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciA8PD0gNDtcblxuICAgICAgLy8gJ2EnIC0gJ2YnXG4gICAgICBpZiAoYyA+PSA0OSAmJiBjIDw9IDU0KSB7XG4gICAgICAgIHIgfD0gYyAtIDQ5ICsgMHhhO1xuXG4gICAgICAvLyAnQScgLSAnRidcbiAgICAgIH0gZWxzZSBpZiAoYyA+PSAxNyAmJiBjIDw9IDIyKSB7XG4gICAgICAgIHIgfD0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgfD0gYyAmIDB4ZjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlSGV4ID0gZnVuY3Rpb24gX3BhcnNlSGV4IChudW1iZXIsIHN0YXJ0KSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGosIHc7XG4gICAgLy8gU2NhbiAyNC1iaXQgY2h1bmtzIGFuZCBhZGQgdGhlbSB0byB0aGUgbnVtYmVyXG4gICAgdmFyIG9mZiA9IDA7XG4gICAgZm9yIChpID0gbnVtYmVyLmxlbmd0aCAtIDYsIGogPSAwOyBpID49IHN0YXJ0OyBpIC09IDYpIHtcbiAgICAgIHcgPSBwYXJzZUhleChudW1iZXIsIGksIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIC8vIE5PVEU6IGAweDNmZmZmZmAgaXMgaW50ZW50aW9uYWwgaGVyZSwgMjZiaXRzIG1heCBzaGlmdCArIDI0Yml0IGhleCBsaW1iXG4gICAgICB0aGlzLndvcmRzW2ogKyAxXSB8PSB3ID4+PiAoMjYgLSBvZmYpICYgMHgzZmZmZmY7XG4gICAgICBvZmYgKz0gMjQ7XG4gICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSArIDYgIT09IHN0YXJ0KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBzdGFydCwgaSArIDYpO1xuICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICByICs9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgciArPSBjIC0gMTcgKyAweGE7XG5cbiAgICAgIC8vICcwJyAtICc5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciArPSBjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlID0gZnVuY3Rpb24gX3BhcnNlQmFzZSAobnVtYmVyLCBiYXNlLCBzdGFydCkge1xuICAgIC8vIEluaXRpYWxpemUgYXMgemVyb1xuICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uIF9leHBhbmQgKHNpemUpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBzaXplKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgYDBgIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwICgpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiAxICYmIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgdGhpcy5sZW5ndGgtLTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9ub3JtU2lnbiA9IGZ1bmN0aW9uIF9ub3JtU2lnbiAoKSB7XG4gICAgLy8gLTAgPSAwXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9O1xuXG4gIC8qXG5cbiAgdmFyIHplcm9zID0gW107XG4gIHZhciBncm91cFNpemVzID0gW107XG4gIHZhciBncm91cEJhc2VzID0gW107XG5cbiAgdmFyIHMgPSAnJztcbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IEJOLndvcmRTaXplKSB7XG4gICAgemVyb3NbaV0gPSBzO1xuICAgIHMgKz0gJzAnO1xuICB9XG4gIGdyb3VwU2l6ZXNbMF0gPSAwO1xuICBncm91cFNpemVzWzFdID0gMDtcbiAgZ3JvdXBCYXNlc1swXSA9IDA7XG4gIGdyb3VwQmFzZXNbMV0gPSAwO1xuICB2YXIgYmFzZSA9IDIgLSAxO1xuICB3aGlsZSAoKytiYXNlIDwgMzYgKyAxKSB7XG4gICAgdmFyIGdyb3VwU2l6ZSA9IDA7XG4gICAgdmFyIGdyb3VwQmFzZSA9IDE7XG4gICAgd2hpbGUgKGdyb3VwQmFzZSA8ICgxIDw8IEJOLndvcmRTaXplKSAvIGJhc2UpIHtcbiAgICAgIGdyb3VwQmFzZSAqPSBiYXNlO1xuICAgICAgZ3JvdXBTaXplICs9IDE7XG4gICAgfVxuICAgIGdyb3VwU2l6ZXNbYmFzZV0gPSBncm91cFNpemU7XG4gICAgZ3JvdXBCYXNlc1tiYXNlXSA9IGdyb3VwQmFzZTtcbiAgfVxuXG4gICovXG5cbiAgdmFyIHplcm9zID0gW1xuICAgICcnLFxuICAgICcwJyxcbiAgICAnMDAnLFxuICAgICcwMDAnLFxuICAgICcwMDAwJyxcbiAgICAnMDAwMDAnLFxuICAgICcwMDAwMDAnLFxuICAgICcwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICBdO1xuXG4gIHZhciBncm91cFNpemVzID0gW1xuICAgIDAsIDAsXG4gICAgMjUsIDE2LCAxMiwgMTEsIDEwLCA5LCA4LFxuICAgIDgsIDcsIDcsIDcsIDcsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDVcbiAgXTtcblxuICB2YXIgZ3JvdXBCYXNlcyA9IFtcbiAgICAwLCAwLFxuICAgIDMzNTU0NDMyLCA0MzA0NjcyMSwgMTY3NzcyMTYsIDQ4ODI4MTI1LCA2MDQ2NjE3NiwgNDAzNTM2MDcsIDE2Nzc3MjE2LFxuICAgIDQzMDQ2NzIxLCAxMDAwMDAwMCwgMTk0ODcxNzEsIDM1ODMxODA4LCA2Mjc0ODUxNywgNzUyOTUzNiwgMTEzOTA2MjUsXG4gICAgMTY3NzcyMTYsIDI0MTM3NTY5LCAzNDAxMjIyNCwgNDcwNDU4ODEsIDY0MDAwMDAwLCA0MDg0MTAxLCA1MTUzNjMyLFxuICAgIDY0MzYzNDMsIDc5NjI2MjQsIDk3NjU2MjUsIDExODgxMzc2LCAxNDM0ODkwNywgMTcyMTAzNjgsIDIwNTExMTQ5LFxuICAgIDI0MzAwMDAwLCAyODYyOTE1MSwgMzM1NTQ0MzIsIDM5MTM1MzkzLCA0NTQzNTQyNCwgNTI1MjE4NzUsIDYwNDY2MTc2XG4gIF07XG5cbiAgQk4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGJhc2UsIHBhZGRpbmcpIHtcbiAgICBiYXNlID0gYmFzZSB8fCAxMDtcbiAgICBwYWRkaW5nID0gcGFkZGluZyB8IDAgfHwgMTtcblxuICAgIHZhciBvdXQ7XG4gICAgaWYgKGJhc2UgPT09IDE2IHx8IGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBvZmYgPSAwO1xuICAgICAgdmFyIGNhcnJ5ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV07XG4gICAgICAgIHZhciB3b3JkID0gKCgodyA8PCBvZmYpIHwgY2FycnkpICYgMHhmZmZmZmYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY2FycnkgPSAodyA+Pj4gKDI0IC0gb2ZmKSkgJiAweGZmZmZmZjtcbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmICs9IDI7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgICAgb3V0ID0gY2FycnkudG9TdHJpbmcoMTYpICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09IChiYXNlIHwgMCkgJiYgYmFzZSA+PSAyICYmIGJhc2UgPD0gMzYpIHtcbiAgICAgIC8vIHZhciBncm91cFNpemUgPSBNYXRoLmZsb29yKEJOLndvcmRTaXplICogTWF0aC5MTjIgLyBNYXRoLmxvZyhiYXNlKSk7XG4gICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tiYXNlXTtcbiAgICAgIC8vIHZhciBncm91cEJhc2UgPSBNYXRoLnBvdyhiYXNlLCBncm91cFNpemUpO1xuICAgICAgdmFyIGdyb3VwQmFzZSA9IGdyb3VwQmFzZXNbYmFzZV07XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBjID0gdGhpcy5jbG9uZSgpO1xuICAgICAgYy5uZWdhdGl2ZSA9IDA7XG4gICAgICB3aGlsZSAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgdmFyIHIgPSBjLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIHRvQnVmZmVyIChlbmRpYW4sIGxlbmd0aCkge1xuICAgIGFzc2VydCh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5IChlbmRpYW4sIGxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCgpO1xuICAgIHZhciByZXFMZW5ndGggPSBsZW5ndGggfHwgTWF0aC5tYXgoMSwgYnl0ZUxlbmd0aCk7XG4gICAgYXNzZXJ0KGJ5dGVMZW5ndGggPD0gcmVxTGVuZ3RoLCAnYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgIGFzc2VydChyZXFMZW5ndGggPiAwLCAnUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwJyk7XG5cbiAgICB0aGlzLnN0cmlwKCk7XG4gICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbiA9PT0gJ2xlJztcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5VHlwZShyZXFMZW5ndGgpO1xuXG4gICAgdmFyIGIsIGk7XG4gICAgdmFyIHEgPSB0aGlzLmNsb25lKCk7XG4gICAgaWYgKCFsaXR0bGVFbmRpYW4pIHtcbiAgICAgIC8vIEFzc3VtZSBiaWctZW5kaWFuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxTGVuZ3RoIC0gYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7ICFxLmlzWmVybygpOyBpKyspIHtcbiAgICAgICAgYiA9IHEuYW5kbG4oMHhmZik7XG4gICAgICAgIHEuaXVzaHJuKDgpO1xuXG4gICAgICAgIHJlc1tyZXFMZW5ndGggLSBpIC0gMV0gPSBiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbaV0gPSBiO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJlcUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gJiAoMSA8PCB3Yml0KSkgPj4+IHdiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvLyBOdW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzXG4gIEJOLnByb3RvdHlwZS56ZXJvQml0cyA9IGZ1bmN0aW9uIHplcm9CaXRzICgpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIDA7XG5cbiAgICB2YXIgciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO1xuICAgICAgciArPSBiO1xuICAgICAgaWYgKGIgIT09IDI2KSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGggPSBmdW5jdGlvbiBieXRlTGVuZ3RoICgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkgLyA4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9Ud29zID0gZnVuY3Rpb24gdG9Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21Ud29zID0gZnVuY3Rpb24gZnJvbVR3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMudGVzdG4od2lkdGggLSAxKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uIGlzTmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZSAhPT0gMDtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5lZygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbmVnID0gZnVuY3Rpb24gaW5lZyAoKSB7XG4gICAgaWYgKCF0aGlzLmlzWmVybygpKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1b3IgPSBmdW5jdGlvbiBpdW9yIChudW0pIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV0gfCBudW0ud29yZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYW5kID0gZnVuY3Rpb24gaWFuZCAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVhbmQobnVtKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhbmQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVhbmQgPSBmdW5jdGlvbiB1YW5kIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1YW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1YW5kKHRoaXMpO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXV4b3IgPSBmdW5jdGlvbiBpdXhvciAobnVtKSB7XG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhO1xuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV0gXiBiLndvcmRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0aGlzICE9PSBhKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLml4b3IgPSBmdW5jdGlvbiBpeG9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXhvcihudW0pO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYFxuICBCTi5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXhvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXhvciA9IGZ1bmN0aW9uIHV4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXV4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXV4b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gTm90IGBgdGhpc2BgIHdpdGggYGB3aWR0aGBgIGJpdHdpZHRoXG4gIEJOLnByb3RvdHlwZS5pbm90biA9IGZ1bmN0aW9uIGlub3RuICh3aWR0aCkge1xuICAgIGFzc2VydCh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInICYmIHdpZHRoID49IDApO1xuXG4gICAgdmFyIGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKHdpZHRoIC8gMjYpIHwgMDtcbiAgICB2YXIgYml0c0xlZnQgPSB3aWR0aCAlIDI2O1xuXG4gICAgLy8gRXh0ZW5kIHRoZSBidWZmZXIgd2l0aCBsZWFkaW5nIHplcm9lc1xuICAgIHRoaXMuX2V4cGFuZChieXRlc05lZWRlZCk7XG5cbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICBieXRlc05lZWRlZC0tO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb21wbGV0ZSB3b3Jkc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgcmVzaWR1ZVxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmICgweDNmZmZmZmYgPj4gKDI2IC0gYml0c0xlZnQpKTtcbiAgICB9XG5cbiAgICAvLyBBbmQgcmVtb3ZlIGxlYWRpbmcgemVyb2VzXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubm90biA9IGZ1bmN0aW9uIG5vdG4gKHdpZHRoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCk7XG4gIH07XG5cbiAgLy8gU2V0IGBiaXRgIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc2V0biA9IGZ1bmN0aW9uIHNldG4gKGJpdCwgdmFsKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcblxuICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgdGhpcy5fZXhwYW5kKG9mZiArIDEpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdIHwgKDEgPDwgd2JpdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSAmIH4oMSA8PCB3Yml0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChudW0pIHtcbiAgICB2YXIgcjtcblxuICAgIC8vIG5lZ2F0aXZlICsgcG9zaXRpdmVcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG5cbiAgICAvLyBwb3NpdGl2ZSArIG5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBhLmxlbmd0aCA+IGIubGVuZ3RoXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGhdID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIC8vIENvcHkgdGhlIHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgfSBlbHNlIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChudW0pIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDAgJiYgdGhpcy5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IHRoaXMuc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmIChudW0ubmVnYXRpdmUgPT09IDAgJiYgdGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSBudW0uc3ViKHRoaXMpO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZChudW0pO1xuXG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhZGQodGhpcyk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChudW0pIHtcbiAgICAvLyB0aGlzIC0gKC1udW0pID0gdGhpcyArIG51bVxuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICB2YXIgciA9IHRoaXMuaWFkZChudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gLXRoaXMgLSBudW0gPSAtKHRoaXMgKyBudW0pXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZChudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmVcbiAgICB2YXIgY21wID0gdGhpcy5jbXAobnVtKTtcblxuICAgIC8vIE9wdGltaXphdGlvbiAtIHplcm9pZnlcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gYSA+IGJcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoY21wID4gMCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApIC0gKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIENvcHkgcmVzdCBvZiB0aGUgd29yZHNcbiAgICBpZiAoY2FycnkgPT09IDAgJiYgaSA8IGEubGVuZ3RoICYmIGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpKTtcblxuICAgIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNtYWxsTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICB2YXIgbGVuID0gKHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aCkgfCAwO1xuICAgIG91dC5sZW5ndGggPSBsZW47XG4gICAgbGVuID0gKGxlbiAtIDEpIHwgMDtcblxuICAgIC8vIFBlZWwgb25lIGl0ZXJhdGlvbiAoY29tcGlsZXIgY2FuJ3QgZG8gaXQsIGJlY2F1c2Ugb2YgY29kZSBjb21wbGV4aXR5KVxuICAgIHZhciBhID0gc2VsZi53b3Jkc1swXSB8IDA7XG4gICAgdmFyIGIgPSBudW0ud29yZHNbMF0gfCAwO1xuICAgIHZhciByID0gYSAqIGI7XG5cbiAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgIHZhciBjYXJyeSA9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgb3V0LndvcmRzWzBdID0gbG87XG5cbiAgICBmb3IgKHZhciBrID0gMTsgayA8IGxlbjsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGNhcnJ5ID4+PiAyNjtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gKGsgLSBqKSB8IDA7XG4gICAgICAgIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHIgPSBhICogYiArIHJ3b3JkO1xuICAgICAgICBuY2FycnkgKz0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgICAgcndvcmQgPSByICYgMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQgfCAwO1xuICAgICAgY2FycnkgPSBuY2FycnkgfCAwO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5IHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuc3RyaXAoKTtcbiAgfVxuXG4gIC8vIFRPRE8oaW5kdXRueSk6IGl0IG1heSBiZSByZWFzb25hYmxlIHRvIG9taXQgaXQgZm9yIHVzZXJzIHdobyBkb24ndCBuZWVkXG4gIC8vIHRvIHdvcmsgd2l0aCAyNTYtYml0IG51bWJlcnMsIG90aGVyd2lzZSBpdCBnaXZlcyAyMCUgaW1wcm92ZW1lbnQgZm9yIDI1Ni1iaXRcbiAgLy8gbXVsdGlwbGljYXRpb24gKGxpa2UgZWxsaXB0aWMgc2VjcDI1NmsxKS5cbiAgdmFyIGNvbWIxME11bFRvID0gZnVuY3Rpb24gY29tYjEwTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgdmFyIGEgPSBzZWxmLndvcmRzO1xuICAgIHZhciBiID0gbnVtLndvcmRzO1xuICAgIHZhciBvID0gb3V0LndvcmRzO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgbG87XG4gICAgdmFyIG1pZDtcbiAgICB2YXIgaGk7XG4gICAgdmFyIGEwID0gYVswXSB8IDA7XG4gICAgdmFyIGFsMCA9IGEwICYgMHgxZmZmO1xuICAgIHZhciBhaDAgPSBhMCA+Pj4gMTM7XG4gICAgdmFyIGExID0gYVsxXSB8IDA7XG4gICAgdmFyIGFsMSA9IGExICYgMHgxZmZmO1xuICAgIHZhciBhaDEgPSBhMSA+Pj4gMTM7XG4gICAgdmFyIGEyID0gYVsyXSB8IDA7XG4gICAgdmFyIGFsMiA9IGEyICYgMHgxZmZmO1xuICAgIHZhciBhaDIgPSBhMiA+Pj4gMTM7XG4gICAgdmFyIGEzID0gYVszXSB8IDA7XG4gICAgdmFyIGFsMyA9IGEzICYgMHgxZmZmO1xuICAgIHZhciBhaDMgPSBhMyA+Pj4gMTM7XG4gICAgdmFyIGE0ID0gYVs0XSB8IDA7XG4gICAgdmFyIGFsNCA9IGE0ICYgMHgxZmZmO1xuICAgIHZhciBhaDQgPSBhNCA+Pj4gMTM7XG4gICAgdmFyIGE1ID0gYVs1XSB8IDA7XG4gICAgdmFyIGFsNSA9IGE1ICYgMHgxZmZmO1xuICAgIHZhciBhaDUgPSBhNSA+Pj4gMTM7XG4gICAgdmFyIGE2ID0gYVs2XSB8IDA7XG4gICAgdmFyIGFsNiA9IGE2ICYgMHgxZmZmO1xuICAgIHZhciBhaDYgPSBhNiA+Pj4gMTM7XG4gICAgdmFyIGE3ID0gYVs3XSB8IDA7XG4gICAgdmFyIGFsNyA9IGE3ICYgMHgxZmZmO1xuICAgIHZhciBhaDcgPSBhNyA+Pj4gMTM7XG4gICAgdmFyIGE4ID0gYVs4XSB8IDA7XG4gICAgdmFyIGFsOCA9IGE4ICYgMHgxZmZmO1xuICAgIHZhciBhaDggPSBhOCA+Pj4gMTM7XG4gICAgdmFyIGE5ID0gYVs5XSB8IDA7XG4gICAgdmFyIGFsOSA9IGE5ICYgMHgxZmZmO1xuICAgIHZhciBhaDkgPSBhOSA+Pj4gMTM7XG4gICAgdmFyIGIwID0gYlswXSB8IDA7XG4gICAgdmFyIGJsMCA9IGIwICYgMHgxZmZmO1xuICAgIHZhciBiaDAgPSBiMCA+Pj4gMTM7XG4gICAgdmFyIGIxID0gYlsxXSB8IDA7XG4gICAgdmFyIGJsMSA9IGIxICYgMHgxZmZmO1xuICAgIHZhciBiaDEgPSBiMSA+Pj4gMTM7XG4gICAgdmFyIGIyID0gYlsyXSB8IDA7XG4gICAgdmFyIGJsMiA9IGIyICYgMHgxZmZmO1xuICAgIHZhciBiaDIgPSBiMiA+Pj4gMTM7XG4gICAgdmFyIGIzID0gYlszXSB8IDA7XG4gICAgdmFyIGJsMyA9IGIzICYgMHgxZmZmO1xuICAgIHZhciBiaDMgPSBiMyA+Pj4gMTM7XG4gICAgdmFyIGI0ID0gYls0XSB8IDA7XG4gICAgdmFyIGJsNCA9IGI0ICYgMHgxZmZmO1xuICAgIHZhciBiaDQgPSBiNCA+Pj4gMTM7XG4gICAgdmFyIGI1ID0gYls1XSB8IDA7XG4gICAgdmFyIGJsNSA9IGI1ICYgMHgxZmZmO1xuICAgIHZhciBiaDUgPSBiNSA+Pj4gMTM7XG4gICAgdmFyIGI2ID0gYls2XSB8IDA7XG4gICAgdmFyIGJsNiA9IGI2ICYgMHgxZmZmO1xuICAgIHZhciBiaDYgPSBiNiA+Pj4gMTM7XG4gICAgdmFyIGI3ID0gYls3XSB8IDA7XG4gICAgdmFyIGJsNyA9IGI3ICYgMHgxZmZmO1xuICAgIHZhciBiaDcgPSBiNyA+Pj4gMTM7XG4gICAgdmFyIGI4ID0gYls4XSB8IDA7XG4gICAgdmFyIGJsOCA9IGI4ICYgMHgxZmZmO1xuICAgIHZhciBiaDggPSBiOCA+Pj4gMTM7XG4gICAgdmFyIGI5ID0gYls5XSB8IDA7XG4gICAgdmFyIGJsOSA9IGI5ICYgMHgxZmZmO1xuICAgIHZhciBiaDkgPSBiOSA+Pj4gMTM7XG5cbiAgICBvdXQubmVnYXRpdmUgPSBzZWxmLm5lZ2F0aXZlIF4gbnVtLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSAxOTtcbiAgICAvKiBrID0gMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwwLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgwLCBiaDApO1xuICAgIHZhciB3MCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzAgPj4+IDI2KSkgfCAwO1xuICAgIHcwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwxLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgxLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMSkpIHwgMDtcbiAgICB2YXIgdzEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxID4+PiAyNikpIHwgMDtcbiAgICB3MSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDIsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgyKSkgfCAwO1xuICAgIHZhciB3MiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzIgPj4+IDI2KSkgfCAwO1xuICAgIHcyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwzLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgzLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgzKSkgfCAwO1xuICAgIHZhciB3MyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzMgPj4+IDI2KSkgfCAwO1xuICAgIHczICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw0LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg0LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNCkpIHwgMDtcbiAgICB2YXIgdzQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc0ID4+PiAyNikpIHwgMDtcbiAgICB3NCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDUsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg1KSkgfCAwO1xuICAgIHZhciB3NSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzUgPj4+IDI2KSkgfCAwO1xuICAgIHc1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw2LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg2LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg2KSkgfCAwO1xuICAgIHZhciB3NiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzYgPj4+IDI2KSkgfCAwO1xuICAgIHc2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw3LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg3LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNykpIHwgMDtcbiAgICB2YXIgdzcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc3ID4+PiAyNikpIHwgMDtcbiAgICB3NyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDgsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg4KSkgfCAwO1xuICAgIHZhciB3OCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzggPj4+IDI2KSkgfCAwO1xuICAgIHc4ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg5KSkgfCAwO1xuICAgIHZhciB3OSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzkgPj4+IDI2KSkgfCAwO1xuICAgIHc5ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgxKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwxKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgxKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMCA+Pj4gMjYpKSB8IDA7XG4gICAgdzEwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgyKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwyKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgyKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzExID4+PiAyNikpIHwgMDtcbiAgICB3MTEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwzKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDMpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDMpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDMpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMiA+Pj4gMjYpKSB8IDA7XG4gICAgdzEyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg0KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw0KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg0KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMyA+Pj4gMjYpKSB8IDA7XG4gICAgdzEzICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg1KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw1KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg1KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE0ID4+PiAyNikpIHwgMDtcbiAgICB3MTQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw2KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDYpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDYpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDYpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNSA+Pj4gMjYpKSB8IDA7XG4gICAgdzE1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg3KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw3KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg3KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNiA+Pj4gMjYpKSB8IDA7XG4gICAgdzE2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg4KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw4KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg4KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE3ID4+PiAyNikpIHwgMDtcbiAgICB3MTcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw5KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDkpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDkpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDkpO1xuICAgIHZhciB3MTggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxOCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE4ICY9IDB4M2ZmZmZmZjtcbiAgICBvWzBdID0gdzA7XG4gICAgb1sxXSA9IHcxO1xuICAgIG9bMl0gPSB3MjtcbiAgICBvWzNdID0gdzM7XG4gICAgb1s0XSA9IHc0O1xuICAgIG9bNV0gPSB3NTtcbiAgICBvWzZdID0gdzY7XG4gICAgb1s3XSA9IHc3O1xuICAgIG9bOF0gPSB3ODtcbiAgICBvWzldID0gdzk7XG4gICAgb1sxMF0gPSB3MTA7XG4gICAgb1sxMV0gPSB3MTE7XG4gICAgb1sxMl0gPSB3MTI7XG4gICAgb1sxM10gPSB3MTM7XG4gICAgb1sxNF0gPSB3MTQ7XG4gICAgb1sxNV0gPSB3MTU7XG4gICAgb1sxNl0gPSB3MTY7XG4gICAgb1sxN10gPSB3MTc7XG4gICAgb1sxOF0gPSB3MTg7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgIG9bMTldID0gYztcbiAgICAgIG91dC5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvLyBQb2x5ZmlsbCBjb21iXG4gIGlmICghTWF0aC5pbXVsKSB7XG4gICAgY29tYjEwTXVsVG8gPSBzbWFsbE11bFRvO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICB2YXIgaG5jYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBvdXQubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgICBobmNhcnJ5ID0gMDtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gayAtIGo7XG4gICAgICAgIHZhciBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIHZhciBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgdmFyIHIgPSBhICogYjtcblxuICAgICAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKChyIC8gMHg0MDAwMDAwKSB8IDApKSB8IDA7XG4gICAgICAgIGxvID0gKGxvICsgcndvcmQpIHwgMDtcbiAgICAgICAgcndvcmQgPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArIChsbyA+Pj4gMjYpKSB8IDA7XG5cbiAgICAgICAgaG5jYXJyeSArPSBuY2FycnkgPj4+IDI2O1xuICAgICAgICBuY2FycnkgJj0gMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQ7XG4gICAgICBjYXJyeSA9IG5jYXJyeTtcbiAgICAgIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2Fycnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1ib011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBmZnRtID0gbmV3IEZGVE0oKTtcbiAgICByZXR1cm4gZmZ0bS5tdWxwKHNlbGYsIG51bSwgb3V0KTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5tdWxUbyA9IGZ1bmN0aW9uIG11bFRvIChudW0sIG91dCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aDtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEwICYmIG51bS5sZW5ndGggPT09IDEwKSB7XG4gICAgICByZXMgPSBjb21iMTBNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCA2Mykge1xuICAgICAgcmVzID0gc21hbGxNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCAxMDI0KSB7XG4gICAgICByZXMgPSBiaWdNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBmb3IgRkZUXG4gIC8vIHNsaWdodGx5IHJldmlzaXRlZCB0byByZWx5IG9uIGxvb3BpbmcgaW5zdGVhZCBvZiByZWN1cnNpb25cblxuICBmdW5jdGlvbiBGRlRNICh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgRkZUTS5wcm90b3R5cGUubWFrZVJCVCA9IGZ1bmN0aW9uIG1ha2VSQlQgKE4pIHtcbiAgICB2YXIgdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbCA9IEJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pIC0gMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdFtpXSA9IHRoaXMucmV2QmluKGksIGwsIE4pO1xuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYmluYXJ5LXJldmVyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGB4YFxuICBGRlRNLnByb3RvdHlwZS5yZXZCaW4gPSBmdW5jdGlvbiByZXZCaW4gKHgsIGwsIE4pIHtcbiAgICBpZiAoeCA9PT0gMCB8fCB4ID09PSBOIC0gMSkgcmV0dXJuIHg7XG5cbiAgICB2YXIgcmIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICByYiB8PSAoeCAmIDEpIDw8IChsIC0gaSAtIDEpO1xuICAgICAgeCA+Pj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmI7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgXCJ0d2VlZGxpbmdcIiBwaGFzZSwgdGhlcmVmb3JlICdlbXVsYXRpbmcnXG4gIC8vIGJlaGF2aW91ciBvZiB0aGUgcmVjdXJzaXZlIGFsZ29yaXRobVxuICBGRlRNLnByb3RvdHlwZS5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZSAocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBydHdzW2ldID0gcndzW3JidFtpXV07XG4gICAgICBpdHdzW2ldID0gaXdzW3JidFtpXV07XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSAocndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4sIHJidCkge1xuICAgIHRoaXMucGVybXV0ZShyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKTtcblxuICAgIGZvciAodmFyIHMgPSAxOyBzIDwgTjsgcyA8PD0gMSkge1xuICAgICAgdmFyIGwgPSBzIDw8IDE7XG5cbiAgICAgIHZhciBydHdkZiA9IE1hdGguY29zKDIgKiBNYXRoLlBJIC8gbCk7XG4gICAgICB2YXIgaXR3ZGYgPSBNYXRoLnNpbigyICogTWF0aC5QSSAvIGwpO1xuXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IE47IHAgKz0gbCkge1xuICAgICAgICB2YXIgcnR3ZGZfID0gcnR3ZGY7XG4gICAgICAgIHZhciBpdHdkZl8gPSBpdHdkZjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHM7IGorKykge1xuICAgICAgICAgIHZhciByZSA9IHJ0d3NbcCArIGpdO1xuICAgICAgICAgIHZhciBpZSA9IGl0d3NbcCArIGpdO1xuXG4gICAgICAgICAgdmFyIHJvID0gcnR3c1twICsgaiArIHNdO1xuICAgICAgICAgIHZhciBpbyA9IGl0d3NbcCArIGogKyBzXTtcblxuICAgICAgICAgIHZhciByeCA9IHJ0d2RmXyAqIHJvIC0gaXR3ZGZfICogaW87XG5cbiAgICAgICAgICBpbyA9IHJ0d2RmXyAqIGlvICsgaXR3ZGZfICogcm87XG4gICAgICAgICAgcm8gPSByeDtcblxuICAgICAgICAgIHJ0d3NbcCArIGpdID0gcmUgKyBybztcbiAgICAgICAgICBpdHdzW3AgKyBqXSA9IGllICsgaW87XG5cbiAgICAgICAgICBydHdzW3AgKyBqICsgc10gPSByZSAtIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGogKyBzXSA9IGllIC0gaW87XG5cbiAgICAgICAgICAvKiBqc2hpbnQgbWF4ZGVwdGggOiBmYWxzZSAqL1xuICAgICAgICAgIGlmIChqICE9PSBsKSB7XG4gICAgICAgICAgICByeCA9IHJ0d2RmICogcnR3ZGZfIC0gaXR3ZGYgKiBpdHdkZl87XG5cbiAgICAgICAgICAgIGl0d2RmXyA9IHJ0d2RmICogaXR3ZGZfICsgaXR3ZGYgKiBydHdkZl87XG4gICAgICAgICAgICBydHdkZl8gPSByeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2IgPSBmdW5jdGlvbiBndWVzc0xlbjEzYiAobiwgbSkge1xuICAgIHZhciBOID0gTWF0aC5tYXgobSwgbikgfCAxO1xuICAgIHZhciBvZGQgPSBOICYgMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yIChOID0gTiAvIDIgfCAwOyBOOyBOID0gTiA+Pj4gMSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAxIDw8IGkgKyAxICsgb2RkO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIGNvbmp1Z2F0ZSAocndzLCBpd3MsIE4pIHtcbiAgICBpZiAoTiA8PSAxKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB0ID0gcndzW2ldO1xuXG4gICAgICByd3NbaV0gPSByd3NbTiAtIGkgLSAxXTtcbiAgICAgIHJ3c1tOIC0gaSAtIDFdID0gdDtcblxuICAgICAgdCA9IGl3c1tpXTtcblxuICAgICAgaXdzW2ldID0gLWl3c1tOIC0gaSAtIDFdO1xuICAgICAgaXdzW04gLSBpIC0gMV0gPSAtdDtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiID0gZnVuY3Rpb24gbm9ybWFsaXplMTNiICh3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdyA9IE1hdGgucm91bmQod3NbMiAqIGkgKyAxXSAvIE4pICogMHgyMDAwICtcbiAgICAgICAgTWF0aC5yb3VuZCh3c1syICogaV0gLyBOKSArXG4gICAgICAgIGNhcnJ5O1xuXG4gICAgICB3c1tpXSA9IHcgJiAweDNmZmZmZmY7XG5cbiAgICAgIGlmICh3IDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gdyAvIDB4NDAwMDAwMCB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdzO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2IgPSBmdW5jdGlvbiBjb252ZXJ0MTNiICh3cywgbGVuLCByd3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhcnJ5ID0gY2FycnkgKyAod3NbaV0gfCAwKTtcblxuICAgICAgcndzWzIgKiBpXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICAgIHJ3c1syICogaSArIDFdID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgIH1cblxuICAgIC8vIFBhZCB3aXRoIHplcm9lc1xuICAgIGZvciAoaSA9IDIgKiBsZW47IGkgPCBOOyArK2kpIHtcbiAgICAgIHJ3c1tpXSA9IDA7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAwKTtcbiAgICBhc3NlcnQoKGNhcnJ5ICYgfjB4MWZmZikgPT09IDApO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnN0dWIgPSBmdW5jdGlvbiBzdHViIChOKSB7XG4gICAgdmFyIHBoID0gbmV3IEFycmF5KE4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBwaFtpXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBoO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm11bHAgPSBmdW5jdGlvbiBtdWxwICh4LCB5LCBvdXQpIHtcbiAgICB2YXIgTiA9IDIgKiB0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLCB5Lmxlbmd0aCk7XG5cbiAgICB2YXIgcmJ0ID0gdGhpcy5tYWtlUkJUKE4pO1xuXG4gICAgdmFyIF8gPSB0aGlzLnN0dWIoTik7XG5cbiAgICB2YXIgcndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciByd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBpd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIG5yd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5yd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBuaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBybXdzID0gb3V0LndvcmRzO1xuICAgIHJtd3MubGVuZ3RoID0gTjtcblxuICAgIHRoaXMuY29udmVydDEzYih4LndvcmRzLCB4Lmxlbmd0aCwgcndzLCBOKTtcbiAgICB0aGlzLmNvbnZlcnQxM2IoeS53b3JkcywgeS5sZW5ndGgsIG5yd3MsIE4pO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0ocndzLCBfLCByd3N0LCBpd3N0LCBOLCByYnQpO1xuICAgIHRoaXMudHJhbnNmb3JtKG5yd3MsIF8sIG5yd3N0LCBuaXdzdCwgTiwgcmJ0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB2YXIgcnggPSByd3N0W2ldICogbnJ3c3RbaV0gLSBpd3N0W2ldICogbml3c3RbaV07XG4gICAgICBpd3N0W2ldID0gcndzdFtpXSAqIG5pd3N0W2ldICsgaXdzdFtpXSAqIG5yd3N0W2ldO1xuICAgICAgcndzdFtpXSA9IHJ4O1xuICAgIH1cblxuICAgIHRoaXMuY29uanVnYXRlKHJ3c3QsIGl3c3QsIE4pO1xuICAgIHRoaXMudHJhbnNmb3JtKHJ3c3QsIGl3c3QsIHJtd3MsIF8sIE4sIHJidCk7XG4gICAgdGhpcy5jb25qdWdhdGUocm13cywgXywgTik7XG4gICAgdGhpcy5ub3JtYWxpemUxM2Iocm13cywgTik7XG5cbiAgICBvdXQubmVnYXRpdmUgPSB4Lm5lZ2F0aXZlIF4geS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0geC5sZW5ndGggKyB5Lmxlbmd0aDtcbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgYHRoaXNgIGJ5IGBudW1gXG4gIEJOLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMubXVsVG8obnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGVtcGxveWluZyBGRlRcbiAgQk4ucHJvdG90eXBlLm11bGYgPSBmdW5jdGlvbiBtdWxmIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBNdWx0aXBsaWNhdGlvblxuICBCTi5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLCB0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW11bG4gPSBmdW5jdGlvbiBpbXVsbiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcblxuICAgIC8vIENhcnJ5XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSAqIG51bTtcbiAgICAgIHZhciBsbyA9ICh3ICYgMHgzZmZmZmZmKSArIChjYXJyeSAmIDB4M2ZmZmZmZik7XG4gICAgICBjYXJyeSA+Pj0gMjY7XG4gICAgICBjYXJyeSArPSAodyAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgLy8gTk9URTogbG8gaXMgMjdiaXQgbWF4aW11bVxuICAgICAgY2FycnkgKz0gbG8gPj4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubXVsbiA9IGZ1bmN0aW9uIG11bG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKHRoaXMpO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKTtcbiAgfTtcblxuICAvLyBNYXRoLnBvdyhgdGhpc2AsIGBudW1gKVxuICBCTi5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChudW0pIHtcbiAgICB2YXIgdyA9IHRvQml0QXJyYXkobnVtKTtcbiAgICBpZiAody5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQk4oMSk7XG5cbiAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzXG4gICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3Lmxlbmd0aDsgaSsrLCByZXMgPSByZXMuc3FyKCkpIHtcbiAgICAgIGlmICh3W2ldICE9PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoKytpIDwgdy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIHEgPSByZXMuc3FyKCk7IGkgPCB3Lmxlbmd0aDsgaSsrLCBxID0gcS5zcXIoKSkge1xuICAgICAgICBpZiAod1tpXSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gcmVzLm11bChxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnQgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1c2hsbiA9IGZ1bmN0aW9uIGl1c2hsbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcbiAgICB2YXIgY2FycnlNYXNrID0gKDB4M2ZmZmZmZiA+Pj4gKDI2IC0gcikpIDw8ICgyNiAtIHIpO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZXdDYXJyeSA9IHRoaXMud29yZHNbaV0gJiBjYXJyeU1hc2s7XG4gICAgICAgIHZhciBjID0gKCh0aGlzLndvcmRzW2ldIHwgMCkgLSBuZXdDYXJyeSkgPDwgcjtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGMgfCBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBuZXdDYXJyeSA+Pj4gKDI2IC0gcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXJyeSkge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMgIT09IDApIHtcbiAgICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgc10gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCArPSBzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaGxuID0gZnVuY3Rpb24gaXNobG4gKGJpdHMpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0IGluLXBsYWNlXG4gIC8vIE5PVEU6IGBoaW50YCBpcyBhIGxvd2VzdCBiaXQgYmVmb3JlIHRyYWlsaW5nIHplcm9lc1xuICAvLyBOT1RFOiBpZiBgZXh0ZW5kZWRgIGlzIHByZXNlbnQgLSBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGRlc3Ryb3llZCBiaXRzXG4gIEJOLnByb3RvdHlwZS5pdXNocm4gPSBmdW5jdGlvbiBpdXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciBoO1xuICAgIGlmIChoaW50KSB7XG4gICAgICBoID0gKGhpbnQgLSAoaGludCAlIDI2KSkgLyAyNjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSBNYXRoLm1pbigoYml0cyAtIHIpIC8gMjYsIHRoaXMubGVuZ3RoKTtcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICB2YXIgbWFza2VkV29yZHMgPSBleHRlbmRlZDtcblxuICAgIGggLT0gcztcbiAgICBoID0gTWF0aC5tYXgoMCwgaCk7XG5cbiAgICAvLyBFeHRlbmRlZCBtb2RlLCBjb3B5IG1hc2tlZCBwYXJ0XG4gICAgaWYgKG1hc2tlZFdvcmRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICBtYXNrZWRXb3Jkcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG4gICAgICBtYXNrZWRXb3Jkcy5sZW5ndGggPSBzO1xuICAgIH1cblxuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAvLyBOby1vcCwgd2Ugc2hvdWxkIG5vdCBtb3ZlIGFueXRoaW5nIGF0IGFsbFxuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiBzKSB7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaSArIHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIChjYXJyeSAhPT0gMCB8fCBpID49IGgpOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKGNhcnJ5IDw8ICgyNiAtIHIpKSB8ICh3b3JkID4+PiByKTtcbiAgICAgIGNhcnJ5ID0gd29yZCAmIG1hc2s7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBjYXJyaWVkIGJpdHMgYXMgYSBtYXNrXG4gICAgaWYgKG1hc2tlZFdvcmRzICYmIGNhcnJ5ICE9PSAwKSB7XG4gICAgICBtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaHJuID0gZnVuY3Rpb24gaXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hybihiaXRzLCBoaW50LCBleHRlbmRlZCk7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdFxuICBCTi5wcm90b3R5cGUuc2hsbiA9IGZ1bmN0aW9uIHNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hsbiA9IGZ1bmN0aW9uIHVzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHRcbiAgQk4ucHJvdG90eXBlLnNocm4gPSBmdW5jdGlvbiBzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNocm4gPSBmdW5jdGlvbiB1c2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFRlc3QgaWYgbiBiaXQgaXMgc2V0XG4gIEJOLnByb3RvdHlwZS50ZXN0biA9IGZ1bmN0aW9uIHRlc3RuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGJpdCBhbmQgcmV0dXJuXG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3NdO1xuXG4gICAgcmV0dXJuICEhKHcgJiBxKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gb25seSBsb3dlcnMgYml0cyBvZiBudW1iZXIgKGluLXBsYWNlKVxuICBCTi5wcm90b3R5cGUuaW1hc2tuID0gZnVuY3Rpb24gaW1hc2tuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMnKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPCBudW0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSA9IG51bSAtICh0aGlzLndvcmRzWzBdIHwgMCk7XG4gICAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlzdWJuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRob3V0IGNoZWNrc1xuICAgIHJldHVybiB0aGlzLl9pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faWFkZG4gPSBmdW5jdGlvbiBfaWFkZG4gKG51bSkge1xuICAgIHRoaXMud29yZHNbMF0gKz0gbnVtO1xuXG4gICAgLy8gQ2FycnlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPj0gMHg0MDAwMDAwOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gLT0gMHg0MDAwMDAwO1xuICAgICAgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpICsgMSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBwbGFpbiBudW1iZXIgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlzdWJuID0gZnVuY3Rpb24gaXN1Ym4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlhZGRuKC1udW0pO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkbihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndvcmRzWzBdIC09IG51bTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdIDwgMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IC10aGlzLndvcmRzWzBdO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhcnJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPCAwOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSArPSAweDQwMDAwMDA7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdIC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5zdHJpcCgpO1xuXG4gICAgLy8gU3VidHJhY3Rpb24gb3ZlcmZsb3dcbiAgICBhc3NlcnQoY2FycnkgPT09IC0xKTtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAtKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX3dvcmREaXYgPSBmdW5jdGlvbiBfd29yZERpdiAobnVtLCBtb2RlKSB7XG4gICAgdmFyIHNoaWZ0ID0gdGhpcy5sZW5ndGggLSBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW07XG5cbiAgICAvLyBOb3JtYWxpemVcbiAgICB2YXIgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB2YXIgYmhpQml0cyA9IHRoaXMuX2NvdW50Qml0cyhiaGkpO1xuICAgIHNoaWZ0ID0gMjYgLSBiaGlCaXRzO1xuICAgIGlmIChzaGlmdCAhPT0gMCkge1xuICAgICAgYiA9IGIudXNobG4oc2hpZnQpO1xuICAgICAgYS5pdXNobG4oc2hpZnQpO1xuICAgICAgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50XG4gICAgdmFyIG0gPSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICAgIHZhciBxO1xuXG4gICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICBxID0gbmV3IEJOKG51bGwpO1xuICAgICAgcS5sZW5ndGggPSBtICsgMTtcbiAgICAgIHEud29yZHMgPSBuZXcgQXJyYXkocS5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHEud29yZHNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWZmID0gYS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLCAxLCBtKTtcbiAgICBpZiAoZGlmZi5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgYSA9IGRpZmY7XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW21dID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gbSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICB2YXIgcWogPSAoYS53b3Jkc1tiLmxlbmd0aCArIGpdIHwgMCkgKiAweDQwMDAwMDAgK1xuICAgICAgICAoYS53b3Jkc1tiLmxlbmd0aCArIGogLSAxXSB8IDApO1xuXG4gICAgICAvLyBOT1RFOiAocWogLyBiaGkpIGlzICgweDNmZmZmZmYgKiAweDQwMDAwMDAgKyAweDNmZmZmZmYpIC8gMHgyMDAwMDAwIG1heFxuICAgICAgLy8gKDB4N2ZmZmZmZilcbiAgICAgIHFqID0gTWF0aC5taW4oKHFqIC8gYmhpKSB8IDAsIDB4M2ZmZmZmZik7XG5cbiAgICAgIGEuX2lzaGxuc3VibXVsKGIsIHFqLCBqKTtcbiAgICAgIHdoaWxlIChhLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIHFqLS07XG4gICAgICAgIGEubmVnYXRpdmUgPSAwO1xuICAgICAgICBhLl9pc2hsbnN1Ym11bChiLCAxLCBqKTtcbiAgICAgICAgaWYgKCFhLmlzWmVybygpKSB7XG4gICAgICAgICAgYS5uZWdhdGl2ZSBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW2pdID0gcWo7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxKSB7XG4gICAgICBxLnN0cmlwKCk7XG4gICAgfVxuICAgIGEuc3RyaXAoKTtcblxuICAgIC8vIERlbm9ybWFsaXplXG4gICAgaWYgKG1vZGUgIT09ICdkaXYnICYmIHNoaWZ0ICE9PSAwKSB7XG4gICAgICBhLml1c2hybihzaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogcSB8fCBudWxsLFxuICAgICAgbW9kOiBhXG4gICAgfTtcbiAgfTtcblxuICAvLyBOT1RFOiAxKSBgbW9kZWAgY2FuIGJlIHNldCB0byBgbW9kYCB0byByZXF1ZXN0IG1vZCBvbmx5LFxuICAvLyAgICAgICB0byBgZGl2YCB0byByZXF1ZXN0IGRpdiBvbmx5LCBvciBiZSBhYnNlbnQgdG9cbiAgLy8gICAgICAgcmVxdWVzdCBib3RoIGRpdiAmIG1vZFxuICAvLyAgICAgICAyKSBgcG9zaXRpdmVgIGlzIHRydWUgaWYgdW5zaWduZWQgbW9kIGlzIHJlcXVlc3RlZFxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogbmV3IEJOKDApLFxuICAgICAgICBtb2Q6IG5ldyBCTigwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGl2LCBtb2QsIHJlcztcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSAhPT0gJ2RpdicpIHtcbiAgICAgICAgbW9kID0gcmVzLm1vZC5uZWcoKTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIG1vZC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICAgIG1vZC5pYWRkKG51bSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBkaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICAgIGRpdiA9IHJlcy5kaXYubmVnKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IHJlcy5tb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiB0aGlzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcnkgc2hvcnQgcmVkdWN0aW9uXG4gICAgaWYgKG51bS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChtb2RlID09PSAnZGl2Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgICAgbW9kOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSAnbW9kJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogbnVsbCxcbiAgICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiB0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxcbiAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IHIyID09PSAxICYmIGNtcCA9PT0gMCkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwXG4gICAgcmV0dXJuIGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLmRpdi5pc3VibigxKSA6IGRtLmRpdi5pYWRkbigxKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmFicygpO1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiB0aGlzLmFicygpO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW0uY2xvbmUoKTtcbiAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICBiLm5lZ2F0aXZlID0gMDtcblxuICAgIC8vIFJlbW92ZSBjb21tb24gZmFjdG9yIG9mIHR3b1xuICAgIGZvciAodmFyIHNoaWZ0ID0gMDsgYS5pc0V2ZW4oKSAmJiBiLmlzRXZlbigpOyBzaGlmdCsrKSB7XG4gICAgICBhLml1c2hybigxKTtcbiAgICAgIGIuaXVzaHJuKDEpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHdoaWxlIChhLmlzRXZlbigpKSB7XG4gICAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGIuaXNFdmVuKCkpIHtcbiAgICAgICAgYi5pdXNocm4oMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gYS5jbXAoYik7XG4gICAgICBpZiAociA8IDApIHtcbiAgICAgICAgLy8gU3dhcCBgYWAgYW5kIGBiYCB0byBtYWtlIGBhYCBhbHdheXMgYmlnZ2VyIHRoYW4gYGJgXG4gICAgICAgIHZhciB0ID0gYTtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGIgPSB0O1xuICAgICAgfSBlbHNlIGlmIChyID09PSAwIHx8IGIuY21wbigxKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYS5pc3ViKGIpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgcmV0dXJuIGIuaXVzaGxuKHNoaWZ0KTtcbiAgfTtcblxuICAvLyBJbnZlcnQgbnVtYmVyIGluIHRoZSBmaWVsZCBGKG51bSlcbiAgQk4ucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQgKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAxO1xuICB9O1xuXG4gIC8vIEFuZCBmaXJzdCB3b3JkIGFuZCBudW1cbiAgQk4ucHJvdG90eXBlLmFuZGxuID0gZnVuY3Rpb24gYW5kbG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLndvcmRzWzBdICYgbnVtO1xuICB9O1xuXG4gIC8vIEluY3JlbWVudCBhdCB0aGUgYml0IHBvc2l0aW9uIGluLWxpbmVcbiAgQk4ucHJvdG90eXBlLmJpbmNuID0gZnVuY3Rpb24gYmluY24gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgdGhpcy5fZXhwYW5kKHMgKyAxKTtcbiAgICAgIHRoaXMud29yZHNbc10gfD0gcTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBiaXQgYW5kIHByb3BhZ2F0ZSwgaWYgbmVlZGVkXG4gICAgdmFyIGNhcnJ5ID0gcTtcbiAgICBmb3IgKHZhciBpID0gczsgY2FycnkgIT09IDAgJiYgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB3ICs9IGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+PiAyNjtcbiAgICAgIHcgJj0gMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHc7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNtcG4gPSBmdW5jdGlvbiBjbXBuIChudW0pIHtcbiAgICB2YXIgbmVnYXRpdmUgPSBudW0gPCAwO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgIW5lZ2F0aXZlKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbmVnYXRpdmUpIHJldHVybiAxO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgbnVtID0gLW51bTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYsICdOdW1iZXIgaXMgdG9vIGJpZycpO1xuXG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbMF0gfCAwO1xuICAgICAgcmVzID0gdyA9PT0gbnVtID8gMCA6IHcgPCBudW0gPyAtMSA6IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gVW5zaWduZWQgY29tcGFyaXNvblxuICBCTi5wcm90b3R5cGUudWNtcCA9IGZ1bmN0aW9uIHVjbXAgKG51bSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUgc2lnblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHJldHVybiAtMTtcblxuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgYSA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdmFyIGIgPSBudW0ud29yZHNbaV0gfCAwO1xuXG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmVzID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJlcyA9IDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RuID0gZnVuY3Rpb24gZ3RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ID0gZnVuY3Rpb24gZ3QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGVuID0gZnVuY3Rpb24gZ3RlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZSA9IGZ1bmN0aW9uIGd0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRuID0gZnVuY3Rpb24gbHRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdCA9IGZ1bmN0aW9uIGx0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZW4gPSBmdW5jdGlvbiBsdGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlID0gZnVuY3Rpb24gbHRlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcW4gPSBmdW5jdGlvbiBlcW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDA7XG4gIH07XG5cbiAgLy9cbiAgLy8gQSByZWR1Y2UgY29udGV4dCwgY291bGQgYmUgdXNpbmcgbW9udGdvbWVyeSBvciBzb21ldGhpbmcgYmV0dGVyLCBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIGBtYCBpdHNlbGYuXG4gIC8vXG4gIEJOLnJlZCA9IGZ1bmN0aW9uIHJlZCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWQobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9SZWQgPSBmdW5jdGlvbiB0b1JlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgcmV0dXJuIGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21SZWQgPSBmdW5jdGlvbiBmcm9tUmVkICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fZm9yY2VSZWQgPSBmdW5jdGlvbiBfZm9yY2VSZWQgKGN0eCkge1xuICAgIHRoaXMucmVkID0gY3R4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mb3JjZVJlZCA9IGZ1bmN0aW9uIGZvcmNlUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRBZGQgPSBmdW5jdGlvbiByZWRBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElBZGQgPSBmdW5jdGlvbiByZWRJQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFN1YiA9IGZ1bmN0aW9uIHJlZFN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVN1YiA9IGZ1bmN0aW9uIHJlZElTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU2hsID0gZnVuY3Rpb24gcmVkU2hsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNobCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRNdWwgPSBmdW5jdGlvbiByZWRNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5tdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSU11bCA9IGZ1bmN0aW9uIHJlZElNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNxciA9IGZ1bmN0aW9uIHJlZFNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXIodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTcXIgPSBmdW5jdGlvbiByZWRJU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3FyKHRoaXMpO1xuICB9O1xuXG4gIC8vIFNxdWFyZSByb290IG92ZXIgcFxuICBCTi5wcm90b3R5cGUucmVkU3FydCA9IGZ1bmN0aW9uIHJlZFNxcnQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcnQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEludm0gPSBmdW5jdGlvbiByZWRJbnZtICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbnZtKHRoaXMpO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2AgJSBgcmVkIG1vZHVsb2BcbiAgQk4ucHJvdG90eXBlLnJlZE5lZyA9IGZ1bmN0aW9uIHJlZE5lZyAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5uZWcodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFBvdyA9IGZ1bmN0aW9uIHJlZFBvdyAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkICYmICFudW0ucmVkLCAncmVkUG93KG5vcm1hbE51bSknKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQucG93KHRoaXMsIG51bSk7XG4gIH07XG5cbiAgLy8gUHJpbWUgbnVtYmVycyB3aXRoIGVmZmljaWVudCByZWR1Y3Rpb25cbiAgdmFyIHByaW1lcyA9IHtcbiAgICBrMjU2OiBudWxsLFxuICAgIHAyMjQ6IG51bGwsXG4gICAgcDE5MjogbnVsbCxcbiAgICBwMjU1MTk6IG51bGxcbiAgfTtcblxuICAvLyBQc2V1ZG8tTWVyc2VubmUgcHJpbWVcbiAgZnVuY3Rpb24gTVByaW1lIChuYW1lLCBwKSB7XG4gICAgLy8gUCA9IDIgXiBOIC0gS1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wID0gbmV3IEJOKHAsIDE2KTtcbiAgICB0aGlzLm4gPSB0aGlzLnAuYml0TGVuZ3RoKCk7XG4gICAgdGhpcy5rID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKTtcblxuICAgIHRoaXMudG1wID0gdGhpcy5fdG1wKCk7XG4gIH1cblxuICBNUHJpbWUucHJvdG90eXBlLl90bXAgPSBmdW5jdGlvbiBfdG1wICgpIHtcbiAgICB2YXIgdG1wID0gbmV3IEJOKG51bGwpO1xuICAgIHRtcC53b3JkcyA9IG5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uIC8gMTMpKTtcbiAgICByZXR1cm4gdG1wO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZSA9IGZ1bmN0aW9uIGlyZWR1Y2UgKG51bSkge1xuICAgIC8vIEFzc3VtZXMgdGhhdCBgbnVtYCBpcyBsZXNzIHRoYW4gYFBeMmBcbiAgICAvLyBudW0gPSBISSAqICgyIF4gTiAtIEspICsgSEkgKiBLICsgTE8gPSBISSAqIEsgKyBMTyAobW9kIFApXG4gICAgdmFyIHIgPSBudW07XG4gICAgdmFyIHJsZW47XG5cbiAgICBkbyB7XG4gICAgICB0aGlzLnNwbGl0KHIsIHRoaXMudG1wKTtcbiAgICAgIHIgPSB0aGlzLmltdWxLKHIpO1xuICAgICAgciA9IHIuaWFkZCh0aGlzLnRtcCk7XG4gICAgICBybGVuID0gci5iaXRMZW5ndGgoKTtcbiAgICB9IHdoaWxlIChybGVuID4gdGhpcy5uKTtcblxuICAgIHZhciBjbXAgPSBybGVuIDwgdGhpcy5uID8gLTEgOiByLnVjbXAodGhpcy5wKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByLndvcmRzWzBdID0gMDtcbiAgICAgIHIubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIHIuaXN1Yih0aGlzLnApO1xuICAgIH0gZWxzZSB7XG4gICAgICByLnN0cmlwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0KSB7XG4gICAgaW5wdXQuaXVzaHJuKHRoaXMubiwgMCwgb3V0KTtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIHJldHVybiBudW0uaW11bCh0aGlzLmspO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEsyNTYgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdrMjU2JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicpO1xuICB9XG4gIGluaGVyaXRzKEsyNTYsIE1QcmltZSk7XG5cbiAgSzI1Ni5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dHB1dCkge1xuICAgIC8vIDI1NiA9IDkgKiAyNiArIDIyXG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZjtcblxuICAgIHZhciBvdXRMZW4gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIDkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspIHtcbiAgICAgIG91dHB1dC53b3Jkc1tpXSA9IGlucHV0LndvcmRzW2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3V0TGVuO1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSA5KSB7XG4gICAgICBpbnB1dC53b3Jkc1swXSA9IDA7XG4gICAgICBpbnB1dC5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNoaWZ0IGJ5IDkgbGltYnNcbiAgICB2YXIgcHJldiA9IGlucHV0LndvcmRzWzldO1xuICAgIG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdID0gcHJldiAmIG1hc2s7XG5cbiAgICBmb3IgKGkgPSAxMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IGlucHV0LndvcmRzW2ldIHwgMDtcbiAgICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSAoKG5leHQgJiBtYXNrKSA8PCA0KSB8IChwcmV2ID4+PiAyMik7XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgcHJldiA+Pj49IDIyO1xuICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSBwcmV2O1xuICAgIGlmIChwcmV2ID09PSAwICYmIGlucHV0Lmxlbmd0aCA+IDEwKSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSA5O1xuICAgIH1cbiAgfTtcblxuICBLMjU2LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxMDAwMDAzZDEgPSBbIDB4NDAsIDB4M2QxIF1cbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aF0gPSAwO1xuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoICsgMV0gPSAwO1xuICAgIG51bS5sZW5ndGggKz0gMjtcblxuICAgIC8vIGJvdW5kZWQgYXQ6IDB4NDAgKiAweDNmZmZmZmYgKyAweDNkMCA9IDB4MTAwMDAwMzkwXG4gICAgdmFyIGxvID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSBudW0ud29yZHNbaV0gfCAwO1xuICAgICAgbG8gKz0gdyAqIDB4M2QxO1xuICAgICAgbnVtLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICBsbyA9IHcgKiAweDQwICsgKChsbyAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICB9XG5cbiAgICAvLyBGYXN0IGxlbmd0aCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFAyMjQgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMjI0JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScpO1xuICB9XG4gIGluaGVyaXRzKFAyMjQsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDE5MiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AxOTInLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDE5MiwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMjU1MTkgKCkge1xuICAgIC8vIDIgXiAyNTUgLSAxOVxuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICcyNTUxOScsXG4gICAgICAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcpO1xuICB9XG4gIGluaGVyaXRzKFAyNTUxOSwgTVByaW1lKTtcblxuICBQMjU1MTkucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEzXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhpID0gKG51bS53b3Jkc1tpXSB8IDApICogMHgxMyArIGNhcnJ5O1xuICAgICAgdmFyIGxvID0gaGkgJiAweDNmZmZmZmY7XG4gICAgICBoaSA+Pj49IDI2O1xuXG4gICAgICBudW0ud29yZHNbaV0gPSBsbztcbiAgICAgIGNhcnJ5ID0gaGk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgbnVtLndvcmRzW251bS5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICAvLyBFeHBvcnRlZCBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBwbGFpbiBuYW1lIGluc3RlYWRcbiAgQk4uX3ByaW1lID0gZnVuY3Rpb24gcHJpbWUgKG5hbWUpIHtcbiAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiBwcmltZVxuICAgIGlmIChwcmltZXNbbmFtZV0pIHJldHVybiBwcmltZXNbbmFtZV07XG5cbiAgICB2YXIgcHJpbWU7XG4gICAgaWYgKG5hbWUgPT09ICdrMjU2Jykge1xuICAgICAgcHJpbWUgPSBuZXcgSzI1NigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyMjQnKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjI0KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDE5MicpIHtcbiAgICAgIHByaW1lID0gbmV3IFAxOTIoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjU1MTknKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjU1MTkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1lICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcHJpbWVzW25hbWVdID0gcHJpbWU7XG5cbiAgICByZXR1cm4gcHJpbWU7XG4gIH07XG5cbiAgLy9cbiAgLy8gQmFzZSByZWR1Y3Rpb24gZW5naW5lXG4gIC8vXG4gIGZ1bmN0aW9uIFJlZCAobSkge1xuICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBwcmltZSA9IEJOLl9wcmltZShtKTtcbiAgICAgIHRoaXMubSA9IHByaW1lLnA7XG4gICAgICB0aGlzLnByaW1lID0gcHJpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChtLmd0bigxKSwgJ21vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG4gICAgcmV0dXJuIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBwbmEgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnV0aWwuaW5oZXJpdHMoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gYXZvaWQgc2NvcGUgY3JlZXAsIHRoZSBrZXlzIGFycmF5IGNhbiB0aGVuIGJlIGNvbGxlY3RlZFxuICB2YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbiAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xuICB9XG59XG5cbmZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcblxuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmVhZGFibGUgPT09IGZhbHNlKSB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIG9uZW5kKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcG5hLm5leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblxuRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgdGhpcy5lbmQoKTtcblxuICBwbmEubmV4dFRpY2soY2IsIGVycik7XG59OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgICB9XG4gIH1cbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHx8XG4gIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIHZhciBkZXNjcmlwdG9ycyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVzY3JpcHRvcnNba2V5c1tpXV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgfTtcblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG52YXIga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2woJ3V0aWwucHJvbWlzaWZ5LmN1c3RvbScpIDogdW5kZWZpbmVkO1xuXG5leHBvcnRzLnByb21pc2lmeSA9IGZ1bmN0aW9uIHByb21pc2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9yaWdpbmFsXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7XG5cbiAgaWYgKGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCAmJiBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdKSB7XG4gICAgdmFyIGZuID0gb3JpZ2luYWxba0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXTtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ1dGlsLnByb21pc2lmeS5jdXN0b21cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgZnVuY3Rpb24gZm4oKSB7XG4gICAgdmFyIHByb21pc2VSZXNvbHZlLCBwcm9taXNlUmVqZWN0O1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZnVuY3Rpb24gKGVyciwgdmFsdWUpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGZuLCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKTtcblxuICBpZiAoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwge1xuICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgZm4sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbClcbiAgKTtcbn1cblxuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tID0ga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXG5cbmZ1bmN0aW9uIGNhbGxiYWNraWZ5T25SZWplY3RlZChyZWFzb24sIGNiKSB7XG4gIC8vIGAhcmVhc29uYCBndWFyZCBpbnNwaXJlZCBieSBibHVlYmlyZCAoUmVmOiBodHRwczovL2dvby5nbC90NUlTNk0pLlxuICAvLyBCZWNhdXNlIGBudWxsYCBpcyBhIHNwZWNpYWwgZXJyb3IgdmFsdWUgaW4gY2FsbGJhY2tzIHdoaWNoIG1lYW5zIFwibm8gZXJyb3JcbiAgLy8gb2NjdXJyZWRcIiwgd2UgZXJyb3Itd3JhcCBzbyB0aGUgY2FsbGJhY2sgY29uc3VtZXIgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW5cbiAgLy8gXCJ0aGUgcHJvbWlzZSByZWplY3RlZCB3aXRoIG51bGxcIiBvciBcInRoZSBwcm9taXNlIGZ1bGZpbGxlZCB3aXRoIHVuZGVmaW5lZFwiLlxuICBpZiAoIXJlYXNvbikge1xuICAgIHZhciBuZXdSZWFzb24gPSBuZXcgRXJyb3IoJ1Byb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZScpO1xuICAgIG5ld1JlYXNvbi5yZWFzb24gPSByZWFzb247XG4gICAgcmVhc29uID0gbmV3UmVhc29uO1xuICB9XG4gIHJldHVybiBjYihyZWFzb24pO1xufVxuXG5mdW5jdGlvbiBjYWxsYmFja2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIFdlIERPIE5PVCByZXR1cm4gdGhlIHByb21pc2UgYXMgaXQgZ2l2ZXMgdGhlIHVzZXIgYSBmYWxzZSBzZW5zZSB0aGF0XG4gIC8vIHRoZSBwcm9taXNlIGlzIGFjdHVhbGx5IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgY2FsbGJhY2sncyBleGVjdXRpb25cbiAgLy8gYW5kIHRoYXQgdGhlIGNhbGxiYWNrIHRocm93aW5nIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLlxuICBmdW5jdGlvbiBjYWxsYmFja2lmaWVkKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIHZhciBtYXliZUNiID0gYXJncy5wb3AoKTtcbiAgICBpZiAodHlwZW9mIG1heWJlQ2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNiID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbWF5YmVDYi5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLy8gSW4gdHJ1ZSBub2RlIHN0eWxlIHdlIHByb2Nlc3MgdGhlIGNhbGxiYWNrIG9uIGBuZXh0VGlja2Agd2l0aCBhbGwgdGhlXG4gICAgLy8gaW1wbGljYXRpb25zIChzdGFjaywgYHVuY2F1Z2h0RXhjZXB0aW9uYCwgYGFzeW5jX2hvb2tzYClcbiAgICBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgLnRoZW4oZnVuY3Rpb24ocmV0KSB7IHByb2Nlc3MubmV4dFRpY2soY2IsIG51bGwsIHJldCkgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uKHJlaikgeyBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNraWZ5T25SZWplY3RlZCwgcmVqLCBjYikgfSk7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2FsbGJhY2tpZmllZCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNhbGxiYWNraWZpZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpKTtcbiAgcmV0dXJuIGNhbGxiYWNraWZpZWQ7XG59XG5leHBvcnRzLmNhbGxiYWNraWZ5ID0gY2FsbGJhY2tpZnk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIG1pbkFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBtaW5VdGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcblxudXRpbHMuYXNzZXJ0ID0gbWluQXNzZXJ0O1xudXRpbHMudG9BcnJheSA9IG1pblV0aWxzLnRvQXJyYXk7XG51dGlscy56ZXJvMiA9IG1pblV0aWxzLnplcm8yO1xudXRpbHMudG9IZXggPSBtaW5VdGlscy50b0hleDtcbnV0aWxzLmVuY29kZSA9IG1pblV0aWxzLmVuY29kZTtcblxuLy8gUmVwcmVzZW50IG51bSBpbiBhIHctTkFGIGZvcm1cbmZ1bmN0aW9uIGdldE5BRihudW0sIHcsIGJpdHMpIHtcbiAgdmFyIG5hZiA9IG5ldyBBcnJheShNYXRoLm1heChudW0uYml0TGVuZ3RoKCksIGJpdHMpICsgMSk7XG4gIG5hZi5maWxsKDApO1xuXG4gIHZhciB3cyA9IDEgPDwgKHcgKyAxKTtcbiAgdmFyIGsgPSBudW0uY2xvbmUoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5hZi5sZW5ndGg7IGkrKykge1xuICAgIHZhciB6O1xuICAgIHZhciBtb2QgPSBrLmFuZGxuKHdzIC0gMSk7XG4gICAgaWYgKGsuaXNPZGQoKSkge1xuICAgICAgaWYgKG1vZCA+ICh3cyA+PiAxKSAtIDEpXG4gICAgICAgIHogPSAod3MgPj4gMSkgLSBtb2Q7XG4gICAgICBlbHNlXG4gICAgICAgIHogPSBtb2Q7XG4gICAgICBrLmlzdWJuKHopO1xuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gMDtcbiAgICB9XG5cbiAgICBuYWZbaV0gPSB6O1xuICAgIGsuaXVzaHJuKDEpO1xuICB9XG5cbiAgcmV0dXJuIG5hZjtcbn1cbnV0aWxzLmdldE5BRiA9IGdldE5BRjtcblxuLy8gUmVwcmVzZW50IGsxLCBrMiBpbiBhIEpvaW50IFNwYXJzZSBGb3JtXG5mdW5jdGlvbiBnZXRKU0YoazEsIGsyKSB7XG4gIHZhciBqc2YgPSBbXG4gICAgW10sXG4gICAgW11cbiAgXTtcblxuICBrMSA9IGsxLmNsb25lKCk7XG4gIGsyID0gazIuY2xvbmUoKTtcbiAgdmFyIGQxID0gMDtcbiAgdmFyIGQyID0gMDtcbiAgd2hpbGUgKGsxLmNtcG4oLWQxKSA+IDAgfHwgazIuY21wbigtZDIpID4gMCkge1xuXG4gICAgLy8gRmlyc3QgcGhhc2VcbiAgICB2YXIgbTE0ID0gKGsxLmFuZGxuKDMpICsgZDEpICYgMztcbiAgICB2YXIgbTI0ID0gKGsyLmFuZGxuKDMpICsgZDIpICYgMztcbiAgICBpZiAobTE0ID09PSAzKVxuICAgICAgbTE0ID0gLTE7XG4gICAgaWYgKG0yNCA9PT0gMylcbiAgICAgIG0yNCA9IC0xO1xuICAgIHZhciB1MTtcbiAgICBpZiAoKG0xNCAmIDEpID09PSAwKSB7XG4gICAgICB1MSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMS5hbmRsbig3KSArIGQxKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMjQgPT09IDIpXG4gICAgICAgIHUxID0gLW0xNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTEgPSBtMTQ7XG4gICAgfVxuICAgIGpzZlswXS5wdXNoKHUxKTtcblxuICAgIHZhciB1MjtcbiAgICBpZiAoKG0yNCAmIDEpID09PSAwKSB7XG4gICAgICB1MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMi5hbmRsbig3KSArIGQyKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMTQgPT09IDIpXG4gICAgICAgIHUyID0gLW0yNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTIgPSBtMjQ7XG4gICAgfVxuICAgIGpzZlsxXS5wdXNoKHUyKTtcblxuICAgIC8vIFNlY29uZCBwaGFzZVxuICAgIGlmICgyICogZDEgPT09IHUxICsgMSlcbiAgICAgIGQxID0gMSAtIGQxO1xuICAgIGlmICgyICogZDIgPT09IHUyICsgMSlcbiAgICAgIGQyID0gMSAtIGQyO1xuICAgIGsxLml1c2hybigxKTtcbiAgICBrMi5pdXNocm4oMSk7XG4gIH1cblxuICByZXR1cm4ganNmO1xufVxudXRpbHMuZ2V0SlNGID0gZ2V0SlNGO1xuXG5mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eShvYmosIG5hbWUsIGNvbXB1dGVyKSB7XG4gIHZhciBrZXkgPSAnXycgKyBuYW1lO1xuICBvYmoucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpc1trZXldIDpcbiAgICAgICAgICAgdGhpc1trZXldID0gY29tcHV0ZXIuY2FsbCh0aGlzKTtcbiAgfTtcbn1cbnV0aWxzLmNhY2hlZFByb3BlcnR5ID0gY2FjaGVkUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHBhcnNlQnl0ZXMoYnl0ZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycgPyB1dGlscy50b0FycmF5KGJ5dGVzLCAnaGV4JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzO1xufVxudXRpbHMucGFyc2VCeXRlcyA9IHBhcnNlQnl0ZXM7XG5cbmZ1bmN0aW9uIGludEZyb21MRShieXRlcykge1xuICByZXR1cm4gbmV3IEJOKGJ5dGVzLCAnaGV4JywgJ2xlJyk7XG59XG51dGlscy5pbnRGcm9tTEUgPSBpbnRGcm9tTEU7XG5cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbiAgfVxuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcjtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5pbmhlcml0cyA9IGluaGVyaXRzO1xuXG5mdW5jdGlvbiBpc1N1cnJvZ2F0ZVBhaXIobXNnLCBpKSB7XG4gIGlmICgobXNnLmNoYXJDb2RlQXQoaSkgJiAweEZDMDApICE9PSAweEQ4MDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGkgPCAwIHx8IGkgKyAxID49IG1zZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChtc2cuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDA7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWVuYykge1xuICAgICAgLy8gSW5zcGlyZWQgYnkgc3RyaW5nVG9VdGY4Qnl0ZUFycmF5KCkgaW4gY2xvc3VyZS1saWJyYXJ5IGJ5IEdvb2dsZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi84NTk4ZDg3MjQyYWY1OWFhYzIzMzI3MDc0MmM4OTg0ZTJiMmJkYmUwL2Nsb3N1cmUvZ29vZy9jcnlwdC9jcnlwdC5qcyNMMTE3LUwxNDNcbiAgICAgIC8vIEFwYWNoZSBMaWNlbnNlIDIuMFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWxpYnJhcnkvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICAgICAgdmFyIHAgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAxMjgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IGM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8IDIwNDgpIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDYpIHwgMTkyO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkpIHtcbiAgICAgICAgICBjID0gMHgxMDAwMCArICgoYyAmIDB4MDNGRikgPDwgMTApICsgKG1zZy5jaGFyQ29kZUF0KCsraSkgJiAweDAzRkYpO1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTgpIHwgMjQwO1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDEyKSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc1twKytdID0gKGMgPj4gMTIpIHwgMjI0O1xuICAgICAgICAgIHJlc1twKytdID0gKChjID4+IDYpICYgNjMpIHwgMTI4O1xuICAgICAgICAgIHJlc1twKytdID0gKGMgJiA2MykgfCAxMjg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgICBpZiAobXNnLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbmV4cG9ydHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleDMyID0gdG9IZXgzMjtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbmV4cG9ydHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5qb2luMzIgPSBqb2luMzI7XG5cbmZ1bmN0aW9uIHNwbGl0MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShtc2cubGVuZ3RoICogNCk7XG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIG0gPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICAgIHJlc1trXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDNdID0gbSAmIDB4ZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trICsgM10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2tdID0gbSAmIDB4ZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5leHBvcnRzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG5leHBvcnRzLnJvdGwzMiA9IHJvdGwzMjtcblxuZnVuY3Rpb24gc3VtMzIoYSwgYikge1xuICByZXR1cm4gKGEgKyBiKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl80ID0gc3VtMzJfNDtcblxuZnVuY3Rpb24gc3VtMzJfNShhLCBiLCBjLCBkLCBlKSB7XG4gIHJldHVybiAoYSArIGIgKyBjICsgZCArIGUpID4+PiAwO1xufVxuZXhwb3J0cy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gc3VtNjQoYnVmLCBwb3MsIGFoLCBhbCkge1xuICB2YXIgYmggPSBidWZbcG9zXTtcbiAgdmFyIGJsID0gYnVmW3BvcyArIDFdO1xuXG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICBidWZbcG9zXSA9IGhpID4+PiAwO1xuICBidWZbcG9zICsgMV0gPSBsbztcbn1cbmV4cG9ydHMuc3VtNjQgPSBzdW02NDtcblxuZnVuY3Rpb24gc3VtNjRfaGkoYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzRfaGkgPSBzdW02NF80X2hpO1xuXG5mdW5jdGlvbiBzdW02NF80X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgbG8gPSBhbCArIGJsICsgY2wgKyBkbDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfbG8gPSBzdW02NF81X2xvO1xuXG5mdW5jdGlvbiByb3RyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWwgPDwgKDMyIC0gbnVtKSkgfCAoYWggPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59XG5leHBvcnRzLnNocjY0X2hpID0gc2hyNjRfaGk7XG5cbmZ1bmN0aW9uIHNocjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHsgbmV4dFRpY2s6IG5leHRUaWNrIH07XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3Ncbn1cblxuZnVuY3Rpb24gbmV4dFRpY2soZm4sIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MsIGk7XG4gIHN3aXRjaCAobGVuKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZuKTtcbiAgY2FzZSAyOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja09uZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSk7XG4gICAgfSk7XG4gIGNhc2UgMzpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUd28oKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIpO1xuICAgIH0pO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVGhyZWUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIH0pO1xuICBkZWZhdWx0OlxuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7XG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCkge1xuICAgICAgYXJnc1tpKytdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2soKSB7XG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmluaGVyaXRzKFN0cmVhbSwgRUUpO1xuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzJyk7XG5TdHJlYW0uV3JpdGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMnKTtcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzJyk7XG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcycpO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzJyk7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcmVhZGFibGUuanMnKTtcbmV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cztcbmV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuZXhwb3J0cy5Xcml0YWJsZSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbmV4cG9ydHMuRHVwbGV4ID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbmV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbmV4cG9ydHMuUGFzc1Rocm91Z2ggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzJyk7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIEEgYml0IHNpbXBsZXIgdGhhbiByZWFkYWJsZSBzdHJlYW1zLlxuLy8gSW1wbGVtZW50IGFuIGFzeW5jIC5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYiksIGFuZCBpdCdsbCBoYW5kbGUgYWxsXG4vLyB0aGUgZHJhaW4gZXZlbnQgZW1pc3Npb24gYW5kIGJ1ZmZlcmluZy5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlO1xuXG4vKiA8cmVwbGFjZW1lbnQ+ICovXG5mdW5jdGlvbiBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuY2h1bmsgPSBjaHVuaztcbiAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB0aGlzLmNhbGxiYWNrID0gY2I7XG4gIHRoaXMubmV4dCA9IG51bGw7XG59XG5cbi8vIEl0IHNlZW1zIGEgbGlua2VkIGxpc3QgYnV0IGl0IGlzIG5vdFxuLy8gdGhlcmUgd2lsbCBiZSBvbmx5IDIgb2YgdGhlc2UgZm9yIGVhY2ggc3RyZWFtXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIG9uQ29ya2VkRmluaXNoKF90aGlzLCBzdGF0ZSk7XG4gIH07XG59XG4vKiA8L3JlcGxhY2VtZW50PiAqL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGFzeW5jV3JpdGUgPSAhcHJvY2Vzcy5icm93c2VyICYmIFsndjAuMTAnLCAndjAuOS4nXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLCA1KSkgPiAtMSA/IHNldEltbWVkaWF0ZSA6IHBuYS5uZXh0VGljaztcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbnZhciBPdXJVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXkgfHwgZnVuY3Rpb24gKCkge307XG5mdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShjaHVuayk7XG59XG5mdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgb2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheTtcbn1cblxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBkZXN0cm95SW1wbCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95Jyk7XG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0uXG4gIC8vIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgYXMgcmVhZGFibGVYWFggYW5kIHdyaXRhYmxlWFhYLlxuICB2YXIgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHdyaXRhYmxlSHdtID0gb3B0aW9ucy53cml0YWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAod3JpdGFibGVId20gfHwgd3JpdGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSB3cml0YWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gaWYgX2ZpbmFsIGhhcyBiZWVuIGNhbGxlZFxuICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2U7XG5cbiAgLy8gZHJhaW4gZXZlbnQgZmxhZy5cbiAgdGhpcy5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgLy8gYXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZTtcbiAgLy8gd2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZFxuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuICB2YXIgbm9EZWNvZGUgPSBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlO1xuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGU7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cbiAgdGhpcy5sZW5ndGggPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuXG4gIC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcbiAgdGhpcy5jb3JrZWQgPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG4gIHRoaXMuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcbiAgdGhpcy5vbndyaXRlID0gZnVuY3Rpb24gKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicsICdERVAwMDAzJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgdGhpcztcbiAgfTtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICBpZiAoIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSAmJiAhKHRoaXMgaW5zdGFuY2VvZiBEdXBsZXgpKSB7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRlID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZXYgPSBvcHRpb25zLndyaXRldjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbmFsID09PSAnZnVuY3Rpb24nKSB0aGlzLl9maW5hbCA9IG9wdGlvbnMuZmluYWw7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwbmEubmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgdmFyIGVyID0gZmFsc2U7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwbmEubmV4dFRpY2soY2IsIGVyKTtcbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWxpZDtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcblxuICBpZiAoaXNCdWYgJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3A7XG5cbiAgaWYgKHN0YXRlLmVuZGVkKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIHN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkLS07XG5cbiAgICBpZiAoIXN0YXRlLndyaXRpbmcgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuXG4vLyBpZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAoIWlzQnVmKSB7XG4gICAgdmFyIG5ld0NodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuXG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcG5hLm5leHRUaWNrKGNiLCBlcik7XG4gICAgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuICAgIHBuYS5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjYWxsZXIgZXhwZWN0IHRoaXMgdG8gaGFwcGVuIGJlZm9yZSBpZlxuICAgIC8vIGl0IGlzIGFzeW5jXG4gICAgY2IoZXIpO1xuICAgIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBhbGxCdWZmZXJzID0gdHJ1ZTtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGJ1ZmZlci5hbGxCdWZmZXJzID0gYWxsQnVmZmVycztcblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkgPT09IG51bGwpIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB9XG5cbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHBuYS5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG4gIGlmIChjYikge1xuICAgIGlmIChzdGF0ZS5maW5pc2hlZCkgcG5hLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb25Db3JrZWRGaW5pc2goY29ya1JlcSwgc3RhdGUsIGVycikge1xuICB2YXIgZW50cnkgPSBjb3JrUmVxLmVudHJ5O1xuICBjb3JrUmVxLmVudHJ5ID0gbnVsbDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgY2IoZXJyKTtcbiAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gIH1cbiAgaWYgKHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSkge1xuICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0ID0gY29ya1JlcTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBjb3JrUmVxO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIHdlIGlnbm9yZSB0aGUgdmFsdWUgaWYgdGhlIHN0cmVhbVxuICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdGhpcy5lbmQoKTtcbiAgY2IoZXJyKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBhc3NlcnQ7XG5cbmZ1bmN0aW9uIGFzc2VydCh2YWwsIG1zZykge1xuICBpZiAoIXZhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG59XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGFzc2VydEVxdWFsKGwsIHIsIG1zZykge1xuICBpZiAobCAhPSByKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgKCdBc3NlcnRpb24gZmFpbGVkOiAnICsgbCArICcgIT0gJyArIHIpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0hleFByZWZpeGVkID0gcmVxdWlyZSgnaXMtaGV4LXByZWZpeGVkJyk7XG52YXIgc3RyaXBIZXhQcmVmaXggPSByZXF1aXJlKCdzdHJpcC1oZXgtcHJlZml4Jyk7XG5cbi8qKlxuICogUGFkcyBhIGBTdHJpbmdgIHRvIGhhdmUgYW4gZXZlbiBsZW5ndGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3RyaW5nfSBvdXRwdXRcbiAqL1xuZnVuY3Rpb24gcGFkVG9FdmVuKHZhbHVlKSB7XG4gIHZhciBhID0gdmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBpZiAodHlwZW9mIGEgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gd2hpbGUgcGFkZGluZyB0byBldmVuLCB2YWx1ZSBtdXN0IGJlIHN0cmluZywgaXMgY3VycmVudGx5ICcgKyB0eXBlb2YgYSArICcsIHdoaWxlIHBhZFRvRXZlbi4nKTtcbiAgfVxuXG4gIGlmIChhLmxlbmd0aCAlIDIpIHtcbiAgICBhID0gJzAnICsgYTtcbiAgfVxuXG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYE51bWJlcmAgaW50byBhIGhleCBgU3RyaW5nYFxuICogQHBhcmFtIHtOdW1iZXJ9IGlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW50VG9IZXgoaSkge1xuICB2YXIgaGV4ID0gaS50b1N0cmluZygxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICByZXR1cm4gJzB4JyArIGhleDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBgTnVtYmVyYCB0byBhIGBCdWZmZXJgXG4gKiBAcGFyYW0ge051bWJlcn0gaVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBpbnRUb0J1ZmZlcihpKSB7XG4gIHZhciBoZXggPSBpbnRUb0hleChpKTtcblxuICByZXR1cm4gbmV3IEJ1ZmZlcihwYWRUb0V2ZW4oaGV4LnNsaWNlKDIpKSwgJ2hleCcpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYmluYXJ5IHNpemUgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0QmluYXJ5U2l6ZShzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gd2hpbGUgZ2V0dGluZyBiaW5hcnkgc2l6ZSwgbWV0aG9kIGdldEJpbmFyeVNpemUgcmVxdWlyZXMgaW5wdXQgXFwnc3RyXFwnIHRvIGJlIHR5cGUgU3RyaW5nLCBnb3QgXFwnJyArIHR5cGVvZiBzdHIgKyAnXFwnLicpO1xuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0ciwgJ3V0ZjgnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGZpcnN0IHNwZWNpZmllZCBhcnJheSBjb250YWlucyBhbGwgZWxlbWVudHNcbiAqIGZyb20gdGhlIHNlY29uZCBvbmUuIEZBTFNFIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBzdXBlcnNldFxuICogQHBhcmFtIHthcnJheX0gc3Vic2V0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFycmF5Q29udGFpbnNBcnJheShzdXBlcnNldCwgc3Vic2V0LCBzb21lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHN1cGVyc2V0KSAhPT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW2V0aGpzLXV0aWxdIG1ldGhvZCBhcnJheUNvbnRhaW5zQXJyYXkgcmVxdWlyZXMgaW5wdXQgXFwnc3VwZXJzZXRcXCcgdG8gYmUgYW4gYXJyYXkgZ290IHR5cGUgXFwnJyArIHR5cGVvZiBzdXBlcnNldCArICdcXCcnKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShzdWJzZXQpICE9PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGFycmF5Q29udGFpbnNBcnJheSByZXF1aXJlcyBpbnB1dCBcXCdzdWJzZXRcXCcgdG8gYmUgYW4gYXJyYXkgZ290IHR5cGUgXFwnJyArIHR5cGVvZiBzdWJzZXQgKyAnXFwnJyk7XG4gIH1cblxuICByZXR1cm4gc3Vic2V0W0Jvb2xlYW4oc29tZSkgJiYgJ3NvbWUnIHx8ICdldmVyeSddKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlcnNldC5pbmRleE9mKHZhbHVlKSA+PSAwO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTaG91bGQgYmUgY2FsbGVkIHRvIGdldCB1dGY4IGZyb20gaXQncyBoZXggcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAbWV0aG9kIHRvVXRmOFxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBpbiBoZXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGFzY2lpIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBoZXggdmFsdWVcbiAqL1xuZnVuY3Rpb24gdG9VdGY4KGhleCkge1xuICB2YXIgYnVmZmVyVmFsdWUgPSBuZXcgQnVmZmVyKHBhZFRvRXZlbihzdHJpcEhleFByZWZpeChoZXgpLnJlcGxhY2UoL14wK3wwKyQvZywgJycpKSwgJ2hleCcpO1xuXG4gIHJldHVybiBidWZmZXJWYWx1ZS50b1N0cmluZygndXRmOCcpO1xufVxuXG4vKipcbiAqIFNob3VsZCBiZSBjYWxsZWQgdG8gZ2V0IGFzY2lpIGZyb20gaXQncyBoZXggcmVwcmVzZW50YXRpb25cbiAqXG4gKiBAbWV0aG9kIHRvQXNjaWlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgaW4gaGV4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBhc2NpaSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaGV4IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRvQXNjaWkoaGV4KSB7XG4gIHZhciBzdHIgPSAnJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB2YXIgaSA9IDAsXG4gICAgICBsID0gaGV4Lmxlbmd0aDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGlmIChoZXguc3Vic3RyaW5nKDAsIDIpID09PSAnMHgnKSB7XG4gICAgaSA9IDI7XG4gIH1cblxuICBmb3IgKDsgaSA8IGw7IGkgKz0gMikge1xuICAgIHZhciBjb2RlID0gcGFyc2VJbnQoaGV4LnN1YnN0cihpLCAyKSwgMTYpO1xuICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBTaG91bGQgYmUgY2FsbGVkIHRvIGdldCBoZXggcmVwcmVzZW50YXRpb24gKHByZWZpeGVkIGJ5IDB4KSBvZiB1dGY4IHN0cmluZ1xuICpcbiAqIEBtZXRob2QgZnJvbVV0ZjhcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25hbCBwYWRkaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBoZXggcmVwcmVzZW50YXRpb24gb2YgaW5wdXQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGZyb21VdGY4KHN0cmluZ1ZhbHVlKSB7XG4gIHZhciBzdHIgPSBuZXcgQnVmZmVyKHN0cmluZ1ZhbHVlLCAndXRmOCcpO1xuXG4gIHJldHVybiAnMHgnICsgcGFkVG9FdmVuKHN0ci50b1N0cmluZygnaGV4JykpLnJlcGxhY2UoL14wK3wwKyQvZywgJycpO1xufVxuXG4vKipcbiAqIFNob3VsZCBiZSBjYWxsZWQgdG8gZ2V0IGhleCByZXByZXNlbnRhdGlvbiAocHJlZml4ZWQgYnkgMHgpIG9mIGFzY2lpIHN0cmluZ1xuICpcbiAqIEBtZXRob2QgZnJvbUFzY2lpXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gb3B0aW9uYWwgcGFkZGluZ1xuICogQHJldHVybnMge1N0cmluZ30gaGV4IHJlcHJlc2VudGF0aW9uIG9mIGlucHV0IHN0cmluZ1xuICovXG5mdW5jdGlvbiBmcm9tQXNjaWkoc3RyaW5nVmFsdWUpIHtcbiAgdmFyIGhleCA9ICcnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIGNvZGUgPSBzdHJpbmdWYWx1ZS5jaGFyQ29kZUF0KGkpO1xuICAgIHZhciBuID0gY29kZS50b1N0cmluZygxNik7XG4gICAgaGV4ICs9IG4ubGVuZ3RoIDwgMiA/ICcwJyArIG4gOiBuO1xuICB9XG5cbiAgcmV0dXJuICcweCcgKyBoZXg7XG59XG5cbi8qKlxuICogZ2V0S2V5cyhbe2E6IDEsIGI6IDJ9LCB7YTogMywgYjogNH1dLCAnYScpID0+IFsxLCAzXVxuICpcbiAqIEBtZXRob2QgZ2V0S2V5cyBnZXQgc3BlY2lmaWMga2V5IGZyb20gaW5uZXIgb2JqZWN0IGFycmF5IG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWxsb3dFbXB0eVxuICogQHJldHVybnMge0FycmF5fSBvdXRwdXQganVzdCBhIHNpbXBsZSBhcnJheSBvZiBvdXRwdXQga2V5c1xuICovXG5mdW5jdGlvbiBnZXRLZXlzKHBhcmFtcywga2V5LCBhbGxvd0VtcHR5KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGdldEtleXMgZXhwZWN0aW5nIHR5cGUgQXJyYXkgYXMgXFwncGFyYW1zXFwnIGlucHV0LCBnb3QgXFwnJyArIHR5cGVvZiBwYXJhbXMgKyAnXFwnJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbZXRoanMtdXRpbF0gbWV0aG9kIGdldEtleXMgZXhwZWN0aW5nIHR5cGUgU3RyaW5nIGZvciBpbnB1dCBcXCdrZXlcXCcgZ290IFxcJycgKyB0eXBlb2Yga2V5ICsgJ1xcJy4nKTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciB2YWx1ZSA9IHBhcmFtc1tpXVtrZXldOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgaWYgKGFsbG93RW1wdHkgJiYgIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFiaScpO1xuICAgIH1cbiAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIElzIHRoZSBzdHJpbmcgYSBoZXggc3RyaW5nLlxuICpcbiAqIEBtZXRob2QgY2hlY2sgaWYgc3RyaW5nIGlzIGhleCBzdHJpbmcgb2Ygc3BlY2lmaWMgbGVuZ3RoXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm5zIHtCb29sZWFufSBvdXRwdXQgdGhlIHN0cmluZyBpcyBhIGhleCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaXNIZXhTdHJpbmcodmFsdWUsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUubWF0Y2goL14weFswLTlBLUZhLWZdKiQvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChsZW5ndGggJiYgdmFsdWUubGVuZ3RoICE9PSAyICsgMiAqIGxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXJyYXlDb250YWluc0FycmF5OiBhcnJheUNvbnRhaW5zQXJyYXksXG4gIGludFRvQnVmZmVyOiBpbnRUb0J1ZmZlcixcbiAgZ2V0QmluYXJ5U2l6ZTogZ2V0QmluYXJ5U2l6ZSxcbiAgaXNIZXhQcmVmaXhlZDogaXNIZXhQcmVmaXhlZCxcbiAgc3RyaXBIZXhQcmVmaXg6IHN0cmlwSGV4UHJlZml4LFxuICBwYWRUb0V2ZW46IHBhZFRvRXZlbixcbiAgaW50VG9IZXg6IGludFRvSGV4LFxuICBmcm9tQXNjaWk6IGZyb21Bc2NpaSxcbiAgZnJvbVV0Zjg6IGZyb21VdGY4LFxuICB0b0FzY2lpOiB0b0FzY2lpLFxuICB0b1V0Zjg6IHRvVXRmOCxcbiAgZ2V0S2V5czogZ2V0S2V5cyxcbiAgaXNIZXhTdHJpbmc6IGlzSGV4U3RyaW5nXG59OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0FzeW5jID0gdW5kZWZpbmVkO1xuXG52YXIgX2FzeW5jaWZ5ID0gcmVxdWlyZSgnLi4vYXN5bmNpZnknKTtcblxudmFyIF9hc3luY2lmeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY2lmeSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBzdXBwb3J0c1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGlzQXN5bmMoZm4pIHtcbiAgICByZXR1cm4gc3VwcG9ydHNTeW1ib2wgJiYgZm5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiB3cmFwQXN5bmMoYXN5bmNGbikge1xuICAgIHJldHVybiBpc0FzeW5jKGFzeW5jRm4pID8gKDAsIF9hc3luY2lmeTIuZGVmYXVsdCkoYXN5bmNGbikgOiBhc3luY0ZuO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSB3cmFwQXN5bmM7XG5leHBvcnRzLmlzQXN5bmMgPSBpc0FzeW5jOyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7IHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOyBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBjb2RlcyA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIE5vZGVFcnJvciA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9CYXNlKSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTm9kZUVycm9yLCBfQmFzZSk7XG5cbiAgICBmdW5jdGlvbiBOb2RlRXJyb3IoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgcmV0dXJuIF9CYXNlLmNhbGwodGhpcywgZ2V0TWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKSkgfHwgdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gTm9kZUVycm9yO1xuICB9KEJhc2UpO1xuXG4gIE5vZGVFcnJvci5wcm90b3R5cGUubmFtZSA9IEJhc2UubmFtZTtcbiAgTm9kZUVycm9yLnByb3RvdHlwZS5jb2RlID0gY29kZTtcbiAgY29kZXNbY29kZV0gPSBOb2RlRXJyb3I7XG59IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC44LjAvbGliL2ludGVybmFsL2Vycm9ycy5qc1xuXG5cbmZ1bmN0aW9uIG9uZU9mKGV4cGVjdGVkLCB0aGluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICB2YXIgbGVuID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGkpO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlbiA+IDIpIHtcbiAgICAgIHJldHVybiBcIm9uZSBvZiBcIi5jb25jYXQodGhpbmcsIFwiIFwiKS5jb25jYXQoZXhwZWN0ZWQuc2xpY2UoMCwgbGVuIC0gMSkuam9pbignLCAnKSwgXCIsIG9yIFwiKSArIGV4cGVjdGVkW2xlbiAtIDFdO1xuICAgIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG4gICAgICByZXR1cm4gXCJvbmUgb2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdLCBcIiBvciBcIikuY29uY2F0KGV4cGVjdGVkWzFdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KGV4cGVjdGVkWzBdKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwib2YgXCIuY29uY2F0KHRoaW5nLCBcIiBcIikuY29uY2F0KFN0cmluZyhleHBlY3RlZCkpO1xuICB9XG59IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9zdGFydHNXaXRoXG5cblxuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHNlYXJjaCwgcG9zKSB7XG4gIHJldHVybiBzdHIuc3Vic3RyKCFwb3MgfHwgcG9zIDwgMCA/IDAgOiArcG9zLCBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xufSAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZW5kc1dpdGhcblxuXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaCwgdGhpc19sZW4pIHtcbiAgaWYgKHRoaXNfbGVuID09PSB1bmRlZmluZWQgfHwgdGhpc19sZW4gPiBzdHIubGVuZ3RoKSB7XG4gICAgdGhpc19sZW4gPSBzdHIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHJpbmcodGhpc19sZW4gLSBzZWFyY2gubGVuZ3RoLCB0aGlzX2xlbikgPT09IHNlYXJjaDtcbn0gLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2luY2x1ZGVzXG5cblxuZnVuY3Rpb24gaW5jbHVkZXMoc3RyLCBzZWFyY2gsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCA+IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHNlYXJjaCwgc3RhcnQpICE9PSAtMTtcbiAgfVxufVxuXG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX09QVF9WQUxVRScsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gJ1RoZSB2YWx1ZSBcIicgKyB2YWx1ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCInICsgbmFtZSArICdcIic7XG59LCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsIGZ1bmN0aW9uIChuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7XG4gIC8vIGRldGVybWluZXI6ICdtdXN0IGJlJyBvciAnbXVzdCBub3QgYmUnXG4gIHZhciBkZXRlcm1pbmVyO1xuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIHN0YXJ0c1dpdGgoZXhwZWN0ZWQsICdub3QgJykpIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3Qgbm90IGJlJztcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywgJycpO1xuICB9IGVsc2Uge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBiZSc7XG4gIH1cblxuICB2YXIgbXNnO1xuXG4gIGlmIChlbmRzV2l0aChuYW1lLCAnIGFyZ3VtZW50JykpIHtcbiAgICAvLyBGb3IgY2FzZXMgbGlrZSAnZmlyc3QgYXJndW1lbnQnXG4gICAgbXNnID0gXCJUaGUgXCIuY29uY2F0KG5hbWUsIFwiIFwiKS5jb25jYXQoZGV0ZXJtaW5lciwgXCIgXCIpLmNvbmNhdChvbmVPZihleHBlY3RlZCwgJ3R5cGUnKSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHR5cGUgPSBpbmNsdWRlcyhuYW1lLCAnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCc7XG4gICAgbXNnID0gXCJUaGUgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCIgXCIpLmNvbmNhdCh0eXBlLCBcIiBcIikuY29uY2F0KGRldGVybWluZXIsIFwiIFwiKS5jb25jYXQob25lT2YoZXhwZWN0ZWQsICd0eXBlJykpO1xuICB9XG5cbiAgbXNnICs9IFwiLiBSZWNlaXZlZCB0eXBlIFwiLmNvbmNhdCh0eXBlb2YgYWN0dWFsKTtcbiAgcmV0dXJuIG1zZztcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YnLCAnc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQnLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gJ1RoZSAnICsgbmFtZSArICcgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCc7XG59KTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnLCAnUHJlbWF0dXJlIGNsb3NlJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fREVTVFJPWUVEJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuICdDYW5ub3QgY2FsbCAnICsgbmFtZSArICcgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCc7XG59KTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX01VTFRJUExFX0NBTExCQUNLJywgJ0NhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX0NBTk5PVF9QSVBFJywgJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQnLCAnd3JpdGUgYWZ0ZXIgZW5kJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fTlVMTF9WQUxVRVMnLCAnTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nLCBUeXBlRXJyb3IpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfVU5LTk9XTl9FTkNPRElORycsIGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuICdVbmtub3duIGVuY29kaW5nOiAnICsgYXJnO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xubW9kdWxlLmV4cG9ydHMuY29kZXMgPSBjb2RlcztcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cbid1c2Ugc3RyaWN0Jztcbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcblxudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5cbnJlcXVpcmUoJ2luaGVyaXRzJykoRHVwbGV4LCBSZWFkYWJsZSk7XG5cbntcbiAgLy8gQWxsb3cgdGhlIGtleXMgYXJyYXkgdG8gYmUgR0MnZWQuXG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhXcml0YWJsZS5wcm90b3R5cGUpO1xuXG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcblxuICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgIH1cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEdXBsZXgucHJvdG90eXBlLCAnd3JpdGFibGVMZW5ndGgnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aDtcbiAgfVxufSk7IC8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcblxuZnVuY3Rpb24gb25lbmQoKSB7XG4gIC8vIElmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLCB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCkgcmV0dXJuOyAvLyBubyBtb3JlIGRhdGEgY2FuIGJlIHdyaXR0ZW4uXG4gIC8vIEJ1dCBhbGxvdyBtb3JlIHdyaXRlcyB0byBoYXBwZW4gaW4gdGhpcyB0aWNrLlxuXG4gIHByb2Nlc3MubmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG5cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgfVxufSk7IiwidmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbi8vIHByb3RvdHlwZSBjbGFzcyBmb3IgaGFzaCBmdW5jdGlvbnNcbmZ1bmN0aW9uIEhhc2ggKGJsb2NrU2l6ZSwgZmluYWxTaXplKSB7XG4gIHRoaXMuX2Jsb2NrID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZSlcbiAgdGhpcy5fZmluYWxTaXplID0gZmluYWxTaXplXG4gIHRoaXMuX2Jsb2NrU2l6ZSA9IGJsb2NrU2l6ZVxuICB0aGlzLl9sZW4gPSAwXG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGVuYyA9IGVuYyB8fCAndXRmOCdcbiAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgZW5jKVxuICB9XG5cbiAgdmFyIGJsb2NrID0gdGhpcy5fYmxvY2tcbiAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuX2Jsb2NrU2l6ZVxuICB2YXIgbGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgdmFyIGFjY3VtID0gdGhpcy5fbGVuXG5cbiAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuZ3RoOykge1xuICAgIHZhciBhc3NpZ25lZCA9IGFjY3VtICUgYmxvY2tTaXplXG4gICAgdmFyIHJlbWFpbmRlciA9IE1hdGgubWluKGxlbmd0aCAtIG9mZnNldCwgYmxvY2tTaXplIC0gYXNzaWduZWQpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbWFpbmRlcjsgaSsrKSB7XG4gICAgICBibG9ja1thc3NpZ25lZCArIGldID0gZGF0YVtvZmZzZXQgKyBpXVxuICAgIH1cblxuICAgIGFjY3VtICs9IHJlbWFpbmRlclxuICAgIG9mZnNldCArPSByZW1haW5kZXJcblxuICAgIGlmICgoYWNjdW0gJSBibG9ja1NpemUpID09PSAwKSB7XG4gICAgICB0aGlzLl91cGRhdGUoYmxvY2spXG4gICAgfVxuICB9XG5cbiAgdGhpcy5fbGVuICs9IGxlbmd0aFxuICByZXR1cm4gdGhpc1xufVxuXG5IYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIHZhciByZW0gPSB0aGlzLl9sZW4gJSB0aGlzLl9ibG9ja1NpemVcblxuICB0aGlzLl9ibG9ja1tyZW1dID0gMHg4MFxuXG4gIC8vIHplcm8gKHJlbSArIDEpIHRyYWlsaW5nIGJpdHMsIHdoZXJlIChyZW0gKyAxKSBpcyB0aGUgc21hbGxlc3RcbiAgLy8gbm9uLW5lZ2F0aXZlIHNvbHV0aW9uIHRvIHRoZSBlcXVhdGlvbiAobGVuZ3RoICsgMSArIChyZW0gKyAxKSkgPT09IGZpbmFsU2l6ZSBtb2QgYmxvY2tTaXplXG4gIHRoaXMuX2Jsb2NrLmZpbGwoMCwgcmVtICsgMSlcblxuICBpZiAocmVtID49IHRoaXMuX2ZpbmFsU2l6ZSkge1xuICAgIHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaylcbiAgICB0aGlzLl9ibG9jay5maWxsKDApXG4gIH1cblxuICB2YXIgYml0cyA9IHRoaXMuX2xlbiAqIDhcblxuICAvLyB1aW50MzJcbiAgaWYgKGJpdHMgPD0gMHhmZmZmZmZmZikge1xuICAgIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoYml0cywgdGhpcy5fYmxvY2tTaXplIC0gNClcblxuICAvLyB1aW50NjRcbiAgfSBlbHNlIHtcbiAgICB2YXIgbG93Qml0cyA9IChiaXRzICYgMHhmZmZmZmZmZikgPj4+IDBcbiAgICB2YXIgaGlnaEJpdHMgPSAoYml0cyAtIGxvd0JpdHMpIC8gMHgxMDAwMDAwMDBcblxuICAgIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoaGlnaEJpdHMsIHRoaXMuX2Jsb2NrU2l6ZSAtIDgpXG4gICAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShsb3dCaXRzLCB0aGlzLl9ibG9ja1NpemUgLSA0KVxuICB9XG5cbiAgdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKVxuICB2YXIgaGFzaCA9IHRoaXMuX2hhc2goKVxuXG4gIHJldHVybiBlbmMgPyBoYXNoLnRvU3RyaW5nKGVuYykgOiBoYXNoXG59XG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRhYmxlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnID0gdm9pZCAwO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIHZhciBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheVxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoaXNEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIHJlYWRhYmxlSHdtID0gb3B0aW9ucy5yZWFkYWJsZUhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG5cbiAgaWYgKGh3bSB8fCBod20gPT09IDApIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bTtlbHNlIGlmIChpc0R1cGxleCAmJiAocmVhZGFibGVId20gfHwgcmVhZGFibGVId20gPT09IDApKSB0aGlzLmhpZ2hXYXRlck1hcmsgPSByZWFkYWJsZUh3bTtlbHNlIHRoaXMuaGlnaFdhdGVyTWFyayA9IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBNYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGFyZSBhd2FpdGluZyBhIGRyYWluIGV2ZW50IGluIC5waXBlKClzXG4gIHRoaXMuYXdhaXREcmFpbiA9IDA7XG5cbiAgLy8gaWYgdHJ1ZSwgYSBtYXliZVJlYWRNb3JlIGhhcyBiZWVuIHNjaGVkdWxlZFxuICB0aGlzLnJlYWRpbmdNb3JlID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlYWRhYmxlKSkgcmV0dXJuIG5ldyBSZWFkYWJsZShvcHRpb25zKTtcblxuICB0aGlzLl9yZWFkYWJsZVN0YXRlID0gbmV3IFJlYWRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAnZGVzdHJveWVkJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLmRlc3Ryb3k7XG5SZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lJbXBsLnVuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIHRoaXMucHVzaChudWxsKTtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgICAgaWYgKGVuY29kaW5nICE9PSBzdGF0ZS5lbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gJyc7XG4gICAgICB9XG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKCFza2lwQ2h1bmtDaGVjaykgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgICBpZiAoZXIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpKTtlbHNlIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kZWQpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuay5sZW5ndGggIT09IDApIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7ZWxzZSBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFhZGRUb0Zyb250KSB7XG4gICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5lZWRNb3JlRGF0YShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBhZGRUb0Zyb250KSB7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbi8vIGlmIGl0J3MgcGFzdCB0aGUgaGlnaCB3YXRlciBtYXJrLCB3ZSBjYW4gcHVzaCBpbiBzb21lIG1vcmUuXG4vLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZVxuLy8gbW9yZSBieXRlcy4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsXG4vLyBzdWNoIGFzIHRoZSByZXBsLiAgQWxzbywgaWYgdGhlIHB1c2goKSB0cmlnZ2VyZWQgYVxuLy8gcmVhZGFibGUgZXZlbnQsIGFuZCB0aGUgdXNlciBjYWxsZWQgcmVhZChsYXJnZU51bWJlcikgc3VjaCB0aGF0XG4vLyBuZWVkUmVhZGFibGUgd2FzIHNldCwgdGhlbiB3ZSBvdWdodCB0byBwdXNoIG1vcmUsIHNvIHRoYXQgYW5vdGhlclxuLy8gJ3JlYWRhYmxlJyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC5cbmZ1bmN0aW9uIG5lZWRNb3JlRGF0YShzdGF0ZSkge1xuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5uZWVkUmVhZGFibGUgfHwgc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gIH1cblxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcG5hLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwbmEubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwbmEubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKCdvbmVuZCcpO1xuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cbiAgdmFyIG9uZHJhaW4gPSBwaXBlT25EcmFpbihzcmMpO1xuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIHZhciBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZygnY2xlYW51cCcpO1xuICAgIC8vIGNsZWFudXAgZXZlbnQgaGFuZGxlcnMgb25jZSB0aGUgcGlwZSBpcyBicm9rZW5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigndW5waXBlJywgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZW5kJywgdW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgICBpbmNyZWFzZWRBd2FpdERyYWluID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7IGhhc1VucGlwZWQ6IGZhbHNlIH07XG5cbiAgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMCkgcmV0dXJuIHRoaXM7XG5cbiAgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkge1xuICAgIC8vIHBhc3NlZCBpbiBvbmUsIGJ1dCBpdCdzIG5vdCB0aGUgcmlnaHQgb25lLlxuICAgIGlmIChkZXN0ICYmIGRlc3QgIT09IHN0YXRlLnBpcGVzKSByZXR1cm4gdGhpcztcblxuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdHNbaV0uZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgfXJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgdmFyIGluZGV4ID0gaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG5cbiAgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCB1cCBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBhc2tlZCBmb3Jcbi8vIEVuc3VyZSByZWFkYWJsZSBsaXN0ZW5lcnMgZXZlbnR1YWxseSBnZXQgc29tZXRoaW5nXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIFN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBwbmEubmV4dFRpY2soblJlYWRpbmdOZXh0VGljaywgdGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxlbmd0aCkge1xuICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcG5hLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcblxuICAgIHZhciByZXQgPSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHRoaXMuZW1pdC5iaW5kKHRoaXMsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcblxuLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuUmVhZGFibGUuX2Zyb21MaXN0ID0gZnJvbUxpc3Q7XG5cbi8vIFBsdWNrIG9mZiBuIGJ5dGVzIGZyb20gYW4gYXJyYXkgb2YgYnVmZmVycy5cbi8vIExlbmd0aCBpcyB0aGUgY29tYmluZWQgbGVuZ3RocyBvZiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0KG4sIHN0YXRlKSB7XG4gIC8vIG5vdGhpbmcgYnVmZmVyZWRcbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldCA9IHN0YXRlLmJ1ZmZlci5zaGlmdCgpO2Vsc2UgaWYgKCFuIHx8IG4gPj0gc3RhdGUubGVuZ3RoKSB7XG4gICAgLy8gcmVhZCBpdCBhbGwsIHRydW5jYXRlIHRoZSBsaXN0XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIHJldCA9IHN0YXRlLmJ1ZmZlci5qb2luKCcnKTtlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSByZXQgPSBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gZnJvbUxpc3RQYXJ0aWFsKG4sIHN0YXRlLmJ1ZmZlciwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBFeHRyYWN0cyBvbmx5IGVub3VnaCBidWZmZXJlZCBkYXRhIHRvIHNhdGlzZnkgdGhlIGFtb3VudCByZXF1ZXN0ZWQuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGZyb21MaXN0UGFydGlhbChuLCBsaXN0LCBoYXNTdHJpbmdzKSB7XG4gIHZhciByZXQ7XG4gIGlmIChuIDwgbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gc2xpY2UgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3NcbiAgICByZXQgPSBsaXN0LmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICBsaXN0LmhlYWQuZGF0YSA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKG4pO1xuICB9IGVsc2UgaWYgKG4gPT09IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIGZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaFxuICAgIHJldCA9IGxpc3Quc2hpZnQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXN1bHQgc3BhbnMgbW9yZSB0aGFuIG9uZSBidWZmZXJcbiAgICByZXQgPSBoYXNTdHJpbmdzID8gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkgOiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhXG4vLyBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIHtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgdmFyIHJldCA9IHAuZGF0YTtcbiAgbiAtPSByZXQubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBzdHIgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgIG4gLT0gbmI7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICArK2M7XG4gICAgICAgIGlmIChwLm5leHQpIGxpc3QuaGVhZCA9IHAubmV4dDtlbHNlIGxpc3QuaGVhZCA9IGxpc3QudGFpbCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0LmhlYWQgPSBwO1xuICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICsrYztcbiAgfVxuICBsaXN0Lmxlbmd0aCAtPSBjO1xuICByZXR1cm4gcmV0O1xufVxuXG4vLyBDb3BpZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YSBjaHVua3MuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpIHtcbiAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHBuYS5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgcG5hID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5mdW5jdGlvbiBkZXN0cm95KGVyciwgY2IpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgcmVhZGFibGVEZXN0cm95ZWQgPSB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB2YXIgd3JpdGFibGVEZXN0cm95ZWQgPSB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuXG4gIGlmIChyZWFkYWJsZURlc3Ryb3llZCB8fCB3cml0YWJsZURlc3Ryb3llZCkge1xuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2UgaWYgKGVyciAmJiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUgfHwgIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSkge1xuICAgICAgcG5hLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICB0aGlzLl9kZXN0cm95KGVyciB8fCBudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKCFjYiAmJiBlcnIpIHtcbiAgICAgIHBuYS5uZXh0VGljayhlbWl0RXJyb3JOVCwgX3RoaXMsIGVycik7XG4gICAgICBpZiAoX3RoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHVuZGVzdHJveSgpIHtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZXN0cm95OiBkZXN0cm95LFxuICB1bmRlc3Ryb3k6IHVuZGVzdHJveVxufTsiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xuXG52YXIgRHVwbGV4ID0gcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoVHJhbnNmb3JtLCBEdXBsZXgpO1xuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShlciwgZGF0YSkge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG5cbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcblxuICBpZiAoIWNiKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ3dyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcycpKTtcbiAgfVxuXG4gIHRzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0cy53cml0ZWNiID0gbnVsbDtcblxuICBpZiAoZGF0YSAhPSBudWxsKSAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICB0aGlzLnB1c2goZGF0YSk7XG5cbiAgY2IoZXIpO1xuXG4gIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHJzLnJlYWRpbmcgPSBmYWxzZTtcbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG5cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSB7XG4gICAgYWZ0ZXJUcmFuc2Zvcm06IGFmdGVyVHJhbnNmb3JtLmJpbmQodGhpcyksXG4gICAgbmVlZFRyYW5zZm9ybTogZmFsc2UsXG4gICAgdHJhbnNmb3JtaW5nOiBmYWxzZSxcbiAgICB3cml0ZWNiOiBudWxsLFxuICAgIHdyaXRlY2h1bms6IG51bGwsXG4gICAgd3JpdGVlbmNvZGluZzogbnVsbFxuICB9O1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub24oJ3ByZWZpbmlzaCcsIHByZWZpbmlzaCk7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaCgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKF90aGlzLCBlciwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZSh0aGlzLCBudWxsLCBudWxsKTtcbiAgfVxufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAodHMud3JpdGVjaHVuayAhPT0gbnVsbCAmJiB0cy53cml0ZWNiICYmICF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB0cy50cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3RyYW5zZm9ybSh0cy53cml0ZWNodW5rLCB0cy53cml0ZWVuY29kaW5nLCB0cy5hZnRlclRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbWFyayB0aGF0IHdlIG5lZWQgYSB0cmFuc2Zvcm0sIHNvIHRoYXQgYW55IGRhdGEgdGhhdCBjb21lcyBpblxuICAgIC8vIHdpbGwgZ2V0IHByb2Nlc3NlZCwgbm93IHRoYXQgd2UndmUgYXNrZWQgZm9yIGl0LlxuICAgIHRzLm5lZWRUcmFuc2Zvcm0gPSB0cnVlO1xuICB9XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgZnVuY3Rpb24gKGVycjIpIHtcbiAgICBjYihlcnIyKTtcbiAgICBfdGhpczIuZW1pdCgnY2xvc2UnKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBkb25lKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgaWYgKGVyKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuXG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCcpO1xuXG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nJyk7XG5cbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gQmxvY2tIYXNoKCkge1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdUb3RhbCA9IDA7XG4gIHRoaXMuYmxvY2tTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemU7XG4gIHRoaXMub3V0U2l6ZSA9IHRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZTtcbiAgdGhpcy5obWFjU3RyZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aDtcbiAgdGhpcy5wYWRMZW5ndGggPSB0aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aCAvIDg7XG4gIHRoaXMuZW5kaWFuID0gJ2JpZyc7XG5cbiAgdGhpcy5fZGVsdGE4ID0gdGhpcy5ibG9ja1NpemUgLyA4O1xuICB0aGlzLl9kZWx0YTMyID0gdGhpcy5ibG9ja1NpemUgLyAzMjtcbn1cbmV4cG9ydHMuQmxvY2tIYXNoID0gQmxvY2tIYXNoO1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICAvLyBDb252ZXJ0IG1lc3NhZ2UgdG8gYXJyYXksIHBhZCBpdCwgYW5kIGpvaW4gaW50byAzMmJpdCBibG9ja3NcbiAgbXNnID0gdXRpbHMudG9BcnJheShtc2csIGVuYyk7XG4gIGlmICghdGhpcy5wZW5kaW5nKVxuICAgIHRoaXMucGVuZGluZyA9IG1zZztcbiAgZWxzZVxuICAgIHRoaXMucGVuZGluZyA9IHRoaXMucGVuZGluZy5jb25jYXQobXNnKTtcbiAgdGhpcy5wZW5kaW5nVG90YWwgKz0gbXNnLmxlbmd0aDtcblxuICAvLyBFbm91Z2ggZGF0YSwgdHJ5IHVwZGF0aW5nXG4gIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID49IHRoaXMuX2RlbHRhOCkge1xuICAgIG1zZyA9IHRoaXMucGVuZGluZztcblxuICAgIC8vIFByb2Nlc3MgcGVuZGluZyBkYXRhIGluIGJsb2Nrc1xuICAgIHZhciByID0gbXNnLmxlbmd0aCAlIHRoaXMuX2RlbHRhODtcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2cuc2xpY2UobXNnLmxlbmd0aCAtIHIsIG1zZy5sZW5ndGgpO1xuICAgIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5wZW5kaW5nID0gbnVsbDtcblxuICAgIG1zZyA9IHV0aWxzLmpvaW4zMihtc2csIDAsIG1zZy5sZW5ndGggLSByLCB0aGlzLmVuZGlhbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IHRoaXMuX2RlbHRhMzIpXG4gICAgICB0aGlzLl91cGRhdGUobXNnLCBpLCBpICsgdGhpcy5fZGVsdGEzMik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSk7XG4gIGFzc2VydCh0aGlzLnBlbmRpbmcgPT09IG51bGwpO1xuXG4gIHJldHVybiB0aGlzLl9kaWdlc3QoZW5jKTtcbn07XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIHBhZCgpIHtcbiAgdmFyIGxlbiA9IHRoaXMucGVuZGluZ1RvdGFsO1xuICB2YXIgYnl0ZXMgPSB0aGlzLl9kZWx0YTg7XG4gIHZhciBrID0gYnl0ZXMgLSAoKGxlbiArIHRoaXMucGFkTGVuZ3RoKSAlIGJ5dGVzKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShrICsgdGhpcy5wYWRMZW5ndGgpO1xuICByZXNbMF0gPSAweDgwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGs7IGkrKylcbiAgICByZXNbaV0gPSAwO1xuXG4gIC8vIEFwcGVuZCBsZW5ndGhcbiAgbGVuIDw8PSAzO1xuICBpZiAodGhpcy5lbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgZm9yICh2YXIgdCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuXG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICB9IGVsc2Uge1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDE2KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcblxuICAgIGZvciAodCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLCJjb25zdCBnZXRSYW5kb21JZCA9IHJlcXVpcmUoJy4vcmFuZG9tLWlkLmpzJylcbmNvbnN0IGV4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJylcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVQYXlsb2FkXG5cblxuZnVuY3Rpb24gY3JlYXRlUGF5bG9hZChkYXRhKXtcbiAgcmV0dXJuIGV4dGVuZCh7XG4gICAgLy8gZGVmYXVsdHNcbiAgICBpZDogZ2V0UmFuZG9tSWQoKSxcbiAgICBqc29ucnBjOiAnMi4wJyxcbiAgICBwYXJhbXM6IFtdLFxuICAgIC8vIHVzZXItc3BlY2lmaWVkXG4gIH0sIGRhdGEpXG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBldGhqc1V0aWwgPSByZXF1aXJlKCdldGhqcy11dGlsJyk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG4vKipcbiAqIFJldHVybnMgYSBidWZmZXIgZmlsbGVkIHdpdGggMHMuXG4gKiBAcGFyYW0gYnl0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGUgYnVmZmVyIHNob3VsZCBiZVxuICovXG5leHBvcnRzLnplcm9zID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvY1Vuc2FmZShieXRlcykuZmlsbCgwKTtcbn07XG4vKipcbiAqIExlZnQgUGFkcyBhbiBgQXJyYXlgIG9yIGBCdWZmZXJgIHdpdGggbGVhZGluZyB6ZXJvcyB0aWxsIGl0IGhhcyBgbGVuZ3RoYCBieXRlcy5cbiAqIE9yIGl0IHRydW5jYXRlcyB0aGUgYmVnaW5uaW5nIGlmIGl0IGV4Y2VlZHMuXG4gKiBAcGFyYW0gbXNnIHRoZSB2YWx1ZSB0byBwYWQgKEJ1ZmZlcnxBcnJheSlcbiAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBieXRlcyB0aGUgb3V0cHV0IHNob3VsZCBiZVxuICogQHBhcmFtIHJpZ2h0IHdoZXRoZXIgdG8gc3RhcnQgcGFkZGluZyBmb3JtIHRoZSBsZWZ0IG9yIHJpZ2h0XG4gKiBAcmV0dXJuIChCdWZmZXJ8QXJyYXkpXG4gKi9cbmV4cG9ydHMuc2V0TGVuZ3RoTGVmdCA9IGZ1bmN0aW9uIChtc2csIGxlbmd0aCwgcmlnaHQpIHtcbiAgICBpZiAocmlnaHQgPT09IHZvaWQgMCkgeyByaWdodCA9IGZhbHNlOyB9XG4gICAgdmFyIGJ1ZiA9IGV4cG9ydHMuemVyb3MobGVuZ3RoKTtcbiAgICBtc2cgPSBleHBvcnRzLnRvQnVmZmVyKG1zZyk7XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgIGlmIChtc2cubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBtc2cuY29weShidWYpO1xuICAgICAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXNnLnNsaWNlKDAsIGxlbmd0aCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAobXNnLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgbXNnLmNvcHkoYnVmLCBsZW5ndGggLSBtc2cubGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBidWY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1zZy5zbGljZSgtbGVuZ3RoKTtcbiAgICB9XG59O1xuZXhwb3J0cy5zZXRMZW5ndGggPSBleHBvcnRzLnNldExlbmd0aExlZnQ7XG4vKipcbiAqIFJpZ2h0IFBhZHMgYW4gYEFycmF5YCBvciBgQnVmZmVyYCB3aXRoIGxlYWRpbmcgemVyb3MgdGlsbCBpdCBoYXMgYGxlbmd0aGAgYnl0ZXMuXG4gKiBPciBpdCB0cnVuY2F0ZXMgdGhlIGJlZ2lubmluZyBpZiBpdCBleGNlZWRzLlxuICogQHBhcmFtIG1zZyB0aGUgdmFsdWUgdG8gcGFkIChCdWZmZXJ8QXJyYXkpXG4gKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIG91dHB1dCBzaG91bGQgYmVcbiAqIEByZXR1cm4gKEJ1ZmZlcnxBcnJheSlcbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhSaWdodCA9IGZ1bmN0aW9uIChtc2csIGxlbmd0aCkge1xuICAgIHJldHVybiBleHBvcnRzLnNldExlbmd0aChtc2csIGxlbmd0aCwgdHJ1ZSk7XG59O1xuLyoqXG4gKiBUcmltcyBsZWFkaW5nIHplcm9zIGZyb20gYSBgQnVmZmVyYCBvciBhbiBgQXJyYXlgLlxuICogQHBhcmFtIGEgKEJ1ZmZlcnxBcnJheXxTdHJpbmcpXG4gKiBAcmV0dXJuIChCdWZmZXJ8QXJyYXl8U3RyaW5nKVxuICovXG5leHBvcnRzLnVucGFkID0gZnVuY3Rpb24gKGEpIHtcbiAgICBhID0gZXRoanNVdGlsLnN0cmlwSGV4UHJlZml4KGEpO1xuICAgIHZhciBmaXJzdCA9IGFbMF07XG4gICAgd2hpbGUgKGEubGVuZ3RoID4gMCAmJiBmaXJzdC50b1N0cmluZygpID09PSAnMCcpIHtcbiAgICAgICAgYSA9IGEuc2xpY2UoMSk7XG4gICAgICAgIGZpcnN0ID0gYVswXTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuZXhwb3J0cy5zdHJpcFplcm9zID0gZXhwb3J0cy51bnBhZDtcbi8qKlxuICogQXR0ZW1wdHMgdG8gdHVybiBhIHZhbHVlIGludG8gYSBgQnVmZmVyYC4gQXMgaW5wdXQgaXQgc3VwcG9ydHMgYEJ1ZmZlcmAsIGBTdHJpbmdgLCBgTnVtYmVyYCwgbnVsbC91bmRlZmluZWQsIGBCTmAgYW5kIG90aGVyIG9iamVjdHMgd2l0aCBhIGB0b0FycmF5KClgIG1ldGhvZC5cbiAqIEBwYXJhbSB2IHRoZSB2YWx1ZVxuICovXG5leHBvcnRzLnRvQnVmZmVyID0gZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgdiA9IEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGV0aGpzVXRpbC5pc0hleFN0cmluZyh2KSkge1xuICAgICAgICAgICAgICAgIHYgPSBCdWZmZXIuZnJvbShldGhqc1V0aWwucGFkVG9FdmVuKGV0aGpzVXRpbC5zdHJpcEhleFByZWZpeCh2KSksICdoZXgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHN0cmluZyB0byBidWZmZXIuIHRvQnVmZmVyIG9ubHkgc3VwcG9ydHMgMHgtcHJlZml4ZWQgaGV4IHN0cmluZ3MgYW5kIHRoaXMgc3RyaW5nIHdhcyBnaXZlbjogXCIgKyB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHYgPSBldGhqc1V0aWwuaW50VG9CdWZmZXIodik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQk4uaXNCTih2KSkge1xuICAgICAgICAgICAgdiA9IHYudG9BcnJheUxpa2UoQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2LnRvQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgICAgICAgIHYgPSBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcbi8qKlxuICogQ29udmVydHMgYSBgQnVmZmVyYCB0byBhIGBOdW1iZXJgLlxuICogQHBhcmFtIGJ1ZiBgQnVmZmVyYCBvYmplY3QgdG8gY29udmVydFxuICogQHRocm93cyBJZiB0aGUgaW5wdXQgbnVtYmVyIGV4Y2VlZHMgNTMgYml0cy5cbiAqL1xuZXhwb3J0cy5idWZmZXJUb0ludCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICByZXR1cm4gbmV3IEJOKGV4cG9ydHMudG9CdWZmZXIoYnVmKSkudG9OdW1iZXIoKTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgYEJ1ZmZlcmAgaW50byBhIGAweGAtcHJlZml4ZWQgaGV4IGBTdHJpbmdgLlxuICogQHBhcmFtIGJ1ZiBgQnVmZmVyYCBvYmplY3QgdG8gY29udmVydFxuICovXG5leHBvcnRzLmJ1ZmZlclRvSGV4ID0gZnVuY3Rpb24gKGJ1Zikge1xuICAgIGJ1ZiA9IGV4cG9ydHMudG9CdWZmZXIoYnVmKTtcbiAgICByZXR1cm4gJzB4JyArIGJ1Zi50b1N0cmluZygnaGV4Jyk7XG59O1xuLyoqXG4gKiBJbnRlcnByZXRzIGEgYEJ1ZmZlcmAgYXMgYSBzaWduZWQgaW50ZWdlciBhbmQgcmV0dXJucyBhIGBCTmAuIEFzc3VtZXMgMjU2LWJpdCBudW1iZXJzLlxuICogQHBhcmFtIG51bSBTaWduZWQgaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnRzLmZyb21TaWduZWQgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBCTihudW0pLmZyb21Ud29zKDI1Nik7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIGBCTmAgdG8gYW4gdW5zaWduZWQgaW50ZWdlciBhbmQgcmV0dXJucyBpdCBhcyBhIGBCdWZmZXJgLiBBc3N1bWVzIDI1Ni1iaXQgbnVtYmVycy5cbiAqIEBwYXJhbSBudW1cbiAqL1xuZXhwb3J0cy50b1Vuc2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShudW0udG9Ud29zKDI1NikudG9BcnJheSgpKTtcbn07XG4vKipcbiAqIEFkZHMgXCIweFwiIHRvIGEgZ2l2ZW4gYFN0cmluZ2AgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBzdGFydCB3aXRoIFwiMHhcIi5cbiAqL1xuZXhwb3J0cy5hZGRIZXhQcmVmaXggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiBldGhqc1V0aWwuaXNIZXhQcmVmaXhlZChzdHIpID8gc3RyIDogJzB4JyArIHN0cjtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgYEJ1ZmZlcmAgb3IgYEFycmF5YCB0byBKU09OLlxuICogQHBhcmFtIGJhIChCdWZmZXJ8QXJyYXkpXG4gKiBAcmV0dXJuIChBcnJheXxTdHJpbmd8bnVsbClcbiAqL1xuZXhwb3J0cy5iYVRvSlNPTiA9IGZ1bmN0aW9uIChiYSkge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoYmEpKSB7XG4gICAgICAgIHJldHVybiBcIjB4XCIgKyBiYS50b1N0cmluZygnaGV4Jyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goZXhwb3J0cy5iYVRvSlNPTihiYVtpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ynl0ZXMuanMubWFwIiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWInKShyZXF1aXJlKCcuL2xpYi9lbGxpcHRpYycpKVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBnZXROQUYgPSB1dGlscy5nZXROQUY7XG52YXIgZ2V0SlNGID0gdXRpbHMuZ2V0SlNGO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gQmFzZUN1cnZlKHR5cGUsIGNvbmYpIHtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5wID0gbmV3IEJOKGNvbmYucCwgMTYpO1xuXG4gIC8vIFVzZSBNb250Z29tZXJ5LCB3aGVuIHRoZXJlIGlzIG5vIGZhc3QgcmVkdWN0aW9uIGZvciB0aGUgcHJpbWVcbiAgdGhpcy5yZWQgPSBjb25mLnByaW1lID8gQk4ucmVkKGNvbmYucHJpbWUpIDogQk4ubW9udCh0aGlzLnApO1xuXG4gIC8vIFVzZWZ1bCBmb3IgbWFueSBjdXJ2ZXNcbiAgdGhpcy56ZXJvID0gbmV3IEJOKDApLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5vbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLnR3byA9IG5ldyBCTigyKS50b1JlZCh0aGlzLnJlZCk7XG5cbiAgLy8gQ3VydmUgY29uZmlndXJhdGlvbiwgb3B0aW9uYWxcbiAgdGhpcy5uID0gY29uZi5uICYmIG5ldyBCTihjb25mLm4sIDE2KTtcbiAgdGhpcy5nID0gY29uZi5nICYmIHRoaXMucG9pbnRGcm9tSlNPTihjb25mLmcsIGNvbmYuZ1JlZCk7XG5cbiAgLy8gVGVtcG9yYXJ5IGFycmF5c1xuICB0aGlzLl93bmFmVDEgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUMiA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQzID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDQgPSBuZXcgQXJyYXkoNCk7XG5cbiAgdGhpcy5fYml0TGVuZ3RoID0gdGhpcy5uID8gdGhpcy5uLmJpdExlbmd0aCgpIDogMDtcblxuICAvLyBHZW5lcmFsaXplZCBHcmVnIE1heHdlbGwncyB0cmlja1xuICB2YXIgYWRqdXN0Q291bnQgPSB0aGlzLm4gJiYgdGhpcy5wLmRpdih0aGlzLm4pO1xuICBpZiAoIWFkanVzdENvdW50IHx8IGFkanVzdENvdW50LmNtcG4oMTAwKSA+IDApIHtcbiAgICB0aGlzLnJlZE4gPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX21heHdlbGxUcmljayA9IHRydWU7XG4gICAgdGhpcy5yZWROID0gdGhpcy5uLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBCYXNlQ3VydmU7XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsID0gZnVuY3Rpb24gX2ZpeGVkTmFmTXVsKHAsIGspIHtcbiAgYXNzZXJ0KHAucHJlY29tcHV0ZWQpO1xuICB2YXIgZG91YmxlcyA9IHAuX2dldERvdWJsZXMoKTtcblxuICB2YXIgbmFmID0gZ2V0TkFGKGssIDEsIHRoaXMuX2JpdExlbmd0aCk7XG4gIHZhciBJID0gKDEgPDwgKGRvdWJsZXMuc3RlcCArIDEpKSAtIChkb3VibGVzLnN0ZXAgJSAyID09PSAwID8gMiA6IDEpO1xuICBJIC89IDM7XG5cbiAgLy8gVHJhbnNsYXRlIGludG8gbW9yZSB3aW5kb3dlZCBmb3JtXG4gIHZhciByZXByID0gW107XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbmFmLmxlbmd0aDsgaiArPSBkb3VibGVzLnN0ZXApIHtcbiAgICB2YXIgbmFmVyA9IDA7XG4gICAgZm9yICh2YXIgayA9IGogKyBkb3VibGVzLnN0ZXAgLSAxOyBrID49IGo7IGstLSlcbiAgICAgIG5hZlcgPSAobmFmVyA8PCAxKSArIG5hZltrXTtcbiAgICByZXByLnB1c2gobmFmVyk7XG4gIH1cblxuICB2YXIgYSA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgYiA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICBmb3IgKHZhciBpID0gSTsgaSA+IDA7IGktLSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwci5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hZlcgPSByZXByW2pdO1xuICAgICAgaWYgKG5hZlcgPT09IGkpXG4gICAgICAgIGIgPSBiLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdKTtcbiAgICAgIGVsc2UgaWYgKG5hZlcgPT09IC1pKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXS5uZWcoKSk7XG4gICAgfVxuICAgIGEgPSBhLmFkZChiKTtcbiAgfVxuICByZXR1cm4gYS50b1AoKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWwgPSBmdW5jdGlvbiBfd25hZk11bChwLCBrKSB7XG4gIHZhciB3ID0gNDtcblxuICAvLyBQcmVjb21wdXRlIHdpbmRvd1xuICB2YXIgbmFmUG9pbnRzID0gcC5fZ2V0TkFGUG9pbnRzKHcpO1xuICB3ID0gbmFmUG9pbnRzLnduZDtcbiAgdmFyIHduZCA9IG5hZlBvaW50cy5wb2ludHM7XG5cbiAgLy8gR2V0IE5BRiBmb3JtXG4gIHZhciBuYWYgPSBnZXROQUYoaywgdywgdGhpcy5fYml0TGVuZ3RoKTtcblxuICAvLyBBZGQgYHRoaXNgKihOKzEpIGZvciBldmVyeSB3LU5BRiBpbmRleFxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIGZvciAodmFyIGkgPSBuYWYubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyBDb3VudCB6ZXJvZXNcbiAgICBmb3IgKHZhciBrID0gMDsgaSA+PSAwICYmIG5hZltpXSA9PT0gMDsgaS0tKVxuICAgICAgaysrO1xuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG5cbiAgICBpZiAoaSA8IDApXG4gICAgICBicmVhaztcbiAgICB2YXIgeiA9IG5hZltpXTtcbiAgICBhc3NlcnQoeiAhPT0gMCk7XG4gICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpIHtcbiAgICAgIC8vIEogKy0gUFxuICAgICAgaWYgKHogPiAwKVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MubWl4ZWRBZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSiArLSBKXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWyh6IC0gMSkgPj4gMV0pO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHduZFsoLXogLSAxKSA+PiAxXS5uZWcoKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwLnR5cGUgPT09ICdhZmZpbmUnID8gYWNjLnRvUCgpIDogYWNjO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fd25hZk11bEFkZCA9IGZ1bmN0aW9uIF93bmFmTXVsQWRkKGRlZlcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamFjb2JpYW5SZXN1bHQpIHtcbiAgdmFyIHduZFdpZHRoID0gdGhpcy5fd25hZlQxO1xuICB2YXIgd25kID0gdGhpcy5fd25hZlQyO1xuICB2YXIgbmFmID0gdGhpcy5fd25hZlQzO1xuXG4gIC8vIEZpbGwgYWxsIGFycmF5c1xuICB2YXIgbWF4ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBuYWZQb2ludHMgPSBwLl9nZXROQUZQb2ludHMoZGVmVyk7XG4gICAgd25kV2lkdGhbaV0gPSBuYWZQb2ludHMud25kO1xuICAgIHduZFtpXSA9IG5hZlBvaW50cy5wb2ludHM7XG4gIH1cblxuICAvLyBDb21iIHNtYWxsIHdpbmRvdyBOQUZzXG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDE7IGkgLT0gMikge1xuICAgIHZhciBhID0gaSAtIDE7XG4gICAgdmFyIGIgPSBpO1xuICAgIGlmICh3bmRXaWR0aFthXSAhPT0gMSB8fCB3bmRXaWR0aFtiXSAhPT0gMSkge1xuICAgICAgbmFmW2FdID0gZ2V0TkFGKGNvZWZmc1thXSwgd25kV2lkdGhbYV0sIHRoaXMuX2JpdExlbmd0aCk7XG4gICAgICBuYWZbYl0gPSBnZXROQUYoY29lZmZzW2JdLCB3bmRXaWR0aFtiXSwgdGhpcy5fYml0TGVuZ3RoKTtcbiAgICAgIG1heCA9IE1hdGgubWF4KG5hZlthXS5sZW5ndGgsIG1heCk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYl0ubGVuZ3RoLCBtYXgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGNvbWIgPSBbXG4gICAgICBwb2ludHNbYV0sIC8qIDEgKi9cbiAgICAgIG51bGwsIC8qIDMgKi9cbiAgICAgIG51bGwsIC8qIDUgKi9cbiAgICAgIHBvaW50c1tiXSAvKiA3ICovXG4gICAgXTtcblxuICAgIC8vIFRyeSB0byBhdm9pZCBQcm9qZWN0aXZlIHBvaW50cywgaWYgcG9zc2libGVcbiAgICBpZiAocG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55KSA9PT0gMCkge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS5hZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9IGVsc2UgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueS5yZWROZWcoKSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBbXG4gICAgICAtMywgLyogLTEgLTEgKi9cbiAgICAgIC0xLCAvKiAtMSAwICovXG4gICAgICAtNSwgLyogLTEgMSAqL1xuICAgICAgLTcsIC8qIDAgLTEgKi9cbiAgICAgIDAsIC8qIDAgMCAqL1xuICAgICAgNywgLyogMCAxICovXG4gICAgICA1LCAvKiAxIC0xICovXG4gICAgICAxLCAvKiAxIDAgKi9cbiAgICAgIDMgIC8qIDEgMSAqL1xuICAgIF07XG5cbiAgICB2YXIganNmID0gZ2V0SlNGKGNvZWZmc1thXSwgY29lZmZzW2JdKTtcbiAgICBtYXggPSBNYXRoLm1heChqc2ZbMF0ubGVuZ3RoLCBtYXgpO1xuICAgIG5hZlthXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIG5hZltiXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF4OyBqKyspIHtcbiAgICAgIHZhciBqYSA9IGpzZlswXVtqXSB8IDA7XG4gICAgICB2YXIgamIgPSBqc2ZbMV1bal0gfCAwO1xuXG4gICAgICBuYWZbYV1bal0gPSBpbmRleFsoamEgKyAxKSAqIDMgKyAoamIgKyAxKV07XG4gICAgICBuYWZbYl1bal0gPSAwO1xuICAgICAgd25kW2FdID0gY29tYjtcbiAgICB9XG4gIH1cblxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIHZhciB0bXAgPSB0aGlzLl93bmFmVDQ7XG4gIGZvciAodmFyIGkgPSBtYXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGsgPSAwO1xuXG4gICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgdmFyIHplcm8gPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgICB0bXBbal0gPSBuYWZbal1baV0gfCAwO1xuICAgICAgICBpZiAodG1wW2pdICE9PSAwKVxuICAgICAgICAgIHplcm8gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghemVybylcbiAgICAgICAgYnJlYWs7XG4gICAgICBrKys7XG4gICAgICBpLS07XG4gICAgfVxuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG4gICAgaWYgKGkgPCAwKVxuICAgICAgYnJlYWs7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICB2YXIgeiA9IHRtcFtqXTtcbiAgICAgIHZhciBwO1xuICAgICAgaWYgKHogPT09IDApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZWxzZSBpZiAoeiA+IDApXG4gICAgICAgIHAgPSB3bmRbal1bKHogLSAxKSA+PiAxXTtcbiAgICAgIGVsc2UgaWYgKHogPCAwKVxuICAgICAgICBwID0gd25kW2pdWygteiAtIDEpID4+IDFdLm5lZygpO1xuXG4gICAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJylcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHApO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHApO1xuICAgIH1cbiAgfVxuICAvLyBaZXJvaWZ5IHJlZmVyZW5jZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB3bmRbaV0gPSBudWxsO1xuXG4gIGlmIChqYWNvYmlhblJlc3VsdClcbiAgICByZXR1cm4gYWNjO1xuICBlbHNlXG4gICAgcmV0dXJuIGFjYy50b1AoKTtcbn07XG5cbmZ1bmN0aW9uIEJhc2VQb2ludChjdXJ2ZSwgdHlwZSkge1xuICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBudWxsO1xufVxuQmFzZUN1cnZlLkJhc2VQb2ludCA9IEJhc2VQb2ludDtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKC8qb3RoZXIqLykge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcywgZW5jKSB7XG4gIGJ5dGVzID0gdXRpbHMudG9BcnJheShieXRlcywgZW5jKTtcblxuICB2YXIgbGVuID0gdGhpcy5wLmJ5dGVMZW5ndGgoKTtcblxuICAvLyB1bmNvbXByZXNzZWQsIGh5YnJpZC1vZGQsIGh5YnJpZC1ldmVuXG4gIGlmICgoYnl0ZXNbMF0gPT09IDB4MDQgfHwgYnl0ZXNbMF0gPT09IDB4MDYgfHwgYnl0ZXNbMF0gPT09IDB4MDcpICYmXG4gICAgICBieXRlcy5sZW5ndGggLSAxID09PSAyICogbGVuKSB7XG4gICAgaWYgKGJ5dGVzWzBdID09PSAweDA2KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMCk7XG4gICAgZWxzZSBpZiAoYnl0ZXNbMF0gPT09IDB4MDcpXG4gICAgICBhc3NlcnQoYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMV0gJSAyID09PSAxKTtcblxuICAgIHZhciByZXMgPSAgdGhpcy5wb2ludChieXRlcy5zbGljZSgxLCAxICsgbGVuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuc2xpY2UoMSArIGxlbiwgMSArIDIgKiBsZW4pKTtcblxuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAoKGJ5dGVzWzBdID09PSAweDAyIHx8IGJ5dGVzWzBdID09PSAweDAzKSAmJlxuICAgICAgICAgICAgICBieXRlcy5sZW5ndGggLSAxID09PSBsZW4pIHtcbiAgICByZXR1cm4gdGhpcy5wb2ludEZyb21YKGJ5dGVzLnNsaWNlKDEsIDEgKyBsZW4pLCBieXRlc1swXSA9PT0gMHgwMyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHBvaW50IGZvcm1hdCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkID0gZnVuY3Rpb24gZW5jb2RlQ29tcHJlc3NlZChlbmMpIHtcbiAgcmV0dXJuIHRoaXMuZW5jb2RlKGVuYywgdHJ1ZSk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9lbmNvZGUgPSBmdW5jdGlvbiBfZW5jb2RlKGNvbXBhY3QpIHtcbiAgdmFyIGxlbiA9IHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCk7XG4gIHZhciB4ID0gdGhpcy5nZXRYKCkudG9BcnJheSgnYmUnLCBsZW4pO1xuXG4gIGlmIChjb21wYWN0KVxuICAgIHJldHVybiBbIHRoaXMuZ2V0WSgpLmlzRXZlbigpID8gMHgwMiA6IDB4MDMgXS5jb25jYXQoeCk7XG5cbiAgcmV0dXJuIFsgMHgwNCBdLmNvbmNhdCh4LCB0aGlzLmdldFkoKS50b0FycmF5KCdiZScsIGxlbikpIDtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGVuYywgY29tcGFjdCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMuX2VuY29kZShjb21wYWN0KSwgZW5jKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUocG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHByZWNvbXB1dGVkID0ge1xuICAgIGRvdWJsZXM6IG51bGwsXG4gICAgbmFmOiBudWxsLFxuICAgIGJldGE6IG51bGxcbiAgfTtcbiAgcHJlY29tcHV0ZWQubmFmID0gdGhpcy5fZ2V0TkFGUG9pbnRzKDgpO1xuICBwcmVjb21wdXRlZC5kb3VibGVzID0gdGhpcy5fZ2V0RG91Ymxlcyg0LCBwb3dlcik7XG4gIHByZWNvbXB1dGVkLmJldGEgPSB0aGlzLl9nZXRCZXRhKCk7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBwcmVjb21wdXRlZDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2hhc0RvdWJsZXMgPSBmdW5jdGlvbiBfaGFzRG91YmxlcyhrKSB7XG4gIGlmICghdGhpcy5wcmVjb21wdXRlZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGRvdWJsZXMgPSB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG4gIGlmICghZG91YmxlcylcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGRvdWJsZXMucG9pbnRzLmxlbmd0aCA+PSBNYXRoLmNlaWwoKGsuYml0TGVuZ3RoKCkgKyAxKSAvIGRvdWJsZXMuc3RlcCk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXREb3VibGVzID0gZnVuY3Rpb24gX2dldERvdWJsZXMoc3RlcCwgcG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQgJiYgdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG5cbiAgdmFyIGRvdWJsZXMgPSBbIHRoaXMgXTtcbiAgdmFyIGFjYyA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG93ZXI7IGkgKz0gc3RlcCkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RlcDsgaisrKVxuICAgICAgYWNjID0gYWNjLmRibCgpO1xuICAgIGRvdWJsZXMucHVzaChhY2MpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RlcDogc3RlcCxcbiAgICBwb2ludHM6IGRvdWJsZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldE5BRlBvaW50cyA9IGZ1bmN0aW9uIF9nZXROQUZQb2ludHMod25kKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQubmFmKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtcblxuICB2YXIgcmVzID0gWyB0aGlzIF07XG4gIHZhciBtYXggPSAoMSA8PCB3bmQpIC0gMTtcbiAgdmFyIGRibCA9IG1heCA9PT0gMSA/IG51bGwgOiB0aGlzLmRibCgpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IG1heDsgaSsrKVxuICAgIHJlc1tpXSA9IHJlc1tpIC0gMV0uYWRkKGRibCk7XG4gIHJldHVybiB7XG4gICAgd25kOiB3bmQsXG4gICAgcG9pbnRzOiByZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKGspIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGs7IGkrKylcbiAgICByID0gci5kYmwoKTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG4vKipcbiAqIFJMUCBFbmNvZGluZyBiYXNlZCBvbjogaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL3dpa2kvd2lraS8lNUJFbmdsaXNoJTVELVJMUFxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIGRhdGEsIGNvbnZlcnQgaXQgdG8gYnVmZmVyIGlmIG5vdCwgYW5kIGEgbGVuZ3RoIGZvciByZWN1cnNpb25cbiAqIEBwYXJhbSBpbnB1dCAtIHdpbGwgYmUgY29udmVydGVkIHRvIGJ1ZmZlclxuICogQHJldHVybnMgcmV0dXJucyBidWZmZXIgb2YgZW5jb2RlZCBkYXRhXG4gKiovXG5mdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvdXRwdXQucHVzaChlbmNvZGUoaW5wdXRbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdChvdXRwdXQpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbZW5jb2RlTGVuZ3RoKGJ1Zi5sZW5ndGgsIDE5MiksIGJ1Zl0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGlucHV0QnVmID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXRCdWYubGVuZ3RoID09PSAxICYmIGlucHV0QnVmWzBdIDwgMTI4XG4gICAgICAgICAgICA/IGlucHV0QnVmXG4gICAgICAgICAgICA6IEJ1ZmZlci5jb25jYXQoW2VuY29kZUxlbmd0aChpbnB1dEJ1Zi5sZW5ndGgsIDEyOCksIGlucHV0QnVmXSk7XG4gICAgfVxufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG4vKipcbiAqIFBhcnNlIGludGVnZXJzLiBDaGVjayBpZiB0aGVyZSBpcyBubyBsZWFkaW5nIHplcm9zXG4gKiBAcGFyYW0gdiBUaGUgdmFsdWUgdG8gcGFyc2VcbiAqIEBwYXJhbSBiYXNlIFRoZSBiYXNlIHRvIHBhcnNlIHRoZSBpbnRlZ2VyIGludG9cbiAqL1xuZnVuY3Rpb24gc2FmZVBhcnNlSW50KHYsIGJhc2UpIHtcbiAgICBpZiAodi5zbGljZSgwLCAyKSA9PT0gJzAwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgUkxQOiBleHRyYSB6ZXJvcycpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodiwgYmFzZSk7XG59XG5mdW5jdGlvbiBlbmNvZGVMZW5ndGgobGVuLCBvZmZzZXQpIHtcbiAgICBpZiAobGVuIDwgNTYpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtsZW4gKyBvZmZzZXRdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBoZXhMZW5ndGggPSBpbnRUb0hleChsZW4pO1xuICAgICAgICB2YXIgbExlbmd0aCA9IGhleExlbmd0aC5sZW5ndGggLyAyO1xuICAgICAgICB2YXIgZmlyc3RCeXRlID0gaW50VG9IZXgob2Zmc2V0ICsgNTUgKyBsTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGZpcnN0Qnl0ZSArIGhleExlbmd0aCwgJ2hleCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCwgc3RyZWFtKSB7XG4gICAgaWYgKHN0cmVhbSA9PT0gdm9pZCAwKSB7IHN0cmVhbSA9IGZhbHNlOyB9XG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICB9XG4gICAgdmFyIGlucHV0QnVmZmVyID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgIHZhciBkZWNvZGVkID0gX2RlY29kZShpbnB1dEJ1ZmZlcik7XG4gICAgaWYgKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICB9XG4gICAgaWYgKGRlY29kZWQucmVtYWluZGVyLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVtYWluZGVyJyk7XG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVkLmRhdGE7XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbi8qKlxuICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIFJMUCBpbnB1dFxuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBvciBhbiBlbXB0eSBCdWZmZXIgaWYgbm8gaW5wdXRcbiAqL1xuZnVuY3Rpb24gZ2V0TGVuZ3RoKGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICB9XG4gICAgdmFyIGlucHV0QnVmZmVyID0gdG9CdWZmZXIoaW5wdXQpO1xuICAgIHZhciBmaXJzdEJ5dGUgPSBpbnB1dEJ1ZmZlclswXTtcbiAgICBpZiAoZmlyc3RCeXRlIDw9IDB4N2YpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyLmxlbmd0aDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmlyc3RCeXRlIDw9IDB4YjcpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Qnl0ZSAtIDB4N2Y7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGJmKSB7XG4gICAgICAgIHJldHVybiBmaXJzdEJ5dGUgLSAweGI2O1xuICAgIH1cbiAgICBlbHNlIGlmIChmaXJzdEJ5dGUgPD0gMHhmNykge1xuICAgICAgICAvLyBhIGxpc3QgYmV0d2VlbiAgMC01NSBieXRlcyBsb25nXG4gICAgICAgIHJldHVybiBmaXJzdEJ5dGUgLSAweGJmO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gYSBsaXN0ICBvdmVyIDU1IGJ5dGVzIGxvbmdcbiAgICAgICAgdmFyIGxsZW5ndGggPSBmaXJzdEJ5dGUgLSAweGY2O1xuICAgICAgICB2YXIgbGVuZ3RoID0gc2FmZVBhcnNlSW50KGlucHV0QnVmZmVyLnNsaWNlKDEsIGxsZW5ndGgpLnRvU3RyaW5nKCdoZXgnKSwgMTYpO1xuICAgICAgICByZXR1cm4gbGxlbmd0aCArIGxlbmd0aDtcbiAgICB9XG59XG5leHBvcnRzLmdldExlbmd0aCA9IGdldExlbmd0aDtcbi8qKiBEZWNvZGUgYW4gaW5wdXQgd2l0aCBSTFAgKi9cbmZ1bmN0aW9uIF9kZWNvZGUoaW5wdXQpIHtcbiAgICB2YXIgbGVuZ3RoLCBsbGVuZ3RoLCBkYXRhLCBpbm5lclJlbWFpbmRlciwgZDtcbiAgICB2YXIgZGVjb2RlZCA9IFtdO1xuICAgIHZhciBmaXJzdEJ5dGUgPSBpbnB1dFswXTtcbiAgICBpZiAoZmlyc3RCeXRlIDw9IDB4N2YpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBpbiB0aGUgWzB4MDAsIDB4N2ZdIHJhbmdlLCB0aGF0IGJ5dGUgaXMgaXRzIG93biBSTFAgZW5jb2RpbmcuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5zbGljZSgwLCAxKSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UoMSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGI3KSB7XG4gICAgICAgIC8vIHN0cmluZyBpcyAwLTU1IGJ5dGVzIGxvbmcuIEEgc2luZ2xlIGJ5dGUgd2l0aCB2YWx1ZSAweDgwIHBsdXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmdcbiAgICAgICAgLy8gVGhlIHJhbmdlIG9mIHRoZSBmaXJzdCBieXRlIGlzIFsweDgwLCAweGI3XVxuICAgICAgICBsZW5ndGggPSBmaXJzdEJ5dGUgLSAweDdmO1xuICAgICAgICAvLyBzZXQgMHg4MCBudWxsIHRvIDBcbiAgICAgICAgaWYgKGZpcnN0Qnl0ZSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBpbnB1dC5zbGljZSgxLCBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW5ndGggPT09IDIgJiYgZGF0YVswXSA8IDB4ODApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBybHAgZW5jb2Rpbmc6IGJ5dGUgbXVzdCBiZSBsZXNzIDB4ODAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UobGVuZ3RoKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmlyc3RCeXRlIDw9IDB4YmYpIHtcbiAgICAgICAgbGxlbmd0aCA9IGZpcnN0Qnl0ZSAtIDB4YjY7XG4gICAgICAgIGxlbmd0aCA9IHNhZmVQYXJzZUludChpbnB1dC5zbGljZSgxLCBsbGVuZ3RoKS50b1N0cmluZygnaGV4JyksIDE2KTtcbiAgICAgICAgZGF0YSA9IGlucHV0LnNsaWNlKGxsZW5ndGgsIGxlbmd0aCArIGxsZW5ndGgpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBSTFAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHJlbWFpbmRlcjogaW5wdXQuc2xpY2UobGVuZ3RoICsgbGxlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpcnN0Qnl0ZSA8PSAweGY3KSB7XG4gICAgICAgIC8vIGEgbGlzdCBiZXR3ZWVuICAwLTU1IGJ5dGVzIGxvbmdcbiAgICAgICAgbGVuZ3RoID0gZmlyc3RCeXRlIC0gMHhiZjtcbiAgICAgICAgaW5uZXJSZW1haW5kZXIgPSBpbnB1dC5zbGljZSgxLCBsZW5ndGgpO1xuICAgICAgICB3aGlsZSAoaW5uZXJSZW1haW5kZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBkID0gX2RlY29kZShpbm5lclJlbWFpbmRlcik7XG4gICAgICAgICAgICBkZWNvZGVkLnB1c2goZC5kYXRhKTtcbiAgICAgICAgICAgIGlubmVyUmVtYWluZGVyID0gZC5yZW1haW5kZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IGRlY29kZWQsXG4gICAgICAgICAgICByZW1haW5kZXI6IGlucHV0LnNsaWNlKGxlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBhIGxpc3QgIG92ZXIgNTUgYnl0ZXMgbG9uZ1xuICAgICAgICBsbGVuZ3RoID0gZmlyc3RCeXRlIC0gMHhmNjtcbiAgICAgICAgbGVuZ3RoID0gc2FmZVBhcnNlSW50KGlucHV0LnNsaWNlKDEsIGxsZW5ndGgpLnRvU3RyaW5nKCdoZXgnKSwgMTYpO1xuICAgICAgICB2YXIgdG90YWxMZW5ndGggPSBsbGVuZ3RoICsgbGVuZ3RoO1xuICAgICAgICBpZiAodG90YWxMZW5ndGggPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBybHA6IHRvdGFsIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIGlubmVyUmVtYWluZGVyID0gaW5wdXQuc2xpY2UobGxlbmd0aCwgdG90YWxMZW5ndGgpO1xuICAgICAgICBpZiAoaW5uZXJSZW1haW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmxwLCBMaXN0IGhhcyBhIGludmFsaWQgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGlubmVyUmVtYWluZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgZCA9IF9kZWNvZGUoaW5uZXJSZW1haW5kZXIpO1xuICAgICAgICAgICAgZGVjb2RlZC5wdXNoKGQuZGF0YSk7XG4gICAgICAgICAgICBpbm5lclJlbWFpbmRlciA9IGQucmVtYWluZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBkZWNvZGVkLFxuICAgICAgICAgICAgcmVtYWluZGVyOiBpbnB1dC5zbGljZSh0b3RhbExlbmd0aCksXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqIENoZWNrIGlmIGEgc3RyaW5nIGlzIHByZWZpeGVkIGJ5IDB4ICovXG5mdW5jdGlvbiBpc0hleFByZWZpeGVkKHN0cikge1xuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgMikgPT09ICcweCc7XG59XG4vKiogUmVtb3ZlcyAweCBmcm9tIGEgZ2l2ZW4gU3RyaW5nICovXG5mdW5jdGlvbiBzdHJpcEhleFByZWZpeChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIGlzSGV4UHJlZml4ZWQoc3RyKSA/IHN0ci5zbGljZSgyKSA6IHN0cjtcbn1cbi8qKiBUcmFuc2Zvcm0gYW4gaW50ZWdlciBpbnRvIGl0cyBoZXhhZGVjaW1hbCB2YWx1ZSAqL1xuZnVuY3Rpb24gaW50VG9IZXgoaW50ZWdlcikge1xuICAgIGlmIChpbnRlZ2VyIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50ZWdlciBhcyBhcmd1bWVudCwgbXVzdCBiZSB1bnNpZ25lZCEnKTtcbiAgICB9XG4gICAgdmFyIGhleCA9IGludGVnZXIudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoICUgMiA/IFwiMFwiICsgaGV4IDogaGV4O1xufVxuLyoqIFBhZCBhIHN0cmluZyB0byBiZSBldmVuICovXG5mdW5jdGlvbiBwYWRUb0V2ZW4oYSkge1xuICAgIHJldHVybiBhLmxlbmd0aCAlIDIgPyBcIjBcIiArIGEgOiBhO1xufVxuLyoqIFRyYW5zZm9ybSBhbiBpbnRlZ2VyIGludG8gYSBCdWZmZXIgKi9cbmZ1bmN0aW9uIGludFRvQnVmZmVyKGludGVnZXIpIHtcbiAgICB2YXIgaGV4ID0gaW50VG9IZXgoaW50ZWdlcik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpO1xufVxuLyoqIFRyYW5zZm9ybSBhbnl0aGluZyBpbnRvIGEgQnVmZmVyICovXG5mdW5jdGlvbiB0b0J1ZmZlcih2KSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGlzSGV4UHJlZml4ZWQodikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20ocGFkVG9FdmVuKHN0cmlwSGV4UHJlZml4KHYpKSwgJ2hleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRUb0J1ZmZlcih2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEJOLmlzQk4odikpIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmRcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciB0YXJnZXQgPSB7fVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXVxuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHNsaWNlO1xuZnVuY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCkge1xuICAgIHN0YXJ0ID0gc3RhcnQgfCAwO1xuICAgIHZhciBuZXdMZW4gPSBNYXRoLm1heChhcnJheUxpa2UubGVuZ3RoIC0gc3RhcnQsIDApO1xuICAgIHZhciBuZXdBcnIgPSBBcnJheShuZXdMZW4pO1xuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG5ld0xlbjsgaWR4KyspIHtcbiAgICAgICAgbmV3QXJyW2lkeF0gPSBhcnJheUxpa2Vbc3RhcnQgKyBpZHhdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIHNyYy5jb3B5KHRhcmdldCwgb2Zmc2V0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O2Vsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfTtcblxuICBCdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gdW5zaGlmdCh2KSB7XG4gICAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB2YXIgcmV0ID0gdGhpcy5oZWFkLmRhdGE7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgLS10aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIEJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcbiAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgfXJldHVybiByZXQ7XG4gIH07XG5cbiAgQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy5oZWFkLmRhdGE7XG4gICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKHApIHtcbiAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICByZXR1cm4gQnVmZmVyTGlzdDtcbn0oKTtcblxuaWYgKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pIHtcbiAgbW9kdWxlLmV4cG9ydHMucHJvdG90eXBlW3V0aWwuaW5zcGVjdC5jdXN0b21dID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYmogPSB1dGlsLmluc3BlY3QoeyBsZW5ndGg6IHRoaXMubGVuZ3RoIH0pO1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgKyBvYmo7XG4gIH07XG59IiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFnbG9iYWwubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IGdsb2JhbC5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGFzc1Rocm91Z2g7XG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCcuL19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKS5UcmFuc2Zvcm1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIGNyZWF0ZUtlY2Nha0hhc2ggPSByZXF1aXJlKCdrZWNjYWsnKTtcbnZhciBzZWNwMjU2azEgPSByZXF1aXJlKCdzZWNwMjU2azEnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBybHAgPSByZXF1aXJlKCdybHAnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIHJlcXVpcmUoJ2V0aGpzLXV0aWwnKSk7XG5cbi8qKlxuICogdGhlIG1heCBpbnRlZ2VyIHRoYXQgdGhpcyBWTSBjYW4gaGFuZGxlIChhIGBgYEJOYGBgKVxuICogQHZhciB7Qk59IE1BWF9JTlRFR0VSXG4gKi9cbmV4cG9ydHMuTUFYX0lOVEVHRVIgPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLCAxNik7XG5cbi8qKlxuICogMl4yNTYgKGEgYGBgQk5gYGApXG4gKiBAdmFyIHtCTn0gVFdPX1BPVzI1NlxuICovXG5leHBvcnRzLlRXT19QT1cyNTYgPSBuZXcgQk4oJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgMTYpO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsIChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X05VTExfU1xuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9OVUxMX1MgPSAnYzVkMjQ2MDE4NmY3MjMzYzkyN2U3ZGIyZGNjNzAzYzBlNTAwYjY1M2NhODIyNzNiN2JmYWQ4MDQ1ZDg1YTQ3MCc7XG5leHBvcnRzLlNIQTNfTlVMTF9TID0gZXhwb3J0cy5LRUNDQUsyNTZfTlVMTF9TO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsIChhIGBgYEJ1ZmZlcmBgYClcbiAqIEB2YXIge0J1ZmZlcn0gS0VDQ0FLMjU2X05VTExcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfTlVMTCA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X05VTExfUywgJ2hleCcpO1xuZXhwb3J0cy5TSEEzX05VTEwgPSBleHBvcnRzLktFQ0NBSzI1Nl9OVUxMO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgb2YgYW4gUkxQIG9mIGFuIGVtcHR5IGFycmF5IChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X1JMUF9BUlJBWV9TXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TID0gJzFkY2M0ZGU4ZGVjNzVkN2FhYjg1YjU2N2I2Y2NkNDFhZDMxMjQ1MWI5NDhhNzQxM2YwYTE0MmZkNDBkNDkzNDcnO1xuZXhwb3J0cy5TSEEzX1JMUF9BUlJBWV9TID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZX1M7XG5cbi8qKlxuICogS2VjY2FrLTI1NiBvZiBhbiBSTFAgb2YgYW4gZW1wdHkgYXJyYXkgKGEgYGBgQnVmZmVyYGBgKVxuICogQHZhciB7QnVmZmVyfSBLRUNDQUsyNTZfUkxQX0FSUkFZXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWSA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TLCAnaGV4Jyk7XG5leHBvcnRzLlNIQTNfUkxQX0FSUkFZID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZO1xuXG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiB0aGUgUkxQIG9mIG51bGwgIChhIGBgYFN0cmluZ2BgYClcbiAqIEB2YXIge1N0cmluZ30gS0VDQ0FLMjU2X1JMUF9TXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9TID0gJzU2ZTgxZjE3MWJjYzU1YTZmZjgzNDVlNjkyYzBmODZlNWI0OGUwMWI5OTZjYWRjMDAxNjIyZmI1ZTM2M2I0MjEnO1xuZXhwb3J0cy5TSEEzX1JMUF9TID0gZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1M7XG5cbi8qKlxuICogS2VjY2FrLTI1NiBoYXNoIG9mIHRoZSBSTFAgb2YgbnVsbCAoYSBgYGBCdWZmZXJgYGApXG4gKiBAdmFyIHtCdWZmZXJ9IEtFQ0NBSzI1Nl9STFBcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQID0gQnVmZmVyLmZyb20oZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1MsICdoZXgnKTtcbmV4cG9ydHMuU0hBM19STFAgPSBleHBvcnRzLktFQ0NBSzI1Nl9STFA7XG5cbi8qKlxuICogW2BCTmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2JuLmpzKVxuICogQHZhciB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydHMuQk4gPSBCTjtcblxuLyoqXG4gKiBbYHJscGBdKGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bWpzL3JscClcbiAqIEB2YXIge0Z1bmN0aW9ufVxuICovXG5leHBvcnRzLnJscCA9IHJscDtcblxuLyoqXG4gKiBbYHNlY3AyNTZrMWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jb2luanMvc2VjcDI1NmsxLW5vZGUvKVxuICogQHZhciB7T2JqZWN0fVxuICovXG5leHBvcnRzLnNlY3AyNTZrMSA9IHNlY3AyNTZrMTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYnVmZmVyIGZpbGxlZCB3aXRoIDBzXG4gKiBAbWV0aG9kIHplcm9zXG4gKiBAcGFyYW0ge051bWJlcn0gYnl0ZXMgIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGJ1ZmZlciBzaG91bGQgYmVcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy56ZXJvcyA9IGZ1bmN0aW9uIChieXRlcykge1xuICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKGJ5dGVzKS5maWxsKDApO1xufTtcblxuLyoqXG4gICogUmV0dXJucyBhIHplcm8gYWRkcmVzc1xuICAqIEBtZXRob2QgemVyb0FkZHJlc3NcbiAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICovXG5leHBvcnRzLnplcm9BZGRyZXNzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWRkcmVzc0xlbmd0aCA9IDIwO1xuICB2YXIgemVyb0FkZHJlc3MgPSBleHBvcnRzLnplcm9zKGFkZHJlc3NMZW5ndGgpO1xuICByZXR1cm4gZXhwb3J0cy5idWZmZXJUb0hleCh6ZXJvQWRkcmVzcyk7XG59O1xuXG4vKipcbiAqIExlZnQgUGFkcyBhbiBgQXJyYXlgIG9yIGBCdWZmZXJgIHdpdGggbGVhZGluZyB6ZXJvcyB0aWxsIGl0IGhhcyBgbGVuZ3RoYCBieXRlcy5cbiAqIE9yIGl0IHRydW5jYXRlcyB0aGUgYmVnaW5uaW5nIGlmIGl0IGV4Y2VlZHMuXG4gKiBAbWV0aG9kIGxzZXRMZW5ndGhcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fSBtc2cgdGhlIHZhbHVlIHRvIHBhZFxuICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBvdXRwdXQgc2hvdWxkIGJlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtyaWdodD1mYWxzZV0gd2hldGhlciB0byBzdGFydCBwYWRkaW5nIGZvcm0gdGhlIGxlZnQgb3IgcmlnaHRcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheX1cbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhMZWZ0ID0gZXhwb3J0cy5zZXRMZW5ndGggPSBmdW5jdGlvbiAobXNnLCBsZW5ndGgsIHJpZ2h0KSB7XG4gIHZhciBidWYgPSBleHBvcnRzLnplcm9zKGxlbmd0aCk7XG4gIG1zZyA9IGV4cG9ydHMudG9CdWZmZXIobXNnKTtcbiAgaWYgKHJpZ2h0KSB7XG4gICAgaWYgKG1zZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIG1zZy5jb3B5KGJ1Zik7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gbXNnLnNsaWNlKDAsIGxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG1zZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgIG1zZy5jb3B5KGJ1ZiwgbGVuZ3RoIC0gbXNnLmxlbmd0aCk7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gbXNnLnNsaWNlKC1sZW5ndGgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJpZ2h0IFBhZHMgYW4gYEFycmF5YCBvciBgQnVmZmVyYCB3aXRoIGxlYWRpbmcgemVyb3MgdGlsbCBpdCBoYXMgYGxlbmd0aGAgYnl0ZXMuXG4gKiBPciBpdCB0cnVuY2F0ZXMgdGhlIGJlZ2lubmluZyBpZiBpdCBleGNlZWRzLlxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl9IG1zZyB0aGUgdmFsdWUgdG8gcGFkXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIG91dHB1dCBzaG91bGQgYmVcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheX1cbiAqL1xuZXhwb3J0cy5zZXRMZW5ndGhSaWdodCA9IGZ1bmN0aW9uIChtc2csIGxlbmd0aCkge1xuICByZXR1cm4gZXhwb3J0cy5zZXRMZW5ndGgobXNnLCBsZW5ndGgsIHRydWUpO1xufTtcblxuLyoqXG4gKiBUcmltcyBsZWFkaW5nIHplcm9zIGZyb20gYSBgQnVmZmVyYCBvciBhbiBgQXJyYXlgXG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd9IGFcbiAqIEByZXR1cm4ge0J1ZmZlcnxBcnJheXxTdHJpbmd9XG4gKi9cbmV4cG9ydHMudW5wYWQgPSBleHBvcnRzLnN0cmlwWmVyb3MgPSBmdW5jdGlvbiAoYSkge1xuICBhID0gZXhwb3J0cy5zdHJpcEhleFByZWZpeChhKTtcbiAgdmFyIGZpcnN0ID0gYVswXTtcbiAgd2hpbGUgKGEubGVuZ3RoID4gMCAmJiBmaXJzdC50b1N0cmluZygpID09PSAnMCcpIHtcbiAgICBhID0gYS5zbGljZSgxKTtcbiAgICBmaXJzdCA9IGFbMF07XG4gIH1cbiAgcmV0dXJuIGE7XG59O1xuLyoqXG4gKiBBdHRlbXB0cyB0byB0dXJuIGEgdmFsdWUgaW50byBhIGBCdWZmZXJgLiBBcyBpbnB1dCBpdCBzdXBwb3J0cyBgQnVmZmVyYCwgYFN0cmluZ2AsIGBOdW1iZXJgLCBudWxsL3VuZGVmaW5lZCwgYEJOYCBhbmQgb3RoZXIgb2JqZWN0cyB3aXRoIGEgYHRvQXJyYXkoKWAgbWV0aG9kLlxuICogQHBhcmFtIHsqfSB2IHRoZSB2YWx1ZVxuICovXG5leHBvcnRzLnRvQnVmZmVyID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgdiA9IEJ1ZmZlci5mcm9tKHYpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZXhwb3J0cy5pc0hleFN0cmluZyh2KSkge1xuICAgICAgICB2ID0gQnVmZmVyLmZyb20oZXhwb3J0cy5wYWRUb0V2ZW4oZXhwb3J0cy5zdHJpcEhleFByZWZpeCh2KSksICdoZXgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSBCdWZmZXIuZnJvbSh2KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgdiA9IGV4cG9ydHMuaW50VG9CdWZmZXIodik7XG4gICAgfSBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKTtcbiAgICB9IGVsc2UgaWYgKEJOLmlzQk4odikpIHtcbiAgICAgIHYgPSB2LnRvQXJyYXlMaWtlKEJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmICh2LnRvQXJyYXkpIHtcbiAgICAgIC8vIGNvbnZlcnRzIGEgQk4gdG8gYSBCdWZmZXJcbiAgICAgIHYgPSBCdWZmZXIuZnJvbSh2LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB0eXBlJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIHRvIGEgYE51bWJlcmBcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEB0aHJvd3MgSWYgdGhlIGlucHV0IG51bWJlciBleGNlZWRzIDUzIGJpdHMuXG4gKi9cbmV4cG9ydHMuYnVmZmVyVG9JbnQgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIHJldHVybiBuZXcgQk4oZXhwb3J0cy50b0J1ZmZlcihidWYpKS50b051bWJlcigpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIGludG8gYSBoZXggYFN0cmluZ2BcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy5idWZmZXJUb0hleCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgYnVmID0gZXhwb3J0cy50b0J1ZmZlcihidWYpO1xuICByZXR1cm4gJzB4JyArIGJ1Zi50b1N0cmluZygnaGV4Jyk7XG59O1xuXG4vKipcbiAqIEludGVycHJldHMgYSBgQnVmZmVyYCBhcyBhIHNpZ25lZCBpbnRlZ2VyIGFuZCByZXR1cm5zIGEgYEJOYC4gQXNzdW1lcyAyNTYtYml0IG51bWJlcnMuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbnVtXG4gKiBAcmV0dXJuIHtCTn1cbiAqL1xuZXhwb3J0cy5mcm9tU2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbmV3IEJOKG51bSkuZnJvbVR3b3MoMjU2KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBgQk5gIHRvIGFuIHVuc2lnbmVkIGludGVnZXIgYW5kIHJldHVybnMgaXQgYXMgYSBgQnVmZmVyYC4gQXNzdW1lcyAyNTYtYml0IG51bWJlcnMuXG4gKiBAcGFyYW0ge0JOfSBudW1cbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy50b1Vuc2lnbmVkID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20obnVtLnRvVHdvcygyNTYpLnRvQXJyYXkoKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgS2VjY2FrIGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcGFyYW0ge051bWJlcn0gW2JpdHM9MjU2XSB0aGUgS2VjY2FrIHdpZHRoXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMua2VjY2FrID0gZnVuY3Rpb24gKGEsIGJpdHMpIHtcbiAgYSA9IGV4cG9ydHMudG9CdWZmZXIoYSk7XG4gIGlmICghYml0cykgYml0cyA9IDI1NjtcblxuICByZXR1cm4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrJyArIGJpdHMpLnVwZGF0ZShhKS5kaWdlc3QoKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBLZWNjYWstMjU2IGhhc2ggb2YgdGhlIGlucHV0LCBhbGlhcyBmb3Iga2VjY2FrKGEsIDI1NilcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXJ9IGEgdGhlIGlucHV0IGRhdGFcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5rZWNjYWsyNTYgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gZXhwb3J0cy5rZWNjYWsoYSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBLTMgKEtlY2NhaykgaGFzaCBvZiB0aGUgaW5wdXQgW09CU09MRVRFXVxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl8U3RyaW5nfE51bWJlcn0gYSB0aGUgaW5wdXQgZGF0YVxuICogQHBhcmFtIHtOdW1iZXJ9IFtiaXRzPTI1Nl0gdGhlIFNIQS0zIHdpZHRoXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuc2hhMyA9IGV4cG9ydHMua2VjY2FrO1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBMjU2IGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuc2hhMjU2ID0gZnVuY3Rpb24gKGEpIHtcbiAgYSA9IGV4cG9ydHMudG9CdWZmZXIoYSk7XG4gIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYSkuZGlnZXN0KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgUklQRU1EMTYwIGhhc2ggb2YgdGhlIGlucHV0XG4gKiBAcGFyYW0ge0J1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyfSBhIHRoZSBpbnB1dCBkYXRhXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHBhZGRlZCB3aGV0aGVyIGl0IHNob3VsZCBiZSBwYWRkZWQgdG8gMjU2IGJpdHMgb3Igbm90XG4gKiBAcmV0dXJuIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMucmlwZW1kMTYwID0gZnVuY3Rpb24gKGEsIHBhZGRlZCkge1xuICBhID0gZXhwb3J0cy50b0J1ZmZlcihhKTtcbiAgdmFyIGhhc2ggPSBjcmVhdGVIYXNoKCdybWQxNjAnKS51cGRhdGUoYSkuZGlnZXN0KCk7XG4gIGlmIChwYWRkZWQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5zZXRMZW5ndGgoaGFzaCwgMzIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBoYXNoO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgU0hBLTMgaGFzaCBvZiB0aGUgUkxQIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7QnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXJ9IGEgdGhlIGlucHV0IGRhdGFcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5ybHBoYXNoID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIGV4cG9ydHMua2VjY2FrKHJscC5lbmNvZGUoYSkpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByaXZhdGUga2V5IHNhdGlzZmllcyB0aGUgcnVsZXMgb2YgdGhlIGN1cnZlIHNlY3AyNTZrMS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcml2YXRlS2V5XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRQcml2YXRlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgcmV0dXJuIHNlY3AyNTZrMS5wcml2YXRlS2V5VmVyaWZ5KHByaXZhdGVLZXkpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHB1YmxpYyBrZXkgc2F0aXNmaWVzIHRoZSBydWxlcyBvZiB0aGUgY3VydmUgc2VjcDI1NmsxXG4gKiBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiBFdGhlcmV1bS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwdWJsaWNLZXkgVGhlIHR3byBwb2ludHMgb2YgYW4gdW5jb21wcmVzc2VkIGtleSwgdW5sZXNzIHNhbml0aXplIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Nhbml0aXplPWZhbHNlXSBBY2NlcHQgcHVibGljIGtleXMgaW4gb3RoZXIgZm9ybWF0c1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc1ZhbGlkUHVibGljID0gZnVuY3Rpb24gKHB1YmxpY0tleSwgc2FuaXRpemUpIHtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggPT09IDY0KSB7XG4gICAgLy8gQ29udmVydCB0byBTRUMxIGZvciBzZWNwMjU2azFcbiAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleVZlcmlmeShCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbNF0pLCBwdWJsaWNLZXldKSk7XG4gIH1cblxuICBpZiAoIXNhbml0aXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkocHVibGljS2V5KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXRoZXJldW0gYWRkcmVzcyBvZiBhIGdpdmVuIHB1YmxpYyBrZXkuXG4gKiBBY2NlcHRzIFwiRXRoZXJldW0gcHVibGljIGtleXNcIiBhbmQgU0VDMSBlbmNvZGVkIGtleXMuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHViS2V5IFRoZSB0d28gcG9pbnRzIG9mIGFuIHVuY29tcHJlc3NlZCBrZXksIHVubGVzcyBzYW5pdGl6ZSBpcyBlbmFibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzYW5pdGl6ZT1mYWxzZV0gQWNjZXB0IHB1YmxpYyBrZXlzIGluIG90aGVyIGZvcm1hdHNcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5wdWJUb0FkZHJlc3MgPSBleHBvcnRzLnB1YmxpY1RvQWRkcmVzcyA9IGZ1bmN0aW9uIChwdWJLZXksIHNhbml0aXplKSB7XG4gIHB1YktleSA9IGV4cG9ydHMudG9CdWZmZXIocHViS2V5KTtcbiAgaWYgKHNhbml0aXplICYmIHB1YktleS5sZW5ndGggIT09IDY0KSB7XG4gICAgcHViS2V5ID0gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQocHViS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG4gIH1cbiAgYXNzZXJ0KHB1YktleS5sZW5ndGggPT09IDY0KTtcbiAgLy8gT25seSB0YWtlIHRoZSBsb3dlciAxNjBiaXRzIG9mIHRoZSBoYXNoXG4gIHJldHVybiBleHBvcnRzLmtlY2NhayhwdWJLZXkpLnNsaWNlKC0yMCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIHB1YmxpYyBrZXkgb2YgYSBnaXZlbiBwcml2YXRlIGtleVxuICogQHBhcmFtIHtCdWZmZXJ9IHByaXZhdGVLZXkgQSBwcml2YXRlIGtleSBtdXN0IGJlIDI1NiBiaXRzIHdpZGVcbiAqIEByZXR1cm4ge0J1ZmZlcn1cbiAqL1xudmFyIHByaXZhdGVUb1B1YmxpYyA9IGV4cG9ydHMucHJpdmF0ZVRvUHVibGljID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgcHJpdmF0ZUtleSA9IGV4cG9ydHMudG9CdWZmZXIocHJpdmF0ZUtleSk7XG4gIC8vIHNraXAgdGhlIHR5cGUgZmxhZyBhbmQgdXNlIHRoZSBYLCBZIHBvaW50c1xuICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNyZWF0ZShwcml2YXRlS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcHVibGljIGtleSB0byB0aGUgRXRoZXJldW0gZm9ybWF0LlxuICogQHBhcmFtIHtCdWZmZXJ9IHB1YmxpY0tleVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLmltcG9ydFB1YmxpYyA9IGZ1bmN0aW9uIChwdWJsaWNLZXkpIHtcbiAgcHVibGljS2V5ID0gZXhwb3J0cy50b0J1ZmZlcihwdWJsaWNLZXkpO1xuICBpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICBwdWJsaWNLZXkgPSBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChwdWJsaWNLZXksIGZhbHNlKS5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gcHVibGljS2V5O1xufTtcblxuLyoqXG4gKiBFQ0RTQSBzaWduXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXNnSGFzaFxuICogQHBhcmFtIHtCdWZmZXJ9IHByaXZhdGVLZXlcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0cy5lY3NpZ24gPSBmdW5jdGlvbiAobXNnSGFzaCwgcHJpdmF0ZUtleSkge1xuICB2YXIgc2lnID0gc2VjcDI1NmsxLnNpZ24obXNnSGFzaCwgcHJpdmF0ZUtleSk7XG5cbiAgdmFyIHJldCA9IHt9O1xuICByZXQuciA9IHNpZy5zaWduYXR1cmUuc2xpY2UoMCwgMzIpO1xuICByZXQucyA9IHNpZy5zaWduYXR1cmUuc2xpY2UoMzIsIDY0KTtcbiAgcmV0LnYgPSBzaWcucmVjb3ZlcnkgKyAyNztcbiAgcmV0dXJuIHJldDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUga2VjY2FrLTI1NiBoYXNoIG9mIGBtZXNzYWdlYCwgcHJlZml4ZWQgd2l0aCB0aGUgaGVhZGVyIHVzZWQgYnkgdGhlIGBldGhfc2lnbmAgUlBDIGNhbGwuXG4gKiBUaGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGZlZCBpbnRvIGBlY3NpZ25gIHRvIHByb2R1Y2UgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBgZXRoX3NpZ25gXG4gKiBjYWxsIGZvciBhIGdpdmVuIGBtZXNzYWdlYCwgb3IgZmVkIHRvIGBlY3JlY292ZXJgIGFsb25nIHdpdGggYSBzaWduYXR1cmUgdG8gcmVjb3ZlciB0aGUgcHVibGljIGtleVxuICogdXNlZCB0byBwcm9kdWNlIHRoZSBzaWduYXR1cmUuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnMge0J1ZmZlcn0gaGFzaFxuICovXG5leHBvcnRzLmhhc2hQZXJzb25hbE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICB2YXIgcHJlZml4ID0gZXhwb3J0cy50b0J1ZmZlcignXFx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4nICsgbWVzc2FnZS5sZW5ndGgudG9TdHJpbmcoKSk7XG4gIHJldHVybiBleHBvcnRzLmtlY2NhayhCdWZmZXIuY29uY2F0KFtwcmVmaXgsIG1lc3NhZ2VdKSk7XG59O1xuXG4vKipcbiAqIEVDRFNBIHB1YmxpYyBrZXkgcmVjb3ZlcnkgZnJvbSBzaWduYXR1cmVcbiAqIEBwYXJhbSB7QnVmZmVyfSBtc2dIYXNoXG4gKiBAcGFyYW0ge051bWJlcn0gdlxuICogQHBhcmFtIHtCdWZmZXJ9IHJcbiAqIEBwYXJhbSB7QnVmZmVyfSBzXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHB1YmxpY0tleVxuICovXG5leHBvcnRzLmVjcmVjb3ZlciA9IGZ1bmN0aW9uIChtc2dIYXNoLCB2LCByLCBzKSB7XG4gIHZhciBzaWduYXR1cmUgPSBCdWZmZXIuY29uY2F0KFtleHBvcnRzLnNldExlbmd0aChyLCAzMiksIGV4cG9ydHMuc2V0TGVuZ3RoKHMsIDMyKV0sIDY0KTtcbiAgdmFyIHJlY292ZXJ5ID0gdiAtIDI3O1xuICBpZiAocmVjb3ZlcnkgIT09IDAgJiYgcmVjb3ZlcnkgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIHYgdmFsdWUnKTtcbiAgfVxuICB2YXIgc2VuZGVyUHViS2V5ID0gc2VjcDI1NmsxLnJlY292ZXIobXNnSGFzaCwgc2lnbmF0dXJlLCByZWNvdmVyeSk7XG4gIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChzZW5kZXJQdWJLZXksIGZhbHNlKS5zbGljZSgxKTtcbn07XG5cbi8qKlxuICogQ29udmVydCBzaWduYXR1cmUgcGFyYW1ldGVycyBpbnRvIHRoZSBmb3JtYXQgb2YgYGV0aF9zaWduYCBSUEMgbWV0aG9kXG4gKiBAcGFyYW0ge051bWJlcn0gdlxuICogQHBhcmFtIHtCdWZmZXJ9IHJcbiAqIEBwYXJhbSB7QnVmZmVyfSBzXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHNpZ1xuICovXG5leHBvcnRzLnRvUnBjU2lnID0gZnVuY3Rpb24gKHYsIHIsIHMpIHtcbiAgLy8gTk9URTogd2l0aCBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIGNoYWluSWQgdGhpcyBtaWdodCBuZWVkIHRvIGJlIHVwZGF0ZWRcbiAgaWYgKHYgIT09IDI3ICYmIHYgIT09IDI4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlY292ZXJ5IGlkJyk7XG4gIH1cblxuICAvLyBnZXRoIChhbmQgdGhlIFJQQyBldGhfc2lnbiBtZXRob2QpIHVzZXMgdGhlIDY1IGJ5dGUgZm9ybWF0IHVzZWQgYnkgQml0Y29pblxuICAvLyBGSVhNRTogdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9nby1ldGhlcmV1bS9pc3N1ZXMvMjA1M1xuICByZXR1cm4gZXhwb3J0cy5idWZmZXJUb0hleChCdWZmZXIuY29uY2F0KFtleHBvcnRzLnNldExlbmd0aExlZnQociwgMzIpLCBleHBvcnRzLnNldExlbmd0aExlZnQocywgMzIpLCBleHBvcnRzLnRvQnVmZmVyKHYgLSAyNyldKSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgc2lnbmF0dXJlIGZvcm1hdCBvZiB0aGUgYGV0aF9zaWduYCBSUEMgbWV0aG9kIHRvIHNpZ25hdHVyZSBwYXJhbWV0ZXJzXG4gKiBOT1RFOiBhbGwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBnZXRoOiBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW0vZ28tZXRoZXJldW0vaXNzdWVzLzIwNTNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzaWdcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZXhwb3J0cy5mcm9tUnBjU2lnID0gZnVuY3Rpb24gKHNpZykge1xuICBzaWcgPSBleHBvcnRzLnRvQnVmZmVyKHNpZyk7XG5cbiAgLy8gTk9URTogd2l0aCBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIGNoYWluSWQgdGhpcyBtaWdodCBuZWVkIHRvIGJlIHVwZGF0ZWRcbiAgaWYgKHNpZy5sZW5ndGggIT09IDY1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgnKTtcbiAgfVxuXG4gIHZhciB2ID0gc2lnWzY0XTtcbiAgLy8gc3VwcG9ydCBib3RoIHZlcnNpb25zIG9mIGBldGhfc2lnbmAgcmVzcG9uc2VzXG4gIGlmICh2IDwgMjcpIHtcbiAgICB2ICs9IDI3O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2OiB2LFxuICAgIHI6IHNpZy5zbGljZSgwLCAzMiksXG4gICAgczogc2lnLnNsaWNlKDMyLCA2NClcbiAgfTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXRoZXJldW0gYWRkcmVzcyBvZiBhIGdpdmVuIHByaXZhdGUga2V5XG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJpdmF0ZUtleSBBIHByaXZhdGUga2V5IG11c3QgYmUgMjU2IGJpdHMgd2lkZVxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLnByaXZhdGVUb0FkZHJlc3MgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICByZXR1cm4gZXhwb3J0cy5wdWJsaWNUb0FkZHJlc3MocHJpdmF0ZVRvUHVibGljKHByaXZhdGVLZXkpKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBhZGRyZXNzIGlzIGEgdmFsaWQuIEFjY2VwdHMgY2hlY2tzdW1tZWQgYWRkcmVzc2VzIHRvb1xuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNWYWxpZEFkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICByZXR1cm4gKC9eMHhbMC05YS1mQS1GXXs0MH0kLy50ZXN0KGFkZHJlc3MpXG4gICk7XG59O1xuXG4vKipcbiAgKiBDaGVja3MgaWYgYSBnaXZlbiBhZGRyZXNzIGlzIGEgemVybyBhZGRyZXNzXG4gICogQG1ldGhvZCBpc1plcm9BZGRyZXNzXG4gICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAqL1xuZXhwb3J0cy5pc1plcm9BZGRyZXNzID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgdmFyIHplcm9BZGRyZXNzID0gZXhwb3J0cy56ZXJvQWRkcmVzcygpO1xuICByZXR1cm4gemVyb0FkZHJlc3MgPT09IGV4cG9ydHMuYWRkSGV4UHJlZml4KGFkZHJlc3MpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY2hlY2tzdW1tZWQgYWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3NcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0NoZWNrc3VtQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gIGFkZHJlc3MgPSBleHBvcnRzLnN0cmlwSGV4UHJlZml4KGFkZHJlc3MpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBoYXNoID0gZXhwb3J0cy5rZWNjYWsoYWRkcmVzcykudG9TdHJpbmcoJ2hleCcpO1xuICB2YXIgcmV0ID0gJzB4JztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocGFyc2VJbnQoaGFzaFtpXSwgMTYpID49IDgpIHtcbiAgICAgIHJldCArPSBhZGRyZXNzW2ldLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCArPSBhZGRyZXNzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWRkcmVzcyBpcyBhIHZhbGlkIGNoZWNrc3VtbWVkIGFkZHJlc3NcbiAqIEBwYXJhbSB7QnVmZmVyfSBhZGRyZXNzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDaGVja3N1bUFkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICByZXR1cm4gZXhwb3J0cy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSAmJiBleHBvcnRzLnRvQ2hlY2tzdW1BZGRyZXNzKGFkZHJlc3MpID09PSBhZGRyZXNzO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWRkcmVzcyBvZiBhIG5ld2x5IGNyZWF0ZWQgY29udHJhY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBmcm9tIHRoZSBhZGRyZXNzIHdoaWNoIGlzIGNyZWF0aW5nIHRoaXMgbmV3IGFkZHJlc3NcbiAqIEBwYXJhbSB7QnVmZmVyfSBub25jZSB0aGUgbm9uY2Ugb2YgdGhlIGZyb20gYWNjb3VudFxuICogQHJldHVybiB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdlbmVyYXRlQWRkcmVzcyA9IGZ1bmN0aW9uIChmcm9tLCBub25jZSkge1xuICBmcm9tID0gZXhwb3J0cy50b0J1ZmZlcihmcm9tKTtcbiAgbm9uY2UgPSBuZXcgQk4obm9uY2UpO1xuXG4gIGlmIChub25jZS5pc1plcm8oKSkge1xuICAgIC8vIGluIFJMUCB3ZSB3YW50IHRvIGVuY29kZSBudWxsIGluIHRoZSBjYXNlIG9mIHplcm8gbm9uY2VcbiAgICAvLyByZWFkIHRoZSBSTFAgZG9jdW1lbnRhdGlvbiBmb3IgYW4gYW5zd2VyIGlmIHlvdSBkYXJlXG4gICAgbm9uY2UgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIG5vbmNlID0gQnVmZmVyLmZyb20obm9uY2UudG9BcnJheSgpKTtcbiAgfVxuXG4gIC8vIE9ubHkgdGFrZSB0aGUgbG93ZXIgMTYwYml0cyBvZiB0aGUgaGFzaFxuICByZXR1cm4gZXhwb3J0cy5ybHBoYXNoKFtmcm9tLCBub25jZV0pLnNsaWNlKC0yMCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYWRkcmVzcyBiZWxvbmdzIHRvIGEgcHJlY29tcGlsZWQgYWNjb3VudCAoQnl6YW50aXVtKVxuICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBhZGRyZXNzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLmlzUHJlY29tcGlsZWQgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICB2YXIgYSA9IGV4cG9ydHMudW5wYWQoYWRkcmVzcyk7XG4gIHJldHVybiBhLmxlbmd0aCA9PT0gMSAmJiBhWzBdID49IDEgJiYgYVswXSA8PSA4O1xufTtcblxuLyoqXG4gKiBBZGRzIFwiMHhcIiB0byBhIGdpdmVuIGBTdHJpbmdgIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgc3RhcnQgd2l0aCBcIjB4XCJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy5hZGRIZXhQcmVmaXggPSBmdW5jdGlvbiAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy5pc0hleFByZWZpeGVkKHN0cikgPyBzdHIgOiAnMHgnICsgc3RyO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBFQ0RTQSBzaWduYXR1cmVcbiAqIEBtZXRob2QgaXNWYWxpZFNpZ25hdHVyZVxuICogQHBhcmFtIHtCdWZmZXJ9IHZcbiAqIEBwYXJhbSB7QnVmZmVyfSByXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc1xuICogQHBhcmFtIHtCb29sZWFufSBbaG9tZXN0ZWFkPXRydWVdXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNWYWxpZFNpZ25hdHVyZSA9IGZ1bmN0aW9uICh2LCByLCBzLCBob21lc3RlYWQpIHtcbiAgdmFyIFNFQ1AyNTZLMV9OX0RJVl8yID0gbmV3IEJOKCc3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVkNTc2ZTczNTdhNDUwMWRkZmU5MmY0NjY4MWIyMGEwJywgMTYpO1xuICB2YXIgU0VDUDI1NksxX04gPSBuZXcgQk4oJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDEnLCAxNik7XG5cbiAgaWYgKHIubGVuZ3RoICE9PSAzMiB8fCBzLmxlbmd0aCAhPT0gMzIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodiAhPT0gMjcgJiYgdiAhPT0gMjgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByID0gbmV3IEJOKHIpO1xuICBzID0gbmV3IEJOKHMpO1xuXG4gIGlmIChyLmlzWmVybygpIHx8IHIuZ3QoU0VDUDI1NksxX04pIHx8IHMuaXNaZXJvKCkgfHwgcy5ndChTRUNQMjU2SzFfTikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaG9tZXN0ZWFkID09PSBmYWxzZSAmJiBuZXcgQk4ocykuY21wKFNFQ1AyNTZLMV9OX0RJVl8yKSA9PT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBCdWZmZXJgIG9yIGBBcnJheWAgdG8gSlNPTlxuICogQHBhcmFtIHtCdWZmZXJ8QXJyYXl9IGJhXG4gKiBAcmV0dXJuIHtBcnJheXxTdHJpbmd8bnVsbH1cbiAqL1xuZXhwb3J0cy5iYVRvSlNPTiA9IGZ1bmN0aW9uIChiYSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJhKSkge1xuICAgIHJldHVybiAnMHgnICsgYmEudG9TdHJpbmcoJ2hleCcpO1xuICB9IGVsc2UgaWYgKGJhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnJheS5wdXNoKGV4cG9ydHMuYmFUb0pTT04oYmFbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59O1xuXG4vKipcbiAqIERlZmluZXMgcHJvcGVydGllcyBvbiBhIGBPYmplY3RgLiBJdCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdW5kZXJseWluZyBkYXRhIGlzIGJpbmFyeS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWxmIHRoZSBgT2JqZWN0YCB0byBkZWZpbmUgcHJvcGVydGllcyBvblxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIGFuIGFycmF5IGZpZWxkcyB0byBkZWZpbmUuIEZpZWxkcyBjYW4gY29udGFpbjpcbiAqICogYG5hbWVgIC0gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnRpZXNcbiAqICogYGxlbmd0aGAgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBmaWVsZCBjYW4gaGF2ZVxuICogKiBgYWxsb3dMZXNzYCAtIGlmIHRoZSBmaWVsZCBjYW4gYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGhcbiAqICogYGFsbG93RW1wdHlgXG4gKiBAcGFyYW0geyp9IGRhdGEgZGF0YSB0byBiZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGUgZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0cy5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHNlbGYsIGZpZWxkcywgZGF0YSkge1xuICBzZWxmLnJhdyA9IFtdO1xuICBzZWxmLl9maWVsZHMgPSBbXTtcblxuICAvLyBhdHRhY2ggdGhlIGB0b0pTT05gXG4gIHNlbGYudG9KU09OID0gZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBzZWxmLl9maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgb2JqW2ZpZWxkXSA9ICcweCcgKyBzZWxmW2ZpZWxkXS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBleHBvcnRzLmJhVG9KU09OKHRoaXMucmF3KTtcbiAgfTtcblxuICBzZWxmLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gcmxwLmVuY29kZShzZWxmLnJhdyk7XG4gIH07XG5cbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkLCBpKSB7XG4gICAgc2VsZi5fZmllbGRzLnB1c2goZmllbGQubmFtZSk7XG4gICAgZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgcmV0dXJuIHNlbGYucmF3W2ldO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR0ZXIodikge1xuICAgICAgdiA9IGV4cG9ydHMudG9CdWZmZXIodik7XG5cbiAgICAgIGlmICh2LnRvU3RyaW5nKCdoZXgnKSA9PT0gJzAwJyAmJiAhZmllbGQuYWxsb3daZXJvKSB7XG4gICAgICAgIHYgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5hbGxvd0xlc3MgJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgIHYgPSBleHBvcnRzLnN0cmlwWmVyb3Modik7XG4gICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPj0gdi5sZW5ndGgsICdUaGUgZmllbGQgJyArIGZpZWxkLm5hbWUgKyAnIG11c3Qgbm90IGhhdmUgbW9yZSAnICsgZmllbGQubGVuZ3RoICsgJyBieXRlcycpO1xuICAgICAgfSBlbHNlIGlmICghKGZpZWxkLmFsbG93WmVybyAmJiB2Lmxlbmd0aCA9PT0gMCkgJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgIGFzc2VydChmaWVsZC5sZW5ndGggPT09IHYubGVuZ3RoLCAnVGhlIGZpZWxkICcgKyBmaWVsZC5uYW1lICsgJyBtdXN0IGhhdmUgYnl0ZSBsZW5ndGggb2YgJyArIGZpZWxkLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYucmF3W2ldID0gdjtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQubmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgc2V0OiBzZXR0ZXJcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5kZWZhdWx0KSB7XG4gICAgICBzZWxmW2ZpZWxkLm5hbWVdID0gZmllbGQuZGVmYXVsdDtcbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggYWxpYXNcbiAgICBpZiAoZmllbGQuYWxpYXMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBmaWVsZC5hbGlhcywge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBzZXQ6IHNldHRlcixcbiAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gaWYgdGhlIGNvbnN0dWN0b3IgaXMgcGFzc2VkIGRhdGFcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZXhwb3J0cy5zdHJpcEhleFByZWZpeChkYXRhKSwgJ2hleCcpO1xuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBybHAuZGVjb2RlKGRhdGEpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPiBzZWxmLl9maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBpbiBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBhbGwgdGhlIGl0ZW1zIGFyZSBidWZmZXJzXG4gICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgc2VsZltzZWxmLl9maWVsZHNbaV1dID0gZXhwb3J0cy50b0J1ZmZlcihkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihkYXRhKSkgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGlmIChrZXlzLmluZGV4T2YoZmllbGQubmFtZSkgIT09IC0xKSBzZWxmW2ZpZWxkLm5hbWVdID0gZGF0YVtmaWVsZC5uYW1lXTtcbiAgICAgICAgaWYgKGtleXMuaW5kZXhPZihmaWVsZC5hbGlhcykgIT09IC0xKSBzZWxmW2ZpZWxkLmFsaWFzXSA9IGRhdGFbZmllbGQuYWxpYXNdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkYXRhJyk7XG4gICAgfVxuICB9XG59OyIsIid1c2Ugc3RyaWN0J1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIE1ENSA9IHJlcXVpcmUoJ21kNS5qcycpXG52YXIgUklQRU1EMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxudmFyIEJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG5cbmZ1bmN0aW9uIEhhc2ggKGhhc2gpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2ggPSBoYXNoXG59XG5cbmluaGVyaXRzKEhhc2gsIEJhc2UpXG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxufVxuXG5IYXNoLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSGFzaCAoYWxnKSB7XG4gIGFsZyA9IGFsZy50b0xvd2VyQ2FzZSgpXG4gIGlmIChhbGcgPT09ICdtZDUnKSByZXR1cm4gbmV3IE1ENSgpXG4gIGlmIChhbGcgPT09ICdybWQxNjAnIHx8IGFsZyA9PT0gJ3JpcGVtZDE2MCcpIHJldHVybiBuZXcgUklQRU1EMTYwKClcblxuICByZXR1cm4gbmV3IEhhc2goc2hhKGFsZykpXG59XG4iLCIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2VuZC1vZi1zdHJlYW0gd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO1xuXG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW9zKHN0cmVhbSwgbnVsbCwgb3B0cyk7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gIHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgb3B0cy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLnJlYWRhYmxlO1xuICB2YXIgd3JpdGFibGUgPSBvcHRzLndyaXRhYmxlIHx8IG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZTtcblxuICB2YXIgb25sZWdhY3lmaW5pc2ggPSBmdW5jdGlvbiBvbmxlZ2FjeWZpbmlzaCgpIHtcbiAgICBpZiAoIXN0cmVhbS53cml0YWJsZSkgb25maW5pc2goKTtcbiAgfTtcblxuICB2YXIgd3JpdGFibGVFbmRlZCA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZSAmJiBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ7XG5cbiAgdmFyIG9uZmluaXNoID0gZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICB3cml0YWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXJlYWRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgdmFyIHJlYWRhYmxlRW5kZWQgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGUgJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ7XG5cbiAgdmFyIG9uZW5kID0gZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICByZWFkYWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXdyaXRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICB9O1xuXG4gIHZhciBvbmNsb3NlID0gZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICB2YXIgZXJyO1xuXG4gICAgaWYgKHJlYWRhYmxlICYmICFyZWFkYWJsZUVuZGVkKSB7XG4gICAgICBpZiAoIXN0cmVhbS5fcmVhZGFibGVTdGF0ZSB8fCAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSBlcnIgPSBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKTtcbiAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgICB9XG5cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl93cml0YWJsZVN0YXRlIHx8ICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgb25yZXF1ZXN0ID0gZnVuY3Rpb24gb25yZXF1ZXN0KCkge1xuICAgIHN0cmVhbS5yZXEub24oJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgfTtcblxuICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHtcbiAgICBzdHJlYW0ub24oJ2NvbXBsZXRlJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5vbignYWJvcnQnLCBvbmNsb3NlKTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7ZWxzZSBzdHJlYW0ub24oJ3JlcXVlc3QnLCBvbnJlcXVlc3QpO1xuICB9IGVsc2UgaWYgKHdyaXRhYmxlICYmICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAvLyBsZWdhY3kgc3RyZWFtc1xuICAgIHN0cmVhbS5vbignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5vbignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gIH1cblxuICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlb3M7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmVzID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgY3VydmUgPSByZXF1aXJlKCcuL2N1cnZlJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFByZXNldEN1cnZlKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3Nob3J0JylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGN1cnZlLnNob3J0KG9wdGlvbnMpO1xuICBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdlZHdhcmRzJylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGN1cnZlLmVkd2FyZHMob3B0aW9ucyk7XG4gIGVsc2VcbiAgICB0aGlzLmN1cnZlID0gbmV3IGN1cnZlLm1vbnQob3B0aW9ucyk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG5cbiAgYXNzZXJ0KHRoaXMuZy52YWxpZGF0ZSgpLCAnSW52YWxpZCBjdXJ2ZScpO1xuICBhc3NlcnQodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwgJ0ludmFsaWQgY3VydmUsIEcqTiAhPSBPJyk7XG59XG5jdXJ2ZXMuUHJlc2V0Q3VydmUgPSBQcmVzZXRDdXJ2ZTtcblxuZnVuY3Rpb24gZGVmaW5lQ3VydmUobmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjdXJ2ZSA9IG5ldyBQcmVzZXRDdXJ2ZShvcHRpb25zKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJ2ZXMsIG5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogY3VydmVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGN1cnZlO1xuICAgIH1cbiAgfSk7XG59XG5cbmRlZmluZUN1cnZlKCdwMTkyJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AxOTInLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTInLFxuICAgICcwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjI0Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AyMjQnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUnLFxuICBiOiAnYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEnLFxuICAgICdiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjU2Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiJyxcbiAgbjogJ2ZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2JyxcbiAgICAnNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDM4NCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMnLFxuICBiOiAnYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgJyArXG4gICAgICc1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZicsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSAnICtcbiAgICAgJ2Y0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczJyxcbiAgaGFzaDogaGFzaC5zaGEzODQsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2FhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4ICcgK1xuICAgICc1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNycsXG4gICAgJzM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwICcgK1xuICAgICcwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZidcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwNTIxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgJyArXG4gICAgICc5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAnICtcbiAgICAgJzNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwJyxcbiAgbjogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggJyArXG4gICAgICdmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOScsXG4gIGhhc2g6IGhhc2guc2hhNTEyLFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAnICtcbiAgICAnMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgJyArXG4gICAgJ2EyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2JyxcbiAgICAnMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgJyArXG4gICAgJzU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxICcgK1xuICAgICczZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdjdXJ2ZTI1NTE5Jywge1xuICB0eXBlOiAnbW9udCcsXG4gIHByaW1lOiAncDI1NTE5JyxcbiAgcDogJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnLFxuICBhOiAnNzZkMDYnLFxuICBiOiAnMScsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzknXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnZWQyNTUxOScsIHtcbiAgdHlwZTogJ2Vkd2FyZHMnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJy0xJyxcbiAgYzogJzEnLFxuICAvLyAtMTIxNjY1ICogKDEyMTY2Nl4oLTEpKSAobW9kIFApXG4gIGQ6ICc1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzJyxcbiAgbjogJzEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYScsXG5cbiAgICAvLyA0LzVcbiAgICAnNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCdcbiAgXVxufSk7XG5cbnZhciBwcmU7XG50cnkge1xuICBwcmUgPSByZXF1aXJlKCcuL3ByZWNvbXB1dGVkL3NlY3AyNTZrMScpO1xufSBjYXRjaCAoZSkge1xuICBwcmUgPSB1bmRlZmluZWQ7XG59XG5cbmRlZmluZUN1cnZlKCdzZWNwMjU2azEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiAnazI1NicsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicsXG4gIGE6ICcwJyxcbiAgYjogJzcnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEnLFxuICBoOiAnMScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuXG4gIC8vIFByZWNvbXB1dGVkIGVuZG9tb3JwaGlzbVxuICBiZXRhOiAnN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZScsXG4gIGxhbWJkYTogJzUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzInLFxuICBiYXNpczogW1xuICAgIHtcbiAgICAgIGE6ICczMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNScsXG4gICAgICBiOiAnLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzJ1xuICAgIH0sXG4gICAge1xuICAgICAgYTogJzExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCcsXG4gICAgICBiOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnXG4gICAgfVxuICBdLFxuXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnLFxuICAgICc0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4JyxcbiAgICBwcmVcbiAgXVxufSk7XG4iLCJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIGNvbXBhcmUgYW5kIGlzQnVmZmVyIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvYmxvYi82ODBlOWU1ZTQ4OGYyMmFhYzI3NTk5YTU3ZGM4NDRhNjMxNTkyOGRkL2luZGV4LmpzXG4vLyBvcmlnaW5hbCBub3RpY2U6XG5cbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHggPSBhLmxlbmd0aDtcbiAgdmFyIHkgPSBiLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXTtcbiAgICAgIHkgPSBiW2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuZnVuY3Rpb24gaXNCdWZmZXIoYikge1xuICBpZiAoZ2xvYmFsLkJ1ZmZlciAmJiB0eXBlb2YgZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKGIpO1xuICB9XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpO1xufVxuXG4vLyBiYXNlZCBvbiBub2RlIGFzc2VydCwgb3JpZ2luYWwgbm90aWNlOlxuLy8gTkI6IFRoZSBVUkwgdG8gdGhlIENvbW1vbkpTIHNwZWMgaXMga2VwdCBqdXN0IGZvciB0cmFkaXRpb24uXG4vLyAgICAgbm9kZS1hc3NlcnQgaGFzIGV2b2x2ZWQgYSBsb3Qgc2luY2UgdGhlbiwgYm90aCBpbiBBUEkgYW5kIGJlaGF2aW9yLlxuXG4vLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsLycpO1xudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb28oKSB7fS5uYW1lID09PSAnZm9vJztcbn0oKSk7XG5mdW5jdGlvbiBwVG9TdHJpbmcgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5mdW5jdGlvbiBpc1ZpZXcoYXJyYnVmKSB7XG4gIGlmIChpc0J1ZmZlcihhcnJidWYpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhhcnJidWYpO1xuICB9XG4gIGlmICghYXJyYnVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcnJidWYgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhcnJidWYuYnVmZmVyICYmIGFycmJ1Zi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIDEuIFRoZSBhc3NlcnQgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyB0aGF0IHRocm93XG4vLyBBc3NlcnRpb25FcnJvcidzIHdoZW4gcGFydGljdWxhciBjb25kaXRpb25zIGFyZSBub3QgbWV0LiBUaGVcbi8vIGFzc2VydCBtb2R1bGUgbXVzdCBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlLlxuXG52YXIgYXNzZXJ0ID0gbW9kdWxlLmV4cG9ydHMgPSBvaztcblxuLy8gMi4gVGhlIEFzc2VydGlvbkVycm9yIGlzIGRlZmluZWQgaW4gYXNzZXJ0LlxuLy8gbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6IG1lc3NhZ2UsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWwsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pXG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2Jsb2IvYWRlZWVlYzhiZmNjNjA2OGIxODdkN2Q5ZmIzZDViYjFkM2EzMDg5OS9pbXBsZW1lbnRhdGlvbi5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmdW5jKSB7XG4gIGlmICghdXRpbC5pc0Z1bmN0aW9uKGZ1bmMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcbiAgICByZXR1cm4gZnVuYy5uYW1lO1xuICB9XG4gIHZhciBzdHIgPSBmdW5jLnRvU3RyaW5nKCk7XG4gIHZhciBtYXRjaCA9IHN0ci5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn1cbmFzc2VydC5Bc3NlcnRpb25FcnJvciA9IGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJztcbiAgdGhpcy5hY3R1YWwgPSBvcHRpb25zLmFjdHVhbDtcbiAgdGhpcy5leHBlY3RlZCA9IG9wdGlvbnMuZXhwZWN0ZWQ7XG4gIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yO1xuICBpZiAob3B0aW9ucy5tZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWVzc2FnZSA9IGdldE1lc3NhZ2UodGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTtcbiAgfVxuICB2YXIgc3RhY2tTdGFydEZ1bmN0aW9uID0gb3B0aW9ucy5zdGFja1N0YXJ0RnVuY3Rpb24gfHwgZmFpbDtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBub24gdjggYnJvd3NlcnMgc28gd2UgY2FuIGhhdmUgYSBzdGFja3RyYWNlXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgIGlmIChlcnIuc3RhY2spIHtcbiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7XG5cbiAgICAgIC8vIHRyeSB0byBzdHJpcCB1c2VsZXNzIGZyYW1lc1xuICAgICAgdmFyIGZuX25hbWUgPSBnZXROYW1lKHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7XG4gIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc3BlY3Qoc29tZXRoaW5nKSB7XG4gIGlmIChmdW5jdGlvbnNIYXZlTmFtZXMgfHwgIXV0aWwuaXNGdW5jdGlvbihzb21ldGhpbmcpKSB7XG4gICAgcmV0dXJuIHV0aWwuaW5zcGVjdChzb21ldGhpbmcpO1xuICB9XG4gIHZhciByYXduYW1lID0gZ2V0TmFtZShzb21ldGhpbmcpO1xuICB2YXIgbmFtZSA9IHJhd25hbWUgPyAnOiAnICsgcmF3bmFtZSA6ICcnO1xuICByZXR1cm4gJ1tGdW5jdGlvbicgKyAgbmFtZSArICddJztcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2Uoc2VsZikge1xuICByZXR1cm4gdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmFjdHVhbCksIDEyOCkgKyAnICcgK1xuICAgICAgICAgc2VsZi5vcGVyYXRvciArICcgJyArXG4gICAgICAgICB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuZXhwZWN0ZWQpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwRXF1YWwnLCBhc3NlcnQuZGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBTdHJpY3RFcXVhbCcsIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAmJiBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gY29tcGFyZShhY3R1YWwsIGV4cGVjdGVkKSA9PT0gMDtcblxuICAvLyA3LjIuIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIERhdGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBzYW1lIHRpbWUuXG4gIH0gZWxzZSBpZiAodXRpbC5pc0RhdGUoYWN0dWFsKSAmJiB1dGlsLmlzRGF0ZShleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMyBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCB0aGUgYWN0dWFsIHZhbHVlIGlzXG4gIC8vIGVxdWl2YWxlbnQgaWYgaXQgaXMgYWxzbyBhIFJlZ0V4cCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kXG4gIC8vIHByb3BlcnRpZXMgKGBnbG9iYWxgLCBgbXVsdGlsaW5lYCwgYGxhc3RJbmRleGAsIGBpZ25vcmVDYXNlYCkuXG4gIH0gZWxzZSBpZiAodXRpbC5pc1JlZ0V4cChhY3R1YWwpICYmIHV0aWwuaXNSZWdFeHAoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJlxuICAgICAgICAgICBhY3R1YWwuZ2xvYmFsID09PSBleHBlY3RlZC5nbG9iYWwgJiZcbiAgICAgICAgICAgYWN0dWFsLm11bHRpbGluZSA9PT0gZXhwZWN0ZWQubXVsdGlsaW5lICYmXG4gICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJlxuICAgICAgICAgICBhY3R1YWwuaWdub3JlQ2FzZSA9PT0gZXhwZWN0ZWQuaWdub3JlQ2FzZTtcblxuICAvLyA3LjQuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoKGFjdHVhbCA9PT0gbnVsbCB8fCB0eXBlb2YgYWN0dWFsICE9PSAnb2JqZWN0JykgJiZcbiAgICAgICAgICAgICAoZXhwZWN0ZWQgPT09IG51bGwgfHwgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyBJZiBib3RoIHZhbHVlcyBhcmUgaW5zdGFuY2VzIG9mIHR5cGVkIGFycmF5cywgd3JhcCB0aGVpciB1bmRlcmx5aW5nXG4gIC8vIEFycmF5QnVmZmVycyBpbiBhIEJ1ZmZlciBlYWNoIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlXG4gIC8vIFRoaXMgb3B0aW1pemF0aW9uIHJlcXVpcmVzIHRoZSBhcnJheXMgdG8gaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGNoZWNrZWQgYnlcbiAgLy8gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoYWthIHBUb1N0cmluZykuIE5ldmVyIHBlcmZvcm0gYmluYXJ5XG4gIC8vIGNvbXBhcmlzb25zIGZvciBGbG9hdCpBcnJheXMsIHRob3VnaCwgc2luY2UgZS5nLiArMCA9PT0gLTAgYnV0IHRoZWlyXG4gIC8vIGJpdCBwYXR0ZXJucyBhcmUgbm90IGlkZW50aWNhbC5cbiAgfSBlbHNlIGlmIChpc1ZpZXcoYWN0dWFsKSAmJiBpc1ZpZXcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgcFRvU3RyaW5nKGFjdHVhbCkgPT09IHBUb1N0cmluZyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICAhKGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fFxuICAgICAgICAgICAgICAgYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSkge1xuICAgIHJldHVybiBjb21wYXJlKG5ldyBVaW50OEFycmF5KGFjdHVhbC5idWZmZXIpLFxuICAgICAgICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGV4cGVjdGVkLmJ1ZmZlcikpID09PSAwO1xuXG4gIC8vIDcuNSBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYWN0dWFsKSAhPT0gaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIG1lbW9zID0gbWVtb3MgfHwge2FjdHVhbDogW10sIGV4cGVjdGVkOiBbXX07XG5cbiAgICB2YXIgYWN0dWFsSW5kZXggPSBtZW1vcy5hY3R1YWwuaW5kZXhPZihhY3R1YWwpO1xuICAgIGlmIChhY3R1YWxJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChhY3R1YWxJbmRleCA9PT0gbWVtb3MuZXhwZWN0ZWQuaW5kZXhPZihleHBlY3RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb3MuYWN0dWFsLnB1c2goYWN0dWFsKTtcbiAgICBtZW1vcy5leHBlY3RlZC5wdXNoKGV4cGVjdGVkKTtcblxuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FyZ3VtZW50cyhvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSB7XG4gIGlmIChhID09PSBudWxsIHx8IGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSBudWxsIHx8IGIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoc3RyaWN0ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKTtcbiAgdmFyIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYiwgc3RyaWN0KTtcbiAgfVxuICB2YXIga2EgPSBvYmplY3RLZXlzKGEpO1xuICB2YXIga2IgPSBvYmplY3RLZXlzKGIpO1xuICB2YXIga2V5LCBpO1xuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIV9kZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyA4LiBUaGUgbm9uLWVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBmb3IgYW55IGRlZXAgaW5lcXVhbGl0eS5cbi8vIGFzc2VydC5ub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24gbm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwgPSBub3REZWVwU3RyaWN0RXF1YWw7XG5mdW5jdGlvbiBub3REZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCB0cnVlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBTdHJpY3RFcXVhbCcsIG5vdERlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn1cblxuXG4vLyA5LiBUaGUgc3RyaWN0IGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzdHJpY3QgZXF1YWxpdHksIGFzIGRldGVybWluZWQgYnkgPT09LlxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24gc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09PScsIGFzc2VydC5zdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDEwLiBUaGUgc3RyaWN0IG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHN0cmljdCBpbmVxdWFsaXR5LCBhc1xuLy8gZGV0ZXJtaW5lZCBieSAhPT0uICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT09JywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkKSA9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlLiAgVGhlIGluc3RhbmNlb2YgY2hlY2sgZG9lc24ndCB3b3JrIGZvciBhcnJvdyBmdW5jdGlvbnMuXG4gIH1cblxuICBpZiAoRXJyb3IuaXNQcm90b3R5cGVPZihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXhwZWN0ZWQuY2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3RyeUJsb2NrKGJsb2NrKSB7XG4gIHZhciBlcnJvcjtcbiAgdHJ5IHtcbiAgICBibG9jaygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHR5cGVvZiBibG9jayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIGFjdHVhbCA9IF90cnlCbG9jayhibG9jayk7XG5cbiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArXG4gICAgICAgICAgICAobWVzc2FnZSA/ICcgJyArIG1lc3NhZ2UgOiAnLicpO1xuXG4gIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICB2YXIgdXNlclByb3ZpZGVkTWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJztcbiAgdmFyIGlzVW53YW50ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgdXRpbC5pc0Vycm9yKGFjdHVhbCk7XG4gIHZhciBpc1VuZXhwZWN0ZWRFeGNlcHRpb24gPSAhc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmICFleHBlY3RlZDtcblxuICBpZiAoKGlzVW53YW50ZWRFeGNlcHRpb24gJiZcbiAgICAgIHVzZXJQcm92aWRlZE1lc3NhZ2UgJiZcbiAgICAgIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fFxuICAgICAgaXNVbmV4cGVjdGVkRXhjZXB0aW9uKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCAnR290IHVud2FudGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICgoc2hvdWxkVGhyb3cgJiYgYWN0dWFsICYmIGV4cGVjdGVkICYmXG4gICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkge1xuICAgIHRocm93IGFjdHVhbDtcbiAgfVxufVxuXG4vLyAxMS4gRXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXJyb3I6XG4vLyBhc3NlcnQudGhyb3dzKGJsb2NrLCBFcnJvcl9vcHQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKHRydWUsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyhmYWxzZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHRocm93IGVycjsgfTtcblxuLy8gRXhwb3NlIGEgc3RyaWN0IG9ubHkgdmFyaWFudCBvZiBhc3NlcnRcbmZ1bmN0aW9uIHN0cmljdCh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBzdHJpY3QpO1xufVxuYXNzZXJ0LnN0cmljdCA9IG9iamVjdEFzc2lnbihzdHJpY3QsIGFzc2VydCwge1xuICBlcXVhbDogYXNzZXJ0LnN0cmljdEVxdWFsLFxuICBkZWVwRXF1YWw6IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwsXG4gIG5vdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gIG5vdERlZXBFcXVhbDogYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbFxufSk7XG5hc3NlcnQuc3RyaWN0LnN0cmljdCA9IGFzc2VydC5zdHJpY3Q7XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBvbmNlO1xuZnVuY3Rpb24gb25jZShmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChmbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICB2YXIgY2FsbEZuID0gZm47XG4gICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgY2FsbEZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IG9ubHlPbmNlO1xuZnVuY3Rpb24gb25seU9uY2UoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZm4gPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIHdhcyBhbHJlYWR5IGNhbGxlZC5cIik7XG4gICAgICAgIHZhciBjYWxsRm4gPSBmbjtcbiAgICAgICAgZm4gPSBudWxsO1xuICAgICAgICBjYWxsRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCJjb25zdCBjcmVhdGVQYXlsb2FkID0gcmVxdWlyZSgnLi4vdXRpbC9jcmVhdGUtcGF5bG9hZC5qcycpXG5cbm1vZHVsZS5leHBvcnRzID0gU3ViUHJvdmlkZXJcblxuLy8gdGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYSBzdWJwcm92aWRlciAtLSBtb3N0bHkgaGVscGVyc1xuXG5cbmZ1bmN0aW9uIFN1YlByb3ZpZGVyKCkge1xuXG59XG5cblN1YlByb3ZpZGVyLnByb3RvdHlwZS5zZXRFbmdpbmUgPSBmdW5jdGlvbihlbmdpbmUpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgaWYgKHNlbGYuZW5naW5lKSByZXR1cm5cbiAgc2VsZi5lbmdpbmUgPSBlbmdpbmVcbiAgZW5naW5lLm9uKCdibG9jaycsIGZ1bmN0aW9uKGJsb2NrKSB7XG4gICAgc2VsZi5jdXJyZW50QmxvY2sgPSBibG9ja1xuICB9KVxuXG4gIGVuZ2luZS5vbignc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5zdGFydCgpXG4gIH0pXG5cbiAgZW5naW5lLm9uKCdzdG9wJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuc3RvcCgpXG4gIH0pXG59XG5cblN1YlByb3ZpZGVyLnByb3RvdHlwZS5oYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocGF5bG9hZCwgbmV4dCwgZW5kKSB7XG4gIHRocm93IG5ldyBFcnJvcignU3VicHJvdmlkZXJzIHNob3VsZCBvdmVycmlkZSBgaGFuZGxlUmVxdWVzdGAuJylcbn1cblxuU3ViUHJvdmlkZXIucHJvdG90eXBlLmVtaXRQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCwgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmVuZ2luZS5zZW5kQXN5bmMoY3JlYXRlUGF5bG9hZChwYXlsb2FkKSwgY2IpXG59XG5cbi8vIGR1bW1pZXMgZm9yIG92ZXJyaWRpbmdcblxuU3ViUHJvdmlkZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7fVxuXG5TdWJQcm92aWRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7fVxuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9jaGVja3MnKTsiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjcmVhdGVLZWNjYWtIYXNoID0gcmVxdWlyZSgna2VjY2FrJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgZXRoanNVdGlsID0gcmVxdWlyZSgnZXRoanMtdXRpbCcpO1xudmFyIHJscCA9IHJlcXVpcmUoXCJybHBcIik7XG52YXIgYnl0ZXNfMSA9IHJlcXVpcmUoXCIuL2J5dGVzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIEtlY2NhayBoYXNoIG9mIHRoZSBpbnB1dFxuICogQHBhcmFtIGEgVGhlIGlucHV0IGRhdGEgKEJ1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyKSBJZiB0aGUgc3RyaW5nIGlzIGEgMHgtcHJlZml4ZWQgaGV4IHZhbHVlXG4gKiBpdCdzIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsLCBvdGhlcndpc2UgYXMgdXRmOC5cbiAqIEBwYXJhbSBiaXRzIFRoZSBLZWNjYWsgd2lkdGhcbiAqL1xuZXhwb3J0cy5rZWNjYWsgPSBmdW5jdGlvbiAoYSwgYml0cykge1xuICAgIGlmIChiaXRzID09PSB2b2lkIDApIHsgYml0cyA9IDI1NjsgfVxuICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgIWV0aGpzVXRpbC5pc0hleFN0cmluZyhhKSkge1xuICAgICAgICBhID0gQnVmZmVyLmZyb20oYSwgJ3V0ZjgnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGEgPSBieXRlc18xLnRvQnVmZmVyKGEpO1xuICAgIH1cbiAgICBpZiAoIWJpdHMpXG4gICAgICAgIGJpdHMgPSAyNTY7XG4gICAgcmV0dXJuIGNyZWF0ZUtlY2Nha0hhc2goXCJrZWNjYWtcIiArIGJpdHMpXG4gICAgICAgIC51cGRhdGUoYSlcbiAgICAgICAgLmRpZ2VzdCgpO1xufTtcbi8qKlxuICogQ3JlYXRlcyBLZWNjYWstMjU2IGhhc2ggb2YgdGhlIGlucHV0LCBhbGlhcyBmb3Iga2VjY2FrKGEsIDI1NikuXG4gKiBAcGFyYW0gYSBUaGUgaW5wdXQgZGF0YSAoQnVmZmVyfEFycmF5fFN0cmluZ3xOdW1iZXIpXG4gKi9cbmV4cG9ydHMua2VjY2FrMjU2ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5rZWNjYWsoYSk7XG59O1xuLyoqXG4gKiBDcmVhdGVzIFNIQTI1NiBoYXNoIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBhIFRoZSBpbnB1dCBkYXRhIChCdWZmZXJ8QXJyYXl8U3RyaW5nfE51bWJlcilcbiAqL1xuZXhwb3J0cy5zaGEyNTYgPSBmdW5jdGlvbiAoYSkge1xuICAgIGEgPSBieXRlc18xLnRvQnVmZmVyKGEpO1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgICAudXBkYXRlKGEpXG4gICAgICAgIC5kaWdlc3QoKTtcbn07XG4vKipcbiAqIENyZWF0ZXMgUklQRU1EMTYwIGhhc2ggb2YgdGhlIGlucHV0LlxuICogQHBhcmFtIGEgVGhlIGlucHV0IGRhdGEgKEJ1ZmZlcnxBcnJheXxTdHJpbmd8TnVtYmVyKVxuICogQHBhcmFtIHBhZGRlZCBXaGV0aGVyIGl0IHNob3VsZCBiZSBwYWRkZWQgdG8gMjU2IGJpdHMgb3Igbm90XG4gKi9cbmV4cG9ydHMucmlwZW1kMTYwID0gZnVuY3Rpb24gKGEsIHBhZGRlZCkge1xuICAgIGEgPSBieXRlc18xLnRvQnVmZmVyKGEpO1xuICAgIHZhciBoYXNoID0gY3JlYXRlSGFzaCgncm1kMTYwJylcbiAgICAgICAgLnVwZGF0ZShhKVxuICAgICAgICAuZGlnZXN0KCk7XG4gICAgaWYgKHBhZGRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gYnl0ZXNfMS5zZXRMZW5ndGgoaGFzaCwgMzIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgfVxufTtcbi8qKlxuICogQ3JlYXRlcyBTSEEtMyBoYXNoIG9mIHRoZSBSTFAgZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBhIFRoZSBpbnB1dCBkYXRhXG4gKi9cbmV4cG9ydHMucmxwaGFzaCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMua2VjY2FrKHJscC5lbmNvZGUoYSkpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhc2guanMubWFwIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxuZnVuY3Rpb24gdGhyb3dJZk5vdFN0cmluZ09yQnVmZmVyICh2YWwsIHByZWZpeCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih2YWwpICYmIHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcmVmaXggKyAnIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICB9XG59XG5cbmZ1bmN0aW9uIEhhc2hCYXNlIChibG9ja1NpemUpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcblxuICB0aGlzLl9ibG9jayA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja1NpemUpXG4gIHRoaXMuX2Jsb2NrU2l6ZSA9IGJsb2NrU2l6ZVxuICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgdGhpcy5fbGVuZ3RoID0gWzAsIDAsIDAsIDBdXG5cbiAgdGhpcy5fZmluYWxpemVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoSGFzaEJhc2UsIFRyYW5zZm9ybSlcblxuSGFzaEJhc2UucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgZXJyb3IgPSBudWxsXG4gIHRyeSB7XG4gICAgdGhpcy51cGRhdGUoY2h1bmssIGVuY29kaW5nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIGVycm9yID0gbnVsbFxuICB0cnkge1xuICAgIHRoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcpIHtcbiAgdGhyb3dJZk5vdFN0cmluZ09yQnVmZmVyKGRhdGEsICdEYXRhJylcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuY29kaW5nKVxuXG4gIC8vIGNvbnN1bWUgZGF0YVxuICB2YXIgYmxvY2sgPSB0aGlzLl9ibG9ja1xuICB2YXIgb2Zmc2V0ID0gMFxuICB3aGlsZSAodGhpcy5fYmxvY2tPZmZzZXQgKyBkYXRhLmxlbmd0aCAtIG9mZnNldCA+PSB0aGlzLl9ibG9ja1NpemUpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5fYmxvY2tPZmZzZXQ7IGkgPCB0aGlzLl9ibG9ja1NpemU7KSBibG9ja1tpKytdID0gZGF0YVtvZmZzZXQrK11cbiAgICB0aGlzLl91cGRhdGUoKVxuICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gMFxuICB9XG4gIHdoaWxlIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK10gPSBkYXRhW29mZnNldCsrXVxuXG4gIC8vIHVwZGF0ZSBsZW5ndGhcbiAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gZGF0YS5sZW5ndGggKiA4OyBjYXJyeSA+IDA7ICsraikge1xuICAgIHRoaXMuX2xlbmd0aFtqXSArPSBjYXJyeVxuICAgIGNhcnJ5ID0gKHRoaXMuX2xlbmd0aFtqXSAvIDB4MDEwMDAwMDAwMCkgfCAwXG4gICAgaWYgKGNhcnJ5ID4gMCkgdGhpcy5fbGVuZ3RoW2pdIC09IDB4MDEwMDAwMDAwMCAqIGNhcnJ5XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5IYXNoQmFzZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCcpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgdmFyIGRpZ2VzdCA9IHRoaXMuX2RpZ2VzdCgpXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkaWdlc3QgPSBkaWdlc3QudG9TdHJpbmcoZW5jb2RpbmcpXG5cbiAgLy8gcmVzZXQgc3RhdGVcbiAgdGhpcy5fYmxvY2suZmlsbCgwKVxuICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHRoaXMuX2xlbmd0aFtpXSA9IDBcblxuICByZXR1cm4gZGlnZXN0XG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ19kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoQmFzZVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG52YXIgRUVsaXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gRUVsaXN0ZW5lckNvdW50KGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJzKHR5cGUpLmxlbmd0aDtcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIE91clVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuXG5mdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgb2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheTtcbn1cbi8qPHJlcGxhY2VtZW50PiovXG5cblxudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIGRlYnVnO1xuXG5pZiAoZGVidWdVdGlsICYmIGRlYnVnVXRpbC5kZWJ1Z2xvZykge1xuICBkZWJ1ZyA9IGRlYnVnVXRpbC5kZWJ1Z2xvZygnc3RyZWFtJyk7XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCcpO1xuXG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xuXG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUnKSxcbiAgICBnZXRIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuZ2V0SGlnaFdhdGVyTWFyaztcblxudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gICAgRVJSX0lOVkFMSURfQVJHX1RZUEUgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgICBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICAgIEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UOyAvLyBMYXp5IGxvYWRlZCB0byBpbXByb3ZlIHRoZSBzdGFydHVwIHBlcmZvcm1hbmNlLlxuXG5cbnZhciBTdHJpbmdEZWNvZGVyO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjtcbnZhciBmcm9tO1xuXG5yZXF1aXJlKCdpbmhlcml0cycpKFJlYWRhYmxlLCBTdHJlYW0pO1xuXG52YXIgZXJyb3JPckRlc3Ryb3kgPSBkZXN0cm95SW1wbC5lcnJvck9yRGVzdHJveTtcbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pOyAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gIC8vIHVzZXJsYW5kIG9uZXMuICBORVZFUiBETyBUSElTLiBUaGlzIGlzIGhlcmUgb25seSBiZWNhdXNlIHRoaXMgY29kZSBuZWVkc1xuICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDsgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcblxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZTsgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTsgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7IC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cblxuICB0aGlzLnN5bmMgPSB0cnVlOyAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cblxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHRoaXMucGF1c2VkID0gdHJ1ZTsgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cblxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTsgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpXG5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTsgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cblxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JzsgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcblxuICB0aGlzLmF3YWl0RHJhaW4gPSAwOyAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG5cbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcblxuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpOyAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBSZWFkYWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuXG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7IC8vIGxlZ2FjeVxuXG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWQgPT09ICdmdW5jdGlvbicpIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG5cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7XG4gIH1cbn0pO1xuUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95SW1wbC5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95SW1wbC51bmRlc3Ryb3k7XG5cblJlYWRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIGNiKGVycik7XG59OyAvLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBza2lwQ2h1bmtDaGVjaztcblxuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuXG4gICAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNraXBDaHVua0NoZWNrID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBlbmNvZGluZywgZmFsc2UsIHNraXBDaHVua0NoZWNrKTtcbn07IC8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5cblxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIG51bGwsIHRydWUsIGZhbHNlKTtcbn07XG5cbmZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQsIHNraXBDaHVua0NoZWNrKSB7XG4gIGRlYnVnKCdyZWFkYWJsZUFkZENodW5rJywgY2h1bmspO1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG5cbiAgICBpZiAoZXIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiAhc3RhdGUub2JqZWN0TW9kZSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2h1bmspICE9PSBCdWZmZXIucHJvdG90eXBlKSB7XG4gICAgICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRUb0Zyb250KSB7XG4gICAgICAgIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UKCkpO2Vsc2UgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5lbmRlZCkge1xuICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gLy8gV2UgY2FuIHB1c2ggbW9yZSBkYXRhIGlmIHdlIGFyZSBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyay5cbiAgLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWUgbW9yZSBieXRlcy5cbiAgLy8gVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCwgc3VjaCBhcyB0aGUgcmVwbC5cblxuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuZnVuY3Rpb24gYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGFkZFRvRnJvbnQpIHtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jKSB7XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtlbHNlIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgfVxuXG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyO1xuXG4gIGlmICghX2lzVWludDhBcnJheShjaHVuaykgJiYgdHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJyAmJiBjaHVuayAhPT0gdW5kZWZpbmVkICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJywgJ1VpbnQ4QXJyYXknXSwgY2h1bmspO1xuICB9XG5cbiAgcmV0dXJuIGVyO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTsgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB2YXIgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXI7IC8vIElmIHNldEVuY29kaW5nKG51bGwpLCBkZWNvZGVyLmVuY29kaW5nIGVxdWFscyB1dGY4XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZzsgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcblxuICB2YXIgcCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQ7XG4gIHZhciBjb250ZW50ID0gJyc7XG5cbiAgd2hpbGUgKHAgIT09IG51bGwpIHtcbiAgICBjb250ZW50ICs9IGRlY29kZXIud3JpdGUocC5kYXRhKTtcbiAgICBwID0gcC5uZXh0O1xuICB9XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKTtcblxuICBpZiAoY29udGVudCAhPT0gJycpIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goY29udGVudCk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG4gIHJldHVybiB0aGlzO1xufTsgLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQlxuXG5cbnZhciBNQVhfSFdNID0gMHg0MDAwMDAwMDtcblxuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgLy8gVE9ETyhyb25hZyk6IFRocm93IEVSUl9WQUxVRV9PVVRfT0ZfUkFOR0UuXG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzXG4gICAgbi0tO1xuICAgIG4gfD0gbiA+Pj4gMTtcbiAgICBuIHw9IG4gPj4+IDI7XG4gICAgbiB8PSBuID4+PiA0O1xuICAgIG4gfD0gbiA+Pj4gODtcbiAgICBuIHw9IG4gPj4+IDE2O1xuICAgIG4rKztcbiAgfVxuXG4gIHJldHVybiBuO1xufSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cblxuXG5mdW5jdGlvbiBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKSB7XG4gIGlmIChuIDw9IDAgfHwgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSByZXR1cm4gMDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHJldHVybiAxO1xuXG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9IC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuXG5cbiAgaWYgKG4gPiBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobik7XG4gIGlmIChuIDw9IHN0YXRlLmxlbmd0aCkgcmV0dXJuIG47IC8vIERvbid0IGhhdmUgZW5vdWdoXG5cbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufSAvLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuXG5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcbiAgaWYgKG4gIT09IDApIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlOyAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUubmVlZFJlYWRhYmxlICYmICgoc3RhdGUuaGlnaFdhdGVyTWFyayAhPT0gMCA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIDogc3RhdGUubGVuZ3RoID4gMCkgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpOyAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuICAvLyBpZiB3ZSBuZWVkIGEgcmVhZGFibGUgZXZlbnQsIHRoZW4gd2UgbmVlZCB0byBkbyBzb21lIHJlYWRpbmcuXG5cblxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7IC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH0gLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuXG5cbiAgaWYgKHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcpIHtcbiAgICBkb1JlYWQgPSBmYWxzZTtcbiAgICBkZWJ1ZygncmVhZGluZyBvciBlbmRlZCcsIGRvUmVhZCk7XG4gIH0gZWxzZSBpZiAoZG9SZWFkKSB7XG4gICAgZGVidWcoJ2RvIHJlYWQnKTtcbiAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTsgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cblxuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7IC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcblxuICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7XG5cbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7IC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgfVxuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIG5vdGhpbmcgaW4gdGhlIGJ1ZmZlciwgdGhlbiB3ZSB3YW50IHRvIGtub3dcbiAgICAvLyBhcyBzb29uIGFzIHdlICpkbyogZ2V0IHNvbWV0aGluZyBpbnRvIHRoZSBidWZmZXIuXG4gICAgaWYgKCFzdGF0ZS5lbmRlZCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTsgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKTtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuXG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIGlmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsXG4gICAgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgICB9XG4gIH1cbn0gLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cblxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VtaXRSZWFkYWJsZScsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG5cbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgfSAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWZcbiAgLy8gMS4gSXQgaXMgbm90IGZsb3dpbmcsIGFzIHRoZSBmbG93IG1lY2hhbmlzbSB3aWxsIHRha2VcbiAgLy8gICAgY2FyZSBvZiBpdC5cbiAgLy8gMi4gSXQgaXMgbm90IGVuZGVkLlxuICAvLyAzLiBJdCBpcyBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyaywgc28gd2UgY2FuIHNjaGVkdWxlXG4gIC8vICAgIGFub3RoZXIgcmVhZGFibGUgbGF0ZXIuXG5cblxuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIGZsb3coc3RyZWFtKTtcbn0gLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZ01vcmUpIHtcbiAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICAvLyBBdHRlbXB0IHRvIHJlYWQgbW9yZSBkYXRhIGlmIHdlIHNob3VsZC5cbiAgLy9cbiAgLy8gVGhlIGNvbmRpdGlvbnMgZm9yIHJlYWRpbmcgbW9yZSBkYXRhIGFyZSAob25lIG9mKTpcbiAgLy8gLSBOb3QgZW5vdWdoIGRhdGEgYnVmZmVyZWQgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspLiBUaGUgbG9vcFxuICAvLyAgIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBidWZmZXIgd2l0aCBlbm91Z2ggZGF0YSBpZiBzdWNoIGRhdGFcbiAgLy8gICBpcyBhdmFpbGFibGUuIElmIGhpZ2hXYXRlck1hcmsgaXMgMCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgZmxvd2luZyBtb2RlXG4gIC8vICAgd2Ugc2hvdWxkIF9ub3RfIGF0dGVtcHQgdG8gYnVmZmVyIGFueSBleHRyYSBkYXRhLiBXZSdsbCBnZXQgbW9yZSBkYXRhXG4gIC8vICAgd2hlbiB0aGUgc3RyZWFtIGNvbnN1bWVyIGNhbGxzIHJlYWQoKSBpbnN0ZWFkLlxuICAvLyAtIE5vIGRhdGEgaW4gdGhlIGJ1ZmZlciwgYW5kIHRoZSBzdHJlYW0gaXMgaW4gZmxvd2luZyBtb2RlLiBJbiB0aGlzIG1vZGVcbiAgLy8gICB0aGUgbG9vcCBiZWxvdyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgcmVhZCgpIGlzIGNhbGxlZC4gRmFpbGluZyB0b1xuICAvLyAgIGNhbGwgcmVhZCBoZXJlIHdvdWxkIGFib3J0IHRoZSBmbG93IGFuZCB0aGVyZSdzIG5vIG90aGVyIG1lY2hhbmlzbSBmb3JcbiAgLy8gICBjb250aW51aW5nIHRoZSBmbG93IGlmIHRoZSBzdHJlYW0gY29uc3VtZXIgaGFzIGp1c3Qgc3Vic2NyaWJlZCB0byB0aGVcbiAgLy8gICAnZGF0YScgZXZlbnQuXG4gIC8vXG4gIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zIHRvIGtlZXAgcmVhZGluZyBkYXRhLCB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgcHJldmVudCB0aGUgZGF0YSBmcm9tIGJlaW5nIHJlYWQ6XG4gIC8vIC0gVGhlIHN0cmVhbSBoYXMgZW5kZWQgKHN0YXRlLmVuZGVkKS5cbiAgLy8gLSBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyAncmVhZCcgb3BlcmF0aW9uIChzdGF0ZS5yZWFkaW5nKS4gVGhpcyBpcyBhXG4gIC8vICAgY2FzZSB3aGVyZSB0aGUgdGhlIHN0cmVhbSBoYXMgY2FsbGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIF9yZWFkKClcbiAgLy8gICBtZXRob2QsIGJ1dCB0aGV5IGFyZSBwcm9jZXNzaW5nIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGFuZCBoYXZlIF9ub3RfXG4gIC8vICAgY2FsbGVkIHB1c2goKSB3aXRoIG5ldyBkYXRhLiBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCBwZXJmb3JtaW5nIG1vcmVcbiAgLy8gICByZWFkKClzLiBUaGUgZXhlY3V0aW9uIGVuZHMgaW4gdGhpcyBtZXRob2QgYWdhaW4gYWZ0ZXIgdGhlIF9yZWFkKCkgZW5kc1xuICAvLyAgIHVwIGNhbGxpbmcgcHVzaCgpIHdpdGggbW9yZSBkYXRhLlxuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwKSkge1xuICAgIHZhciBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKSAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBzdGF0ZS5yZWFkaW5nTW9yZSA9IGZhbHNlO1xufSAvLyBhYnN0cmFjdCBtZXRob2QuICB0byBiZSBvdmVycmlkZGVuIGluIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyBjYWxsIGNiKGVyLCBkYXRhKSB3aGVyZSBkYXRhIGlzIDw9IG4gaW4gbGVuZ3RoLlxuLy8gZm9yIHZpcnR1YWwgKG5vbi1zdHJpbmcsIG5vbi1idWZmZXIpIHN0cmVhbXMsIFwibGVuZ3RoXCIgaXMgc29tZXdoYXRcbi8vIGFyYml0cmFyeSwgYW5kIHBlcmhhcHMgbm90IHZlcnkgbWVhbmluZ2Z1bC5cblxuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcbiAgdmFyIGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZG91dCAmJiBkZXN0ICE9PSBwcm9jZXNzLnN0ZGVycjtcbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IHVucGlwZTtcbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHByb2Nlc3MubmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuXG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG5cbiAgICBpZiAocmVhZGFibGUgPT09IHNyYykge1xuICAgICAgaWYgKHVucGlwZUluZm8gJiYgdW5waXBlSW5mby5oYXNVbnBpcGVkID09PSBmYWxzZSkge1xuICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfSAvLyB3aGVuIHRoZSBkZXN0IGRyYWlucywgaXQgcmVkdWNlcyB0aGUgYXdhaXREcmFpbiBjb3VudGVyXG4gIC8vIG9uIHRoZSBzb3VyY2UuICBUaGlzIHdvdWxkIGJlIG1vcmUgZWxlZ2FudCB3aXRoIGEgLm9uY2UoKVxuICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAvLyB0b28gc2xvdy5cblxuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTsgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBjbGVhbmVkVXAgPSB0cnVlOyAvLyBpZiB0aGUgcmVhZGVyIGlzIHdhaXRpbmcgZm9yIGEgZHJhaW4gZXZlbnQgZnJvbSB0aGlzXG4gICAgLy8gc3BlY2lmaWMgd3JpdGVyLCB0aGVuIGl0IHdvdWxkIGNhdXNlIGl0IHRvIG5ldmVyIHN0YXJ0XG4gICAgLy8gZmxvd2luZyBhZ2Fpbi5cbiAgICAvLyBTbywgaWYgdGhpcyBpcyBhd2FpdGluZyBhIGRyYWluLCB0aGVuIHdlIGp1c3QgY2FsbCBpdCBub3cuXG4gICAgLy8gSWYgd2UgZG9uJ3Qga25vdywgdGhlbiBhc3N1bWUgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igb25lLlxuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgc3JjLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKCdkZXN0LndyaXRlJywgcmV0KTtcblxuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuXG4gICAgICBzcmMucGF1c2UoKTtcbiAgICB9XG4gIH0gLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cblxuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgfSAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG5cblxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7IC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cblxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG5cbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuXG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuXG4gIGZ1bmN0aW9uIHVucGlwZSgpIHtcbiAgICBkZWJ1ZygndW5waXBlJyk7XG4gICAgc3JjLnVucGlwZShkZXN0KTtcbiAgfSAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuXG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTsgLy8gc3RhcnQgdGhlIGZsb3cgaWYgaXQgaGFzbid0IGJlZW4gc3RhcnRlZCBhbHJlYWR5LlxuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwaXBlT25EcmFpbkZ1bmN0aW9uUmVzdWx0KCkge1xuICAgIHZhciBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTtcbiAgICBkZWJ1ZygncGlwZU9uRHJhaW4nLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbikgc3RhdGUuYXdhaXREcmFpbi0tO1xuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfTsgLy8gaWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpczsgLy8ganVzdCBvbmUgZGVzdGluYXRpb24uICBtb3N0IGNvbW1vbiBjYXNlLlxuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzOyAvLyBnb3QgYSBtYXRjaC5cblxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgICAgaGFzVW5waXBlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9IC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG5cblxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gIHJldHVybiB0aGlzO1xufTsgLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblxuXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIHVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDsgLy8gVHJ5IHN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZFxuXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB0aGlzLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBkZWJ1Zygnb24gcmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpO1xuXG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uO1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoZXYgPT09ICdyZWFkYWJsZScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBwcm9jZXNzLm5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcblxuICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmICFzdGF0ZS5wYXVzZWQpIHtcbiAgICAvLyBmbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlOyAvLyBjcnVkZSB3YXkgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIHJlc3VtZVxuICB9IGVsc2UgaWYgKHNlbGYubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCkge1xuICAgIHNlbGYucmVzdW1lKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufSAvLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7IC8vIHdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKClcblxuICAgIHN0YXRlLmZsb3dpbmcgPSAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuXG4gIHN0YXRlLnBhdXNlZCA9IGZhbHNlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZyk7XG5cbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoJ3Jlc3VtZScpO1xuICBmbG93KHN0cmVhbSk7XG4gIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSBzdHJlYW0ucmVhZCgwKTtcbn1cblxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG5cbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge1xuICAgIDtcbiAgfVxufSAvLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5cblxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcblxuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIF90aGlzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIF90aGlzLnB1c2gobnVsbCk7XG4gIH0pO1xuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7IC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuXG4gICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgJiYgKGNodW5rID09PSBudWxsIHx8IGNodW5rID09PSB1bmRlZmluZWQpKSByZXR1cm47ZWxzZSBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgKCFjaHVuayB8fCAhY2h1bmsubGVuZ3RoKSkgcmV0dXJuO1xuXG4gICAgdmFyIHJldCA9IF90aGlzLnB1c2goY2h1bmspO1xuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pOyAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZFdyYXBSZXR1cm5GdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH0gLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCBrUHJveHlFdmVudHMubGVuZ3RoOyBuKyspIHtcbiAgICBzdHJlYW0ub24oa1Byb3h5RXZlbnRzW25dLCB0aGlzLmVtaXQuYmluZCh0aGlzLCBrUHJveHlFdmVudHNbbl0pKTtcbiAgfSAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuXG5cbiAgdGhpcy5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcblxuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHRoaXMpO1xuICB9O1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVIaWdoV2F0ZXJNYXJrJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlRmxvd2luZycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQoc3RhdGUpIHtcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gc3RhdGU7XG4gICAgfVxuICB9XG59KTsgLy8gZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTsgLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2VuZFJlYWRhYmxlJywgc3RhdGUuZW5kRW1pdHRlZCk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKTsgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcblxuICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgLy8gaWYgdGhlIHdyaXRhYmxlIHNpZGUgaXMgcmVhZHkgZm9yIGF1dG9EZXN0cm95IGFzIHdlbGxcbiAgICAgIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG5cbiAgICAgIGlmICghd1N0YXRlIHx8IHdTdGF0ZS5hdXRvRGVzdHJveSAmJiB3U3RhdGUuZmluaXNoZWQpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyb20gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZnJvbScpO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuIiwiJ3VzZSBzdHJpY3QnOyAvLyB1bmRvY3VtZW50ZWQgY2IoKSBBUEksIG5lZWRlZCBmb3IgY29yZSwgbm90IGZvciBwdWJsaWMgQVBJXG5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciByZWFkYWJsZURlc3Ryb3llZCA9IHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIHZhciB3cml0YWJsZURlc3Ryb3llZCA9IHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG5cbiAgaWYgKHJlYWRhYmxlRGVzdHJveWVkIHx8IHdyaXRhYmxlRGVzdHJveWVkKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JOVCwgdGhpcywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSAvLyB3ZSBzZXQgZGVzdHJveWVkIHRvIHRydWUgYmVmb3JlIGZpcmluZyBlcnJvciBjYWxsYmFja3MgaW4gb3JkZXJcbiAgLy8gdG8gbWFrZSBpdCByZS1lbnRyYW5jZSBzYWZlIGluIGNhc2UgZGVzdHJveSgpIGlzIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2tzXG5cblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfSAvLyBpZiB0aGlzIGlzIGEgZHVwbGV4IHN0cmVhbSBtYXJrIHRoZSB3cml0YWJsZSBwYXJ0IGFzIGRlc3Ryb3llZCBhcyB3ZWxsXG5cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIHRoaXMuX2Rlc3Ryb3koZXJyIHx8IG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoIWNiICYmIGVycikge1xuICAgICAgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvckFuZENsb3NlTlQsIF90aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIF90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgX3RoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvckFuZENsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycik7XG4gIGVtaXRDbG9zZU5UKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGlmIChzZWxmLl93cml0YWJsZVN0YXRlICYmICFzZWxmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBpZiAoc2VsZi5fcmVhZGFibGVTdGF0ZSAmJiAhc2VsZi5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2UpIHJldHVybjtcbiAgc2VsZi5lbWl0KCdjbG9zZScpO1xufVxuXG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmLCBlcnIpIHtcbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG59XG5cbmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKSB7XG4gIC8vIFdlIGhhdmUgdGVzdHMgdGhhdCByZWx5IG9uIGVycm9ycyBiZWluZyBlbWl0dGVkXG4gIC8vIGluIHRoZSBzYW1lIHRpY2ssIHNvIGNoYW5naW5nIHRoaXMgaXMgc2VtdmVyIG1ham9yLlxuICAvLyBGb3Igbm93IHdoZW4geW91IG9wdC1pbiB0byBhdXRvRGVzdHJveSB3ZSBhbGxvd1xuICAvLyB0aGUgZXJyb3IgdG8gYmUgZW1pdHRlZCBuZXh0VGljay4gSW4gYSBmdXR1cmVcbiAgLy8gc2VtdmVyIG1ham9yIHVwZGF0ZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBkZWZhdWx0IHRvIHRoaXMuXG4gIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHZhciB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGlmIChyU3RhdGUgJiYgclN0YXRlLmF1dG9EZXN0cm95IHx8IHdTdGF0ZSAmJiB3U3RhdGUuYXV0b0Rlc3Ryb3kpIHN0cmVhbS5kZXN0cm95KGVycik7ZWxzZSBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3ksXG4gIGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveVxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfSU5WQUxJRF9PUFRfVkFMVUUgPSByZXF1aXJlKCcuLi8uLi8uLi9lcnJvcnMnKS5jb2Rlcy5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7XG5cbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoV2F0ZXJNYXJrKHN0YXRlLCBvcHRpb25zLCBkdXBsZXhLZXksIGlzRHVwbGV4KSB7XG4gIHZhciBod20gPSBoaWdoV2F0ZXJNYXJrRnJvbShvcHRpb25zLCBpc0R1cGxleCwgZHVwbGV4S2V5KTtcblxuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIShpc0Zpbml0ZShod20pICYmIE1hdGguZmxvb3IoaHdtKSA9PT0gaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICB2YXIgbmFtZSA9IGlzRHVwbGV4ID8gZHVwbGV4S2V5IDogJ2hpZ2hXYXRlck1hcmsnO1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX09QVF9WQUxVRShuYW1lLCBod20pO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKGh3bSk7XG4gIH0gLy8gRGVmYXVsdCB2YWx1ZVxuXG5cbiAgcmV0dXJuIHN0YXRlLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEhpZ2hXYXRlck1hcms6IGdldEhpZ2hXYXRlck1hcmtcbn07IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG4vKiA8cmVwbGFjZW1lbnQ+ICovXG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn0gLy8gSXQgc2VlbXMgYSBsaW5rZWQgbGlzdCBidXQgaXQgaXMgbm90XG4vLyB0aGVyZSB3aWxsIGJlIG9ubHkgMiBvZiB0aGVzZSBmb3IgZWFjaCBzdHJlYW1cblxuXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG5cbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG5cblxudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBpbnRlcm5hbFV0aWwgPSB7XG4gIGRlcHJlY2F0ZTogcmVxdWlyZSgndXRpbC1kZXByZWNhdGUnKVxufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIE91clVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheSB8fCBmdW5jdGlvbiAoKSB7fTtcblxuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuXG5mdW5jdGlvbiBfaXNVaW50OEFycmF5KG9iaikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKG9iaikgfHwgb2JqIGluc3RhbmNlb2YgT3VyVWludDhBcnJheTtcbn1cblxudmFyIGRlc3Ryb3lJbXBsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3knKTtcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gICAgZ2V0SGlnaFdhdGVyTWFyayA9IF9yZXF1aXJlLmdldEhpZ2hXYXRlck1hcms7XG5cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICAgIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gICAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0sgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gICAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gICAgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgICBFUlJfU1RSRUFNX05VTExfVkFMVUVTID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxcbiAgICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICAgIEVSUl9VTktOT1dOX0VOQ09ESU5HID0gX3JlcXVpcmUkY29kZXMuRVJSX1VOS05PV05fRU5DT0RJTkc7XG5cbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xuXG5yZXF1aXJlKCdpbmhlcml0cycpKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307IC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLFxuICAvLyBlLmcuIG9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlIHZzLiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSwgZXRjLlxuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7IC8vIG9iamVjdCBzdHJlYW0gZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGlzIHN0cmVhbVxuICAvLyBjb250YWlucyBidWZmZXJzIG9yIG9iamVjdHMuXG5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7IC8vIHRoZSBwb2ludCBhdCB3aGljaCB3cml0ZSgpIHN0YXJ0cyByZXR1cm5pbmcgZmFsc2VcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyB0aGF0IHdlIGFsd2F5cyByZXR1cm4gZmFsc2UgaWZcbiAgLy8gdGhlIGVudGlyZSBidWZmZXIgaXMgbm90IGZsdXNoZWQgaW1tZWRpYXRlbHkgb24gd3JpdGUoKVxuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIGlzRHVwbGV4KTsgLy8gaWYgX2ZpbmFsIGhhcyBiZWVuIGNhbGxlZFxuXG4gIHRoaXMuZmluYWxDYWxsZWQgPSBmYWxzZTsgLy8gZHJhaW4gZXZlbnQgZmxhZy5cblxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlOyAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7IC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcblxuICB0aGlzLmVuZGVkID0gZmFsc2U7IC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTsgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cblxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JzsgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cblxuICB0aGlzLmxlbmd0aCA9IDA7IC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7IC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcblxuICB0aGlzLmNvcmtlZCA9IDA7IC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuXG4gIHRoaXMuc3luYyA9IHRydWU7IC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7IC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcblxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9OyAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcblxuXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7IC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cblxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsOyAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcblxuICB0aGlzLnBlbmRpbmdjYiA9IDA7IC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcblxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7IC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTsgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cblxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTsgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpXG5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTsgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcblxuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDsgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG5cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG5cbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBvdXQucHVzaChjdXJyZW50KTtcbiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uIHdyaXRhYmxlU3RhdGVCdWZmZXJHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlcigpO1xuICAgICAgfSwgJ193cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyICcgKyAnaW5zdGVhZC4nLCAnREVQMDAwMycpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpOyAvLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cblxuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiByZWFsSGFzSW5zdGFuY2Uob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTsgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAvLyBDaGVja2luZyBmb3IgYSBTdHJlYW0uRHVwbGV4IGluc3RhbmNlIGlzIGZhc3RlciBoZXJlIGluc3RlYWQgb2YgaW5zaWRlXG4gIC8vIHRoZSBXcml0YWJsZVN0YXRlIGNvbnN0cnVjdG9yLCBhdCBsZWFzdCB3aXRoIFY4IDYuNVxuXG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIGlmICghaXNEdXBsZXggJiYgIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSkgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTsgLy8gbGVnYWN5LlxuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRlID09PSAnZnVuY3Rpb24nKSB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbmFsID09PSAnZnVuY3Rpb24nKSB0aGlzLl9maW5hbCA9IG9wdGlvbnMuZmluYWw7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn0gLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuXG5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQWZ0ZXJFbmQoc3RyZWFtLCBjYikge1xuICB2YXIgZXIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKTsgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcblxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xufSAvLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5cblxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIGVyO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJ10sIGNodW5rKTtcbiAgfVxuXG4gIGlmIChlcikge1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpO1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuXG4gIHZhciBpc0J1ZiA9ICFzdGF0ZS5vYmplY3RNb2RlICYmIF9pc1VpbnQ4QXJyYXkoY2h1bmspO1xuXG4gIGlmIChpc0J1ZiAmJiAhQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgY2IgPSBub3A7XG4gIGlmIChzdGF0ZS5lbmRpbmcpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkLS07XG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSBjbGVhckJ1ZmZlcih0aGlzLCBzdGF0ZSk7XG4gIH1cbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXREZWZhdWx0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgLy8gbm9kZTo6UGFyc2VFbmNvZGluZygpIHJlcXVpcmVzIGxvd2VyIGNhc2UuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSBlbmNvZGluZyA9IGVuY29kaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghKFsnaGV4JywgJ3V0ZjgnLCAndXRmLTgnLCAnYXNjaWknLCAnYmluYXJ5JywgJ2Jhc2U2NCcsICd1Y3MyJywgJ3Vjcy0yJywgJ3V0ZjE2bGUnLCAndXRmLTE2bGUnLCAncmF3J10uaW5kZXhPZigoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKSkgPiAtMSkpIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZykge1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgc3RhdGUuZGVjb2RlU3RyaW5ncyAhPT0gZmFsc2UgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuXG4gIHJldHVybiBjaHVuaztcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7IC8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIHZhciBuZXdDaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuXG4gICAgaWYgKGNodW5rICE9PSBuZXdDaHVuaykge1xuICAgICAgaXNCdWYgPSB0cnVlO1xuICAgICAgZW5jb2RpbmcgPSAnYnVmZmVyJztcbiAgICAgIGNodW5rID0gbmV3Q2h1bms7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyazsgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSB7XG4gICAgICBjaHVuazogY2h1bmssXG4gICAgICBlbmNvZGluZzogZW5jb2RpbmcsXG4gICAgICBpc0J1ZjogaXNCdWYsXG4gICAgICBjYWxsYmFjazogY2IsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cblxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSBzdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKSk7ZWxzZSBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcblxuICBpZiAoc3luYykge1xuICAgIC8vIGRlZmVyIHRoZSBjYWxsYmFjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIHN5bmNocm9ub3VzbHlcbiAgICAvLyB0byBhdm9pZCBwaWxpbmcgdXAgdGhpbmdzIG9uIHRoZSBzdGFja1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVyKTsgLy8gdGhpcyBjYW4gZW1pdCBmaW5pc2gsIGFuZCBpdCB3aWxsIGFsd2F5cyBoYXBwZW5cbiAgICAvLyBhZnRlciBlcnJvclxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmaW5pc2hNYXliZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhlIGNhbGxlciBleHBlY3QgdGhpcyB0byBoYXBwZW4gYmVmb3JlIGlmXG4gICAgLy8gaXQgaXMgYXN5bmNcbiAgICBjYihlcik7XG4gICAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcik7IC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBidXQgZmluaXNoIG11c3RcbiAgICAvLyBhbHdheXMgZm9sbG93IGVycm9yXG5cbiAgICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGUoc3RyZWFtLCBlcikge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBzeW5jID0gc3RhdGUuc3luYztcbiAgdmFyIGNiID0gc3RhdGUud3JpdGVjYjtcbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpO1xuICBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpO1xuICBpZiAoZXIpIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpO2Vsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdGF0ZSkgfHwgc3RyZWFtLmRlc3Ryb3llZDtcblxuICAgIGlmICghZmluaXNoZWQgJiYgIXN0YXRlLmNvcmtlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpIHtcbiAgaWYgKCFmaW5pc2hlZCkgb253cml0ZURyYWluKHN0cmVhbSwgc3RhdGUpO1xuICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgY2IoKTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59IC8vIE11c3QgZm9yY2UgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIG5leHRUaWNrLCBzbyB0aGF0IHdlIGRvbid0XG4vLyBlbWl0ICdkcmFpbicgYmVmb3JlIHRoZSB3cml0ZSgpIGNvbnN1bWVyIGdldHMgdGhlICdmYWxzZScgcmV0dXJuXG4vLyB2YWx1ZSwgYW5kIGhhcyBhIGNoYW5jZSB0byBhdHRhY2ggYSAnZHJhaW4nIGxpc3RlbmVyLlxuXG5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn0gLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcblxuXG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG5cbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIGJ1ZmZlcltjb3VudF0gPSBlbnRyeTtcbiAgICAgIGlmICghZW50cnkuaXNCdWYpIGFsbEJ1ZmZlcnMgPSBmYWxzZTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgYnVmZmVyLmFsbEJ1ZmZlcnMgPSBhbGxCdWZmZXJzO1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTsgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcblxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTsgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cblxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ193cml0ZSgpJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTsgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcblxuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9IC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cblxuXG4gIGlmICghc3RhdGUuZW5kaW5nKSBlbmRXcml0YWJsZSh0aGlzLCBzdGF0ZSwgY2IpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICd3cml0YWJsZUxlbmd0aCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuXG5mdW5jdGlvbiBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSkge1xuICBzdHJlYW0uX2ZpbmFsKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICdmdW5jdGlvbicgJiYgIXN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgICBzdGF0ZS5maW5hbENhbGxlZCA9IHRydWU7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxGaW5hbCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbmVlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gIGlmIChuZWVkKSB7XG4gICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuXG4gICAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgICAvLyBpZiB0aGUgcmVhZGFibGUgc2lkZSBpcyByZWFkeSBmb3IgYXV0b0Rlc3Ryb3kgYXMgd2VsbFxuICAgICAgICB2YXIgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gICAgICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5hdXRvRGVzdHJveSAmJiByU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmVlZDtcbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGUoc3RyZWFtLCBzdGF0ZSwgY2IpIHtcbiAgc3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG5cbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cblxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbkNvcmtlZEZpbmlzaChjb3JrUmVxLCBzdGF0ZSwgZXJyKSB7XG4gIHZhciBlbnRyeSA9IGNvcmtSZXEuZW50cnk7XG4gIGNvcmtSZXEuZW50cnkgPSBudWxsO1xuXG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKGVycik7XG4gICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICB9IC8vIHJldXNlIHRoZSBmcmVlIGNvcmtSZXEuXG5cblxuICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IGNvcmtSZXE7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZS5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgIC8vIG1hbmFnaW5nIGRlc3Ryb3llZFxuXG5cbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYikge1xuICBjYihlcnIpO1xufTsiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uL2Vycm9ycycpLmNvZGVzLFxuICAgIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gICAgRVJSX01VTFRJUExFX0NBTExCQUNLID0gX3JlcXVpcmUkY29kZXMuRVJSX01VTFRJUExFX0NBTExCQUNLLFxuICAgIEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLFxuICAgIEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMDtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxucmVxdWlyZSgnaW5oZXJpdHMnKShUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcblxuICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSk7XG4gIH1cblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG4gIGlmIChkYXRhICE9IG51bGwpIC8vIHNpbmdsZSBlcXVhbHMgY2hlY2sgZm9yIGJvdGggYG51bGxgIGFuZCBgdW5kZWZpbmVkYFxuICAgIHRoaXMucHVzaChkYXRhKTtcbiAgY2IoZXIpO1xuICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgaWYgKHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07IC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTsgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH0gLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuXG5cbiAgdGhpcy5vbigncHJlZmluaXNoJywgcHJlZmluaXNoKTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKF90aGlzLCBlciwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZG9uZSh0aGlzLCBudWxsLCBudWxsKTtcbiAgfVxufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgcmV0dXJuIER1cGxleC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG59OyAvLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHlvdSBkbyBzdHVmZiFcbi8vIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vICdjaHVuaycgaXMgYW4gaW5wdXQgY2h1bmsuXG4vL1xuLy8gQ2FsbCBgcHVzaChuZXdDaHVuaylgIHRvIHBhc3MgYWxvbmcgdHJhbnNmb3JtZWQgb3V0cHV0XG4vLyB0byB0aGUgcmVhZGFibGUgc2lkZS4gIFlvdSBtYXkgY2FsbCAncHVzaCcgemVybyBvciBtb3JlIHRpbWVzLlxuLy9cbi8vIENhbGwgYGNiKGVycilgIHdoZW4geW91IGFyZSBkb25lIHdpdGggdGhpcyBjaHVuay4gIElmIHlvdSBwYXNzXG4vLyBhbiBlcnJvciwgdGhlbiB0aGF0J2xsIHB1dCB0aGUgaHVydCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uLiAgSWYgeW91XG4vLyBuZXZlciBjYWxsIGNiKCksIHRoZW4geW91J2xsIG5ldmVyIGdldCBhbm90aGVyIGNodW5rLlxuXG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3RyYW5zZm9ybSgpJykpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcblxuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07IC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnIsIGNiKSB7XG4gIER1cGxleC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLCBlcnIsIGZ1bmN0aW9uIChlcnIyKSB7XG4gICAgY2IoZXJyMik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgaWYgKGRhdGEgIT0gbnVsbCkgLy8gc2luZ2xlIGVxdWFscyBjaGVjayBmb3IgYm90aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgXG4gICAgc3RyZWFtLnB1c2goZGF0YSk7IC8vIFRPRE8oQnJpZGdlQVIpOiBXcml0ZSBhIHRlc3QgZm9yIHRoZXNlIHR3byBlcnJvciBjYXNlc1xuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuXG4gIGlmIChzdHJlYW0uX3dyaXRhYmxlU3RhdGUubGVuZ3RoKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wKCk7XG4gIGlmIChzdHJlYW0uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZykgdGhyb3cgbmV3IEVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcoKTtcbiAgcmV0dXJuIHN0cmVhbS5wdXNoKG51bGwpO1xufSIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxudmFyIEsgPSBbXG4gIDB4NDI4QTJGOTgsIDB4NzEzNzQ0OTEsIDB4QjVDMEZCQ0YsIDB4RTlCNURCQTUsXG4gIDB4Mzk1NkMyNUIsIDB4NTlGMTExRjEsIDB4OTIzRjgyQTQsIDB4QUIxQzVFRDUsXG4gIDB4RDgwN0FBOTgsIDB4MTI4MzVCMDEsIDB4MjQzMTg1QkUsIDB4NTUwQzdEQzMsXG4gIDB4NzJCRTVENzQsIDB4ODBERUIxRkUsIDB4OUJEQzA2QTcsIDB4QzE5QkYxNzQsXG4gIDB4RTQ5QjY5QzEsIDB4RUZCRTQ3ODYsIDB4MEZDMTlEQzYsIDB4MjQwQ0ExQ0MsXG4gIDB4MkRFOTJDNkYsIDB4NEE3NDg0QUEsIDB4NUNCMEE5REMsIDB4NzZGOTg4REEsXG4gIDB4OTgzRTUxNTIsIDB4QTgzMUM2NkQsIDB4QjAwMzI3QzgsIDB4QkY1OTdGQzcsXG4gIDB4QzZFMDBCRjMsIDB4RDVBNzkxNDcsIDB4MDZDQTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdCNzBBODUsIDB4MkUxQjIxMzgsIDB4NEQyQzZERkMsIDB4NTMzODBEMTMsXG4gIDB4NjUwQTczNTQsIDB4NzY2QTBBQkIsIDB4ODFDMkM5MkUsIDB4OTI3MjJDODUsXG4gIDB4QTJCRkU4QTEsIDB4QTgxQTY2NEIsIDB4QzI0QjhCNzAsIDB4Qzc2QzUxQTMsXG4gIDB4RDE5MkU4MTksIDB4RDY5OTA2MjQsIDB4RjQwRTM1ODUsIDB4MTA2QUEwNzAsXG4gIDB4MTlBNEMxMTYsIDB4MUUzNzZDMDgsIDB4Mjc0ODc3NEMsIDB4MzRCMEJDQjUsXG4gIDB4MzkxQzBDQjMsIDB4NEVEOEFBNEEsIDB4NUI5Q0NBNEYsIDB4NjgyRTZGRjMsXG4gIDB4NzQ4RjgyRUUsIDB4NzhBNTYzNkYsIDB4ODRDODc4MTQsIDB4OENDNzAyMDgsXG4gIDB4OTBCRUZGRkEsIDB4QTQ1MDZDRUIsIDB4QkVGOUEzRjcsIDB4QzY3MTc4RjJcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoNjQpXG5cbmZ1bmN0aW9uIFNoYTI1NiAoKSB7XG4gIHRoaXMuaW5pdCgpXG5cbiAgdGhpcy5fdyA9IFcgLy8gbmV3IEFycmF5KDY0KVxuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTI1NiwgSGFzaClcblxuU2hhMjU2LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iID0gMHhiYjY3YWU4NVxuICB0aGlzLl9jID0gMHgzYzZlZjM3MlxuICB0aGlzLl9kID0gMHhhNTRmZjUzYVxuICB0aGlzLl9lID0gMHg1MTBlNTI3ZlxuICB0aGlzLl9mID0gMHg5YjA1Njg4Y1xuICB0aGlzLl9nID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oID0gMHg1YmUwY2QxOVxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIGNoICh4LCB5LCB6KSB7XG4gIHJldHVybiB6IF4gKHggJiAoeSBeIHopKVxufVxuXG5mdW5jdGlvbiBtYWogKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgfCAoeiAmICh4IHwgeSkpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDIgfCB4IDw8IDMwKSBeICh4ID4+PiAxMyB8IHggPDwgMTkpIF4gKHggPj4+IDIyIHwgeCA8PCAxMClcbn1cblxuZnVuY3Rpb24gc2lnbWExICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gNiB8IHggPDwgMjYpIF4gKHggPj4+IDExIHwgeCA8PCAyMSkgXiAoeCA+Pj4gMjUgfCB4IDw8IDcpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDcgfCB4IDw8IDI1KSBeICh4ID4+PiAxOCB8IHggPDwgMTQpIF4gKHggPj4+IDMpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDE3IHwgeCA8PCAxNSkgXiAoeCA+Pj4gMTkgfCB4IDw8IDEzKSBeICh4ID4+PiAxMClcbn1cblxuU2hhMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG4gIHZhciBmID0gdGhpcy5fZiB8IDBcbiAgdmFyIGcgPSB0aGlzLl9nIHwgMFxuICB2YXIgaCA9IHRoaXMuX2ggfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA2NDsgKytpKSBXW2ldID0gKGdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIGdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdKSB8IDBcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICB2YXIgVDEgPSAoaCArIHNpZ21hMShlKSArIGNoKGUsIGYsIGcpICsgS1tqXSArIFdbal0pIHwgMFxuICAgIHZhciBUMiA9IChzaWdtYTAoYSkgKyBtYWooYSwgYiwgYykpIHwgMFxuXG4gICAgaCA9IGdcbiAgICBnID0gZlxuICAgIGYgPSBlXG4gICAgZSA9IChkICsgVDEpIHwgMFxuICAgIGQgPSBjXG4gICAgYyA9IGJcbiAgICBiID0gYVxuICAgIGEgPSAoVDEgKyBUMikgfCAwXG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG4gIHRoaXMuX2YgPSAoZiArIHRoaXMuX2YpIHwgMFxuICB0aGlzLl9nID0gKGcgKyB0aGlzLl9nKSB8IDBcbiAgdGhpcy5faCA9IChoICsgdGhpcy5faCkgfCAwXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gQnVmZmVyLmFsbG9jVW5zYWZlKDMyKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EsIDApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2IsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QsIDEyKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9lLCAxNilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZiwgMjApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2csIDI0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9oLCAyOClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTI1NlxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBLID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhNTEyICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTUxMiwgSGFzaClcblxuU2hhNTEyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9haCA9IDB4NmEwOWU2NjdcbiAgdGhpcy5fYmggPSAweGJiNjdhZTg1XG4gIHRoaXMuX2NoID0gMHgzYzZlZjM3MlxuICB0aGlzLl9kaCA9IDB4YTU0ZmY1M2FcbiAgdGhpcy5fZWggPSAweDUxMGU1MjdmXG4gIHRoaXMuX2ZoID0gMHg5YjA1Njg4Y1xuICB0aGlzLl9naCA9IDB4MWY4M2Q5YWJcbiAgdGhpcy5faGggPSAweDViZTBjZDE5XG5cbiAgdGhpcy5fYWwgPSAweGYzYmNjOTA4XG4gIHRoaXMuX2JsID0gMHg4NGNhYTczYlxuICB0aGlzLl9jbCA9IDB4ZmU5NGY4MmJcbiAgdGhpcy5fZGwgPSAweDVmMWQzNmYxXG4gIHRoaXMuX2VsID0gMHhhZGU2ODJkMVxuICB0aGlzLl9mbCA9IDB4MmIzZTZjMWZcbiAgdGhpcy5fZ2wgPSAweGZiNDFiZDZiXG4gIHRoaXMuX2hsID0gMHgxMzdlMjE3OVxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIENoICh4LCB5LCB6KSB7XG4gIHJldHVybiB6IF4gKHggJiAoeSBeIHopKVxufVxuXG5mdW5jdGlvbiBtYWogKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgfCAoeiAmICh4IHwgeSkpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAyOCB8IHhsIDw8IDQpIF4gKHhsID4+PiAyIHwgeCA8PCAzMCkgXiAoeGwgPj4+IDcgfCB4IDw8IDI1KVxufVxuXG5mdW5jdGlvbiBzaWdtYTEgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTQgfCB4bCA8PCAxOCkgXiAoeCA+Pj4gMTggfCB4bCA8PCAxNCkgXiAoeGwgPj4+IDkgfCB4IDw8IDIzKVxufVxuXG5mdW5jdGlvbiBHYW1tYTAgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMSB8IHhsIDw8IDMxKSBeICh4ID4+PiA4IHwgeGwgPDwgMjQpIF4gKHggPj4+IDcpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMGwgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMSB8IHhsIDw8IDMxKSBeICh4ID4+PiA4IHwgeGwgPDwgMjQpIF4gKHggPj4+IDcgfCB4bCA8PCAyNSlcbn1cblxuZnVuY3Rpb24gR2FtbWExICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE5IHwgeGwgPDwgMTMpIF4gKHhsID4+PiAyOSB8IHggPDwgMykgXiAoeCA+Pj4gNilcbn1cblxuZnVuY3Rpb24gR2FtbWExbCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxOSB8IHhsIDw8IDEzKSBeICh4bCA+Pj4gMjkgfCB4IDw8IDMpIF4gKHggPj4+IDYgfCB4bCA8PCAyNilcbn1cblxuZnVuY3Rpb24gZ2V0Q2FycnkgKGEsIGIpIHtcbiAgcmV0dXJuIChhID4+PiAwKSA8IChiID4+PiAwKSA/IDEgOiAwXG59XG5cblNoYTUxMi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhaCA9IHRoaXMuX2FoIHwgMFxuICB2YXIgYmggPSB0aGlzLl9iaCB8IDBcbiAgdmFyIGNoID0gdGhpcy5fY2ggfCAwXG4gIHZhciBkaCA9IHRoaXMuX2RoIHwgMFxuICB2YXIgZWggPSB0aGlzLl9laCB8IDBcbiAgdmFyIGZoID0gdGhpcy5fZmggfCAwXG4gIHZhciBnaCA9IHRoaXMuX2doIHwgMFxuICB2YXIgaGggPSB0aGlzLl9oaCB8IDBcblxuICB2YXIgYWwgPSB0aGlzLl9hbCB8IDBcbiAgdmFyIGJsID0gdGhpcy5fYmwgfCAwXG4gIHZhciBjbCA9IHRoaXMuX2NsIHwgMFxuICB2YXIgZGwgPSB0aGlzLl9kbCB8IDBcbiAgdmFyIGVsID0gdGhpcy5fZWwgfCAwXG4gIHZhciBmbCA9IHRoaXMuX2ZsIHwgMFxuICB2YXIgZ2wgPSB0aGlzLl9nbCB8IDBcbiAgdmFyIGhsID0gdGhpcy5faGwgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSArPSAyKSB7XG4gICAgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gICAgV1tpICsgMV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0ICsgNClcbiAgfVxuICBmb3IgKDsgaSA8IDE2MDsgaSArPSAyKSB7XG4gICAgdmFyIHhoID0gV1tpIC0gMTUgKiAyXVxuICAgIHZhciB4bCA9IFdbaSAtIDE1ICogMiArIDFdXG4gICAgdmFyIGdhbW1hMCA9IEdhbW1hMCh4aCwgeGwpXG4gICAgdmFyIGdhbW1hMGwgPSBHYW1tYTBsKHhsLCB4aClcblxuICAgIHhoID0gV1tpIC0gMiAqIDJdXG4gICAgeGwgPSBXW2kgLSAyICogMiArIDFdXG4gICAgdmFyIGdhbW1hMSA9IEdhbW1hMSh4aCwgeGwpXG4gICAgdmFyIGdhbW1hMWwgPSBHYW1tYTFsKHhsLCB4aClcblxuICAgIC8vIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XVxuICAgIHZhciBXaTdoID0gV1tpIC0gNyAqIDJdXG4gICAgdmFyIFdpN2wgPSBXW2kgLSA3ICogMiArIDFdXG5cbiAgICB2YXIgV2kxNmggPSBXW2kgLSAxNiAqIDJdXG4gICAgdmFyIFdpMTZsID0gV1tpIC0gMTYgKiAyICsgMV1cblxuICAgIHZhciBXaWwgPSAoZ2FtbWEwbCArIFdpN2wpIHwgMFxuICAgIHZhciBXaWggPSAoZ2FtbWEwICsgV2k3aCArIGdldENhcnJ5KFdpbCwgZ2FtbWEwbCkpIHwgMFxuICAgIFdpbCA9IChXaWwgKyBnYW1tYTFsKSB8IDBcbiAgICBXaWggPSAoV2loICsgZ2FtbWExICsgZ2V0Q2FycnkoV2lsLCBnYW1tYTFsKSkgfCAwXG4gICAgV2lsID0gKFdpbCArIFdpMTZsKSB8IDBcbiAgICBXaWggPSAoV2loICsgV2kxNmggKyBnZXRDYXJyeShXaWwsIFdpMTZsKSkgfCAwXG5cbiAgICBXW2ldID0gV2loXG4gICAgV1tpICsgMV0gPSBXaWxcbiAgfVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgMTYwOyBqICs9IDIpIHtcbiAgICBXaWggPSBXW2pdXG4gICAgV2lsID0gV1tqICsgMV1cblxuICAgIHZhciBtYWpoID0gbWFqKGFoLCBiaCwgY2gpXG4gICAgdmFyIG1hamwgPSBtYWooYWwsIGJsLCBjbClcblxuICAgIHZhciBzaWdtYTBoID0gc2lnbWEwKGFoLCBhbClcbiAgICB2YXIgc2lnbWEwbCA9IHNpZ21hMChhbCwgYWgpXG4gICAgdmFyIHNpZ21hMWggPSBzaWdtYTEoZWgsIGVsKVxuICAgIHZhciBzaWdtYTFsID0gc2lnbWExKGVsLCBlaClcblxuICAgIC8vIHQxID0gaCArIHNpZ21hMSArIGNoICsgS1tqXSArIFdbal1cbiAgICB2YXIgS2loID0gS1tqXVxuICAgIHZhciBLaWwgPSBLW2ogKyAxXVxuXG4gICAgdmFyIGNoaCA9IENoKGVoLCBmaCwgZ2gpXG4gICAgdmFyIGNobCA9IENoKGVsLCBmbCwgZ2wpXG5cbiAgICB2YXIgdDFsID0gKGhsICsgc2lnbWExbCkgfCAwXG4gICAgdmFyIHQxaCA9IChoaCArIHNpZ21hMWggKyBnZXRDYXJyeSh0MWwsIGhsKSkgfCAwXG4gICAgdDFsID0gKHQxbCArIGNobCkgfCAwXG4gICAgdDFoID0gKHQxaCArIGNoaCArIGdldENhcnJ5KHQxbCwgY2hsKSkgfCAwXG4gICAgdDFsID0gKHQxbCArIEtpbCkgfCAwXG4gICAgdDFoID0gKHQxaCArIEtpaCArIGdldENhcnJ5KHQxbCwgS2lsKSkgfCAwXG4gICAgdDFsID0gKHQxbCArIFdpbCkgfCAwXG4gICAgdDFoID0gKHQxaCArIFdpaCArIGdldENhcnJ5KHQxbCwgV2lsKSkgfCAwXG5cbiAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuICAgIHZhciB0MmwgPSAoc2lnbWEwbCArIG1hamwpIHwgMFxuICAgIHZhciB0MmggPSAoc2lnbWEwaCArIG1hamggKyBnZXRDYXJyeSh0MmwsIHNpZ21hMGwpKSB8IDBcblxuICAgIGhoID0gZ2hcbiAgICBobCA9IGdsXG4gICAgZ2ggPSBmaFxuICAgIGdsID0gZmxcbiAgICBmaCA9IGVoXG4gICAgZmwgPSBlbFxuICAgIGVsID0gKGRsICsgdDFsKSB8IDBcbiAgICBlaCA9IChkaCArIHQxaCArIGdldENhcnJ5KGVsLCBkbCkpIHwgMFxuICAgIGRoID0gY2hcbiAgICBkbCA9IGNsXG4gICAgY2ggPSBiaFxuICAgIGNsID0gYmxcbiAgICBiaCA9IGFoXG4gICAgYmwgPSBhbFxuICAgIGFsID0gKHQxbCArIHQybCkgfCAwXG4gICAgYWggPSAodDFoICsgdDJoICsgZ2V0Q2FycnkoYWwsIHQxbCkpIHwgMFxuICB9XG5cbiAgdGhpcy5fYWwgPSAodGhpcy5fYWwgKyBhbCkgfCAwXG4gIHRoaXMuX2JsID0gKHRoaXMuX2JsICsgYmwpIHwgMFxuICB0aGlzLl9jbCA9ICh0aGlzLl9jbCArIGNsKSB8IDBcbiAgdGhpcy5fZGwgPSAodGhpcy5fZGwgKyBkbCkgfCAwXG4gIHRoaXMuX2VsID0gKHRoaXMuX2VsICsgZWwpIHwgMFxuICB0aGlzLl9mbCA9ICh0aGlzLl9mbCArIGZsKSB8IDBcbiAgdGhpcy5fZ2wgPSAodGhpcy5fZ2wgKyBnbCkgfCAwXG4gIHRoaXMuX2hsID0gKHRoaXMuX2hsICsgaGwpIHwgMFxuXG4gIHRoaXMuX2FoID0gKHRoaXMuX2FoICsgYWggKyBnZXRDYXJyeSh0aGlzLl9hbCwgYWwpKSB8IDBcbiAgdGhpcy5fYmggPSAodGhpcy5fYmggKyBiaCArIGdldENhcnJ5KHRoaXMuX2JsLCBibCkpIHwgMFxuICB0aGlzLl9jaCA9ICh0aGlzLl9jaCArIGNoICsgZ2V0Q2FycnkodGhpcy5fY2wsIGNsKSkgfCAwXG4gIHRoaXMuX2RoID0gKHRoaXMuX2RoICsgZGggKyBnZXRDYXJyeSh0aGlzLl9kbCwgZGwpKSB8IDBcbiAgdGhpcy5fZWggPSAodGhpcy5fZWggKyBlaCArIGdldENhcnJ5KHRoaXMuX2VsLCBlbCkpIHwgMFxuICB0aGlzLl9maCA9ICh0aGlzLl9maCArIGZoICsgZ2V0Q2FycnkodGhpcy5fZmwsIGZsKSkgfCAwXG4gIHRoaXMuX2doID0gKHRoaXMuX2doICsgZ2ggKyBnZXRDYXJyeSh0aGlzLl9nbCwgZ2wpKSB8IDBcbiAgdGhpcy5faGggPSAodGhpcy5faGggKyBoaCArIGdldENhcnJ5KHRoaXMuX2hsLCBobCkpIHwgMFxufVxuXG5TaGE1MTIucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg2NClcblxuICBmdW5jdGlvbiB3cml0ZUludDY0QkUgKGgsIGwsIG9mZnNldCkge1xuICAgIEgud3JpdGVJbnQzMkJFKGgsIG9mZnNldClcbiAgICBILndyaXRlSW50MzJCRShsLCBvZmZzZXQgKyA0KVxuICB9XG5cbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2JoLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLCB0aGlzLl9jbCwgMTYpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9kaCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZWgsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLCB0aGlzLl9mbCwgNDApXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9naCwgdGhpcy5fZ2wsIDQ4KVxuICB3cml0ZUludDY0QkUodGhpcy5faGgsIHRoaXMuX2hsLCA1NilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTUxMlxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBleHBvcnRzO1xuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgIT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgIGlmIChoaSlcbiAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0hleCA9IHRvSGV4O1xuXG51dGlscy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYXJyLCBlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRvSGV4KGFycik7XG4gIGVsc2VcbiAgICByZXR1cm4gYXJyO1xufTtcbiIsInZhciByO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJhbmQobGVuKSB7XG4gIGlmICghcilcbiAgICByID0gbmV3IFJhbmQobnVsbCk7XG5cbiAgcmV0dXJuIHIuZ2VuZXJhdGUobGVuKTtcbn07XG5cbmZ1bmN0aW9uIFJhbmQocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kO1xufVxubW9kdWxlLmV4cG9ydHMuUmFuZCA9IFJhbmQ7XG5cblJhbmQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuKSB7XG4gIHJldHVybiB0aGlzLl9yYW5kKGxlbik7XG59O1xuXG4vLyBFbXVsYXRlIGNyeXB0byBBUEkgdXNpbmcgcmFuZHlcblJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICBpZiAodGhpcy5yYW5kLmdldEJ5dGVzKVxuICAgIHJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMobik7XG5cbiAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKylcbiAgICByZXNbaV0gPSB0aGlzLnJhbmQuZ2V0Qnl0ZSgpO1xuICByZXR1cm4gcmVzO1xufTtcblxuaWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0Jykge1xuICBpZiAoc2VsZi5jcnlwdG8gJiYgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChzZWxmLm1zQ3J5cHRvICYmIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gSUVcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgLy8gU2FmYXJpJ3MgV2ViV29ya2VycyBkbyBub3QgaGF2ZSBgY3J5cHRvYFxuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkIGp1bmtcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgfTtcbiAgfVxufSBlbHNlIHtcbiAgLy8gTm9kZS5qcyBvciBXZWIgd29ya2VyIHdpdGggbm8gY3J5cHRvIHN1cHBvcnRcbiAgdHJ5IHtcbiAgICB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgIT09ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQnKTtcblxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gZXhwb3J0cztcblxuY3VydmUuYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuY3VydmUuc2hvcnQgPSByZXF1aXJlKCcuL3Nob3J0Jyk7XG5jdXJ2ZS5tb250ID0gcmVxdWlyZSgnLi9tb250Jyk7XG5jdXJ2ZS5lZHdhcmRzID0gcmVxdWlyZSgnLi9lZHdhcmRzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgY2gzMiA9IHNoYUNvbW1vbi5jaDMyO1xudmFyIG1hajMyID0gc2hhQ29tbW9uLm1hajMyO1xudmFyIHMwXzI1NiA9IHNoYUNvbW1vbi5zMF8yNTY7XG52YXIgczFfMjU2ID0gc2hhQ29tbW9uLnMxXzI1NjtcbnZhciBnMF8yNTYgPSBzaGFDb21tb24uZzBfMjU2O1xudmFyIGcxXzI1NiA9IHNoYUNvbW1vbi5nMV8yNTY7XG5cbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMjU2X0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsXG4gIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsXG4gIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsXG4gIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsXG4gIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsXG4gIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcsXG4gIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsXG4gIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsXG4gIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsXG4gIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsXG4gIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsXG4gIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsXG4gIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjJcbl07XG5cbmZ1bmN0aW9uIFNIQTI1NigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTI1NikpXG4gICAgcmV0dXJuIG5ldyBTSEEyNTYoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsXG4gICAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOVxuICBdO1xuICB0aGlzLmsgPSBzaGEyNTZfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDY0KTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTI1NiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjU2O1xuXG5TSEEyNTYuYmxvY2tTaXplID0gNTEyO1xuU0hBMjU2Lm91dFNpemUgPSAyNTY7XG5TSEEyNTYuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjU2LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyNTYucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSBzdW0zMl80KGcxXzI1NihXW2kgLSAyXSksIFdbaSAtIDddLCBnMF8yNTYoV1tpIC0gMTVdKSwgV1tpIC0gMTZdKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG4gIHZhciBmID0gdGhpcy5oWzVdO1xuICB2YXIgZyA9IHRoaXMuaFs2XTtcbiAgdmFyIGggPSB0aGlzLmhbN107XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgVDEgPSBzdW0zMl81KGgsIHMxXzI1NihlKSwgY2gzMihlLCBmLCBnKSwgdGhpcy5rW2ldLCBXW2ldKTtcbiAgICB2YXIgVDIgPSBzdW0zMihzMF8yNTYoYSksIG1hajMyKGEsIGIsIGMpKTtcbiAgICBoID0gZztcbiAgICBnID0gZjtcbiAgICBmID0gZTtcbiAgICBlID0gc3VtMzIoZCwgVDEpO1xuICAgIGQgPSBjO1xuICAgIGMgPSBiO1xuICAgIGIgPSBhO1xuICAgIGEgPSBzdW0zMihUMSwgVDIpO1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbiAgdGhpcy5oWzVdID0gc3VtMzIodGhpcy5oWzVdLCBmKTtcbiAgdGhpcy5oWzZdID0gc3VtMzIodGhpcy5oWzZdLCBnKTtcbiAgdGhpcy5oWzddID0gc3VtMzIodGhpcy5oWzddLCBoKTtcbn07XG5cblNIQTI1Ni5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgcm90cjY0X2hpID0gdXRpbHMucm90cjY0X2hpO1xudmFyIHJvdHI2NF9sbyA9IHV0aWxzLnJvdHI2NF9sbztcbnZhciBzaHI2NF9oaSA9IHV0aWxzLnNocjY0X2hpO1xudmFyIHNocjY0X2xvID0gdXRpbHMuc2hyNjRfbG87XG52YXIgc3VtNjQgPSB1dGlscy5zdW02NDtcbnZhciBzdW02NF9oaSA9IHV0aWxzLnN1bTY0X2hpO1xudmFyIHN1bTY0X2xvID0gdXRpbHMuc3VtNjRfbG87XG52YXIgc3VtNjRfNF9oaSA9IHV0aWxzLnN1bTY0XzRfaGk7XG52YXIgc3VtNjRfNF9sbyA9IHV0aWxzLnN1bTY0XzRfbG87XG52YXIgc3VtNjRfNV9oaSA9IHV0aWxzLnN1bTY0XzVfaGk7XG52YXIgc3VtNjRfNV9sbyA9IHV0aWxzLnN1bTY0XzVfbG87XG5cbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhNTEyX0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIFNIQTUxMigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTUxMikpXG4gICAgcmV0dXJuIG5ldyBTSEE1MTIoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgsXG4gICAgMHhiYjY3YWU4NSwgMHg4NGNhYTczYixcbiAgICAweDNjNmVmMzcyLCAweGZlOTRmODJiLFxuICAgIDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEsXG4gICAgMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSxcbiAgICAweDliMDU2ODhjLCAweDJiM2U2YzFmLFxuICAgIDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIsXG4gICAgMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSBdO1xuICB0aGlzLmsgPSBzaGE1MTJfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDE2MCk7XG59XG51dGlscy5pbmhlcml0cyhTSEE1MTIsIEJsb2NrSGFzaCk7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTUxMjtcblxuU0hBNTEyLmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEE1MTIub3V0U2l6ZSA9IDUxMjtcblNIQTUxMi5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEE1MTIucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEE1MTIucHJvdG90eXBlLl9wcmVwYXJlQmxvY2sgPSBmdW5jdGlvbiBfcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgLy8gMzIgeCAzMmJpdCB3b3Jkc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBnMV81MTJfaGkoV1tpIC0gNF0sIFdbaSAtIDNdKTsgIC8vIGkgLSAyXG4gICAgdmFyIGMwX2xvID0gZzFfNTEyX2xvKFdbaSAtIDRdLCBXW2kgLSAzXSk7XG4gICAgdmFyIGMxX2hpID0gV1tpIC0gMTRdOyAgLy8gaSAtIDdcbiAgICB2YXIgYzFfbG8gPSBXW2kgLSAxM107XG4gICAgdmFyIGMyX2hpID0gZzBfNTEyX2hpKFdbaSAtIDMwXSwgV1tpIC0gMjldKTsgIC8vIGkgLSAxNVxuICAgIHZhciBjMl9sbyA9IGcwXzUxMl9sbyhXW2kgLSAzMF0sIFdbaSAtIDI5XSk7XG4gICAgdmFyIGMzX2hpID0gV1tpIC0gMzJdOyAgLy8gaSAtIDE2XG4gICAgdmFyIGMzX2xvID0gV1tpIC0gMzFdO1xuXG4gICAgV1tpXSA9IHN1bTY0XzRfaGkoXG4gICAgICBjMF9oaSwgYzBfbG8sXG4gICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICBjM19oaSwgYzNfbG8pO1xuICAgIFdbaSArIDFdID0gc3VtNjRfNF9sbyhcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gIH1cbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB0aGlzLl9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCk7XG5cbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgdmFyIGFoID0gdGhpcy5oWzBdO1xuICB2YXIgYWwgPSB0aGlzLmhbMV07XG4gIHZhciBiaCA9IHRoaXMuaFsyXTtcbiAgdmFyIGJsID0gdGhpcy5oWzNdO1xuICB2YXIgY2ggPSB0aGlzLmhbNF07XG4gIHZhciBjbCA9IHRoaXMuaFs1XTtcbiAgdmFyIGRoID0gdGhpcy5oWzZdO1xuICB2YXIgZGwgPSB0aGlzLmhbN107XG4gIHZhciBlaCA9IHRoaXMuaFs4XTtcbiAgdmFyIGVsID0gdGhpcy5oWzldO1xuICB2YXIgZmggPSB0aGlzLmhbMTBdO1xuICB2YXIgZmwgPSB0aGlzLmhbMTFdO1xuICB2YXIgZ2ggPSB0aGlzLmhbMTJdO1xuICB2YXIgZ2wgPSB0aGlzLmhbMTNdO1xuICB2YXIgaGggPSB0aGlzLmhbMTRdO1xuICB2YXIgaGwgPSB0aGlzLmhbMTVdO1xuXG4gIGFzc2VydCh0aGlzLmsubGVuZ3RoID09PSBXLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGhoO1xuICAgIHZhciBjMF9sbyA9IGhsO1xuICAgIHZhciBjMV9oaSA9IHMxXzUxMl9oaShlaCwgZWwpO1xuICAgIHZhciBjMV9sbyA9IHMxXzUxMl9sbyhlaCwgZWwpO1xuICAgIHZhciBjMl9oaSA9IGNoNjRfaGkoZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMyX2xvID0gY2g2NF9sbyhlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzNfaGkgPSB0aGlzLmtbaV07XG4gICAgdmFyIGMzX2xvID0gdGhpcy5rW2kgKyAxXTtcbiAgICB2YXIgYzRfaGkgPSBXW2ldO1xuICAgIHZhciBjNF9sbyA9IFdbaSArIDFdO1xuXG4gICAgdmFyIFQxX2hpID0gc3VtNjRfNV9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgIGM0X2hpLCBjNF9sbyk7XG4gICAgdmFyIFQxX2xvID0gc3VtNjRfNV9sbyhcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgIGM0X2hpLCBjNF9sbyk7XG5cbiAgICBjMF9oaSA9IHMwXzUxMl9oaShhaCwgYWwpO1xuICAgIGMwX2xvID0gczBfNTEyX2xvKGFoLCBhbCk7XG4gICAgYzFfaGkgPSBtYWo2NF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcbiAgICBjMV9sbyA9IG1hajY0X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuXG4gICAgdmFyIFQyX2hpID0gc3VtNjRfaGkoYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuICAgIHZhciBUMl9sbyA9IHN1bTY0X2xvKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcblxuICAgIGhoID0gZ2g7XG4gICAgaGwgPSBnbDtcblxuICAgIGdoID0gZmg7XG4gICAgZ2wgPSBmbDtcblxuICAgIGZoID0gZWg7XG4gICAgZmwgPSBlbDtcblxuICAgIGVoID0gc3VtNjRfaGkoZGgsIGRsLCBUMV9oaSwgVDFfbG8pO1xuICAgIGVsID0gc3VtNjRfbG8oZGwsIGRsLCBUMV9oaSwgVDFfbG8pO1xuXG4gICAgZGggPSBjaDtcbiAgICBkbCA9IGNsO1xuXG4gICAgY2ggPSBiaDtcbiAgICBjbCA9IGJsO1xuXG4gICAgYmggPSBhaDtcbiAgICBibCA9IGFsO1xuXG4gICAgYWggPSBzdW02NF9oaShUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gICAgYWwgPSBzdW02NF9sbyhUMV9oaSwgVDFfbG8sIFQyX2hpLCBUMl9sbyk7XG4gIH1cblxuICBzdW02NCh0aGlzLmgsIDAsIGFoLCBhbCk7XG4gIHN1bTY0KHRoaXMuaCwgMiwgYmgsIGJsKTtcbiAgc3VtNjQodGhpcy5oLCA0LCBjaCwgY2wpO1xuICBzdW02NCh0aGlzLmgsIDYsIGRoLCBkbCk7XG4gIHN1bTY0KHRoaXMuaCwgOCwgZWgsIGVsKTtcbiAgc3VtNjQodGhpcy5oLCAxMCwgZmgsIGZsKTtcbiAgc3VtNjQodGhpcy5oLCAxMiwgZ2gsIGdsKTtcbiAgc3VtNjQodGhpcy5oLCAxNCwgaGgsIGhsKTtcbn07XG5cblNIQTUxMi5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIGNoNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoKSB7XG4gIHZhciByID0gKHhoICYgeWgpIF4gKCh+eGgpICYgemgpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGNoNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICgofnhsKSAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoeGggJiB6aCkgXiAoeWggJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICh4bCAmIHpsKSBeICh5bCAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cbiIsIi8qKlxuICogUmV0dXJucyBhIGBCb29sZWFuYCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgYSBgU3RyaW5nYCBzdGFydHMgd2l0aCAnMHgnXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgaW5wdXQgdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGEgYm9vbGVhbiBpZiBpdCBpcyBvciBpcyBub3QgaGV4IHByZWZpeGVkXG4gKiBAdGhyb3dzIGlmIHRoZSBzdHIgaW5wdXQgaXMgbm90IGEgc3RyaW5nXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNIZXhQcmVmaXhlZChzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW2lzLWhleC1wcmVmaXhlZF0gdmFsdWUgbXVzdCBiZSB0eXBlICdzdHJpbmcnLCBpcyBjdXJyZW50bHkgdHlwZSBcIiArICh0eXBlb2Ygc3RyKSArIFwiLCB3aGlsZSBjaGVja2luZyBpc0hleFByZWZpeGVkLlwiKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UoMCwgMikgPT09ICcweCc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGNvbGwsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgIHZhciBlYWNoT2ZJbXBsZW1lbnRhdGlvbiA9ICgwLCBfaXNBcnJheUxpa2UyLmRlZmF1bHQpKGNvbGwpID8gZWFjaE9mQXJyYXlMaWtlIDogZWFjaE9mR2VuZXJpYztcbiAgICBlYWNoT2ZJbXBsZW1lbnRhdGlvbihjb2xsLCAoMCwgX3dyYXBBc3luYzIuZGVmYXVsdCkoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG59O1xuXG52YXIgX2lzQXJyYXlMaWtlID0gcmVxdWlyZSgnbG9kYXNoL2lzQXJyYXlMaWtlJyk7XG5cbnZhciBfaXNBcnJheUxpa2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNBcnJheUxpa2UpO1xuXG52YXIgX2JyZWFrTG9vcCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvYnJlYWtMb29wJyk7XG5cbnZhciBfYnJlYWtMb29wMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JyZWFrTG9vcCk7XG5cbnZhciBfZWFjaE9mTGltaXQgPSByZXF1aXJlKCcuL2VhY2hPZkxpbWl0Jyk7XG5cbnZhciBfZWFjaE9mTGltaXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWFjaE9mTGltaXQpO1xuXG52YXIgX2RvTGltaXQgPSByZXF1aXJlKCcuL2ludGVybmFsL2RvTGltaXQnKTtcblxudmFyIF9kb0xpbWl0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RvTGltaXQpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKCdsb2Rhc2gvbm9vcCcpO1xuXG52YXIgX25vb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9vcCk7XG5cbnZhciBfb25jZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvb25jZScpO1xuXG52YXIgX29uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25jZSk7XG5cbnZhciBfb25seU9uY2UgPSByZXF1aXJlKCcuL2ludGVybmFsL29ubHlPbmNlJyk7XG5cbnZhciBfb25seU9uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25seU9uY2UpO1xuXG52YXIgX3dyYXBBc3luYyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd3JhcEFzeW5jJyk7XG5cbnZhciBfd3JhcEFzeW5jMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyYXBBc3luYyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIGVhY2hPZiBpbXBsZW1lbnRhdGlvbiBvcHRpbWl6ZWQgZm9yIGFycmF5LWxpa2VzXG5mdW5jdGlvbiBlYWNoT2ZBcnJheUxpa2UoY29sbCwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSAoMCwgX29uY2UyLmRlZmF1bHQpKGNhbGxiYWNrIHx8IF9ub29wMi5kZWZhdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICBjb21wbGV0ZWQgPSAwLFxuICAgICAgICBsZW5ndGggPSBjb2xsLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGl0ZXJhdG9yQ2FsbGJhY2soZXJyLCB2YWx1ZSkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKCsrY29tcGxldGVkID09PSBsZW5ndGggfHwgdmFsdWUgPT09IF9icmVha0xvb3AyLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKGNvbGxbaW5kZXhdLCBpbmRleCwgKDAsIF9vbmx5T25jZTIuZGVmYXVsdCkoaXRlcmF0b3JDYWxsYmFjaykpO1xuICAgIH1cbn1cblxuLy8gYSBnZW5lcmljIHZlcnNpb24gb2YgZWFjaE9mIHdoaWNoIGNhbiBoYW5kbGUgYXJyYXksIG9iamVjdCwgYW5kIGl0ZXJhdG9yIGNhc2VzLlxudmFyIGVhY2hPZkdlbmVyaWMgPSAoMCwgX2RvTGltaXQyLmRlZmF1bHQpKF9lYWNoT2ZMaW1pdDIuZGVmYXVsdCwgSW5maW5pdHkpO1xuXG4vKipcbiAqIExpa2UgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9LCBleGNlcHQgdGhhdCBpdCBwYXNzZXMgdGhlIGtleSAob3IgaW5kZXgpIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcbiAqIHRvIHRoZSBpdGVyYXRlZS5cbiAqXG4gKiBAbmFtZSBlYWNoT2ZcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAqIEBtZXRob2RcbiAqIEBhbGlhcyBmb3JFYWNoT2ZcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2hcbiAqIGl0ZW0gaW4gYGNvbGxgLlxuICogVGhlIGBrZXlgIGlzIHRoZSBpdGVtJ3Mga2V5LCBvciBpbmRleCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheS5cbiAqIEludm9rZWQgd2l0aCAoaXRlbSwga2V5LCBjYWxsYmFjaykuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqID0ge2RldjogXCIvZGV2Lmpzb25cIiwgdGVzdDogXCIvdGVzdC5qc29uXCIsIHByb2Q6IFwiL3Byb2QuanNvblwifTtcbiAqIHZhciBjb25maWdzID0ge307XG4gKlxuICogYXN5bmMuZm9yRWFjaE9mKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXksIGNhbGxiYWNrKSB7XG4gKiAgICAgZnMucmVhZEZpbGUoX19kaXJuYW1lICsgdmFsdWUsIFwidXRmOFwiLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gKiAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICogICAgICAgICB0cnkge1xuICogICAgICAgICAgICAgY29uZmlnc1trZXldID0gSlNPTi5wYXJzZShkYXRhKTtcbiAqICAgICAgICAgfSBjYXRjaCAoZSkge1xuICogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICogICAgICAgICB9XG4gKiAgICAgICAgIGNhbGxiYWNrKCk7XG4gKiAgICAgfSk7XG4gKiB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gKiAgICAgaWYgKGVycikgY29uc29sZS5lcnJvcihlcnIubWVzc2FnZSk7XG4gKiAgICAgLy8gY29uZmlncyBpcyBub3cgYSBtYXAgb2YgSlNPTiBkYXRhXG4gKiAgICAgZG9Tb21ldGhpbmdXaXRoKGNvbmZpZ3MpO1xuICogfSk7XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuLy8gQSB0ZW1wb3JhcnkgdmFsdWUgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgbG9vcCBzaG91bGQgYmUgYnJva2VuLlxuLy8gU2VlICMxMDY0LCAjMTI5M1xuZXhwb3J0cy5kZWZhdWx0ID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2VhY2hPZkxpbWl0O1xuXG52YXIgX25vb3AgPSByZXF1aXJlKCdsb2Rhc2gvbm9vcCcpO1xuXG52YXIgX25vb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9vcCk7XG5cbnZhciBfb25jZSA9IHJlcXVpcmUoJy4vb25jZScpO1xuXG52YXIgX29uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25jZSk7XG5cbnZhciBfaXRlcmF0b3IgPSByZXF1aXJlKCcuL2l0ZXJhdG9yJyk7XG5cbnZhciBfaXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlcmF0b3IpO1xuXG52YXIgX29ubHlPbmNlID0gcmVxdWlyZSgnLi9vbmx5T25jZScpO1xuXG52YXIgX29ubHlPbmNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29ubHlPbmNlKTtcblxudmFyIF9icmVha0xvb3AgPSByZXF1aXJlKCcuL2JyZWFrTG9vcCcpO1xuXG52YXIgX2JyZWFrTG9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9icmVha0xvb3ApO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZWFjaE9mTGltaXQobGltaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgaXRlcmF0ZWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9vbmNlMi5kZWZhdWx0KShjYWxsYmFjayB8fCBfbm9vcDIuZGVmYXVsdCk7XG4gICAgICAgIGlmIChsaW1pdCA8PSAwIHx8ICFvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV4dEVsZW0gPSAoMCwgX2l0ZXJhdG9yMi5kZWZhdWx0KShvYmopO1xuICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICB2YXIgcnVubmluZyA9IDA7XG4gICAgICAgIHZhciBsb29waW5nID0gZmFsc2U7XG5cbiAgICAgICAgZnVuY3Rpb24gaXRlcmF0ZWVDYWxsYmFjayhlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBydW5uaW5nIC09IDE7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IF9icmVha0xvb3AyLmRlZmF1bHQgfHwgZG9uZSAmJiBydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFsb29waW5nKSB7XG4gICAgICAgICAgICAgICAgcmVwbGVuaXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZXBsZW5pc2goKSB7XG4gICAgICAgICAgICBsb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChydW5uaW5nIDwgbGltaXQgJiYgIWRvbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IG5leHRFbGVtKCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydW5uaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnVubmluZyArPSAxO1xuICAgICAgICAgICAgICAgIGl0ZXJhdGVlKGVsZW0udmFsdWUsIGVsZW0ua2V5LCAoMCwgX29ubHlPbmNlMi5kZWZhdWx0KShpdGVyYXRlZUNhbGxiYWNrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb29waW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXBsZW5pc2goKTtcbiAgICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBkb0xpbWl0O1xuZnVuY3Rpb24gZG9MaW1pdChmbiwgbGltaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGl0ZXJhYmxlLCBpdGVyYXRlZSwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZuKGl0ZXJhYmxlLCBsaW1pdCwgaXRlcmF0ZWUsIGNhbGxiYWNrKTtcbiAgICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIvLyAgICAgIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4vLyAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIHByZWNvbmQgPSByZXF1aXJlKCdwcmVjb25kJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLy8gQSBjbGFzcyB0byBob2xkIHRoZSBzdGF0ZSBvZiBhIGJhY2tvZmYgb3BlcmF0aW9uLiBBY2NlcHRzIGEgYmFja29mZiBzdHJhdGVneVxuLy8gdG8gZ2VuZXJhdGUgdGhlIGJhY2tvZmYgZGVsYXlzLlxuZnVuY3Rpb24gQmFja29mZihiYWNrb2ZmU3RyYXRlZ3kpIHtcbiAgICBldmVudHMuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICB0aGlzLmJhY2tvZmZTdHJhdGVneV8gPSBiYWNrb2ZmU3RyYXRlZ3k7XG4gICAgdGhpcy5tYXhOdW1iZXJPZlJldHJ5XyA9IC0xO1xuICAgIHRoaXMuYmFja29mZk51bWJlcl8gPSAwO1xuICAgIHRoaXMuYmFja29mZkRlbGF5XyA9IDA7XG4gICAgdGhpcy50aW1lb3V0SURfID0gLTE7XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICBiYWNrb2ZmOiB0aGlzLm9uQmFja29mZl8uYmluZCh0aGlzKVxuICAgIH07XG59XG51dGlsLmluaGVyaXRzKEJhY2tvZmYsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG4vLyBTZXRzIGEgbGltaXQsIGdyZWF0ZXIgdGhhbiAwLCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmFja29mZnMuIEEgJ2ZhaWwnXG4vLyBldmVudCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbkJhY2tvZmYucHJvdG90eXBlLmZhaWxBZnRlciA9IGZ1bmN0aW9uKG1heE51bWJlck9mUmV0cnkpIHtcbiAgICBwcmVjb25kLmNoZWNrQXJndW1lbnQobWF4TnVtYmVyT2ZSZXRyeSA+IDAsXG4gICAgICAgICdFeHBlY3RlZCBhIG1heGltdW0gbnVtYmVyIG9mIHJldHJ5IGdyZWF0ZXIgdGhhbiAwIGJ1dCBnb3QgJXMuJyxcbiAgICAgICAgbWF4TnVtYmVyT2ZSZXRyeSk7XG5cbiAgICB0aGlzLm1heE51bWJlck9mUmV0cnlfID0gbWF4TnVtYmVyT2ZSZXRyeTtcbn07XG5cbi8vIFN0YXJ0cyBhIGJhY2tvZmYgb3BlcmF0aW9uLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBsZXQgdGhlXG4vLyBsaXN0ZW5lcnMga25vdyB3aHkgdGhlIGJhY2tvZmYgb3BlcmF0aW9uIHdhcyBzdGFydGVkLlxuQmFja29mZi5wcm90b3R5cGUuYmFja29mZiA9IGZ1bmN0aW9uKGVycikge1xuICAgIHByZWNvbmQuY2hlY2tTdGF0ZSh0aGlzLnRpbWVvdXRJRF8gPT09IC0xLCAnQmFja29mZiBpbiBwcm9ncmVzcy4nKTtcblxuICAgIGlmICh0aGlzLmJhY2tvZmZOdW1iZXJfID09PSB0aGlzLm1heE51bWJlck9mUmV0cnlfKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZmFpbCcsIGVycik7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSB0aGlzLmJhY2tvZmZTdHJhdGVneV8ubmV4dCgpO1xuICAgICAgICB0aGlzLnRpbWVvdXRJRF8gPSBzZXRUaW1lb3V0KHRoaXMuaGFuZGxlcnMuYmFja29mZiwgdGhpcy5iYWNrb2ZmRGVsYXlfKTtcbiAgICAgICAgdGhpcy5lbWl0KCdiYWNrb2ZmJywgdGhpcy5iYWNrb2ZmTnVtYmVyXywgdGhpcy5iYWNrb2ZmRGVsYXlfLCBlcnIpO1xuICAgIH1cbn07XG5cbi8vIEhhbmRsZXMgdGhlIGJhY2tvZmYgdGltZW91dCBjb21wbGV0aW9uLlxuQmFja29mZi5wcm90b3R5cGUub25CYWNrb2ZmXyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGltZW91dElEXyA9IC0xO1xuICAgIHRoaXMuZW1pdCgncmVhZHknLCB0aGlzLmJhY2tvZmZOdW1iZXJfLCB0aGlzLmJhY2tvZmZEZWxheV8pO1xuICAgIHRoaXMuYmFja29mZk51bWJlcl8rKztcbn07XG5cbi8vIFN0b3BzIGFueSBiYWNrb2ZmIG9wZXJhdGlvbiBhbmQgcmVzZXRzIHRoZSBiYWNrb2ZmIGRlbGF5IHRvIGl0cyBpbml0YWwgdmFsdWUuXG5CYWNrb2ZmLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYmFja29mZk51bWJlcl8gPSAwO1xuICAgIHRoaXMuYmFja29mZlN0cmF0ZWd5Xy5yZXNldCgpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJRF8pO1xuICAgIHRoaXMudGltZW91dElEXyA9IC0xO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCYWNrb2ZmO1xuIiwiLy8gICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aGlldSBUdXJjb3R0ZVxuLy8gICAgICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBpc0RlZih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG4vLyBBYnN0cmFjdCBjbGFzcyBkZWZpbmluZyB0aGUgc2tlbGV0b24gZm9yIHRoZSBiYWNrb2ZmIHN0cmF0ZWdpZXMuIEFjY2VwdHMgYW5cbi8vIG9iamVjdCBob2xkaW5nIHRoZSBvcHRpb25zIGZvciB0aGUgYmFja29mZiBzdHJhdGVneTpcbi8vXG4vLyAgKiBgcmFuZG9taXNhdGlvbkZhY3RvcmA6IFRoZSByYW5kb21pc2F0aW9uIGZhY3RvciB3aGljaCBtdXN0IGJlIGJldHdlZW4gMFxuLy8gICAgIGFuZCAxIHdoZXJlIDEgZXF1YXRlcyB0byBhIHJhbmRvbWl6YXRpb24gZmFjdG9yIG9mIDEwMCUgYW5kIDAgdG8gbm9cbi8vICAgICByYW5kb21pemF0aW9uLlxuLy8gICogYGluaXRpYWxEZWxheWA6IFRoZSBiYWNrb2ZmIGluaXRpYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuLy8gICogYG1heERlbGF5YDogVGhlIGJhY2tvZmYgbWF4aW1hbCBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG5mdW5jdGlvbiBCYWNrb2ZmU3RyYXRlZ3kob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKGlzRGVmKG9wdGlvbnMuaW5pdGlhbERlbGF5KSAmJiBvcHRpb25zLmluaXRpYWxEZWxheSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgaW5pdGlhbCB0aW1lb3V0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuJyk7XG4gICAgfSBlbHNlIGlmIChpc0RlZihvcHRpb25zLm1heERlbGF5KSAmJiBvcHRpb25zLm1heERlbGF5IDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtYXhpbWFsIHRpbWVvdXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRpYWxEZWxheV8gPSBvcHRpb25zLmluaXRpYWxEZWxheSB8fCAxMDA7XG4gICAgdGhpcy5tYXhEZWxheV8gPSBvcHRpb25zLm1heERlbGF5IHx8IDEwMDAwO1xuXG4gICAgaWYgKHRoaXMubWF4RGVsYXlfIDw9IHRoaXMuaW5pdGlhbERlbGF5Xykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtYXhpbWFsIGJhY2tvZmYgZGVsYXkgbXVzdCBiZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdncmVhdGVyIHRoYW4gdGhlIGluaXRpYWwgYmFja29mZiBkZWxheS4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZWYob3B0aW9ucy5yYW5kb21pc2F0aW9uRmFjdG9yKSAmJlxuICAgICAgICAob3B0aW9ucy5yYW5kb21pc2F0aW9uRmFjdG9yIDwgMCB8fCBvcHRpb25zLnJhbmRvbWlzYXRpb25GYWN0b3IgPiAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSByYW5kb21pc2F0aW9uIGZhY3RvciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJhbmRvbWlzYXRpb25GYWN0b3JfID0gb3B0aW9ucy5yYW5kb21pc2F0aW9uRmFjdG9yIHx8IDA7XG59XG5cbi8vIEdldHMgdGhlIG1heGltYWwgYmFja29mZiBkZWxheS5cbkJhY2tvZmZTdHJhdGVneS5wcm90b3R5cGUuZ2V0TWF4RGVsYXkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXhEZWxheV87XG59O1xuXG4vLyBHZXRzIHRoZSBpbml0aWFsIGJhY2tvZmYgZGVsYXkuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLmdldEluaXRpYWxEZWxheSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxEZWxheV87XG59O1xuXG4vLyBUZW1wbGF0ZSBtZXRob2QgdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgbmV4dCBiYWNrb2ZmIGRlbGF5IGluXG4vLyBtaWxsaXNlY29uZHMuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYmFja29mZkRlbGF5ID0gdGhpcy5uZXh0XygpO1xuICAgIHZhciByYW5kb21pc2F0aW9uTXVsdGlwbGUgPSAxICsgTWF0aC5yYW5kb20oKSAqIHRoaXMucmFuZG9taXNhdGlvbkZhY3Rvcl87XG4gICAgdmFyIHJhbmRvbWl6ZWREZWxheSA9IE1hdGgucm91bmQoYmFja29mZkRlbGF5ICogcmFuZG9taXNhdGlvbk11bHRpcGxlKTtcbiAgICByZXR1cm4gcmFuZG9taXplZERlbGF5O1xufTtcblxuLy8gQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIG5leHQgYmFja29mZiBkZWxheS4gSW50ZW5kZWQgdG8gYmUgb3ZlcnJpZGRlbiBieVxuLy8gc3ViY2xhc3Nlcy5cbkJhY2tvZmZTdHJhdGVneS5wcm90b3R5cGUubmV4dF8gPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhY2tvZmZTdHJhdGVneS5uZXh0XygpIHVuaW1wbGVtZW50ZWQuJyk7XG59O1xuXG4vLyBUZW1wbGF0ZSBtZXRob2QgdGhhdCByZXNldHMgdGhlIGJhY2tvZmYgZGVsYXkgdG8gaXRzIGluaXRpYWwgdmFsdWUuXG5CYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldF8oKTtcbn07XG5cbi8vIFJlc2V0cyB0aGUgYmFja29mZiBkZWxheSB0byBpdHMgaW5pdGlhbCB2YWx1ZS4gSW50ZW5kZWQgdG8gYmUgb3ZlcnJpZGRlbiBieVxuLy8gc3ViY2xhc3Nlcy5cbkJhY2tvZmZTdHJhdGVneS5wcm90b3R5cGUucmVzZXRfID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYWNrb2ZmU3RyYXRlZ3kucmVzZXRfKCkgdW5pbXBsZW1lbnRlZC4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja29mZlN0cmF0ZWd5O1xuIiwiLy8gICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aGlldSBUdXJjb3R0ZVxuLy8gICAgICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgQmFja29mZlN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9zdHJhdGVneScpO1xuXG4vLyBGaWJvbmFjY2kgYmFja29mZiBzdHJhdGVneS5cbmZ1bmN0aW9uIEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneShvcHRpb25zKSB7XG4gICAgQmFja29mZlN0cmF0ZWd5LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5iYWNrb2ZmRGVsYXlfID0gMDtcbiAgICB0aGlzLm5leHRCYWNrb2ZmRGVsYXlfID0gdGhpcy5nZXRJbml0aWFsRGVsYXkoKTtcbn1cbnV0aWwuaW5oZXJpdHMoRmlib25hY2NpQmFja29mZlN0cmF0ZWd5LCBCYWNrb2ZmU3RyYXRlZ3kpO1xuXG5GaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLm5leHRfID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJhY2tvZmZEZWxheSA9IE1hdGgubWluKHRoaXMubmV4dEJhY2tvZmZEZWxheV8sIHRoaXMuZ2V0TWF4RGVsYXkoKSk7XG4gICAgdGhpcy5uZXh0QmFja29mZkRlbGF5XyArPSB0aGlzLmJhY2tvZmZEZWxheV87XG4gICAgdGhpcy5iYWNrb2ZmRGVsYXlfID0gYmFja29mZkRlbGF5O1xuICAgIHJldHVybiBiYWNrb2ZmRGVsYXk7XG59O1xuXG5GaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLnJlc2V0XyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMubmV4dEJhY2tvZmZEZWxheV8gPSB0aGlzLmdldEluaXRpYWxEZWxheSgpO1xuICAgIHRoaXMuYmFja29mZkRlbGF5XyA9IDA7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneTtcbiIsImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGV0aFV0aWwgPSByZXF1aXJlKCdldGhlcmV1bWpzLXV0aWwnKVxuY29uc3QgRXRoQmxvY2tUcmFja2VyID0gcmVxdWlyZSgnZXRoLWJsb2NrLXRyYWNrZXInKVxuY29uc3QgbWFwID0gcmVxdWlyZSgnYXN5bmMvbWFwJylcbmNvbnN0IGVhY2hTZXJpZXMgPSByZXF1aXJlKCdhc3luYy9lYWNoU2VyaWVzJylcbmNvbnN0IFN0b3BsaWdodCA9IHJlcXVpcmUoJy4vdXRpbC9zdG9wbGlnaHQuanMnKVxuY29uc3QgY2FjaGVVdGlscyA9IHJlcXVpcmUoJy4vdXRpbC9ycGMtY2FjaGUtdXRpbHMuanMnKVxuY29uc3QgY3JlYXRlUGF5bG9hZCA9IHJlcXVpcmUoJy4vdXRpbC9jcmVhdGUtcGF5bG9hZC5qcycpXG5jb25zdCBub29wID0gZnVuY3Rpb24oKXt9XG5cbm1vZHVsZS5leHBvcnRzID0gV2ViM1Byb3ZpZGVyRW5naW5lXG5cblxuaW5oZXJpdHMoV2ViM1Byb3ZpZGVyRW5naW5lLCBFdmVudEVtaXR0ZXIpXG5cbmZ1bmN0aW9uIFdlYjNQcm92aWRlckVuZ2luZShvcHRzKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIEV2ZW50RW1pdHRlci5jYWxsKHNlbGYpXG4gIHNlbGYuc2V0TWF4TGlzdGVuZXJzKDMwKVxuICAvLyBwYXJzZSBvcHRpb25zXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgLy8gYmxvY2sgcG9sbGluZ1xuICBjb25zdCBkaXJlY3RQcm92aWRlciA9IHsgc2VuZEFzeW5jOiBzZWxmLl9oYW5kbGVBc3luYy5iaW5kKHNlbGYpIH1cbiAgY29uc3QgYmxvY2tUcmFja2VyUHJvdmlkZXIgPSBvcHRzLmJsb2NrVHJhY2tlclByb3ZpZGVyIHx8IGRpcmVjdFByb3ZpZGVyXG4gIHNlbGYuX2Jsb2NrVHJhY2tlciA9IG9wdHMuYmxvY2tUcmFja2VyIHx8IG5ldyBFdGhCbG9ja1RyYWNrZXIoe1xuICAgIHByb3ZpZGVyOiBibG9ja1RyYWNrZXJQcm92aWRlcixcbiAgICBwb2xsaW5nSW50ZXJ2YWw6IG9wdHMucG9sbGluZ0ludGVydmFsIHx8IDQwMDAsXG4gIH0pXG5cbiAgLy8gaGFuZGxlIG5ldyBibG9ja1xuICBzZWxmLl9ibG9ja1RyYWNrZXIub24oJ2Jsb2NrJywgKGpzb25CbG9jaykgPT4ge1xuICAgIGNvbnN0IGJ1ZmZlckJsb2NrID0gdG9CdWZmZXJCbG9jayhqc29uQmxvY2spXG4gICAgc2VsZi5fc2V0Q3VycmVudEJsb2NrKGJ1ZmZlckJsb2NrKVxuICB9KVxuXG4gIC8vIGVtaXQgYmxvY2sgZXZlbnRzIGZyb20gdGhlIGJsb2NrIHRyYWNrZXJcbiAgc2VsZi5fYmxvY2tUcmFja2VyLm9uKCdibG9jaycsIHNlbGYuZW1pdC5iaW5kKHNlbGYsICdyYXdCbG9jaycpKVxuICBzZWxmLl9ibG9ja1RyYWNrZXIub24oJ3N5bmMnLCBzZWxmLmVtaXQuYmluZChzZWxmLCAnc3luYycpKVxuICBzZWxmLl9ibG9ja1RyYWNrZXIub24oJ2xhdGVzdCcsIHNlbGYuZW1pdC5iaW5kKHNlbGYsICdsYXRlc3QnKSlcblxuICAvLyBzZXQgaW5pdGlhbGl6YXRpb24gYmxvY2tlclxuICBzZWxmLl9yZWFkeSA9IG5ldyBTdG9wbGlnaHQoKVxuICAvLyB1bmJsb2NrIGluaXRpYWxpemF0aW9uIGFmdGVyIGZpcnN0IGJsb2NrXG4gIHNlbGYuX2Jsb2NrVHJhY2tlci5vbmNlKCdibG9jaycsICgpID0+IHtcbiAgICBzZWxmLl9yZWFkeS5nbygpXG4gIH0pXG4gIC8vIGxvY2FsIHN0YXRlXG4gIHNlbGYuY3VycmVudEJsb2NrID0gbnVsbFxuICBzZWxmLl9wcm92aWRlcnMgPSBbXVxufVxuXG4vLyBwdWJsaWNcblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKGNiID0gbm9vcCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8vIHN0YXJ0IGJsb2NrIHBvbGxpbmdcbiAgc2VsZi5fYmxvY2tUcmFja2VyLnN0YXJ0KCkudGhlbihjYikuY2F0Y2goY2IpXG4gIHNlbGYuX3J1bm5pbmcgPSB0cnVlXG4gIHNlbGYuZW1pdCgnc3RhcnQnKVxufVxuXG5XZWIzUHJvdmlkZXJFbmdpbmUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbigpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBzdG9wIGJsb2NrIHBvbGxpbmdcbiAgc2VsZi5fYmxvY2tUcmFja2VyLnN0b3AoKVxuICBzZWxmLl9ydW5uaW5nID0gZmFsc2VcbiAgc2VsZi5lbWl0KCdzdG9wJylcbn1cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5pc1J1bm5pbmcgPSBmdW5jdGlvbigpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICByZXR1cm4gc2VsZi5fcnVubmluZ1xufVxuXG5XZWIzUHJvdmlkZXJFbmdpbmUucHJvdG90eXBlLmFkZFByb3ZpZGVyID0gZnVuY3Rpb24oc291cmNlLCBpbmRleCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgc2VsZi5fcHJvdmlkZXJzLnNwbGljZShpbmRleCwgMCwgc291cmNlKVxuICB9IGVsc2Uge1xuICAgIHNlbGYuX3Byb3ZpZGVycy5wdXNoKHNvdXJjZSlcbiAgfVxuICBzb3VyY2Uuc2V0RW5naW5lKHRoaXMpXG59XG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUucmVtb3ZlUHJvdmlkZXIgPSBmdW5jdGlvbihzb3VyY2Upe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBjb25zdCBpbmRleCA9IHNlbGYuX3Byb3ZpZGVycy5pbmRleE9mKHNvdXJjZSlcbiAgaWYgKGluZGV4IDwgMCkgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBub3QgZm91bmQuJylcbiAgc2VsZi5fcHJvdmlkZXJzLnNwbGljZShpbmRleCwgMSlcbn1cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24ocGF5bG9hZCl7XG4gIHRocm93IG5ldyBFcnJvcignV2ViM1Byb3ZpZGVyRW5naW5lIGRvZXMgbm90IHN1cHBvcnQgc3luY2hyb25vdXMgcmVxdWVzdHMuJylcbn1cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5zZW5kQXN5bmMgPSBmdW5jdGlvbihwYXlsb2FkLCBjYil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuX3JlYWR5LmF3YWl0KGZ1bmN0aW9uKCl7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xuICAgICAgLy8gaGFuZGxlIGJhdGNoXG4gICAgICBtYXAocGF5bG9hZCwgc2VsZi5faGFuZGxlQXN5bmMuYmluZChzZWxmKSwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhbmRsZSBzaW5nbGVcbiAgICAgIHNlbGYuX2hhbmRsZUFzeW5jKHBheWxvYWQsIGNiKVxuICAgIH1cblxuICB9KVxufVxuXG4vLyBwcml2YXRlXG5cbldlYjNQcm92aWRlckVuZ2luZS5wcm90b3R5cGUuX2hhbmRsZUFzeW5jID0gZnVuY3Rpb24ocGF5bG9hZCwgZmluaXNoZWQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciBjdXJyZW50UHJvdmlkZXIgPSAtMVxuICB2YXIgcmVzdWx0ID0gbnVsbFxuICB2YXIgZXJyb3IgPSBudWxsXG5cbiAgdmFyIHN0YWNrID0gW11cblxuICBuZXh0KClcblxuICBmdW5jdGlvbiBuZXh0KGFmdGVyKSB7XG4gICAgY3VycmVudFByb3ZpZGVyICs9IDFcbiAgICBzdGFjay51bnNoaWZ0KGFmdGVyKVxuXG4gICAgLy8gQnViYmxlZCBkb3duIGFzIGZhciBhcyB3ZSBjb3VsZCBnbywgYW5kIHRoZSByZXF1ZXN0IHdhc24ndFxuICAgIC8vIGhhbmRsZWQuIFJldHVybiBhbiBlcnJvci5cbiAgICBpZiAoY3VycmVudFByb3ZpZGVyID49IHNlbGYuX3Byb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgIGVuZChuZXcgRXJyb3IoJ1JlcXVlc3QgZm9yIG1ldGhvZCBcIicgKyBwYXlsb2FkLm1ldGhvZCArICdcIiBub3QgaGFuZGxlZCBieSBhbnkgc3VicHJvdmlkZXIuIFBsZWFzZSBjaGVjayB5b3VyIHN1YnByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgbWV0aG9kIGlzIGhhbmRsZWQuJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBwcm92aWRlciA9IHNlbGYuX3Byb3ZpZGVyc1tjdXJyZW50UHJvdmlkZXJdXG4gICAgICAgIHByb3ZpZGVyLmhhbmRsZVJlcXVlc3QocGF5bG9hZCwgbmV4dCwgZW5kKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlbmQoZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmQoX2Vycm9yLCBfcmVzdWx0KSB7XG4gICAgZXJyb3IgPSBfZXJyb3JcbiAgICByZXN1bHQgPSBfcmVzdWx0XG5cbiAgICBlYWNoU2VyaWVzKHN0YWNrLCBmdW5jdGlvbihmbiwgY2FsbGJhY2spIHtcblxuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIGZuKGVycm9yLCByZXN1bHQsIGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0NPTVBMRVRFRDonLCBwYXlsb2FkKVxuICAgICAgLy8gY29uc29sZS5sb2coJ1JFU1VMVDogJywgcmVzdWx0KVxuXG4gICAgICB2YXIgcmVzdWx0T2JqID0ge1xuICAgICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICAgICAganNvbnJwYzogcGF5bG9hZC5qc29ucnBjLFxuICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCkge1xuICAgICAgICByZXN1bHRPYmouZXJyb3IgPSB7XG4gICAgICAgICAgbWVzc2FnZTogZXJyb3Iuc3RhY2sgfHwgZXJyb3IubWVzc2FnZSB8fCBlcnJvcixcbiAgICAgICAgICBjb2RlOiAtMzIwMDBcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNwb25kIHdpdGggYm90aCBlcnJvciBmb3JtYXRzXG4gICAgICAgIGZpbmlzaGVkKGVycm9yLCByZXN1bHRPYmopXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaW5pc2hlZChudWxsLCByZXN1bHRPYmopXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vL1xuLy8gZnJvbSByZW1vdGUtZGF0YVxuLy9cblxuV2ViM1Byb3ZpZGVyRW5naW5lLnByb3RvdHlwZS5fc2V0Q3VycmVudEJsb2NrID0gZnVuY3Rpb24oYmxvY2spe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBzZWxmLmN1cnJlbnRCbG9jayA9IGJsb2NrXG4gIHNlbGYuZW1pdCgnYmxvY2snLCBibG9jaylcbn1cblxuLy8gdXRpbFxuXG5mdW5jdGlvbiB0b0J1ZmZlckJsb2NrIChqc29uQmxvY2spIHtcbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6ICAgICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5udW1iZXIpLFxuICAgIGhhc2g6ICAgICAgICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLmhhc2gpLFxuICAgIHBhcmVudEhhc2g6ICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnBhcmVudEhhc2gpLFxuICAgIG5vbmNlOiAgICAgICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLm5vbmNlKSxcbiAgICBtaXhIYXNoOiAgICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5taXhIYXNoKSxcbiAgICBzaGEzVW5jbGVzOiAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5zaGEzVW5jbGVzKSxcbiAgICBsb2dzQmxvb206ICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5sb2dzQmxvb20pLFxuICAgIHRyYW5zYWN0aW9uc1Jvb3Q6IGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnRyYW5zYWN0aW9uc1Jvb3QpLFxuICAgIHN0YXRlUm9vdDogICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnN0YXRlUm9vdCksXG4gICAgcmVjZWlwdHNSb290OiAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2sucmVjZWlwdFJvb3QgfHwganNvbkJsb2NrLnJlY2VpcHRzUm9vdCksXG4gICAgbWluZXI6ICAgICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2subWluZXIpLFxuICAgIGRpZmZpY3VsdHk6ICAgICAgIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLmRpZmZpY3VsdHkpLFxuICAgIHRvdGFsRGlmZmljdWx0eTogIGV0aFV0aWwudG9CdWZmZXIoanNvbkJsb2NrLnRvdGFsRGlmZmljdWx0eSksXG4gICAgc2l6ZTogICAgICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2suc2l6ZSksXG4gICAgZXh0cmFEYXRhOiAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2suZXh0cmFEYXRhKSxcbiAgICBnYXNMaW1pdDogICAgICAgICBldGhVdGlsLnRvQnVmZmVyKGpzb25CbG9jay5nYXNMaW1pdCksXG4gICAgZ2FzVXNlZDogICAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2suZ2FzVXNlZCksXG4gICAgdGltZXN0YW1wOiAgICAgICAgZXRoVXRpbC50b0J1ZmZlcihqc29uQmxvY2sudGltZXN0YW1wKSxcbiAgICB0cmFuc2FjdGlvbnM6ICAgICBqc29uQmxvY2sudHJhbnNhY3Rpb25zLFxuICB9XG59XG4iLCJjb25zdCB4aHIgPSBwcm9jZXNzLmJyb3dzZXIgPyByZXF1aXJlKCd4aHInKSA6IHJlcXVpcmUoJ3JlcXVlc3QnKVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGNyZWF0ZVBheWxvYWQgPSByZXF1aXJlKCcuLi91dGlsL2NyZWF0ZS1wYXlsb2FkLmpzJylcbmNvbnN0IFN1YnByb3ZpZGVyID0gcmVxdWlyZSgnLi9zdWJwcm92aWRlci5qcycpXG5jb25zdCBKc29uUnBjRXJyb3IgPSByZXF1aXJlKCdqc29uLXJwYy1lcnJvcicpXG5cblxubW9kdWxlLmV4cG9ydHMgPSBScGNTb3VyY2VcblxuaW5oZXJpdHMoUnBjU291cmNlLCBTdWJwcm92aWRlcilcblxuZnVuY3Rpb24gUnBjU291cmNlKG9wdHMpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgc2VsZi5ycGNVcmwgPSBvcHRzLnJwY1VybFxufVxuXG5ScGNTb3VyY2UucHJvdG90eXBlLmhhbmRsZVJlcXVlc3QgPSBmdW5jdGlvbihwYXlsb2FkLCBuZXh0LCBlbmQpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBjb25zdCB0YXJnZXRVcmwgPSBzZWxmLnJwY1VybFxuXG4gIC8vIG92ZXJ3cml0ZSBpZCB0byBjb25mbGljdCB3aXRoIG90aGVyIGNvbmN1cnJlbnQgdXNlcnNcbiAgbGV0IG5ld1BheWxvYWQgPSBjcmVhdGVQYXlsb2FkKHBheWxvYWQpXG5cbiAgeGhyKHtcbiAgICB1cmk6IHRhcmdldFVybCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG5ld1BheWxvYWQpLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXG4gICAgdGltZW91dDogMjAwMDAsXG4gIH0sIGZ1bmN0aW9uKGVyciwgcmVzLCBib2R5KSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGVuZChuZXcgSnNvblJwY0Vycm9yLkludGVybmFsRXJyb3IoZXJyKSlcblxuICAgIC8vIGNoZWNrIGZvciBlcnJvciBjb2RlXG4gICAgc3dpdGNoIChyZXMuc3RhdHVzQ29kZSkge1xuICAgICAgY2FzZSA0MDU6XG4gICAgICAgIHJldHVybiBlbmQobmV3IEpzb25ScGNFcnJvci5NZXRob2ROb3RGb3VuZCgpKVxuICAgICAgY2FzZSA1MDQ6IC8vIEdhdGV3YXkgdGltZW91dFxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgbGV0IG1zZyA9IGBHYXRld2F5IHRpbWVvdXQuIFRoZSByZXF1ZXN0IHRvb2sgdG9vIGxvbmcgdG8gcHJvY2Vzcy4gYFxuICAgICAgICAgIG1zZyArPSBgVGhpcyBjYW4gaGFwcGVuIHdoZW4gcXVlcnlpbmcgbG9ncyBvdmVyIHRvbyB3aWRlIGEgYmxvY2sgcmFuZ2UuYFxuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtc2cpXG4gICAgICAgICAgcmV0dXJuIGVuZChuZXcgSnNvblJwY0Vycm9yLkludGVybmFsRXJyb3IoZXJyKSlcbiAgICAgICAgfSkoKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9IDIwMCkge1xuICAgICAgICAgIHJldHVybiBlbmQobmV3IEpzb25ScGNFcnJvci5JbnRlcm5hbEVycm9yKHJlcy5ib2R5KSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhcnNlIHJlc3BvbnNlXG4gICAgbGV0IGRhdGFcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IEpTT04ucGFyc2UoYm9keSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLnN0YWNrKVxuICAgICAgcmV0dXJuIGVuZChuZXcgSnNvblJwY0Vycm9yLkludGVybmFsRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgaWYgKGRhdGEuZXJyb3IpIHJldHVybiBlbmQoZGF0YS5lcnJvcilcblxuICAgIGVuZChudWxsLCBkYXRhLnJlc3VsdClcbiAgfSlcblxufVxuIiwiY29uc3QgQmFja29mZiA9IHJlcXVpcmUoJ2JhY2tvZmYnKVxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgndXRpbCcpLmluaGVyaXRzXG5jb25zdCBXZWJTb2NrZXQgPSBnbG9iYWwuV2ViU29ja2V0IHx8IHJlcXVpcmUoJ3dzJylcbmNvbnN0IFN1YnByb3ZpZGVyID0gcmVxdWlyZSgnLi9zdWJwcm92aWRlcicpXG5jb25zdCBjcmVhdGVQYXlsb2FkID0gcmVxdWlyZSgnLi4vdXRpbC9jcmVhdGUtcGF5bG9hZCcpXG5cbmNsYXNzIFdlYnNvY2tldFN1YnByb3ZpZGVyXG4gZXh0ZW5kcyBTdWJwcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKHsgcnBjVXJsLCBkZWJ1Zywgb3JpZ2luIH0pIHtcbiAgICBzdXBlcigpXG5cbiAgICAvLyBpbmhlcml0IGZyb20gRXZlbnRFbWl0dGVyXG4gICAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcylcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICAgIF9iYWNrb2ZmOiB7XG4gICAgICAgIHZhbHVlOiBCYWNrb2ZmLmV4cG9uZW50aWFsKHtcbiAgICAgICAgICByYW5kb21pc2F0aW9uRmFjdG9yOiAwLjIsXG4gICAgICAgICAgbWF4RGVsYXk6IDUwMDBcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBfY29ubmVjdFRpbWU6IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgX2xvZzoge1xuICAgICAgICB2YWx1ZTogZGVidWdcbiAgICAgICAgICA/ICguLi5hcmdzKSA9PiBjb25zb2xlLmluZm8uYXBwbHkoY29uc29sZSwgWydbV1NQcm92aWRlcl0nLCAuLi5hcmdzXSlcbiAgICAgICAgICA6ICgpID0+IHsgfVxuICAgICAgfSxcbiAgICAgIF9vcmlnaW46IHtcbiAgICAgICAgdmFsdWU6IG9yaWdpblxuICAgICAgfSxcbiAgICAgIF9wZW5kaW5nUmVxdWVzdHM6IHtcbiAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgfSxcbiAgICAgIF9zb2NrZXQ6IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgX3VuaGFuZGxlZFJlcXVlc3RzOiB7XG4gICAgICAgIHZhbHVlOiBbXVxuICAgICAgfSxcbiAgICAgIF91cmw6IHtcbiAgICAgICAgdmFsdWU6IHJwY1VybFxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLl9oYW5kbGVTb2NrZXRDbG9zZSA9IHRoaXMuX2hhbmRsZVNvY2tldENsb3NlLmJpbmQodGhpcylcbiAgICB0aGlzLl9oYW5kbGVTb2NrZXRNZXNzYWdlID0gdGhpcy5faGFuZGxlU29ja2V0TWVzc2FnZS5iaW5kKHRoaXMpXG4gICAgdGhpcy5faGFuZGxlU29ja2V0T3BlbiA9IHRoaXMuX2hhbmRsZVNvY2tldE9wZW4uYmluZCh0aGlzKVxuXG4gICAgLy8gQ2FsbGVkIHdoZW4gYSBiYWNrb2ZmIHRpbWVvdXQgaGFzIGZpbmlzaGVkLiBUaW1lIHRvIHRyeSByZWNvbm5lY3RpbmcuXG4gICAgdGhpcy5fYmFja29mZi5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICB0aGlzLl9vcGVuU29ja2V0KClcbiAgICB9KVxuXG4gICAgdGhpcy5fb3BlblNvY2tldCgpXG4gIH1cblxuICBoYW5kbGVSZXF1ZXN0KHBheWxvYWQsIG5leHQsIGVuZCkge1xuICAgIGlmICghdGhpcy5fc29ja2V0IHx8IHRoaXMuX3NvY2tldC5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgdGhpcy5fdW5oYW5kbGVkUmVxdWVzdHMucHVzaChBcnJheS5mcm9tKGFyZ3VtZW50cykpXG4gICAgICB0aGlzLl9sb2coJ1NvY2tldCBub3Qgb3Blbi4gUmVxdWVzdCBxdWV1ZWQuJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5zZXQocGF5bG9hZC5pZCwgW3BheWxvYWQsIGVuZF0pXG5cbiAgICBjb25zdCBuZXdQYXlsb2FkID0gY3JlYXRlUGF5bG9hZChwYXlsb2FkKVxuICAgIGRlbGV0ZSBuZXdQYXlsb2FkLm9yaWdpblxuXG4gICAgdGhpcy5fc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobmV3UGF5bG9hZCkpXG4gICAgdGhpcy5fbG9nKGBTZW50OiAke25ld1BheWxvYWQubWV0aG9kfSAjJHtuZXdQYXlsb2FkLmlkfWApXG4gIH1cblxuICBfaGFuZGxlU29ja2V0Q2xvc2UoeyByZWFzb24sIGNvZGUgfSkge1xuICAgIHRoaXMuX2xvZyhgU29ja2V0IGNsb3NlZCwgY29kZSAke2NvZGV9ICgke3JlYXNvbiB8fCAnbm8gcmVhc29uJ30pYClcbiAgICAvLyBJZiB0aGUgc29ja2V0IGhhcyBiZWVuIG9wZW4gZm9yIGxvbmdlciB0aGFuIDUgc2Vjb25kcywgcmVzZXQgdGhlIGJhY2tvZmZcbiAgICBpZiAodGhpcy5fY29ubmVjdFRpbWUgJiYgRGF0ZS5ub3coKSAtIHRoaXMuX2Nvbm5lY3RUaW1lID4gNTAwMCkge1xuICAgICAgdGhpcy5fYmFja29mZi5yZXNldCgpXG4gICAgfVxuXG4gICAgdGhpcy5fc29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy5faGFuZGxlU29ja2V0Q2xvc2UpXG4gICAgdGhpcy5fc29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVTb2NrZXRNZXNzYWdlKVxuICAgIHRoaXMuX3NvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy5faGFuZGxlU29ja2V0T3BlbilcblxuICAgIHRoaXMuX3NvY2tldCA9IG51bGxcbiAgICB0aGlzLl9iYWNrb2ZmLmJhY2tvZmYoKVxuICB9XG5cbiAgX2hhbmRsZVNvY2tldE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIGxldCBwYXlsb2FkXG5cbiAgICB0cnkge1xuICAgICAgcGF5bG9hZCA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZygnUmVjZWl2ZWQgYSBtZXNzYWdlIHRoYXQgaXMgbm90IHZhbGlkIEpTT046JywgcGF5bG9hZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHNlcnZlci1zZW50IG5vdGlmaWNhdGlvblxuICAgIGlmIChwYXlsb2FkLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoJ2RhdGEnLCBudWxsLCBwYXlsb2FkKVxuICAgIH1cblxuICAgIC8vIGlnbm9yZSBpZiBtaXNzaW5nXG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVxdWVzdHMuaGFzKHBheWxvYWQuaWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyByZXRyaWV2ZSBwYXlsb2FkICsgYXJndW1lbnRzXG4gICAgY29uc3QgW29yaWdpbmFsUmVxLCBlbmRdID0gdGhpcy5fcGVuZGluZ1JlcXVlc3RzLmdldChwYXlsb2FkLmlkKVxuICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5kZWxldGUocGF5bG9hZC5pZClcblxuICAgIHRoaXMuX2xvZyhgUmVjZWl2ZWQ6ICR7b3JpZ2luYWxSZXEubWV0aG9kfSAjJHtwYXlsb2FkLmlkfWApXG5cbiAgICAvLyBmb3J3YXJkIHJlc3BvbnNlXG4gICAgaWYgKHBheWxvYWQuZXJyb3IpIHtcbiAgICAgIHJldHVybiBlbmQobmV3IEVycm9yKHBheWxvYWQuZXJyb3IubWVzc2FnZSkpXG4gICAgfVxuICAgIGVuZChudWxsLCBwYXlsb2FkLnJlc3VsdClcbiAgfVxuXG4gIF9oYW5kbGVTb2NrZXRPcGVuKCkge1xuICAgIHRoaXMuX2xvZygnU29ja2V0IG9wZW4uJylcbiAgICB0aGlzLl9jb25uZWN0VGltZSA9IERhdGUubm93KClcblxuICAgIC8vIEFueSBwZW5kaW5nIHJlcXVlc3RzIG5lZWQgdG8gYmUgcmVzZW50IGJlY2F1c2Ugb3VyIHNlc3Npb24gd2FzIGxvc3RcbiAgICAvLyBhbmQgd2lsbCBub3QgZ2V0IHJlc3BvbnNlcyBmb3IgdGhlbSBpbiBvdXIgbmV3IHNlc3Npb24uXG4gICAgdGhpcy5fcGVuZGluZ1JlcXVlc3RzLmZvckVhY2goKFtwYXlsb2FkLCBlbmRdKSA9PiB7XG4gICAgICB0aGlzLl91bmhhbmRsZWRSZXF1ZXN0cy5wdXNoKFtwYXlsb2FkLCBudWxsLCBlbmRdKVxuICAgIH0pXG4gICAgdGhpcy5fcGVuZGluZ1JlcXVlc3RzLmNsZWFyKClcblxuICAgIGNvbnN0IHVuaGFuZGxlZFJlcXVlc3RzID0gdGhpcy5fdW5oYW5kbGVkUmVxdWVzdHMuc3BsaWNlKDAsIHRoaXMuX3VuaGFuZGxlZFJlcXVlc3RzLmxlbmd0aClcbiAgICB1bmhhbmRsZWRSZXF1ZXN0cy5mb3JFYWNoKHJlcXVlc3QgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0LmFwcGx5KHRoaXMsIHJlcXVlc3QpXG4gICAgfSlcbiAgfVxuXG4gIF9vcGVuU29ja2V0KCkge1xuICAgIHRoaXMuX2xvZygnT3BlbmluZyBzb2NrZXQuLi4nKVxuICAgIHRoaXMuX3NvY2tldCA9IG5ldyBXZWJTb2NrZXQodGhpcy5fdXJsLCBbXSwgdGhpcy5fb3JpZ2luID8ge2hlYWRlcnM6e29yaWdpbjogdGhpcy5fb3JpZ2lufX0gOiB7fSlcbiAgICB0aGlzLl9zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLl9oYW5kbGVTb2NrZXRDbG9zZSlcbiAgICB0aGlzLl9zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuX2hhbmRsZVNvY2tldE1lc3NhZ2UpXG4gICAgdGhpcy5fc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGlzLl9oYW5kbGVTb2NrZXRPcGVuKVxuICB9XG59XG5cbi8vIG11bHRpcGxlIGluaGVyaXRhbmNlXG5PYmplY3QuYXNzaWduKFdlYnNvY2tldFN1YnByb3ZpZGVyLnByb3RvdHlwZSwgRXZlbnRFbWl0dGVyLnByb3RvdHlwZSlcblxubW9kdWxlLmV4cG9ydHMgPSBXZWJzb2NrZXRTdWJwcm92aWRlclxuIiwiLypcbiAqIEVtdWxhdGUgJ2V0aF9hY2NvdW50cycgLyAnZXRoX3NlbmRUcmFuc2FjdGlvbicgdXNpbmcgJ2V0aF9zZW5kUmF3VHJhbnNhY3Rpb24nXG4gKlxuICogVGhlIHR3byBjYWxsYmFja3MgYSB1c2VyIG5lZWRzIHRvIGltcGxlbWVudCBhcmU6XG4gKiAtIGdldEFjY291bnRzKCkgLS0gYXJyYXkgb2YgYWRkcmVzc2VzIHN1cHBvcnRlZFxuICogLSBzaWduVHJhbnNhY3Rpb24odHgpIC0tIHNpZ24gYSByYXcgdHJhbnNhY3Rpb24gb2JqZWN0XG4gKi9cblxuY29uc3Qgd2F0ZXJmYWxsID0gcmVxdWlyZSgnYXN5bmMvd2F0ZXJmYWxsJylcbmNvbnN0IHBhcmFsbGVsID0gcmVxdWlyZSgnYXN5bmMvcGFyYWxsZWwnKVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCd1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGV0aFV0aWwgPSByZXF1aXJlKCdldGhlcmV1bWpzLXV0aWwnKVxuY29uc3Qgc2lnVXRpbCA9IHJlcXVpcmUoJ2V0aC1zaWctdXRpbCcpXG5jb25zdCBleHRlbmQgPSByZXF1aXJlKCd4dGVuZCcpXG5jb25zdCBTZW1hcGhvcmUgPSByZXF1aXJlKCdzZW1hcGhvcmUnKVxuY29uc3QgU3VicHJvdmlkZXIgPSByZXF1aXJlKCcuL3N1YnByb3ZpZGVyLmpzJylcbmNvbnN0IGVzdGltYXRlR2FzID0gcmVxdWlyZSgnLi4vdXRpbC9lc3RpbWF0ZS1nYXMuanMnKVxuY29uc3QgaGV4UmVnZXggPSAvXlswLTlBLUZhLWZdKyQvZ1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyXG5cbi8vIGhhbmRsZXMgdGhlIGZvbGxvd2luZyBSUEMgbWV0aG9kczpcbi8vICAgZXRoX2NvaW5iYXNlXG4vLyAgIGV0aF9hY2NvdW50c1xuLy8gICBldGhfc2VuZFRyYW5zYWN0aW9uXG4vLyAgIGV0aF9zaWduXG4vLyAgIGV0aF9zaWduVHlwZWREYXRhXG4vLyAgIHBlcnNvbmFsX3NpZ25cbi8vICAgcGVyc29uYWxfZWNSZWNvdmVyXG4vLyAgIHBhcml0eV9wb3N0VHJhbnNhY3Rpb25cbi8vICAgcGFyaXR5X2NoZWNrUmVxdWVzdFxuLy8gICBwYXJpdHlfZGVmYXVsdEFjY291bnRcblxuLy9cbi8vIFR4IFNpZ25hdHVyZSBGbG93XG4vL1xuLy8gaGFuZGxlUmVxdWVzdDogZXRoX3NlbmRUcmFuc2FjdGlvblxuLy8gICB2YWxpZGF0ZVRyYW5zYWN0aW9uIChiYXNpYyB2YWxpZGl0eSBjaGVjaylcbi8vICAgICB2YWxpZGF0ZVNlbmRlciAoY2hlY2tzIHRoYXQgc2VuZGVyIGlzIGluIGFjY291bnRzKVxuLy8gICBwcm9jZXNzVHJhbnNhY3Rpb24gKHNpZ24gdHggYW5kIHN1Ym1pdCB0byBuZXR3b3JrKVxuLy8gICAgIGFwcHJvdmVUcmFuc2FjdGlvbiAoVUkgYXBwcm92YWwgaG9vaylcbi8vICAgICBjaGVja0FwcHJvdmFsXG4vLyAgICAgZmluYWxpemVBbmRTdWJtaXRUeCAodHggc2lnbmluZylcbi8vICAgICAgIG5vbmNlTG9jay50YWtlIChib3R0bGUgbmVjayB0byBlbnN1cmUgYXRvbWljIG5vbmNlKVxuLy8gICAgICAgICBmaWxsSW5UeEV4dHJhcyAoc2V0IGZhbGxiYWNrIGdhc1ByaWNlLCBub25jZSwgZXRjKVxuLy8gICAgICAgICBzaWduVHJhbnNhY3Rpb24gKHBlcmZvcm0gdGhlIHNpZ25hdHVyZSlcbi8vICAgICAgICAgcHVibGlzaFRyYW5zYWN0aW9uIChwdWJsaXNoIHNpZ25lZCB0eCB0byBuZXR3b3JrKVxuLy9cblxuXG5pbmhlcml0cyhIb29rZWRXYWxsZXRTdWJwcm92aWRlciwgU3VicHJvdmlkZXIpXG5cbmZ1bmN0aW9uIEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyKG9wdHMpe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBjb250cm9sIGZsb3dcbiAgc2VsZi5ub25jZUxvY2sgPSBTZW1hcGhvcmUoMSlcblxuICAvLyBkYXRhIGxvb2t1cFxuICBpZiAob3B0cy5nZXRBY2NvdW50cykgc2VsZi5nZXRBY2NvdW50cyA9IG9wdHMuZ2V0QWNjb3VudHNcbiAgLy8gaGlnaCBsZXZlbCBvdmVycmlkZVxuICBpZiAob3B0cy5wcm9jZXNzVHJhbnNhY3Rpb24pIHNlbGYucHJvY2Vzc1RyYW5zYWN0aW9uID0gb3B0cy5wcm9jZXNzVHJhbnNhY3Rpb25cbiAgaWYgKG9wdHMucHJvY2Vzc01lc3NhZ2UpIHNlbGYucHJvY2Vzc01lc3NhZ2UgPSBvcHRzLnByb2Nlc3NNZXNzYWdlXG4gIGlmIChvcHRzLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2UpIHNlbGYucHJvY2Vzc1BlcnNvbmFsTWVzc2FnZSA9IG9wdHMucHJvY2Vzc1BlcnNvbmFsTWVzc2FnZVxuICBpZiAob3B0cy5wcm9jZXNzVHlwZWRNZXNzYWdlKSBzZWxmLnByb2Nlc3NUeXBlZE1lc3NhZ2UgPSBvcHRzLnByb2Nlc3NUeXBlZE1lc3NhZ2VcbiAgLy8gYXBwcm92YWwgaG9va3NcbiAgc2VsZi5hcHByb3ZlVHJhbnNhY3Rpb24gPSBvcHRzLmFwcHJvdmVUcmFuc2FjdGlvbiB8fCBzZWxmLmF1dG9BcHByb3ZlXG4gIHNlbGYuYXBwcm92ZU1lc3NhZ2UgPSBvcHRzLmFwcHJvdmVNZXNzYWdlIHx8IHNlbGYuYXV0b0FwcHJvdmVcbiAgc2VsZi5hcHByb3ZlUGVyc29uYWxNZXNzYWdlID0gb3B0cy5hcHByb3ZlUGVyc29uYWxNZXNzYWdlIHx8IHNlbGYuYXV0b0FwcHJvdmVcbiAgc2VsZi5hcHByb3ZlVHlwZWRNZXNzYWdlID0gb3B0cy5hcHByb3ZlVHlwZWRNZXNzYWdlIHx8IHNlbGYuYXV0b0FwcHJvdmVcbiAgLy8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgc2lnbmF0dXJlXG4gIGlmIChvcHRzLnNpZ25UcmFuc2FjdGlvbikgc2VsZi5zaWduVHJhbnNhY3Rpb24gPSBvcHRzLnNpZ25UcmFuc2FjdGlvbiAgfHwgbXVzdFByb3ZpZGVJbkNvbnN0cnVjdG9yKCdzaWduVHJhbnNhY3Rpb24nKVxuICBpZiAob3B0cy5zaWduTWVzc2FnZSkgc2VsZi5zaWduTWVzc2FnZSA9IG9wdHMuc2lnbk1lc3NhZ2UgIHx8IG11c3RQcm92aWRlSW5Db25zdHJ1Y3Rvcignc2lnbk1lc3NhZ2UnKVxuICBpZiAob3B0cy5zaWduUGVyc29uYWxNZXNzYWdlKSBzZWxmLnNpZ25QZXJzb25hbE1lc3NhZ2UgPSBvcHRzLnNpZ25QZXJzb25hbE1lc3NhZ2UgIHx8IG11c3RQcm92aWRlSW5Db25zdHJ1Y3Rvcignc2lnblBlcnNvbmFsTWVzc2FnZScpXG4gIGlmIChvcHRzLnNpZ25UeXBlZE1lc3NhZ2UpIHNlbGYuc2lnblR5cGVkTWVzc2FnZSA9IG9wdHMuc2lnblR5cGVkTWVzc2FnZSAgfHwgbXVzdFByb3ZpZGVJbkNvbnN0cnVjdG9yKCdzaWduVHlwZWRNZXNzYWdlJylcbiAgaWYgKG9wdHMucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlKSBzZWxmLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZSA9IG9wdHMucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlXG4gIC8vIHB1Ymxpc2ggdG8gbmV0d29ya1xuICBpZiAob3B0cy5wdWJsaXNoVHJhbnNhY3Rpb24pIHNlbGYucHVibGlzaFRyYW5zYWN0aW9uID0gb3B0cy5wdWJsaXNoVHJhbnNhY3Rpb25cbiAgLy8gZ2FzIG9wdGlvbnNcbiAgc2VsZi5lc3RpbWF0ZUdhcyA9IG9wdHMuZXN0aW1hdGVHYXMgfHwgc2VsZi5lc3RpbWF0ZUdhc1xuICBzZWxmLmdldEdhc1ByaWNlID0gb3B0cy5nZXRHYXNQcmljZSB8fCBzZWxmLmdldEdhc1ByaWNlXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5oYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocGF5bG9hZCwgbmV4dCwgZW5kKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgc2VsZi5fcGFyaXR5UmVxdWVzdHMgPSB7fVxuICBzZWxmLl9wYXJpdHlSZXF1ZXN0Q291bnQgPSAwXG5cbiAgLy8gc3dpdGNoIHN0YXRlbWVudCBpcyBub3QgYmxvY2sgc2NvcGVkXG4gIC8vIHNwIHdlIGNhbnQgcmVwZWF0IHZhciBkZWNsYXJhdGlvbnNcbiAgbGV0IHR4UGFyYW1zLCBtc2dQYXJhbXMsIGV4dHJhUGFyYW1zXG4gIGxldCBtZXNzYWdlLCBhZGRyZXNzXG5cbiAgc3dpdGNoKHBheWxvYWQubWV0aG9kKSB7XG5cbiAgICBjYXNlICdldGhfY29pbmJhc2UnOlxuICAgICAgLy8gcHJvY2VzcyBub3JtYWxseVxuICAgICAgc2VsZi5nZXRBY2NvdW50cyhmdW5jdGlvbihlcnIsIGFjY291bnRzKXtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGVuZChlcnIpXG4gICAgICAgIGxldCByZXN1bHQgPSBhY2NvdW50c1swXSB8fCBudWxsXG4gICAgICAgIGVuZChudWxsLCByZXN1bHQpXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdldGhfYWNjb3VudHMnOlxuICAgICAgLy8gcHJvY2VzcyBub3JtYWxseVxuICAgICAgc2VsZi5nZXRBY2NvdW50cyhmdW5jdGlvbihlcnIsIGFjY291bnRzKXtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGVuZChlcnIpXG4gICAgICAgIGVuZChudWxsLCBhY2NvdW50cylcbiAgICAgIH0pXG4gICAgICByZXR1cm5cblxuICAgIGNhc2UgJ2V0aF9zZW5kVHJhbnNhY3Rpb24nOlxuICAgICAgdHhQYXJhbXMgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgd2F0ZXJmYWxsKFtcbiAgICAgICAgKGNiKSA9PiBzZWxmLnZhbGlkYXRlVHJhbnNhY3Rpb24odHhQYXJhbXMsIGNiKSxcbiAgICAgICAgKGNiKSA9PiBzZWxmLnByb2Nlc3NUcmFuc2FjdGlvbih0eFBhcmFtcywgY2IpLFxuICAgICAgXSwgZW5kKVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdldGhfc2lnblRyYW5zYWN0aW9uJzpcbiAgICAgIHR4UGFyYW1zID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgIHdhdGVyZmFsbChbXG4gICAgICAgIChjYikgPT4gc2VsZi52YWxpZGF0ZVRyYW5zYWN0aW9uKHR4UGFyYW1zLCBjYiksXG4gICAgICAgIChjYikgPT4gc2VsZi5wcm9jZXNzU2lnblRyYW5zYWN0aW9uKHR4UGFyYW1zLCBjYiksXG4gICAgICBdLCBlbmQpXG4gICAgICByZXR1cm5cblxuICAgIGNhc2UgJ2V0aF9zaWduJzpcbiAgICAgIC8vIHByb2Nlc3Mgbm9ybWFsbHlcbiAgICAgIGFkZHJlc3MgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzFdXG4gICAgICAvLyBub24tc3RhbmRhcmQgXCJleHRyYVBhcmFtc1wiIHRvIGJlIGFwcGVuZGVkIHRvIG91ciBcIm1zZ1BhcmFtc1wiIG9ialxuICAgICAgLy8gZ29vZCBwbGFjZSBmb3IgbWV0YWRhdGFcbiAgICAgIGV4dHJhUGFyYW1zID0gcGF5bG9hZC5wYXJhbXNbMl0gfHwge31cbiAgICAgIG1zZ1BhcmFtcyA9IGV4dGVuZChleHRyYVBhcmFtcywge1xuICAgICAgICBmcm9tOiBhZGRyZXNzLFxuICAgICAgICBkYXRhOiBtZXNzYWdlLFxuICAgICAgfSlcbiAgICAgIHdhdGVyZmFsbChbXG4gICAgICAgIChjYikgPT4gc2VsZi52YWxpZGF0ZU1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgICAgIChjYikgPT4gc2VsZi5wcm9jZXNzTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAgIF0sIGVuZClcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAncGVyc29uYWxfc2lnbic6XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uKCl7XG4gICAgICAgIC8vIHByb2Nlc3Mgbm9ybWFsbHlcbiAgICAgICAgY29uc3QgZmlyc3QgPSBwYXlsb2FkLnBhcmFtc1swXVxuICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXlsb2FkLnBhcmFtc1sxXVxuXG4gICAgICAgIC8vIFdlIGluaXRpYWxseSBpbmNvcnJlY3RseSBvcmRlcmVkIHRoZXNlIHBhcmFtZXRlcnMuXG4gICAgICAgIC8vIFRvIGdyYWNlZnVsbHkgcmVzcGVjdCB1c2VycyB3aG8gYWRvcHRlZCB0aGlzIEFQSSBlYXJseSxcbiAgICAgICAgLy8gd2UgYXJlIGN1cnJlbnRseSBncmFjZWZ1bGx5IHJlY292ZXJpbmcgZnJvbSB0aGUgd3JvbmcgcGFyYW0gb3JkZXJcbiAgICAgICAgLy8gd2hlbiBpdCBpcyBjbGVhcmx5IGlkZW50aWZpYWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhhdCBtZWFucyB3aGVuIHRoZSBmaXJzdCBwYXJhbSBpcyBkZWZpbml0ZWx5IGFuIGFkZHJlc3MsXG4gICAgICAgIC8vIGFuZCB0aGUgc2Vjb25kIHBhcmFtIGlzIGRlZmluaXRlbHkgbm90LCBidXQgaXMgaGV4LlxuICAgICAgICBpZiAocmVzZW1ibGVzRGF0YShzZWNvbmQpICYmIHJlc2VtYmxlc0FkZHJlc3MoZmlyc3QpKSB7XG4gICAgICAgICAgbGV0IHdhcm5pbmcgPSBgVGhlIGV0aF9wZXJzb25hbFNpZ24gbWV0aG9kIHJlcXVpcmVzIHBhcmFtcyBvcmRlcmVkIGBcbiAgICAgICAgICB3YXJuaW5nICs9IGBbbWVzc2FnZSwgYWRkcmVzc10uIFRoaXMgd2FzIHByZXZpb3VzbHkgaGFuZGxlZCBpbmNvcnJlY3RseSwgYFxuICAgICAgICAgIHdhcm5pbmcgKz0gYGFuZCBoYXMgYmVlbiBjb3JyZWN0ZWQgYXV0b21hdGljYWxseS4gYFxuICAgICAgICAgIHdhcm5pbmcgKz0gYFBsZWFzZSBzd2l0Y2ggdGhpcyBwYXJhbSBvcmRlciBmb3Igc21vb3RoIGJlaGF2aW9yIGluIHRoZSBmdXR1cmUuYFxuICAgICAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKVxuXG4gICAgICAgICAgYWRkcmVzcyA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICAgICAgYWRkcmVzcyA9IHBheWxvYWQucGFyYW1zWzFdXG4gICAgICAgIH1cblxuICAgICAgICAvLyBub24tc3RhbmRhcmQgXCJleHRyYVBhcmFtc1wiIHRvIGJlIGFwcGVuZGVkIHRvIG91ciBcIm1zZ1BhcmFtc1wiIG9ialxuICAgICAgICAvLyBnb29kIHBsYWNlIGZvciBtZXRhZGF0YVxuICAgICAgICBleHRyYVBhcmFtcyA9IHBheWxvYWQucGFyYW1zWzJdIHx8IHt9XG4gICAgICAgIG1zZ1BhcmFtcyA9IGV4dGVuZChleHRyYVBhcmFtcywge1xuICAgICAgICAgIGZyb206IGFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogbWVzc2FnZSxcbiAgICAgICAgfSlcbiAgICAgICAgd2F0ZXJmYWxsKFtcbiAgICAgICAgICAoY2IpID0+IHNlbGYudmFsaWRhdGVQZXJzb25hbE1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgICAgICAgKGNiKSA9PiBzZWxmLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gICAgICAgIF0sIGVuZClcbiAgICAgIH0pKClcblxuICAgIGNhc2UgJ3BlcnNvbmFsX2VjUmVjb3Zlcic6XG4gICAgICByZXR1cm4gKGZ1bmN0aW9uKCl7ICAgIFxuICAgICAgICBtZXNzYWdlID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHBheWxvYWQucGFyYW1zWzFdXG4gICAgICAgIC8vIG5vbi1zdGFuZGFyZCBcImV4dHJhUGFyYW1zXCIgdG8gYmUgYXBwZW5kZWQgdG8gb3VyIFwibXNnUGFyYW1zXCIgb2JqXG4gICAgICAgIC8vIGdvb2QgcGxhY2UgZm9yIG1ldGFkYXRhXG4gICAgICAgIGV4dHJhUGFyYW1zID0gcGF5bG9hZC5wYXJhbXNbMl0gfHwge31cbiAgICAgICAgbXNnUGFyYW1zID0gZXh0ZW5kKGV4dHJhUGFyYW1zLCB7XG4gICAgICAgICAgc2lnOiBzaWduYXR1cmUsXG4gICAgICAgICAgZGF0YTogbWVzc2FnZSxcbiAgICAgICAgfSlcbiAgICAgICAgc2VsZi5yZWNvdmVyUGVyc29uYWxTaWduYXR1cmUobXNnUGFyYW1zLCBlbmQpXG4gICAgICB9KSgpXG5cbiAgICBjYXNlICdldGhfc2lnblR5cGVkRGF0YSc6XG4gICAgICAvLyBwcm9jZXNzIG5vcm1hbGx5XG4gICAgICBtZXNzYWdlID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgIGFkZHJlc3MgPSBwYXlsb2FkLnBhcmFtc1sxXVxuICAgICAgZXh0cmFQYXJhbXMgPSBwYXlsb2FkLnBhcmFtc1syXSB8fCB7fVxuICAgICAgbXNnUGFyYW1zID0gZXh0ZW5kKGV4dHJhUGFyYW1zLCB7XG4gICAgICAgIGZyb206IGFkZHJlc3MsXG4gICAgICAgIGRhdGE6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgICAgd2F0ZXJmYWxsKFtcbiAgICAgICAgKGNiKSA9PiBzZWxmLnZhbGlkYXRlVHlwZWRNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICAgICAgICAoY2IpID0+IHNlbGYucHJvY2Vzc1R5cGVkTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAgIF0sIGVuZClcbiAgICAgIHJldHVyblxuXG4gICAgY2FzZSAncGFyaXR5X3Bvc3RUcmFuc2FjdGlvbic6XG4gICAgICB0eFBhcmFtcyA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICBzZWxmLnBhcml0eVBvc3RUcmFuc2FjdGlvbih0eFBhcmFtcywgZW5kKVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdwYXJpdHlfcG9zdFNpZ24nOlxuICAgICAgYWRkcmVzcyA9IHBheWxvYWQucGFyYW1zWzBdXG4gICAgICBtZXNzYWdlID0gcGF5bG9hZC5wYXJhbXNbMV1cbiAgICAgIHNlbGYucGFyaXR5UG9zdFNpZ24oYWRkcmVzcywgbWVzc2FnZSwgZW5kKVxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlICdwYXJpdHlfY2hlY2tSZXF1ZXN0JzpcbiAgICAgIHJldHVybiAoZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gcGF5bG9hZC5wYXJhbXNbMF1cbiAgICAgICAgc2VsZi5wYXJpdHlDaGVja1JlcXVlc3QocmVxdWVzdElkLCBlbmQpXG4gICAgICB9KSgpXG5cbiAgICBjYXNlICdwYXJpdHlfZGVmYXVsdEFjY291bnQnOlxuICAgICAgc2VsZi5nZXRBY2NvdW50cyhmdW5jdGlvbihlcnIsIGFjY291bnRzKXtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGVuZChlcnIpXG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBhY2NvdW50c1swXSB8fCBudWxsXG4gICAgICAgIGVuZChudWxsLCBhY2NvdW50KVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuXG4gICAgZGVmYXVsdDpcbiAgICAgIG5leHQoKVxuICAgICAgcmV0dXJuXG5cbiAgfVxufVxuXG4vL1xuLy8gZGF0YSBsb29rdXBcbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5nZXRBY2NvdW50cyA9IGZ1bmN0aW9uKGNiKSB7XG4gIGNiKG51bGwsIFtdKVxufVxuXG5cbi8vXG4vLyBcInByb2Nlc3NcIiBoaWdoIGxldmVsIGZsb3dcbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wcm9jZXNzVHJhbnNhY3Rpb24gPSBmdW5jdGlvbih0eFBhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgd2F0ZXJmYWxsKFtcbiAgICAoY2IpID0+IHNlbGYuYXBwcm92ZVRyYW5zYWN0aW9uKHR4UGFyYW1zLCBjYiksXG4gICAgKGRpZEFwcHJvdmUsIGNiKSA9PiBzZWxmLmNoZWNrQXBwcm92YWwoJ3RyYW5zYWN0aW9uJywgZGlkQXBwcm92ZSwgY2IpLFxuICAgIChjYikgPT4gc2VsZi5maW5hbGl6ZUFuZFN1Ym1pdFR4KHR4UGFyYW1zLCBjYiksXG4gIF0sIGNiKVxufVxuXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wcm9jZXNzU2lnblRyYW5zYWN0aW9uID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHdhdGVyZmFsbChbXG4gICAgKGNiKSA9PiBzZWxmLmFwcHJvdmVUcmFuc2FjdGlvbih0eFBhcmFtcywgY2IpLFxuICAgIChkaWRBcHByb3ZlLCBjYikgPT4gc2VsZi5jaGVja0FwcHJvdmFsKCd0cmFuc2FjdGlvbicsIGRpZEFwcHJvdmUsIGNiKSxcbiAgICAoY2IpID0+IHNlbGYuZmluYWxpemVUeCh0eFBhcmFtcywgY2IpLFxuICBdLCBjYilcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnByb2Nlc3NNZXNzYWdlID0gZnVuY3Rpb24obXNnUGFyYW1zLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB3YXRlcmZhbGwoW1xuICAgIChjYikgPT4gc2VsZi5hcHByb3ZlTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAoZGlkQXBwcm92ZSwgY2IpID0+IHNlbGYuY2hlY2tBcHByb3ZhbCgnbWVzc2FnZScsIGRpZEFwcHJvdmUsIGNiKSxcbiAgICAoY2IpID0+IHNlbGYuc2lnbk1lc3NhZ2UobXNnUGFyYW1zLCBjYiksXG4gIF0sIGNiKVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucHJvY2Vzc1BlcnNvbmFsTWVzc2FnZSA9IGZ1bmN0aW9uKG1zZ1BhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgd2F0ZXJmYWxsKFtcbiAgICAoY2IpID0+IHNlbGYuYXBwcm92ZVBlcnNvbmFsTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgICAoZGlkQXBwcm92ZSwgY2IpID0+IHNlbGYuY2hlY2tBcHByb3ZhbCgnbWVzc2FnZScsIGRpZEFwcHJvdmUsIGNiKSxcbiAgICAoY2IpID0+IHNlbGYuc2lnblBlcnNvbmFsTWVzc2FnZShtc2dQYXJhbXMsIGNiKSxcbiAgXSwgY2IpXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wcm9jZXNzVHlwZWRNZXNzYWdlID0gZnVuY3Rpb24obXNnUGFyYW1zLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB3YXRlcmZhbGwoW1xuICAgIChjYikgPT4gc2VsZi5hcHByb3ZlVHlwZWRNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICAgIChkaWRBcHByb3ZlLCBjYikgPT4gc2VsZi5jaGVja0FwcHJvdmFsKCdtZXNzYWdlJywgZGlkQXBwcm92ZSwgY2IpLFxuICAgIChjYikgPT4gc2VsZi5zaWduVHlwZWRNZXNzYWdlKG1zZ1BhcmFtcywgY2IpLFxuICBdLCBjYilcbn1cblxuLy9cbi8vIGFwcHJvdmFsXG4vL1xuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUuYXV0b0FwcHJvdmUgPSBmdW5jdGlvbih0eFBhcmFtcywgY2IpIHtcbiAgY2IobnVsbCwgdHJ1ZSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLmNoZWNrQXBwcm92YWwgPSBmdW5jdGlvbih0eXBlLCBkaWRBcHByb3ZlLCBjYikge1xuICBjYiggZGlkQXBwcm92ZSA/IG51bGwgOiBuZXcgRXJyb3IoJ1VzZXIgZGVuaWVkICcrdHlwZSsnIHNpZ25hdHVyZS4nKSApXG59XG5cbi8vXG4vLyBwYXJpdHlcbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wYXJpdHlQb3N0VHJhbnNhY3Rpb24gPSBmdW5jdGlvbih0eFBhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICAvLyBnZXQgbmV4dCBpZFxuICBjb25zdCBjb3VudCA9IHNlbGYuX3Bhcml0eVJlcXVlc3RDb3VudFxuICBjb25zdCByZXFJZCA9IGAweCR7Y291bnQudG9TdHJpbmcoMTYpfWBcbiAgc2VsZi5fcGFyaXR5UmVxdWVzdENvdW50KytcblxuICBzZWxmLmVtaXRQYXlsb2FkKHtcbiAgICBtZXRob2Q6ICdldGhfc2VuZFRyYW5zYWN0aW9uJyxcbiAgICBwYXJhbXM6IFt0eFBhcmFtc10sXG4gIH0sIGZ1bmN0aW9uKGVycm9yLCByZXMpe1xuICAgIGlmIChlcnJvcikge1xuICAgICAgc2VsZi5fcGFyaXR5UmVxdWVzdHNbcmVxSWRdID0geyBlcnJvciB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgdHhIYXNoID0gcmVzLnJlc3VsdFxuICAgIHNlbGYuX3Bhcml0eVJlcXVlc3RzW3JlcUlkXSA9IHR4SGFzaFxuICB9KVxuXG4gIGNiKG51bGwsIHJlcUlkKVxufVxuXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5wYXJpdHlQb3N0U2lnbiA9IGZ1bmN0aW9uKGFkZHJlc3MsIG1lc3NhZ2UsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgLy8gZ2V0IG5leHQgaWRcbiAgY29uc3QgY291bnQgPSBzZWxmLl9wYXJpdHlSZXF1ZXN0Q291bnRcbiAgY29uc3QgcmVxSWQgPSBgMHgke2NvdW50LnRvU3RyaW5nKDE2KX1gXG4gIHNlbGYuX3Bhcml0eVJlcXVlc3RDb3VudCsrXG5cbiAgc2VsZi5lbWl0UGF5bG9hZCh7XG4gICAgbWV0aG9kOiAnZXRoX3NpZ24nLFxuICAgIHBhcmFtczogW2FkZHJlc3MsIG1lc3NhZ2VdLFxuICB9LCBmdW5jdGlvbihlcnJvciwgcmVzKXtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHNlbGYuX3Bhcml0eVJlcXVlc3RzW3JlcUlkXSA9IHsgZXJyb3IgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHJlcy5yZXN1bHRcbiAgICBzZWxmLl9wYXJpdHlSZXF1ZXN0c1tyZXFJZF0gPSByZXN1bHRcbiAgfSlcblxuICBjYihudWxsLCByZXFJZClcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnBhcml0eUNoZWNrUmVxdWVzdCA9IGZ1bmN0aW9uKHJlcUlkLCBjYikge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBjb25zdCByZXN1bHQgPSBzZWxmLl9wYXJpdHlSZXF1ZXN0c1tyZXFJZF0gfHwgbnVsbFxuICAvLyB0eCBub3QgaGFuZGxlZCB5ZXRcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBjYihudWxsLCBudWxsKVxuICAvLyB0eCB3YXMgcmVqZWN0ZWQgKG9yIG90aGVyIGVycm9yKVxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gY2IocmVzdWx0LmVycm9yKVxuICAvLyB0eCBzZW50XG4gIGNiKG51bGwsIHJlc3VsdClcbn1cblxuLy9cbi8vIHNpZ25hdHVyZSBhbmQgcmVjb3Zlcnlcbi8vXG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5yZWNvdmVyUGVyc29uYWxTaWduYXR1cmUgPSBmdW5jdGlvbihtc2dQYXJhbXMsIGNiKSB7XG4gIGxldCBzZW5kZXJIZXhcbiAgdHJ5IHtcbiAgICBzZW5kZXJIZXggPSBzaWdVdGlsLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZShtc2dQYXJhbXMpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBjYihlcnIpXG4gIH1cbiAgY2IobnVsbCwgc2VuZGVySGV4KVxufVxuXG4vL1xuLy8gdmFsaWRhdGlvblxuLy9cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLnZhbGlkYXRlVHJhbnNhY3Rpb24gPSBmdW5jdGlvbih0eFBhcmFtcywgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvLyBzaG9ydGN1dDogdW5kZWZpbmVkIHNlbmRlciBpcyBpbnZhbGlkXG4gIGlmICh0eFBhcmFtcy5mcm9tID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBhZGRyZXNzIC0gZnJvbSBhZGRyZXNzIHJlcXVpcmVkIHRvIHNpZ24gdHJhbnNhY3Rpb24uYCkpXG4gIHNlbGYudmFsaWRhdGVTZW5kZXIodHhQYXJhbXMuZnJvbSwgZnVuY3Rpb24oZXJyLCBzZW5kZXJJc1ZhbGlkKXtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmICghc2VuZGVySXNWYWxpZCkgcmV0dXJuIGNiKG5ldyBFcnJvcihgVW5rbm93biBhZGRyZXNzIC0gdW5hYmxlIHRvIHNpZ24gdHJhbnNhY3Rpb24gZm9yIHRoaXMgYWRkcmVzczogXCIke3R4UGFyYW1zLmZyb219XCJgKSlcbiAgICBjYigpXG4gIH0pXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2UgPSBmdW5jdGlvbihtc2dQYXJhbXMsIGNiKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgaWYgKG1zZ1BhcmFtcy5mcm9tID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBhZGRyZXNzIC0gZnJvbSBhZGRyZXNzIHJlcXVpcmVkIHRvIHNpZ24gbWVzc2FnZS5gKSlcbiAgc2VsZi52YWxpZGF0ZVNlbmRlcihtc2dQYXJhbXMuZnJvbSwgZnVuY3Rpb24oZXJyLCBzZW5kZXJJc1ZhbGlkKXtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmICghc2VuZGVySXNWYWxpZCkgcmV0dXJuIGNiKG5ldyBFcnJvcihgVW5rbm93biBhZGRyZXNzIC0gdW5hYmxlIHRvIHNpZ24gbWVzc2FnZSBmb3IgdGhpcyBhZGRyZXNzOiBcIiR7bXNnUGFyYW1zLmZyb219XCJgKSlcbiAgICBjYigpXG4gIH0pXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS52YWxpZGF0ZVBlcnNvbmFsTWVzc2FnZSA9IGZ1bmN0aW9uKG1zZ1BhcmFtcywgY2Ipe1xuICBjb25zdCBzZWxmID0gdGhpc1xuICBpZiAobXNnUGFyYW1zLmZyb20gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGNiKG5ldyBFcnJvcihgVW5kZWZpbmVkIGFkZHJlc3MgLSBmcm9tIGFkZHJlc3MgcmVxdWlyZWQgdG8gc2lnbiBwZXJzb25hbCBtZXNzYWdlLmApKVxuICBpZiAobXNnUGFyYW1zLmRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGNiKG5ldyBFcnJvcihgVW5kZWZpbmVkIG1lc3NhZ2UgLSBtZXNzYWdlIHJlcXVpcmVkIHRvIHNpZ24gcGVyc29uYWwgbWVzc2FnZS5gKSlcbiAgaWYgKCFpc1ZhbGlkSGV4KG1zZ1BhcmFtcy5kYXRhKSkgcmV0dXJuIGNiKG5ldyBFcnJvcihgSG9va2VkV2FsbGV0U3VicHJvdmlkZXIgLSB2YWxpZGF0ZU1lc3NhZ2UgLSBtZXNzYWdlIHdhcyBub3QgZW5jb2RlZCBhcyBoZXguYCkpXG4gIHNlbGYudmFsaWRhdGVTZW5kZXIobXNnUGFyYW1zLmZyb20sIGZ1bmN0aW9uKGVyciwgc2VuZGVySXNWYWxpZCl7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoIXNlbmRlcklzVmFsaWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCIke21zZ1BhcmFtcy5mcm9tfVwiYCkpXG4gICAgY2IoKVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUudmFsaWRhdGVUeXBlZE1lc3NhZ2UgPSBmdW5jdGlvbihtc2dQYXJhbXMsIGNiKXtcbiAgaWYgKG1zZ1BhcmFtcy5mcm9tID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBhZGRyZXNzIC0gZnJvbSBhZGRyZXNzIHJlcXVpcmVkIHRvIHNpZ24gdHlwZWQgZGF0YS5gKSlcbiAgaWYgKG1zZ1BhcmFtcy5kYXRhID09PSB1bmRlZmluZWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVuZGVmaW5lZCBkYXRhIC0gbWVzc2FnZSByZXF1aXJlZCB0byBzaWduIHR5cGVkIGRhdGEuYCkpXG4gIHRoaXMudmFsaWRhdGVTZW5kZXIobXNnUGFyYW1zLmZyb20sIGZ1bmN0aW9uKGVyciwgc2VuZGVySXNWYWxpZCl7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoIXNlbmRlcklzVmFsaWQpIHJldHVybiBjYihuZXcgRXJyb3IoYFVua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCIke21zZ1BhcmFtcy5mcm9tfVwiYCkpXG4gICAgY2IoKVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUudmFsaWRhdGVTZW5kZXIgPSBmdW5jdGlvbihzZW5kZXJBZGRyZXNzLCBjYil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8vIHNob3J0Y3V0OiB1bmRlZmluZWQgc2VuZGVyIGlzIGludmFsaWRcbiAgaWYgKCFzZW5kZXJBZGRyZXNzKSByZXR1cm4gY2IobnVsbCwgZmFsc2UpXG4gIHNlbGYuZ2V0QWNjb3VudHMoZnVuY3Rpb24oZXJyLCBhY2NvdW50cyl7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCBzZW5kZXJJc1ZhbGlkID0gKGFjY291bnRzLm1hcCh0b0xvd2VyQ2FzZSkuaW5kZXhPZihzZW5kZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkpICE9PSAtMSlcbiAgICBjYihudWxsLCBzZW5kZXJJc1ZhbGlkKVxuICB9KVxufVxuXG4vL1xuLy8gdHggaGVscGVyc1xuLy9cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLmZpbmFsaXplQW5kU3VibWl0VHggPSBmdW5jdGlvbih0eFBhcmFtcywgY2IpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLy8gY2FuIG9ubHkgYWxsb3cgb25lIHR4IHRvIHBhc3MgdGhyb3VnaCB0aGlzIGZsb3cgYXQgYSB0aW1lXG4gIC8vIHNvIHdlIGNhbiBhdG9taWNhbGx5IGNvbnN1bWUgYSBub25jZVxuICBzZWxmLm5vbmNlTG9jay50YWtlKGZ1bmN0aW9uKCl7XG4gICAgd2F0ZXJmYWxsKFtcbiAgICAgIHNlbGYuZmlsbEluVHhFeHRyYXMuYmluZChzZWxmLCB0eFBhcmFtcyksXG4gICAgICBzZWxmLnNpZ25UcmFuc2FjdGlvbi5iaW5kKHNlbGYpLFxuICAgICAgc2VsZi5wdWJsaXNoVHJhbnNhY3Rpb24uYmluZChzZWxmKSxcbiAgICBdLCBmdW5jdGlvbihlcnIsIHR4SGFzaCl7XG4gICAgICBzZWxmLm5vbmNlTG9jay5sZWF2ZSgpXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgY2IobnVsbCwgdHhIYXNoKVxuICAgIH0pXG4gIH0pXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5maW5hbGl6ZVR4ID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8vIGNhbiBvbmx5IGFsbG93IG9uZSB0eCB0byBwYXNzIHRocm91Z2ggdGhpcyBmbG93IGF0IGEgdGltZVxuICAvLyBzbyB3ZSBjYW4gYXRvbWljYWxseSBjb25zdW1lIGEgbm9uY2VcbiAgc2VsZi5ub25jZUxvY2sudGFrZShmdW5jdGlvbigpe1xuICAgIHdhdGVyZmFsbChbXG4gICAgICBzZWxmLmZpbGxJblR4RXh0cmFzLmJpbmQoc2VsZiwgdHhQYXJhbXMpLFxuICAgICAgc2VsZi5zaWduVHJhbnNhY3Rpb24uYmluZChzZWxmKSxcbiAgICBdLCBmdW5jdGlvbihlcnIsIHNpZ25lZFR4KXtcbiAgICAgIHNlbGYubm9uY2VMb2NrLmxlYXZlKClcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBjYihudWxsLCB7cmF3OiBzaWduZWRUeCwgdHg6IHR4UGFyYW1zfSlcbiAgICB9KVxuICB9KVxufVxuXG5Ib29rZWRXYWxsZXRTdWJwcm92aWRlci5wcm90b3R5cGUucHVibGlzaFRyYW5zYWN0aW9uID0gZnVuY3Rpb24ocmF3VHgsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuZW1pdFBheWxvYWQoe1xuICAgIG1ldGhvZDogJ2V0aF9zZW5kUmF3VHJhbnNhY3Rpb24nLFxuICAgIHBhcmFtczogW3Jhd1R4XSxcbiAgfSwgZnVuY3Rpb24oZXJyLCByZXMpe1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY2IobnVsbCwgcmVzLnJlc3VsdClcbiAgfSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLmVzdGltYXRlR2FzID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGVzdGltYXRlR2FzKHNlbGYuZW5naW5lLCB0eFBhcmFtcywgY2IpXG59XG5cbkhvb2tlZFdhbGxldFN1YnByb3ZpZGVyLnByb3RvdHlwZS5nZXRHYXNQcmljZSA9IGZ1bmN0aW9uKGNiKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuZW1pdFBheWxvYWQoeyBtZXRob2Q6ICdldGhfZ2FzUHJpY2UnLCBwYXJhbXM6IFtdIH0sIGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY2IobnVsbCwgcmVzLnJlc3VsdClcbiAgfSlcbn1cblxuSG9va2VkV2FsbGV0U3VicHJvdmlkZXIucHJvdG90eXBlLmZpbGxJblR4RXh0cmFzID0gZnVuY3Rpb24odHhQYXJhbXMsIGNiKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgYWRkcmVzcyA9IHR4UGFyYW1zLmZyb21cbiAgLy8gY29uc29sZS5sb2coJ2ZpbGxJblR4RXh0cmFzIC0gYWRkcmVzczonLCBhZGRyZXNzKVxuXG4gIGNvbnN0IHRhc2tzID0ge31cblxuICBpZiAodHhQYXJhbXMuZ2FzUHJpY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwibmVlZCB0byBnZXQgZ2FzcHJpY2VcIilcbiAgICB0YXNrcy5nYXNQcmljZSA9IHNlbGYuZ2V0R2FzUHJpY2UuYmluZChzZWxmKVxuICB9XG5cbiAgaWYgKHR4UGFyYW1zLm5vbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIm5lZWQgdG8gZ2V0IG5vbmNlXCIpXG4gICAgdGFza3Mubm9uY2UgPSBzZWxmLmVtaXRQYXlsb2FkLmJpbmQoc2VsZiwgeyBtZXRob2Q6ICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCcsIHBhcmFtczogW2FkZHJlc3MsICdwZW5kaW5nJ10gfSlcbiAgfVxuXG4gIGlmICh0eFBhcmFtcy5nYXMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwibmVlZCB0byBnZXQgZ2FzXCIpXG4gICAgdGFza3MuZ2FzID0gc2VsZi5lc3RpbWF0ZUdhcy5iaW5kKHNlbGYsIGNsb25lVHhQYXJhbXModHhQYXJhbXMpKVxuICB9XG5cbiAgcGFyYWxsZWwodGFza3MsIGZ1bmN0aW9uKGVyciwgdGFza1Jlc3VsdHMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgY29uc3QgcmVzdWx0ID0ge31cbiAgICBpZiAodGFza1Jlc3VsdHMuZ2FzUHJpY2UpIHJlc3VsdC5nYXNQcmljZSA9IHRhc2tSZXN1bHRzLmdhc1ByaWNlXG4gICAgaWYgKHRhc2tSZXN1bHRzLm5vbmNlKSByZXN1bHQubm9uY2UgPSB0YXNrUmVzdWx0cy5ub25jZS5yZXN1bHRcbiAgICBpZiAodGFza1Jlc3VsdHMuZ2FzKSByZXN1bHQuZ2FzID0gdGFza1Jlc3VsdHMuZ2FzXG5cbiAgICBjYihudWxsLCBleHRlbmQodHhQYXJhbXMsIHJlc3VsdCkpXG4gIH0pXG59XG5cbi8vIHV0aWxcblxuLy8gd2UgdXNlIHRoaXMgdG8gY2xlYW4gYW55IGN1c3RvbSBwYXJhbXMgZnJvbSB0aGUgdHhQYXJhbXNcbmZ1bmN0aW9uIGNsb25lVHhQYXJhbXModHhQYXJhbXMpe1xuICByZXR1cm4ge1xuICAgIGZyb206IHR4UGFyYW1zLmZyb20sXG4gICAgdG86IHR4UGFyYW1zLnRvLFxuICAgIHZhbHVlOiB0eFBhcmFtcy52YWx1ZSxcbiAgICBkYXRhOiB0eFBhcmFtcy5kYXRhLFxuICAgIGdhczogdHhQYXJhbXMuZ2FzLFxuICAgIGdhc1ByaWNlOiB0eFBhcmFtcy5nYXNQcmljZSxcbiAgICBub25jZTogdHhQYXJhbXMubm9uY2UsXG4gIH1cbn1cblxuZnVuY3Rpb24gdG9Mb3dlckNhc2Uoc3RyaW5nKXtcbiAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIHJlc2VtYmxlc0FkZHJlc3MgKHN0cmluZykge1xuICBjb25zdCBmaXhlZCA9IGV0aFV0aWwuYWRkSGV4UHJlZml4KHN0cmluZylcbiAgY29uc3QgaXNWYWxpZCA9IGV0aFV0aWwuaXNWYWxpZEFkZHJlc3MoZml4ZWQpXG4gIHJldHVybiBpc1ZhbGlkXG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiByZXNlbWJsZXMgaGV4IGRhdGFcbi8vIGJ1dCBkZWZpbml0ZWx5IG5vdCBhIHZhbGlkIGFkZHJlc3MuXG5mdW5jdGlvbiByZXNlbWJsZXNEYXRhIChzdHJpbmcpIHtcbiAgY29uc3QgZml4ZWQgPSBldGhVdGlsLmFkZEhleFByZWZpeChzdHJpbmcpXG4gIGNvbnN0IGlzVmFsaWRBZGRyZXNzID0gZXRoVXRpbC5pc1ZhbGlkQWRkcmVzcyhmaXhlZClcbiAgcmV0dXJuICFpc1ZhbGlkQWRkcmVzcyAmJiBpc1ZhbGlkSGV4KHN0cmluZylcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEhleChkYXRhKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnXG4gIGlmICghaXNTdHJpbmcpIHJldHVybiBmYWxzZVxuICBjb25zdCBpc0hleFByZWZpeGVkID0gZGF0YS5zbGljZSgwLDIpID09PSAnMHgnXG4gIGlmICghaXNIZXhQcmVmaXhlZCkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IG5vblByZWZpeGVkID0gZGF0YS5zbGljZSgyKVxuICBjb25zdCBpc1ZhbGlkID0gbm9uUHJlZml4ZWQubWF0Y2goaGV4UmVnZXgpXG4gIHJldHVybiBpc1ZhbGlkXG59XG5cbmZ1bmN0aW9uIG11c3RQcm92aWRlSW5Db25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihwYXJhbXMsIGNiKSB7XG4gICAgY2IobmV3IEVycm9yKCdQcm92aWRlckVuZ2luZSAtIEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyIC0gTXVzdCBwcm92aWRlIFwiJyArIG1ldGhvZE5hbWUgKyAnXCIgZm4gaW4gY29uc3RydWN0b3Igb3B0aW9ucycpKVxuICB9XG59XG4iLCJpbXBvcnQge1xuXHRQbHVnaW4sXG5cdFBsdWdpblR5cGVzLFxuXHRCbG9ja2NoYWlucyxcblx0TmV0d29yayxcblx0U29ja2V0U2VydmljZVxufSBmcm9tICdAc2NhdHRlcmpzL2NvcmUnO1xuXG5pbXBvcnQgUHJvdmlkZXJFbmdpbmUgZnJvbSAnd2ViMy1wcm92aWRlci1lbmdpbmUnO1xuaW1wb3J0IFJwY1N1YnByb3ZpZGVyIGZyb20gJ3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy9ycGMnO1xuaW1wb3J0IFdlYnNvY2tldFN1YnByb3ZpZGVyIGZyb20gJ3dlYjMtcHJvdmlkZXItZW5naW5lL3N1YnByb3ZpZGVycy93ZWJzb2NrZXQnO1xuaW1wb3J0IEhvb2tlZFdhbGxldFN1YnByb3ZpZGVyIGZyb20gXCJ3ZWIzLXByb3ZpZGVyLWVuZ2luZS9zdWJwcm92aWRlcnMvaG9va2VkLXdhbGxldFwiO1xuXG5cblxubGV0IGV0aE5ldHdvcmssIGlkR2V0dGVyO1xubGV0IHNvY2tldFNlcnZpY2UgPSBTb2NrZXRTZXJ2aWNlO1xuXG5cbmNsYXNzIFNjYXR0ZXJFdGhlcmV1bVdhbGxldCB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5nZXRBY2NvdW50cyA9IHRoaXMuZ2V0QWNjb3VudHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaWduVHJhbnNhY3Rpb24gPSB0aGlzLnNpZ25UcmFuc2FjdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEFjY291bnRzKGNhbGxiYWNrKSB7XG5cdCAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb2NrZXRTZXJ2aWNlLnNlbmRBcGlSZXF1ZXN0KHtcblx0XHQgICAgdHlwZTonaWRlbnRpdHlGcm9tUGVybWlzc2lvbnMnLFxuXHRcdCAgICBwYXlsb2FkOnt9XG5cdCAgICB9KTtcblxuICAgICAgICBjb25zdCBhY2NvdW50cyA9ICFpZEdldHRlcigpID8gW10gOiBpZEdldHRlcigpLmFjY291bnRzXG4gICAgICAgICAgICAuZmlsdGVyKGFjY291bnQgPT4gYWNjb3VudC5ibG9ja2NoYWluID09PSBCbG9ja2NoYWlucy5FVEgpXG4gICAgICAgICAgICAubWFwKGFjY291bnQgPT4gYWNjb3VudC5hZGRyZXNzKTtcblxuICAgICAgICBjYWxsYmFjayhudWxsLCBhY2NvdW50cyk7XG4gICAgICAgIHJldHVybiBhY2NvdW50cztcbiAgICB9XG5cbiAgICBhc3luYyBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pe1xuICAgICAgICBpZighZXRoTmV0d29yaykgdGhyb3cgRXJyb3Iubm9OZXR3b3JrKCk7XG5cbiAgICAgICAgLy8gQmFzaWMgc2V0dGluZ3NcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uLmdhcyAhPT0gdW5kZWZpbmVkKSB0cmFuc2FjdGlvbi5nYXNMaW1pdCA9IHRyYW5zYWN0aW9uLmdhcztcbiAgICAgICAgdHJhbnNhY3Rpb24udmFsdWUgPSB0cmFuc2FjdGlvbi52YWx1ZSB8fCAnMHgwMCc7XG4gICAgICAgIGlmKHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdkYXRhJykpIHRyYW5zYWN0aW9uLmRhdGEgPSAnMHgnK3RyYW5zYWN0aW9uLmRhdGE7XG5cbiAgICAgICAgLy8gUmVxdWlyZWQgRmllbGRzXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gdHJhbnNhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlcXVpcmVkRmllbGRzJykgPyB0cmFuc2FjdGlvbi5yZXF1aXJlZEZpZWxkcyA6IHt9O1xuXG4gICAgICAgIC8vIENvbnRyYWN0IEFCSVxuICAgICAgICBjb25zdCBhYmkgPSB0cmFuc2FjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWJpJykgPyB0cmFuc2FjdGlvbi5hYmkgOiBudWxsO1xuICAgICAgICBpZighYWJpICYmIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdkYXRhJykpXG4gICAgICAgICAgICB0aHJvdyBFcnJvci5zaWduYXR1cmVFcnJvcignbm9fYWJpJywgJ1lvdSBtdXN0IHByb3ZpZGUgYSBKU09OIEFCSSBhbG9uZyB3aXRoIHlvdXIgdHJhbnNhY3Rpb24gc28gdGhhdCB1c2VycyBjYW4gcmVhZCB0aGUgY29udHJhY3QnKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmFzc2lnbih0cmFuc2FjdGlvbiwgeyBibG9ja2NoYWluOkJsb2NrY2hhaW5zLkVUSCwgbmV0d29yazpldGhOZXR3b3JrLCByZXF1aXJlZEZpZWxkcyB9KTtcbiAgICAgICAgY29uc3Qge3NpZ25hdHVyZXMsIHJldHVybmVkRmllbGRzfSA9IGF3YWl0IHNvY2tldFNlcnZpY2Uuc2VuZEFwaVJlcXVlc3Qoe1xuICAgICAgICAgICAgdHlwZToncmVxdWVzdFNpZ25hdHVyZScsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCdmaWVsZHNDYWxsYmFjaycpKVxuICAgICAgICAgICAgdHJhbnNhY3Rpb24uZmllbGRzQ2FsbGJhY2socmV0dXJuZWRGaWVsZHMpO1xuXG4gICAgICAgIHJldHVybiBzaWduYXR1cmVzWzBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NhdHRlckVUSCBleHRlbmRzIFBsdWdpbiB7XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlcihCbG9ja2NoYWlucy5FVEgsIFBsdWdpblR5cGVzLkJMT0NLQ0hBSU5fU1VQUE9SVCk7XG4gICAgfVxuXG5cdHNldFNvY2tldFNlcnZpY2UoX3Mpe1xuXHRcdHNvY2tldFNlcnZpY2UgPSBfcztcblx0fVxuXG4gICAgaG9va1Byb3ZpZGVyKG5ldHdvcmssIHJlcXVpcmVkRmllbGRzID0ge30pe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V0aGVyZXVtIGhvb2sgcHJwJylcbiAgICB9XG5cbiAgICBzaWduYXR1cmVQcm92aWRlciguLi5hcmdzKXtcbiAgICAgICAgaWRHZXR0ZXIgPSBhcmdzWzFdO1xuXG4gICAgICAgIHJldHVybiAoX25ldHdvcmssIF93ZWIzKSA9PiB7XG4gICAgICAgICAgICBldGhOZXR3b3JrID0gTmV0d29yay5mcm9tSnNvbihfbmV0d29yayk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJwY1VybCA9IGAke2V0aE5ldHdvcmsuZnVsbGhvc3QoKX1gO1xuXG4gICAgICAgICAgICBjb25zdCBlbmdpbmUgPSBuZXcgUHJvdmlkZXJFbmdpbmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHdlYjMgPSBuZXcgX3dlYjMoZW5naW5lKTtcblxuICAgICAgICAgICAgY29uc3Qgd2FsbGV0U3VicHJvdmlkZXIgPSBuZXcgSG9va2VkV2FsbGV0U3VicHJvdmlkZXIobmV3IFNjYXR0ZXJFdGhlcmV1bVdhbGxldCgpKTtcbiAgICAgICAgICAgIGVuZ2luZS5hZGRQcm92aWRlcih3YWxsZXRTdWJwcm92aWRlcik7XG5cbiAgICAgICAgICAgIGlmKGV0aE5ldHdvcmsucHJvdG9jb2wuaW5kZXhPZignaHR0cCcpID4gLTEpIGVuZ2luZS5hZGRQcm92aWRlcihuZXcgUnBjU3VicHJvdmlkZXIoe3JwY1VybH0pKTtcbiAgICAgICAgICAgIGVsc2UgZW5naW5lLmFkZFByb3ZpZGVyKG5ldyBXZWJzb2NrZXRTdWJwcm92aWRlcih7cnBjVXJsfSkpO1xuXG4gICAgICAgICAgICBlbmdpbmUuc3RhcnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHdlYjM7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgd2luZG93LlNjYXR0ZXJFVEggPSBTY2F0dGVyRVRIO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2FwaScpKHJlcXVpcmUoJy4vbGliL2tlY2NhaycpKVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgY3JlYXRlS2VjY2FrID0gcmVxdWlyZSgnLi9rZWNjYWsnKVxudmFyIGNyZWF0ZVNoYWtlID0gcmVxdWlyZSgnLi9zaGFrZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtlY2Nha1N0YXRlKSB7XG4gIHZhciBLZWNjYWsgPSBjcmVhdGVLZWNjYWsoS2VjY2FrU3RhdGUpXG4gIHZhciBTaGFrZSA9IGNyZWF0ZVNoYWtlKEtlY2Nha1N0YXRlKVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYWxnb3JpdGhtLCBvcHRpb25zKSB7XG4gICAgdmFyIGhhc2ggPSB0eXBlb2YgYWxnb3JpdGhtID09PSAnc3RyaW5nJyA/IGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpIDogYWxnb3JpdGhtXG4gICAgc3dpdGNoIChoYXNoKSB7XG4gICAgICBjYXNlICdrZWNjYWsyMjQnOiByZXR1cm4gbmV3IEtlY2NhaygxMTUyLCA0NDgsIG51bGwsIDIyNCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ2tlY2NhazI1Nic6IHJldHVybiBuZXcgS2VjY2FrKDEwODgsIDUxMiwgbnVsbCwgMjU2LCBvcHRpb25zKVxuICAgICAgY2FzZSAna2VjY2FrMzg0JzogcmV0dXJuIG5ldyBLZWNjYWsoODMyLCA3NjgsIG51bGwsIDM4NCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ2tlY2NhazUxMic6IHJldHVybiBuZXcgS2VjY2FrKDU3NiwgMTAyNCwgbnVsbCwgNTEyLCBvcHRpb25zKVxuXG4gICAgICBjYXNlICdzaGEzLTIyNCc6IHJldHVybiBuZXcgS2VjY2FrKDExNTIsIDQ0OCwgMHgwNiwgMjI0LCBvcHRpb25zKVxuICAgICAgY2FzZSAnc2hhMy0yNTYnOiByZXR1cm4gbmV3IEtlY2NhaygxMDg4LCA1MTIsIDB4MDYsIDI1Niwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ3NoYTMtMzg0JzogcmV0dXJuIG5ldyBLZWNjYWsoODMyLCA3NjgsIDB4MDYsIDM4NCwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ3NoYTMtNTEyJzogcmV0dXJuIG5ldyBLZWNjYWsoNTc2LCAxMDI0LCAweDA2LCA1MTIsIG9wdGlvbnMpXG5cbiAgICAgIGNhc2UgJ3NoYWtlMTI4JzogcmV0dXJuIG5ldyBTaGFrZSgxMzQ0LCAyNTYsIDB4MWYsIG9wdGlvbnMpXG4gICAgICBjYXNlICdzaGFrZTI1Nic6IHJldHVybiBuZXcgU2hha2UoMTA4OCwgNTEyLCAweDFmLCBvcHRpb25zKVxuXG4gICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsZCBhbGdvcml0aG06ICcgKyBhbGdvcml0aG0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLZWNjYWtTdGF0ZSkge1xuICBmdW5jdGlvbiBLZWNjYWsgKHJhdGUsIGNhcGFjaXR5LCBkZWxpbWl0ZWRTdWZmaXgsIGhhc2hCaXRMZW5ndGgsIG9wdGlvbnMpIHtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gICAgdGhpcy5fcmF0ZSA9IHJhdGVcbiAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5XG4gICAgdGhpcy5fZGVsaW1pdGVkU3VmZml4ID0gZGVsaW1pdGVkU3VmZml4XG4gICAgdGhpcy5faGFzaEJpdExlbmd0aCA9IGhhc2hCaXRMZW5ndGhcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgdGhpcy5fc3RhdGUgPSBuZXcgS2VjY2FrU3RhdGUoKVxuICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemUocmF0ZSwgY2FwYWNpdHkpXG4gICAgdGhpcy5fZmluYWxpemVkID0gZmFsc2VcbiAgfVxuXG4gIGluaGVyaXRzKEtlY2NhaywgVHJhbnNmb3JtKVxuXG4gIEtlY2Nhay5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGVycm9yID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICB0aGlzLnVwZGF0ZShjaHVuaywgZW5jb2RpbmcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVyclxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yKVxuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZXJyb3IgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBlcnJcbiAgICB9XG5cbiAgICBjYWxsYmFjayhlcnJvcilcbiAgfVxuXG4gIEtlY2Nhay5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHRocm93IG5ldyBFcnJvcignRGlnZXN0IGFscmVhZHkgY2FsbGVkJylcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuY29kaW5nKVxuXG4gICAgdGhpcy5fc3RhdGUuYWJzb3JiKGRhdGEpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZ2VzdCBhbHJlYWR5IGNhbGxlZCcpXG4gICAgdGhpcy5fZmluYWxpemVkID0gdHJ1ZVxuXG4gICAgaWYgKHRoaXMuX2RlbGltaXRlZFN1ZmZpeCkgdGhpcy5fc3RhdGUuYWJzb3JiTGFzdEZld0JpdHModGhpcy5fZGVsaW1pdGVkU3VmZml4KVxuICAgIHZhciBkaWdlc3QgPSB0aGlzLl9zdGF0ZS5zcXVlZXplKHRoaXMuX2hhc2hCaXRMZW5ndGggLyA4KVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkaWdlc3QgPSBkaWdlc3QudG9TdHJpbmcoZW5jb2RpbmcpXG5cbiAgICB0aGlzLl9yZXNldFN0YXRlKClcblxuICAgIHJldHVybiBkaWdlc3RcbiAgfVxuXG4gIC8vIHJlbW92ZSByZXN1bHQgZnJvbSBtZW1vcnlcbiAgS2VjY2FrLnByb3RvdHlwZS5fcmVzZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHRoaXMuX3JhdGUsIHRoaXMuX2NhcGFjaXR5KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBiZWNhdXNlIHNvbWV0aW1lcyB3ZSBuZWVkIGhhc2ggcmlnaHQgbm93IGFuZCBsaXR0bGUgbGF0ZXJcbiAgS2VjY2FrLnByb3RvdHlwZS5fY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNsb25lID0gbmV3IEtlY2Nhayh0aGlzLl9yYXRlLCB0aGlzLl9jYXBhY2l0eSwgdGhpcy5fZGVsaW1pdGVkU3VmZml4LCB0aGlzLl9oYXNoQml0TGVuZ3RoLCB0aGlzLl9vcHRpb25zKVxuICAgIHRoaXMuX3N0YXRlLmNvcHkoY2xvbmUuX3N0YXRlKVxuICAgIGNsb25lLl9maW5hbGl6ZWQgPSB0aGlzLl9maW5hbGl6ZWRcblxuICAgIHJldHVybiBjbG9uZVxuICB9XG5cbiAgcmV0dXJuIEtlY2Nha1xufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS2VjY2FrU3RhdGUpIHtcbiAgZnVuY3Rpb24gU2hha2UgKHJhdGUsIGNhcGFjaXR5LCBkZWxpbWl0ZWRTdWZmaXgsIG9wdGlvbnMpIHtcbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKVxuXG4gICAgdGhpcy5fcmF0ZSA9IHJhdGVcbiAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5XG4gICAgdGhpcy5fZGVsaW1pdGVkU3VmZml4ID0gZGVsaW1pdGVkU3VmZml4XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIHRoaXMuX3N0YXRlID0gbmV3IEtlY2Nha1N0YXRlKClcbiAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHJhdGUsIGNhcGFjaXR5KVxuICAgIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG4gIH1cblxuICBpbmhlcml0cyhTaGFrZSwgVHJhbnNmb3JtKVxuXG4gIFNoYWtlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICB2YXIgZXJyb3IgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudXBkYXRlKGNodW5rLCBlbmNvZGluZylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyb3IpXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKCkge31cblxuICBTaGFrZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgIHRoaXMucHVzaCh0aGlzLnNxdWVlemUoc2l6ZSkpXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHRocm93IG5ldyBFcnJvcignU3F1ZWV6ZSBhbHJlYWR5IGNhbGxlZCcpXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBlbmNvZGluZylcblxuICAgIHRoaXMuX3N0YXRlLmFic29yYihkYXRhKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFNoYWtlLnByb3RvdHlwZS5zcXVlZXplID0gZnVuY3Rpb24gKGRhdGFCeXRlTGVuZ3RoLCBlbmNvZGluZykge1xuICAgIGlmICghdGhpcy5fZmluYWxpemVkKSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG4gICAgICB0aGlzLl9zdGF0ZS5hYnNvcmJMYXN0RmV3Qml0cyh0aGlzLl9kZWxpbWl0ZWRTdWZmaXgpXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9zdGF0ZS5zcXVlZXplKGRhdGFCeXRlTGVuZ3RoKVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkYXRhID0gZGF0YS50b1N0cmluZyhlbmNvZGluZylcblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUuX3Jlc2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZSh0aGlzLl9yYXRlLCB0aGlzLl9jYXBhY2l0eSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgU2hha2UucHJvdG90eXBlLl9jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2xvbmUgPSBuZXcgU2hha2UodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlbGltaXRlZFN1ZmZpeCwgdGhpcy5fb3B0aW9ucylcbiAgICB0aGlzLl9zdGF0ZS5jb3B5KGNsb25lLl9zdGF0ZSlcbiAgICBjbG9uZS5fZmluYWxpemVkID0gdGhpcy5fZmluYWxpemVkXG5cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIHJldHVybiBTaGFrZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBrZWNjYWtTdGF0ZSA9IHJlcXVpcmUoJy4va2VjY2FrLXN0YXRlLXVucm9sbCcpXG5cbmZ1bmN0aW9uIEtlY2NhayAoKSB7XG4gIC8vIG11Y2ggZmFzdGVyIHRoYW4gYG5ldyBBcnJheSg1MClgXG4gIHRoaXMuc3RhdGUgPSBbXG4gICAgMCwgMCwgMCwgMCwgMCxcbiAgICAwLCAwLCAwLCAwLCAwLFxuICAgIDAsIDAsIDAsIDAsIDAsXG4gICAgMCwgMCwgMCwgMCwgMCxcbiAgICAwLCAwLCAwLCAwLCAwXG4gIF1cblxuICB0aGlzLmJsb2NrU2l6ZSA9IG51bGxcbiAgdGhpcy5jb3VudCA9IDBcbiAgdGhpcy5zcXVlZXppbmcgPSBmYWxzZVxufVxuXG5LZWNjYWsucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAocmF0ZSwgY2FwYWNpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB0aGlzLnN0YXRlW2ldID0gMFxuICB0aGlzLmJsb2NrU2l6ZSA9IHJhdGUgLyA4XG4gIHRoaXMuY291bnQgPSAwXG4gIHRoaXMuc3F1ZWV6aW5nID0gZmFsc2Vcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5hYnNvcmIgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICB0aGlzLnN0YXRlW35+KHRoaXMuY291bnQgLyA0KV0gXj0gZGF0YVtpXSA8PCAoOCAqICh0aGlzLmNvdW50ICUgNCkpXG4gICAgdGhpcy5jb3VudCArPSAxXG4gICAgaWYgKHRoaXMuY291bnQgPT09IHRoaXMuYmxvY2tTaXplKSB7XG4gICAgICBrZWNjYWtTdGF0ZS5wMTYwMCh0aGlzLnN0YXRlKVxuICAgICAgdGhpcy5jb3VudCA9IDBcbiAgICB9XG4gIH1cbn1cblxuS2VjY2FrLnByb3RvdHlwZS5hYnNvcmJMYXN0RmV3Qml0cyA9IGZ1bmN0aW9uIChiaXRzKSB7XG4gIHRoaXMuc3RhdGVbfn4odGhpcy5jb3VudCAvIDQpXSBePSBiaXRzIDw8ICg4ICogKHRoaXMuY291bnQgJSA0KSlcbiAgaWYgKChiaXRzICYgMHg4MCkgIT09IDAgJiYgdGhpcy5jb3VudCA9PT0gKHRoaXMuYmxvY2tTaXplIC0gMSkpIGtlY2Nha1N0YXRlLnAxNjAwKHRoaXMuc3RhdGUpXG4gIHRoaXMuc3RhdGVbfn4oKHRoaXMuYmxvY2tTaXplIC0gMSkgLyA0KV0gXj0gMHg4MCA8PCAoOCAqICgodGhpcy5ibG9ja1NpemUgLSAxKSAlIDQpKVxuICBrZWNjYWtTdGF0ZS5wMTYwMCh0aGlzLnN0YXRlKVxuICB0aGlzLmNvdW50ID0gMFxuICB0aGlzLnNxdWVlemluZyA9IHRydWVcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5zcXVlZXplID0gZnVuY3Rpb24gKGxlbmd0aCkge1xuICBpZiAoIXRoaXMuc3F1ZWV6aW5nKSB0aGlzLmFic29yYkxhc3RGZXdCaXRzKDB4MDEpXG5cbiAgdmFyIG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBvdXRwdXRbaV0gPSAodGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50IC8gNCldID4+PiAoOCAqICh0aGlzLmNvdW50ICUgNCkpKSAmIDB4ZmZcbiAgICB0aGlzLmNvdW50ICs9IDFcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5ibG9ja1NpemUpIHtcbiAgICAgIGtlY2Nha1N0YXRlLnAxNjAwKHRoaXMuc3RhdGUpXG4gICAgICB0aGlzLmNvdW50ID0gMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSBkZXN0LnN0YXRlW2ldID0gdGhpcy5zdGF0ZVtpXVxuICBkZXN0LmJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplXG4gIGRlc3QuY291bnQgPSB0aGlzLmNvdW50XG4gIGRlc3Quc3F1ZWV6aW5nID0gdGhpcy5zcXVlZXppbmdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBLZWNjYWtcbiIsIid1c2Ugc3RyaWN0J1xudmFyIFAxNjAwX1JPVU5EX0NPTlNUQU5UUyA9IFsxLCAwLCAzMjg5OCwgMCwgMzI5MDYsIDIxNDc0ODM2NDgsIDIxNDc1MTY0MTYsIDIxNDc0ODM2NDgsIDMyOTA3LCAwLCAyMTQ3NDgzNjQ5LCAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLCAyMTQ3NDgzNjQ4LCAzMjc3MCwgMjE0NzQ4MzY0OCwgMTI4LCAyMTQ3NDgzNjQ4LCAzMjc3OCwgMCwgMjE0NzQ4MzY1OCwgMjE0NzQ4MzY0OCwgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdXG5cbmV4cG9ydHMucDE2MDAgPSBmdW5jdGlvbiAocykge1xuICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7ICsrcm91bmQpIHtcbiAgICAvLyB0aGV0YVxuICAgIHZhciBsbzAgPSBzWzBdIF4gc1sxMF0gXiBzWzIwXSBeIHNbMzBdIF4gc1s0MF1cbiAgICB2YXIgaGkwID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdXG4gICAgdmFyIGxvMSA9IHNbMl0gXiBzWzEyXSBeIHNbMjJdIF4gc1szMl0gXiBzWzQyXVxuICAgIHZhciBoaTEgPSBzWzNdIF4gc1sxM10gXiBzWzIzXSBeIHNbMzNdIF4gc1s0M11cbiAgICB2YXIgbG8yID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdXG4gICAgdmFyIGhpMiA9IHNbNV0gXiBzWzE1XSBeIHNbMjVdIF4gc1szNV0gXiBzWzQ1XVxuICAgIHZhciBsbzMgPSBzWzZdIF4gc1sxNl0gXiBzWzI2XSBeIHNbMzZdIF4gc1s0Nl1cbiAgICB2YXIgaGkzID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddXG4gICAgdmFyIGxvNCA9IHNbOF0gXiBzWzE4XSBeIHNbMjhdIF4gc1szOF0gXiBzWzQ4XVxuICAgIHZhciBoaTQgPSBzWzldIF4gc1sxOV0gXiBzWzI5XSBeIHNbMzldIF4gc1s0OV1cblxuICAgIHZhciBsbyA9IGxvNCBeIChsbzEgPDwgMSB8IGhpMSA+Pj4gMzEpXG4gICAgdmFyIGhpID0gaGk0IF4gKGhpMSA8PCAxIHwgbG8xID4+PiAzMSlcbiAgICB2YXIgdDFzbG8wID0gc1swXSBeIGxvXG4gICAgdmFyIHQxc2hpMCA9IHNbMV0gXiBoaVxuICAgIHZhciB0MXNsbzUgPSBzWzEwXSBeIGxvXG4gICAgdmFyIHQxc2hpNSA9IHNbMTFdIF4gaGlcbiAgICB2YXIgdDFzbG8xMCA9IHNbMjBdIF4gbG9cbiAgICB2YXIgdDFzaGkxMCA9IHNbMjFdIF4gaGlcbiAgICB2YXIgdDFzbG8xNSA9IHNbMzBdIF4gbG9cbiAgICB2YXIgdDFzaGkxNSA9IHNbMzFdIF4gaGlcbiAgICB2YXIgdDFzbG8yMCA9IHNbNDBdIF4gbG9cbiAgICB2YXIgdDFzaGkyMCA9IHNbNDFdIF4gaGlcbiAgICBsbyA9IGxvMCBeIChsbzIgPDwgMSB8IGhpMiA+Pj4gMzEpXG4gICAgaGkgPSBoaTAgXiAoaGkyIDw8IDEgfCBsbzIgPj4+IDMxKVxuICAgIHZhciB0MXNsbzEgPSBzWzJdIF4gbG9cbiAgICB2YXIgdDFzaGkxID0gc1szXSBeIGhpXG4gICAgdmFyIHQxc2xvNiA9IHNbMTJdIF4gbG9cbiAgICB2YXIgdDFzaGk2ID0gc1sxM10gXiBoaVxuICAgIHZhciB0MXNsbzExID0gc1syMl0gXiBsb1xuICAgIHZhciB0MXNoaTExID0gc1syM10gXiBoaVxuICAgIHZhciB0MXNsbzE2ID0gc1szMl0gXiBsb1xuICAgIHZhciB0MXNoaTE2ID0gc1szM10gXiBoaVxuICAgIHZhciB0MXNsbzIxID0gc1s0Ml0gXiBsb1xuICAgIHZhciB0MXNoaTIxID0gc1s0M10gXiBoaVxuICAgIGxvID0gbG8xIF4gKGxvMyA8PCAxIHwgaGkzID4+PiAzMSlcbiAgICBoaSA9IGhpMSBeIChoaTMgPDwgMSB8IGxvMyA+Pj4gMzEpXG4gICAgdmFyIHQxc2xvMiA9IHNbNF0gXiBsb1xuICAgIHZhciB0MXNoaTIgPSBzWzVdIF4gaGlcbiAgICB2YXIgdDFzbG83ID0gc1sxNF0gXiBsb1xuICAgIHZhciB0MXNoaTcgPSBzWzE1XSBeIGhpXG4gICAgdmFyIHQxc2xvMTIgPSBzWzI0XSBeIGxvXG4gICAgdmFyIHQxc2hpMTIgPSBzWzI1XSBeIGhpXG4gICAgdmFyIHQxc2xvMTcgPSBzWzM0XSBeIGxvXG4gICAgdmFyIHQxc2hpMTcgPSBzWzM1XSBeIGhpXG4gICAgdmFyIHQxc2xvMjIgPSBzWzQ0XSBeIGxvXG4gICAgdmFyIHQxc2hpMjIgPSBzWzQ1XSBeIGhpXG4gICAgbG8gPSBsbzIgXiAobG80IDw8IDEgfCBoaTQgPj4+IDMxKVxuICAgIGhpID0gaGkyIF4gKGhpNCA8PCAxIHwgbG80ID4+PiAzMSlcbiAgICB2YXIgdDFzbG8zID0gc1s2XSBeIGxvXG4gICAgdmFyIHQxc2hpMyA9IHNbN10gXiBoaVxuICAgIHZhciB0MXNsbzggPSBzWzE2XSBeIGxvXG4gICAgdmFyIHQxc2hpOCA9IHNbMTddIF4gaGlcbiAgICB2YXIgdDFzbG8xMyA9IHNbMjZdIF4gbG9cbiAgICB2YXIgdDFzaGkxMyA9IHNbMjddIF4gaGlcbiAgICB2YXIgdDFzbG8xOCA9IHNbMzZdIF4gbG9cbiAgICB2YXIgdDFzaGkxOCA9IHNbMzddIF4gaGlcbiAgICB2YXIgdDFzbG8yMyA9IHNbNDZdIF4gbG9cbiAgICB2YXIgdDFzaGkyMyA9IHNbNDddIF4gaGlcbiAgICBsbyA9IGxvMyBeIChsbzAgPDwgMSB8IGhpMCA+Pj4gMzEpXG4gICAgaGkgPSBoaTMgXiAoaGkwIDw8IDEgfCBsbzAgPj4+IDMxKVxuICAgIHZhciB0MXNsbzQgPSBzWzhdIF4gbG9cbiAgICB2YXIgdDFzaGk0ID0gc1s5XSBeIGhpXG4gICAgdmFyIHQxc2xvOSA9IHNbMThdIF4gbG9cbiAgICB2YXIgdDFzaGk5ID0gc1sxOV0gXiBoaVxuICAgIHZhciB0MXNsbzE0ID0gc1syOF0gXiBsb1xuICAgIHZhciB0MXNoaTE0ID0gc1syOV0gXiBoaVxuICAgIHZhciB0MXNsbzE5ID0gc1szOF0gXiBsb1xuICAgIHZhciB0MXNoaTE5ID0gc1szOV0gXiBoaVxuICAgIHZhciB0MXNsbzI0ID0gc1s0OF0gXiBsb1xuICAgIHZhciB0MXNoaTI0ID0gc1s0OV0gXiBoaVxuXG4gICAgLy8gcmhvICYgcGlcbiAgICB2YXIgdDJzbG8wID0gdDFzbG8wXG4gICAgdmFyIHQyc2hpMCA9IHQxc2hpMFxuICAgIHZhciB0MnNsbzE2ID0gKHQxc2hpNSA8PCA0IHwgdDFzbG81ID4+PiAyOClcbiAgICB2YXIgdDJzaGkxNiA9ICh0MXNsbzUgPDwgNCB8IHQxc2hpNSA+Pj4gMjgpXG4gICAgdmFyIHQyc2xvNyA9ICh0MXNsbzEwIDw8IDMgfCB0MXNoaTEwID4+PiAyOSlcbiAgICB2YXIgdDJzaGk3ID0gKHQxc2hpMTAgPDwgMyB8IHQxc2xvMTAgPj4+IDI5KVxuICAgIHZhciB0MnNsbzIzID0gKHQxc2hpMTUgPDwgOSB8IHQxc2xvMTUgPj4+IDIzKVxuICAgIHZhciB0MnNoaTIzID0gKHQxc2xvMTUgPDwgOSB8IHQxc2hpMTUgPj4+IDIzKVxuICAgIHZhciB0MnNsbzE0ID0gKHQxc2xvMjAgPDwgMTggfCB0MXNoaTIwID4+PiAxNClcbiAgICB2YXIgdDJzaGkxNCA9ICh0MXNoaTIwIDw8IDE4IHwgdDFzbG8yMCA+Pj4gMTQpXG4gICAgdmFyIHQyc2xvMTAgPSAodDFzbG8xIDw8IDEgfCB0MXNoaTEgPj4+IDMxKVxuICAgIHZhciB0MnNoaTEwID0gKHQxc2hpMSA8PCAxIHwgdDFzbG8xID4+PiAzMSlcbiAgICB2YXIgdDJzbG8xID0gKHQxc2hpNiA8PCAxMiB8IHQxc2xvNiA+Pj4gMjApXG4gICAgdmFyIHQyc2hpMSA9ICh0MXNsbzYgPDwgMTIgfCB0MXNoaTYgPj4+IDIwKVxuICAgIHZhciB0MnNsbzE3ID0gKHQxc2xvMTEgPDwgMTAgfCB0MXNoaTExID4+PiAyMilcbiAgICB2YXIgdDJzaGkxNyA9ICh0MXNoaTExIDw8IDEwIHwgdDFzbG8xMSA+Pj4gMjIpXG4gICAgdmFyIHQyc2xvOCA9ICh0MXNoaTE2IDw8IDEzIHwgdDFzbG8xNiA+Pj4gMTkpXG4gICAgdmFyIHQyc2hpOCA9ICh0MXNsbzE2IDw8IDEzIHwgdDFzaGkxNiA+Pj4gMTkpXG4gICAgdmFyIHQyc2xvMjQgPSAodDFzbG8yMSA8PCAyIHwgdDFzaGkyMSA+Pj4gMzApXG4gICAgdmFyIHQyc2hpMjQgPSAodDFzaGkyMSA8PCAyIHwgdDFzbG8yMSA+Pj4gMzApXG4gICAgdmFyIHQyc2xvMjAgPSAodDFzaGkyIDw8IDMwIHwgdDFzbG8yID4+PiAyKVxuICAgIHZhciB0MnNoaTIwID0gKHQxc2xvMiA8PCAzMCB8IHQxc2hpMiA+Pj4gMilcbiAgICB2YXIgdDJzbG8xMSA9ICh0MXNsbzcgPDwgNiB8IHQxc2hpNyA+Pj4gMjYpXG4gICAgdmFyIHQyc2hpMTEgPSAodDFzaGk3IDw8IDYgfCB0MXNsbzcgPj4+IDI2KVxuICAgIHZhciB0MnNsbzIgPSAodDFzaGkxMiA8PCAxMSB8IHQxc2xvMTIgPj4+IDIxKVxuICAgIHZhciB0MnNoaTIgPSAodDFzbG8xMiA8PCAxMSB8IHQxc2hpMTIgPj4+IDIxKVxuICAgIHZhciB0MnNsbzE4ID0gKHQxc2xvMTcgPDwgMTUgfCB0MXNoaTE3ID4+PiAxNylcbiAgICB2YXIgdDJzaGkxOCA9ICh0MXNoaTE3IDw8IDE1IHwgdDFzbG8xNyA+Pj4gMTcpXG4gICAgdmFyIHQyc2xvOSA9ICh0MXNoaTIyIDw8IDI5IHwgdDFzbG8yMiA+Pj4gMylcbiAgICB2YXIgdDJzaGk5ID0gKHQxc2xvMjIgPDwgMjkgfCB0MXNoaTIyID4+PiAzKVxuICAgIHZhciB0MnNsbzUgPSAodDFzbG8zIDw8IDI4IHwgdDFzaGkzID4+PiA0KVxuICAgIHZhciB0MnNoaTUgPSAodDFzaGkzIDw8IDI4IHwgdDFzbG8zID4+PiA0KVxuICAgIHZhciB0MnNsbzIxID0gKHQxc2hpOCA8PCAyMyB8IHQxc2xvOCA+Pj4gOSlcbiAgICB2YXIgdDJzaGkyMSA9ICh0MXNsbzggPDwgMjMgfCB0MXNoaTggPj4+IDkpXG4gICAgdmFyIHQyc2xvMTIgPSAodDFzbG8xMyA8PCAyNSB8IHQxc2hpMTMgPj4+IDcpXG4gICAgdmFyIHQyc2hpMTIgPSAodDFzaGkxMyA8PCAyNSB8IHQxc2xvMTMgPj4+IDcpXG4gICAgdmFyIHQyc2xvMyA9ICh0MXNsbzE4IDw8IDIxIHwgdDFzaGkxOCA+Pj4gMTEpXG4gICAgdmFyIHQyc2hpMyA9ICh0MXNoaTE4IDw8IDIxIHwgdDFzbG8xOCA+Pj4gMTEpXG4gICAgdmFyIHQyc2xvMTkgPSAodDFzaGkyMyA8PCAyNCB8IHQxc2xvMjMgPj4+IDgpXG4gICAgdmFyIHQyc2hpMTkgPSAodDFzbG8yMyA8PCAyNCB8IHQxc2hpMjMgPj4+IDgpXG4gICAgdmFyIHQyc2xvMTUgPSAodDFzbG80IDw8IDI3IHwgdDFzaGk0ID4+PiA1KVxuICAgIHZhciB0MnNoaTE1ID0gKHQxc2hpNCA8PCAyNyB8IHQxc2xvNCA+Pj4gNSlcbiAgICB2YXIgdDJzbG82ID0gKHQxc2xvOSA8PCAyMCB8IHQxc2hpOSA+Pj4gMTIpXG4gICAgdmFyIHQyc2hpNiA9ICh0MXNoaTkgPDwgMjAgfCB0MXNsbzkgPj4+IDEyKVxuICAgIHZhciB0MnNsbzIyID0gKHQxc2hpMTQgPDwgNyB8IHQxc2xvMTQgPj4+IDI1KVxuICAgIHZhciB0MnNoaTIyID0gKHQxc2xvMTQgPDwgNyB8IHQxc2hpMTQgPj4+IDI1KVxuICAgIHZhciB0MnNsbzEzID0gKHQxc2xvMTkgPDwgOCB8IHQxc2hpMTkgPj4+IDI0KVxuICAgIHZhciB0MnNoaTEzID0gKHQxc2hpMTkgPDwgOCB8IHQxc2xvMTkgPj4+IDI0KVxuICAgIHZhciB0MnNsbzQgPSAodDFzbG8yNCA8PCAxNCB8IHQxc2hpMjQgPj4+IDE4KVxuICAgIHZhciB0MnNoaTQgPSAodDFzaGkyNCA8PCAxNCB8IHQxc2xvMjQgPj4+IDE4KVxuXG4gICAgLy8gY2hpXG4gICAgc1swXSA9IHQyc2xvMCBeICh+dDJzbG8xICYgdDJzbG8yKVxuICAgIHNbMV0gPSB0MnNoaTAgXiAofnQyc2hpMSAmIHQyc2hpMilcbiAgICBzWzEwXSA9IHQyc2xvNSBeICh+dDJzbG82ICYgdDJzbG83KVxuICAgIHNbMTFdID0gdDJzaGk1IF4gKH50MnNoaTYgJiB0MnNoaTcpXG4gICAgc1syMF0gPSB0MnNsbzEwIF4gKH50MnNsbzExICYgdDJzbG8xMilcbiAgICBzWzIxXSA9IHQyc2hpMTAgXiAofnQyc2hpMTEgJiB0MnNoaTEyKVxuICAgIHNbMzBdID0gdDJzbG8xNSBeICh+dDJzbG8xNiAmIHQyc2xvMTcpXG4gICAgc1szMV0gPSB0MnNoaTE1IF4gKH50MnNoaTE2ICYgdDJzaGkxNylcbiAgICBzWzQwXSA9IHQyc2xvMjAgXiAofnQyc2xvMjEgJiB0MnNsbzIyKVxuICAgIHNbNDFdID0gdDJzaGkyMCBeICh+dDJzaGkyMSAmIHQyc2hpMjIpXG4gICAgc1syXSA9IHQyc2xvMSBeICh+dDJzbG8yICYgdDJzbG8zKVxuICAgIHNbM10gPSB0MnNoaTEgXiAofnQyc2hpMiAmIHQyc2hpMylcbiAgICBzWzEyXSA9IHQyc2xvNiBeICh+dDJzbG83ICYgdDJzbG84KVxuICAgIHNbMTNdID0gdDJzaGk2IF4gKH50MnNoaTcgJiB0MnNoaTgpXG4gICAgc1syMl0gPSB0MnNsbzExIF4gKH50MnNsbzEyICYgdDJzbG8xMylcbiAgICBzWzIzXSA9IHQyc2hpMTEgXiAofnQyc2hpMTIgJiB0MnNoaTEzKVxuICAgIHNbMzJdID0gdDJzbG8xNiBeICh+dDJzbG8xNyAmIHQyc2xvMTgpXG4gICAgc1szM10gPSB0MnNoaTE2IF4gKH50MnNoaTE3ICYgdDJzaGkxOClcbiAgICBzWzQyXSA9IHQyc2xvMjEgXiAofnQyc2xvMjIgJiB0MnNsbzIzKVxuICAgIHNbNDNdID0gdDJzaGkyMSBeICh+dDJzaGkyMiAmIHQyc2hpMjMpXG4gICAgc1s0XSA9IHQyc2xvMiBeICh+dDJzbG8zICYgdDJzbG80KVxuICAgIHNbNV0gPSB0MnNoaTIgXiAofnQyc2hpMyAmIHQyc2hpNClcbiAgICBzWzE0XSA9IHQyc2xvNyBeICh+dDJzbG84ICYgdDJzbG85KVxuICAgIHNbMTVdID0gdDJzaGk3IF4gKH50MnNoaTggJiB0MnNoaTkpXG4gICAgc1syNF0gPSB0MnNsbzEyIF4gKH50MnNsbzEzICYgdDJzbG8xNClcbiAgICBzWzI1XSA9IHQyc2hpMTIgXiAofnQyc2hpMTMgJiB0MnNoaTE0KVxuICAgIHNbMzRdID0gdDJzbG8xNyBeICh+dDJzbG8xOCAmIHQyc2xvMTkpXG4gICAgc1szNV0gPSB0MnNoaTE3IF4gKH50MnNoaTE4ICYgdDJzaGkxOSlcbiAgICBzWzQ0XSA9IHQyc2xvMjIgXiAofnQyc2xvMjMgJiB0MnNsbzI0KVxuICAgIHNbNDVdID0gdDJzaGkyMiBeICh+dDJzaGkyMyAmIHQyc2hpMjQpXG4gICAgc1s2XSA9IHQyc2xvMyBeICh+dDJzbG80ICYgdDJzbG8wKVxuICAgIHNbN10gPSB0MnNoaTMgXiAofnQyc2hpNCAmIHQyc2hpMClcbiAgICBzWzE2XSA9IHQyc2xvOCBeICh+dDJzbG85ICYgdDJzbG81KVxuICAgIHNbMTddID0gdDJzaGk4IF4gKH50MnNoaTkgJiB0MnNoaTUpXG4gICAgc1syNl0gPSB0MnNsbzEzIF4gKH50MnNsbzE0ICYgdDJzbG8xMClcbiAgICBzWzI3XSA9IHQyc2hpMTMgXiAofnQyc2hpMTQgJiB0MnNoaTEwKVxuICAgIHNbMzZdID0gdDJzbG8xOCBeICh+dDJzbG8xOSAmIHQyc2xvMTUpXG4gICAgc1szN10gPSB0MnNoaTE4IF4gKH50MnNoaTE5ICYgdDJzaGkxNSlcbiAgICBzWzQ2XSA9IHQyc2xvMjMgXiAofnQyc2xvMjQgJiB0MnNsbzIwKVxuICAgIHNbNDddID0gdDJzaGkyMyBeICh+dDJzaGkyNCAmIHQyc2hpMjApXG4gICAgc1s4XSA9IHQyc2xvNCBeICh+dDJzbG8wICYgdDJzbG8xKVxuICAgIHNbOV0gPSB0MnNoaTQgXiAofnQyc2hpMCAmIHQyc2hpMSlcbiAgICBzWzE4XSA9IHQyc2xvOSBeICh+dDJzbG81ICYgdDJzbG82KVxuICAgIHNbMTldID0gdDJzaGk5IF4gKH50MnNoaTUgJiB0MnNoaTYpXG4gICAgc1syOF0gPSB0MnNsbzE0IF4gKH50MnNsbzEwICYgdDJzbG8xMSlcbiAgICBzWzI5XSA9IHQyc2hpMTQgXiAofnQyc2hpMTAgJiB0MnNoaTExKVxuICAgIHNbMzhdID0gdDJzbG8xOSBeICh+dDJzbG8xNSAmIHQyc2xvMTYpXG4gICAgc1szOV0gPSB0MnNoaTE5IF4gKH50MnNoaTE1ICYgdDJzaGkxNilcbiAgICBzWzQ4XSA9IHQyc2xvMjQgXiAofnQyc2xvMjAgJiB0MnNsbzIxKVxuICAgIHNbNDldID0gdDJzaGkyNCBeICh+dDJzaGkyMCAmIHQyc2hpMjEpXG5cbiAgICAvLyBpb3RhXG4gICAgc1swXSBePSBQMTYwMF9ST1VORF9DT05TVEFOVFNbcm91bmQgKiAyXVxuICAgIHNbMV0gXj0gUDE2MDBfUk9VTkRfQ09OU1RBTlRTW3JvdW5kICogMiArIDFdXG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJy4vYXNzZXJ0JylcbnZhciBkZXIgPSByZXF1aXJlKCcuL2RlcicpXG52YXIgbWVzc2FnZXMgPSByZXF1aXJlKCcuL21lc3NhZ2VzLmpzb24nKVxuXG5mdW5jdGlvbiBpbml0Q29tcHJlc3NlZFZhbHVlICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbih2YWx1ZSwgbWVzc2FnZXMuQ09NUFJFU1NFRF9UWVBFX0lOVkFMSUQpXG4gIHJldHVybiB2YWx1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWNwMjU2azEpIHtcbiAgcmV0dXJuIHtcbiAgICBwcml2YXRlS2V5VmVyaWZ5OiBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIHJldHVybiBwcml2YXRlS2V5Lmxlbmd0aCA9PT0gMzIgJiYgc2VjcDI1NmsxLnByaXZhdGVLZXlWZXJpZnkocHJpdmF0ZUtleSlcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleUV4cG9ydDogZnVuY3Rpb24gKHByaXZhdGVLZXksIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuICAgICAgdmFyIHB1YmxpY0tleSA9IHNlY3AyNTZrMS5wcml2YXRlS2V5RXhwb3J0KHByaXZhdGVLZXksIGNvbXByZXNzZWQpXG5cbiAgICAgIHJldHVybiBkZXIucHJpdmF0ZUtleUV4cG9ydChwcml2YXRlS2V5LCBwdWJsaWNLZXksIGNvbXByZXNzZWQpXG4gICAgfSxcblxuICAgIHByaXZhdGVLZXlJbXBvcnQ6IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuXG4gICAgICBwcml2YXRlS2V5ID0gZGVyLnByaXZhdGVLZXlJbXBvcnQocHJpdmF0ZUtleSlcbiAgICAgIGlmIChwcml2YXRlS2V5ICYmIHByaXZhdGVLZXkubGVuZ3RoID09PSAzMiAmJiBzZWNwMjU2azEucHJpdmF0ZUtleVZlcmlmeShwcml2YXRlS2V5KSkgcmV0dXJuIHByaXZhdGVLZXlcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0lNUE9SVF9ERVJfRkFJTClcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleU5lZ2F0ZTogZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnByaXZhdGVLZXlOZWdhdGUocHJpdmF0ZUtleSlcbiAgICB9LFxuXG4gICAgcHJpdmF0ZUtleU1vZEludmVyc2U6IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHByaXZhdGVLZXksIDMyLCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wcml2YXRlS2V5TW9kSW52ZXJzZShwcml2YXRlS2V5KVxuICAgIH0sXG5cbiAgICBwcml2YXRlS2V5VHdlYWtBZGQ6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChwcml2YXRlS2V5LCAzMiwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcih0d2VhaywgbWVzc2FnZXMuVFdFQUtfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHR3ZWFrLCAzMiwgbWVzc2FnZXMuVFdFQUtfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHJpdmF0ZUtleVR3ZWFrQWRkKHByaXZhdGVLZXksIHR3ZWFrKVxuICAgIH0sXG5cbiAgICBwcml2YXRlS2V5VHdlYWtNdWw6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHByaXZhdGVLZXksIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChwcml2YXRlS2V5LCAzMiwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcih0d2VhaywgbWVzc2FnZXMuVFdFQUtfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHR3ZWFrLCAzMiwgbWVzc2FnZXMuVFdFQUtfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHJpdmF0ZUtleVR3ZWFrTXVsKHByaXZhdGVLZXksIHR3ZWFrKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlDcmVhdGU6IGZ1bmN0aW9uIChwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHJpdmF0ZUtleSwgbWVzc2FnZXMuRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKHByaXZhdGVLZXksIDMyLCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlDcmVhdGUocHJpdmF0ZUtleSwgY29tcHJlc3NlZClcbiAgICB9LFxuXG4gICAgcHVibGljS2V5Q29udmVydDogZnVuY3Rpb24gKHB1YmxpY0tleSwgY29tcHJlc3NlZCkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHB1YmxpY0tleSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgyKHB1YmxpY0tleSwgMzMsIDY1LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQocHVibGljS2V5LCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlWZXJpZnk6IGZ1bmN0aW9uIChwdWJsaWNLZXkpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlWZXJpZnkocHVibGljS2V5KVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlUd2Vha0FkZDogZnVuY3Rpb24gKHB1YmxpY0tleSwgdHdlYWssIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHR3ZWFrLCBtZXNzYWdlcy5UV0VBS19UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgodHdlYWssIDMyLCBtZXNzYWdlcy5UV0VBS19MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlUd2Vha0FkZChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlUd2Vha011bDogZnVuY3Rpb24gKHB1YmxpY0tleSwgdHdlYWssIGNvbXByZXNzZWQpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHR3ZWFrLCBtZXNzYWdlcy5UV0VBS19UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgodHdlYWssIDMyLCBtZXNzYWdlcy5UV0VBS19MRU5HVEhfSU5WQUxJRClcblxuICAgICAgY29tcHJlc3NlZCA9IGluaXRDb21wcmVzc2VkVmFsdWUoY29tcHJlc3NlZCwgdHJ1ZSlcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlUd2Vha011bChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBwdWJsaWNLZXlDb21iaW5lOiBmdW5jdGlvbiAocHVibGljS2V5cywgY29tcHJlc3NlZCkge1xuICAgICAgYXNzZXJ0LmlzQXJyYXkocHVibGljS2V5cywgbWVzc2FnZXMuRUNfUFVCTElDX0tFWVNfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTGVuZ3RoR1RaZXJvKHB1YmxpY0tleXMsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlTX0xFTkdUSF9JTlZBTElEKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdWJsaWNLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXlzW2ldLCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXlzW2ldLCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG4gICAgICB9XG5cbiAgICAgIGNvbXByZXNzZWQgPSBpbml0Q29tcHJlc3NlZFZhbHVlKGNvbXByZXNzZWQsIHRydWUpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5Q29tYmluZShwdWJsaWNLZXlzLCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBzaWduYXR1cmVOb3JtYWxpemU6IGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgIGFzc2VydC5pc0J1ZmZlcihzaWduYXR1cmUsIG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgoc2lnbmF0dXJlLCA2NCwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnNpZ25hdHVyZU5vcm1hbGl6ZShzaWduYXR1cmUpXG4gICAgfSxcblxuICAgIHNpZ25hdHVyZUV4cG9ydDogZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIHZhciBzaWdPYmogPSBzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHNpZ25hdHVyZSlcbiAgICAgIHJldHVybiBkZXIuc2lnbmF0dXJlRXhwb3J0KHNpZ09iailcbiAgICB9LFxuXG4gICAgc2lnbmF0dXJlSW1wb3J0OiBmdW5jdGlvbiAoc2lnKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIoc2lnLCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTGVuZ3RoR1RaZXJvKHNpZywgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICB2YXIgc2lnT2JqID0gZGVyLnNpZ25hdHVyZUltcG9ydChzaWcpXG4gICAgICBpZiAoc2lnT2JqKSByZXR1cm4gc2VjcDI1NmsxLnNpZ25hdHVyZUltcG9ydChzaWdPYmopXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwpXG4gICAgfSxcblxuICAgIHNpZ25hdHVyZUltcG9ydExheDogZnVuY3Rpb24gKHNpZykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZywgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0xlbmd0aEdUWmVybyhzaWcsIG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgdmFyIHNpZ09iaiA9IGRlci5zaWduYXR1cmVJbXBvcnRMYXgoc2lnKVxuICAgICAgaWYgKHNpZ09iaikgcmV0dXJuIHNlY3AyNTZrMS5zaWduYXR1cmVJbXBvcnQoc2lnT2JqKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0RFUl9GQUlMKVxuICAgIH0sXG5cbiAgICBzaWduOiBmdW5jdGlvbiAobWVzc2FnZSwgcHJpdmF0ZUtleSwgb3B0aW9ucykge1xuICAgICAgYXNzZXJ0LmlzQnVmZmVyKG1lc3NhZ2UsIG1lc3NhZ2VzLk1TRzMyX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChtZXNzYWdlLCAzMiwgbWVzc2FnZXMuTVNHMzJfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICB2YXIgZGF0YSA9IG51bGxcbiAgICAgIHZhciBub25jZWZuID0gbnVsbFxuICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhc3NlcnQuaXNPYmplY3Qob3B0aW9ucywgbWVzc2FnZXMuT1BUSU9OU19UWVBFX0lOVkFMSUQpXG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0LmlzQnVmZmVyKG9wdGlvbnMuZGF0YSwgbWVzc2FnZXMuT1BUSU9OU19EQVRBX1RZUEVfSU5WQUxJRClcbiAgICAgICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgob3B0aW9ucy5kYXRhLCAzMiwgbWVzc2FnZXMuT1BUSU9OU19EQVRBX0xFTkdUSF9JTlZBTElEKVxuICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm5vbmNlZm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc2VydC5pc0Z1bmN0aW9uKG9wdGlvbnMubm9uY2VmbiwgbWVzc2FnZXMuT1BUSU9OU19OT05DRUZOX1RZUEVfSU5WQUxJRClcbiAgICAgICAgICBub25jZWZuID0gb3B0aW9ucy5ub25jZWZuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS5zaWduKG1lc3NhZ2UsIHByaXZhdGVLZXksIG5vbmNlZm4sIGRhdGEpXG4gICAgfSxcblxuICAgIHZlcmlmeTogZnVuY3Rpb24gKG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIobWVzc2FnZSwgbWVzc2FnZXMuTVNHMzJfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKG1lc3NhZ2UsIDMyLCBtZXNzYWdlcy5NU0czMl9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwdWJsaWNLZXksIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoMihwdWJsaWNLZXksIDMzLCA2NSwgbWVzc2FnZXMuRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgcmV0dXJuIHNlY3AyNTZrMS52ZXJpZnkobWVzc2FnZSwgc2lnbmF0dXJlLCBwdWJsaWNLZXkpXG4gICAgfSxcblxuICAgIHJlY292ZXI6IGZ1bmN0aW9uIChtZXNzYWdlLCBzaWduYXR1cmUsIHJlY292ZXJ5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIobWVzc2FnZSwgbWVzc2FnZXMuTVNHMzJfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzQnVmZmVyTGVuZ3RoKG1lc3NhZ2UsIDMyLCBtZXNzYWdlcy5NU0czMl9MRU5HVEhfSU5WQUxJRClcblxuICAgICAgYXNzZXJ0LmlzQnVmZmVyKHNpZ25hdHVyZSwgbWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aChzaWduYXR1cmUsIDY0LCBtZXNzYWdlcy5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc051bWJlcihyZWNvdmVyeSwgbWVzc2FnZXMuUkVDT1ZFUllfSURfVFlQRV9JTlZBTElEKVxuICAgICAgYXNzZXJ0LmlzTnVtYmVySW5JbnRlcnZhbChyZWNvdmVyeSwgLTEsIDQsIG1lc3NhZ2VzLlJFQ09WRVJZX0lEX1ZBTFVFX0lOVkFMSUQpXG5cbiAgICAgIGNvbXByZXNzZWQgPSBpbml0Q29tcHJlc3NlZFZhbHVlKGNvbXByZXNzZWQsIHRydWUpXG5cbiAgICAgIHJldHVybiBzZWNwMjU2azEucmVjb3ZlcihtZXNzYWdlLCBzaWduYXR1cmUsIHJlY292ZXJ5LCBjb21wcmVzc2VkKVxuICAgIH0sXG5cbiAgICBlY2RoOiBmdW5jdGlvbiAocHVibGljS2V5LCBwcml2YXRlS2V5KSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHVibGljS2V5LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aDIocHVibGljS2V5LCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLmVjZGgocHVibGljS2V5LCBwcml2YXRlS2V5KVxuICAgIH0sXG5cbiAgICBlY2RoVW5zYWZlOiBmdW5jdGlvbiAocHVibGljS2V5LCBwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gICAgICBhc3NlcnQuaXNCdWZmZXIocHVibGljS2V5LCBtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRClcbiAgICAgIGFzc2VydC5pc0J1ZmZlckxlbmd0aDIocHVibGljS2V5LCAzMywgNjUsIG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpXG5cbiAgICAgIGFzc2VydC5pc0J1ZmZlcihwcml2YXRlS2V5LCBtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpXG4gICAgICBhc3NlcnQuaXNCdWZmZXJMZW5ndGgocHJpdmF0ZUtleSwgMzIsIG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKVxuXG4gICAgICBjb21wcmVzc2VkID0gaW5pdENvbXByZXNzZWRWYWx1ZShjb21wcmVzc2VkLCB0cnVlKVxuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLmVjZGhVbnNhZmUocHVibGljS2V5LCBwcml2YXRlS2V5LCBjb21wcmVzc2VkKVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8vIFR5cGVFcnJvclxuZXhwb3J0cy5pc0FycmF5ID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IFR5cGVFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAodG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09ICdbb2JqZWN0IEJvb2xlYW5dJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB0aHJvdyBUeXBlRXJyb3IobWVzc2FnZSlcbn1cblxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh0b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgRnVuY3Rpb25dJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNOdW1iZXIgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBOdW1iZXJdJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydHMuaXNPYmplY3QgPSBmdW5jdGlvbiAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBPYmplY3RdJykgdGhyb3cgVHlwZUVycm9yKG1lc3NhZ2UpXG59XG5cbi8vIFJhbmdlRXJyb3JcbmV4cG9ydHMuaXNCdWZmZXJMZW5ndGggPSBmdW5jdGlvbiAoYnVmZmVyLCBsZW5ndGgsIG1lc3NhZ2UpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzQnVmZmVyTGVuZ3RoMiA9IGZ1bmN0aW9uIChidWZmZXIsIGxlbmd0aDEsIGxlbmd0aDIsIG1lc3NhZ2UpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggIT09IGxlbmd0aDEgJiYgYnVmZmVyLmxlbmd0aCAhPT0gbGVuZ3RoMikgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuXG5leHBvcnRzLmlzTGVuZ3RoR1RaZXJvID0gZnVuY3Rpb24gKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHRocm93IFJhbmdlRXJyb3IobWVzc2FnZSlcbn1cblxuZXhwb3J0cy5pc051bWJlckluSW50ZXJ2YWwgPSBmdW5jdGlvbiAobnVtYmVyLCB4LCB5LCBtZXNzYWdlKSB7XG4gIGlmIChudW1iZXIgPD0geCB8fCBudW1iZXIgPj0geSkgdGhyb3cgUmFuZ2VFcnJvcihtZXNzYWdlKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBiaXA2NiA9IHJlcXVpcmUoJ2JpcDY2JylcblxudmFyIEVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEID0gQnVmZmVyLmZyb20oW1xuICAvLyBiZWdpblxuICAweDMwLCAweDgxLCAweGQzLCAweDAyLCAweDAxLCAweDAxLCAweDA0LCAweDIwLFxuICAvLyBwcml2YXRlIGtleVxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAvLyBtaWRkbGVcbiAgMHhhMCwgMHg4MSwgMHg4NSwgMHgzMCwgMHg4MSwgMHg4MiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgzMCwgMHgyYywgMHgwNiwgMHgwNywgMHgyYSwgMHg4NiwgMHg0OCxcbiAgMHhjRSwgMHgzZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmRSwgMHhmZiwgMHhmZiwgMHhmYywgMHgyZiwgMHgzMCwgMHgwNiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwNywgMHgwNCxcbiAgMHgyMSwgMHgwMiwgMHg3OSwgMHhiRSwgMHg2NiwgMHg3RSwgMHhmOSwgMHhkYywgMHhiYiwgMHhhYywgMHg1NSwgMHhhMCwgMHg2MiwgMHg5NSwgMHhjRSwgMHg4NyxcbiAgMHgwYiwgMHgwNywgMHgwMiwgMHg5YiwgMHhmYywgMHhkYiwgMHgyZCwgMHhjRSwgMHgyOCwgMHhkOSwgMHg1OSwgMHhmMiwgMHg4MSwgMHg1YiwgMHgxNiwgMHhmOCxcbiAgMHgxNywgMHg5OCwgMHgwMiwgMHgyMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZixcbiAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmRSwgMHhiYSwgMHhhRSwgMHhkYywgMHhFNiwgMHhhZiwgMHg0OCwgMHhhMCwgMHgzYiwgMHhiZiwgMHhkMiwgMHg1RSxcbiAgMHg4YywgMHhkMCwgMHgzNiwgMHg0MSwgMHg0MSwgMHgwMiwgMHgwMSwgMHgwMSwgMHhhMSwgMHgyNCwgMHgwMywgMHgyMiwgMHgwMCxcbiAgLy8gcHVibGljIGtleVxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuICAweDAwXG5dKVxuXG52YXIgRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRCA9IEJ1ZmZlci5mcm9tKFtcbiAgLy8gYmVnaW5cbiAgMHgzMCwgMHg4MiwgMHgwMSwgMHgxMywgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgyMCxcbiAgLy8gcHJpdmF0ZSBrZXlcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgLy8gbWlkZGxlXG4gIDB4YTAsIDB4ODEsIDB4YTUsIDB4MzAsIDB4ODEsIDB4YTIsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MzAsIDB4MmMsIDB4MDYsIDB4MDcsIDB4MmEsIDB4ODYsIDB4NDgsXG4gIDB4Y0UsIDB4M2QsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZkUsIDB4ZmYsIDB4ZmYsIDB4ZmMsIDB4MmYsIDB4MzAsIDB4MDYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDcsIDB4MDQsXG4gIDB4NDEsIDB4MDQsIDB4NzksIDB4YkUsIDB4NjYsIDB4N0UsIDB4ZjksIDB4ZGMsIDB4YmIsIDB4YWMsIDB4NTUsIDB4YTAsIDB4NjIsIDB4OTUsIDB4Y0UsIDB4ODcsXG4gIDB4MGIsIDB4MDcsIDB4MDIsIDB4OWIsIDB4ZmMsIDB4ZGIsIDB4MmQsIDB4Y0UsIDB4MjgsIDB4ZDksIDB4NTksIDB4ZjIsIDB4ODEsIDB4NWIsIDB4MTYsIDB4ZjgsXG4gIDB4MTcsIDB4OTgsIDB4NDgsIDB4M2EsIDB4ZGEsIDB4NzcsIDB4MjYsIDB4YTMsIDB4YzQsIDB4NjUsIDB4NWQsIDB4YTQsIDB4ZmIsIDB4ZmMsIDB4MEUsIDB4MTEsXG4gIDB4MDgsIDB4YTgsIDB4ZmQsIDB4MTcsIDB4YjQsIDB4NDgsIDB4YTYsIDB4ODUsIDB4NTQsIDB4MTksIDB4OWMsIDB4NDcsIDB4ZDAsIDB4OGYsIDB4ZmIsIDB4MTAsXG4gIDB4ZDQsIDB4YjgsIDB4MDIsIDB4MjEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsXG4gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZkUsIDB4YmEsIDB4YUUsIDB4ZGMsIDB4RTYsIDB4YWYsIDB4NDgsIDB4YTAsIDB4M2IsIDB4YmYsIDB4ZDIsIDB4NUUsXG4gIDB4OGMsIDB4ZDAsIDB4MzYsIDB4NDEsIDB4NDEsIDB4MDIsIDB4MDEsIDB4MDEsIDB4YTEsIDB4NDQsIDB4MDMsIDB4NDIsIDB4MDAsXG4gIC8vIHB1YmxpYyBrZXlcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcbiAgMHgwMFxuXSlcblxuZXhwb3J0cy5wcml2YXRlS2V5RXhwb3J0ID0gZnVuY3Rpb24gKHByaXZhdGVLZXksIHB1YmxpY0tleSwgY29tcHJlc3NlZCkge1xuICB2YXIgcmVzdWx0ID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZCA/IEVDX1BSSVZLRVlfRVhQT1JUX0RFUl9DT01QUkVTU0VEIDogRUNfUFJJVktFWV9FWFBPUlRfREVSX1VOQ09NUFJFU1NFRClcbiAgcHJpdmF0ZUtleS5jb3B5KHJlc3VsdCwgY29tcHJlc3NlZCA/IDggOiA5KVxuICBwdWJsaWNLZXkuY29weShyZXN1bHQsIGNvbXByZXNzZWQgPyAxODEgOiAyMTQpXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5SW1wb3J0ID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGxlbmd0aCA9IHByaXZhdGVLZXkubGVuZ3RoXG5cbiAgLy8gc2VxdWVuY2UgaGVhZGVyXG4gIHZhciBpbmRleCA9IDBcbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgMSB8fCBwcml2YXRlS2V5W2luZGV4XSAhPT0gMHgzMCkgcmV0dXJuXG4gIGluZGV4ICs9IDFcblxuICAvLyBzZXF1ZW5jZSBsZW5ndGggY29uc3RydWN0b3JcbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgMSB8fCAhKHByaXZhdGVLZXlbaW5kZXhdICYgMHg4MCkpIHJldHVyblxuXG4gIHZhciBsZW5iID0gcHJpdmF0ZUtleVtpbmRleF0gJiAweDdmXG4gIGluZGV4ICs9IDFcbiAgaWYgKGxlbmIgPCAxIHx8IGxlbmIgPiAyKSByZXR1cm5cbiAgaWYgKGxlbmd0aCA8IGluZGV4ICsgbGVuYikgcmV0dXJuXG5cbiAgLy8gc2VxdWVuY2UgbGVuZ3RoXG4gIHZhciBsZW4gPSBwcml2YXRlS2V5W2luZGV4ICsgbGVuYiAtIDFdIHwgKGxlbmIgPiAxID8gcHJpdmF0ZUtleVtpbmRleCArIGxlbmIgLSAyXSA8PCA4IDogMClcbiAgaW5kZXggKz0gbGVuYlxuICBpZiAobGVuZ3RoIDwgaW5kZXggKyBsZW4pIHJldHVyblxuXG4gIC8vIHNlcXVlbmNlIGVsZW1lbnQgMDogdmVyc2lvbiBudW1iZXIgKD0xKVxuICBpZiAobGVuZ3RoIDwgaW5kZXggKyAzIHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4XSAhPT0gMHgwMiB8fFxuICAgICAgcHJpdmF0ZUtleVtpbmRleCArIDFdICE9PSAweDAxIHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4ICsgMl0gIT09IDB4MDEpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpbmRleCArPSAzXG5cbiAgLy8gc2VxdWVuY2UgZWxlbWVudCAxOiBvY3RldCBzdHJpbmcsIHVwIHRvIDMyIGJ5dGVzXG4gIGlmIChsZW5ndGggPCBpbmRleCArIDIgfHxcbiAgICAgIHByaXZhdGVLZXlbaW5kZXhdICE9PSAweDA0IHx8XG4gICAgICBwcml2YXRlS2V5W2luZGV4ICsgMV0gPiAweDIwIHx8XG4gICAgICBsZW5ndGggPCBpbmRleCArIDIgKyBwcml2YXRlS2V5W2luZGV4ICsgMV0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHJldHVybiBwcml2YXRlS2V5LnNsaWNlKGluZGV4ICsgMiwgaW5kZXggKyAyICsgcHJpdmF0ZUtleVtpbmRleCArIDFdKVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUV4cG9ydCA9IGZ1bmN0aW9uIChzaWdPYmopIHtcbiAgdmFyIHIgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMF0pLCBzaWdPYmoucl0pXG4gIGZvciAodmFyIGxlblIgPSAzMywgcG9zUiA9IDA7IGxlblIgPiAxICYmIHJbcG9zUl0gPT09IDB4MDAgJiYgIShyW3Bvc1IgKyAxXSAmIDB4ODApOyAtLWxlblIsICsrcG9zUik7XG5cbiAgdmFyIHMgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMF0pLCBzaWdPYmouc10pXG4gIGZvciAodmFyIGxlblMgPSAzMywgcG9zUyA9IDA7IGxlblMgPiAxICYmIHNbcG9zU10gPT09IDB4MDAgJiYgIShzW3Bvc1MgKyAxXSAmIDB4ODApOyAtLWxlblMsICsrcG9zUyk7XG5cbiAgcmV0dXJuIGJpcDY2LmVuY29kZShyLnNsaWNlKHBvc1IpLCBzLnNsaWNlKHBvc1MpKVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydCA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgdmFyIHIgPSBCdWZmZXIuYWxsb2MoMzIsIDApXG4gIHZhciBzID0gQnVmZmVyLmFsbG9jKDMyLCAwKVxuXG4gIHRyeSB7XG4gICAgdmFyIHNpZ09iaiA9IGJpcDY2LmRlY29kZShzaWcpXG4gICAgaWYgKHNpZ09iai5yLmxlbmd0aCA9PT0gMzMgJiYgc2lnT2JqLnJbMF0gPT09IDB4MDApIHNpZ09iai5yID0gc2lnT2JqLnIuc2xpY2UoMSlcbiAgICBpZiAoc2lnT2JqLnIubGVuZ3RoID4gMzIpIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgdG9vIGxvbmcnKVxuICAgIGlmIChzaWdPYmoucy5sZW5ndGggPT09IDMzICYmIHNpZ09iai5zWzBdID09PSAweDAwKSBzaWdPYmoucyA9IHNpZ09iai5zLnNsaWNlKDEpXG4gICAgaWYgKHNpZ09iai5zLmxlbmd0aCA+IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ1MgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBzaWdPYmouci5jb3B5KHIsIDMyIC0gc2lnT2JqLnIubGVuZ3RoKVxuICBzaWdPYmoucy5jb3B5KHMsIDMyIC0gc2lnT2JqLnMubGVuZ3RoKVxuXG4gIHJldHVybiB7IHI6IHIsIHM6IHMgfVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydExheCA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgdmFyIHIgPSBCdWZmZXIuYWxsb2MoMzIsIDApXG4gIHZhciBzID0gQnVmZmVyLmFsbG9jKDMyLCAwKVxuXG4gIHZhciBsZW5ndGggPSBzaWcubGVuZ3RoXG4gIHZhciBpbmRleCA9IDBcblxuICAvLyBzZXF1ZW5jZSB0YWcgYnl0ZVxuICBpZiAoc2lnW2luZGV4KytdICE9PSAweDMwKSByZXR1cm5cblxuICAvLyBzZXF1ZW5jZSBsZW5ndGggYnl0ZVxuICB2YXIgbGVuYnl0ZSA9IHNpZ1tpbmRleCsrXVxuICBpZiAobGVuYnl0ZSAmIDB4ODApIHtcbiAgICBpbmRleCArPSBsZW5ieXRlIC0gMHg4MFxuICAgIGlmIChpbmRleCA+IGxlbmd0aCkgcmV0dXJuXG4gIH1cblxuICAvLyBzZXF1ZW5jZSB0YWcgYnl0ZSBmb3IgclxuICBpZiAoc2lnW2luZGV4KytdICE9PSAweDAyKSByZXR1cm5cblxuICAvLyBsZW5ndGggZm9yIHJcbiAgdmFyIHJsZW4gPSBzaWdbaW5kZXgrK11cbiAgaWYgKHJsZW4gJiAweDgwKSB7XG4gICAgbGVuYnl0ZSA9IHJsZW4gLSAweDgwXG4gICAgaWYgKGluZGV4ICsgbGVuYnl0ZSA+IGxlbmd0aCkgcmV0dXJuXG4gICAgZm9yICg7IGxlbmJ5dGUgPiAwICYmIHNpZ1tpbmRleF0gPT09IDB4MDA7IGluZGV4ICs9IDEsIGxlbmJ5dGUgLT0gMSk7XG4gICAgZm9yIChybGVuID0gMDsgbGVuYnl0ZSA+IDA7IGluZGV4ICs9IDEsIGxlbmJ5dGUgLT0gMSkgcmxlbiA9IChybGVuIDw8IDgpICsgc2lnW2luZGV4XVxuICB9XG4gIGlmIChybGVuID4gbGVuZ3RoIC0gaW5kZXgpIHJldHVyblxuICB2YXIgcmluZGV4ID0gaW5kZXhcbiAgaW5kZXggKz0gcmxlblxuXG4gIC8vIHNlcXVlbmNlIHRhZyBieXRlIGZvciBzXG4gIGlmIChzaWdbaW5kZXgrK10gIT09IDB4MDIpIHJldHVyblxuXG4gIC8vIGxlbmd0aCBmb3Igc1xuICB2YXIgc2xlbiA9IHNpZ1tpbmRleCsrXVxuICBpZiAoc2xlbiAmIDB4ODApIHtcbiAgICBsZW5ieXRlID0gc2xlbiAtIDB4ODBcbiAgICBpZiAoaW5kZXggKyBsZW5ieXRlID4gbGVuZ3RoKSByZXR1cm5cbiAgICBmb3IgKDsgbGVuYnl0ZSA+IDAgJiYgc2lnW2luZGV4XSA9PT0gMHgwMDsgaW5kZXggKz0gMSwgbGVuYnl0ZSAtPSAxKTtcbiAgICBmb3IgKHNsZW4gPSAwOyBsZW5ieXRlID4gMDsgaW5kZXggKz0gMSwgbGVuYnl0ZSAtPSAxKSBzbGVuID0gKHNsZW4gPDwgOCkgKyBzaWdbaW5kZXhdXG4gIH1cbiAgaWYgKHNsZW4gPiBsZW5ndGggLSBpbmRleCkgcmV0dXJuXG4gIHZhciBzaW5kZXggPSBpbmRleFxuICBpbmRleCArPSBzbGVuXG5cbiAgLy8gaWdub3JlIGxlYWRpbmcgemVyb3MgaW4gclxuICBmb3IgKDsgcmxlbiA+IDAgJiYgc2lnW3JpbmRleF0gPT09IDB4MDA7IHJsZW4gLT0gMSwgcmluZGV4ICs9IDEpO1xuICAvLyBjb3B5IHIgdmFsdWVcbiAgaWYgKHJsZW4gPiAzMikgcmV0dXJuXG4gIHZhciBydmFsdWUgPSBzaWcuc2xpY2UocmluZGV4LCByaW5kZXggKyBybGVuKVxuICBydmFsdWUuY29weShyLCAzMiAtIHJ2YWx1ZS5sZW5ndGgpXG5cbiAgLy8gaWdub3JlIGxlYWRpbmcgemVyb3MgaW4gc1xuICBmb3IgKDsgc2xlbiA+IDAgJiYgc2lnW3NpbmRleF0gPT09IDB4MDA7IHNsZW4gLT0gMSwgc2luZGV4ICs9IDEpO1xuICAvLyBjb3B5IHMgdmFsdWVcbiAgaWYgKHNsZW4gPiAzMikgcmV0dXJuXG4gIHZhciBzdmFsdWUgPSBzaWcuc2xpY2Uoc2luZGV4LCBzaW5kZXggKyBzbGVuKVxuICBzdmFsdWUuY29weShzLCAzMiAtIHN2YWx1ZS5sZW5ndGgpXG5cbiAgcmV0dXJuIHsgcjogciwgczogcyB9XG59XG4iLCIvLyBSZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDA2Ni5tZWRpYXdpa2lcbi8vIEZvcm1hdDogMHgzMCBbdG90YWwtbGVuZ3RoXSAweDAyIFtSLWxlbmd0aF0gW1JdIDB4MDIgW1MtbGVuZ3RoXSBbU11cbi8vIE5PVEU6IFNJR0hBU0ggYnl0ZSBpZ25vcmVkIEFORCByZXN0cmljdGVkLCB0cnVuY2F0ZSBiZWZvcmUgdXNlXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG5mdW5jdGlvbiBjaGVjayAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgOCkgcmV0dXJuIGZhbHNlXG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHJldHVybiBmYWxzZVxuICBpZiAoYnVmZmVyWzBdICE9PSAweDMwKSByZXR1cm4gZmFsc2VcbiAgaWYgKGJ1ZmZlclsxXSAhPT0gYnVmZmVyLmxlbmd0aCAtIDIpIHJldHVybiBmYWxzZVxuICBpZiAoYnVmZmVyWzJdICE9PSAweDAyKSByZXR1cm4gZmFsc2VcblxuICB2YXIgbGVuUiA9IGJ1ZmZlclszXVxuICBpZiAobGVuUiA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gIGlmICg1ICsgbGVuUiA+PSBidWZmZXIubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgaWYgKGJ1ZmZlcls0ICsgbGVuUl0gIT09IDB4MDIpIHJldHVybiBmYWxzZVxuXG4gIHZhciBsZW5TID0gYnVmZmVyWzUgKyBsZW5SXVxuICBpZiAobGVuUyA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gIGlmICgoNiArIGxlblIgKyBsZW5TKSAhPT0gYnVmZmVyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgaWYgKGJ1ZmZlcls0XSAmIDB4ODApIHJldHVybiBmYWxzZVxuICBpZiAobGVuUiA+IDEgJiYgKGJ1ZmZlcls0XSA9PT0gMHgwMCkgJiYgIShidWZmZXJbNV0gJiAweDgwKSkgcmV0dXJuIGZhbHNlXG5cbiAgaWYgKGJ1ZmZlcltsZW5SICsgNl0gJiAweDgwKSByZXR1cm4gZmFsc2VcbiAgaWYgKGxlblMgPiAxICYmIChidWZmZXJbbGVuUiArIDZdID09PSAweDAwKSAmJiAhKGJ1ZmZlcltsZW5SICsgN10gJiAweDgwKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGRlY29kZSAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgOCkgdGhyb3cgbmV3IEVycm9yKCdERVIgc2VxdWVuY2UgbGVuZ3RoIGlzIHRvbyBzaG9ydCcpXG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHRocm93IG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGxlbmd0aCBpcyB0b28gbG9uZycpXG4gIGlmIChidWZmZXJbMF0gIT09IDB4MzApIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgREVSIHNlcXVlbmNlJylcbiAgaWYgKGJ1ZmZlclsxXSAhPT0gYnVmZmVyLmxlbmd0aCAtIDIpIHRocm93IG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGxlbmd0aCBpcyBpbnZhbGlkJylcbiAgaWYgKGJ1ZmZlclsyXSAhPT0gMHgwMikgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBERVIgaW50ZWdlcicpXG5cbiAgdmFyIGxlblIgPSBidWZmZXJbM11cbiAgaWYgKGxlblIgPT09IDApIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgemVybycpXG4gIGlmICg1ICsgbGVuUiA+PSBidWZmZXIubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ1IgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgaWYgKGJ1ZmZlcls0ICsgbGVuUl0gIT09IDB4MDIpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgREVSIGludGVnZXIgKDIpJylcblxuICB2YXIgbGVuUyA9IGJ1ZmZlcls1ICsgbGVuUl1cbiAgaWYgKGxlblMgPT09IDApIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgemVybycpXG4gIGlmICgoNiArIGxlblIgKyBsZW5TKSAhPT0gYnVmZmVyLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdTIGxlbmd0aCBpcyBpbnZhbGlkJylcblxuICBpZiAoYnVmZmVyWzRdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdSIHZhbHVlIGlzIG5lZ2F0aXZlJylcbiAgaWYgKGxlblIgPiAxICYmIChidWZmZXJbNF0gPT09IDB4MDApICYmICEoYnVmZmVyWzVdICYgMHg4MCkpIHRocm93IG5ldyBFcnJvcignUiB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKVxuXG4gIGlmIChidWZmZXJbbGVuUiArIDZdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdTIHZhbHVlIGlzIG5lZ2F0aXZlJylcbiAgaWYgKGxlblMgPiAxICYmIChidWZmZXJbbGVuUiArIDZdID09PSAweDAwKSAmJiAhKGJ1ZmZlcltsZW5SICsgN10gJiAweDgwKSkgdGhyb3cgbmV3IEVycm9yKCdTIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZCcpXG5cbiAgLy8gbm9uLUJJUDY2IC0gZXh0cmFjdCBSLCBTIHZhbHVlc1xuICByZXR1cm4ge1xuICAgIHI6IGJ1ZmZlci5zbGljZSg0LCA0ICsgbGVuUiksXG4gICAgczogYnVmZmVyLnNsaWNlKDYgKyBsZW5SKVxuICB9XG59XG5cbi8qXG4gKiBFeHBlY3RzIHIgYW5kIHMgdG8gYmUgcG9zaXRpdmUgREVSIGludGVnZXJzLlxuICpcbiAqIFRoZSBERVIgZm9ybWF0IHVzZXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGFzIGEgc2lnbiBiaXQgKCYgMHg4MCkuXG4gKiBJZiB0aGUgc2lnbmlmaWNhbnQgYml0IGlzIHNldCBBTkQgdGhlIGludGVnZXIgaXMgcG9zaXRpdmUsIGEgMHgwMCBpcyBwcmVwZW5kZWQuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICAwID0+ICAgICAweDAwXG4gKiAgICAgIDEgPT4gICAgIDB4MDFcbiAqICAgICAtMSA9PiAgICAgMHhmZlxuICogICAgMTI3ID0+ICAgICAweDdmXG4gKiAgIC0xMjcgPT4gICAgIDB4ODFcbiAqICAgIDEyOCA9PiAgIDB4MDA4MFxuICogICAtMTI4ID0+ICAgICAweDgwXG4gKiAgICAyNTUgPT4gICAweDAwZmZcbiAqICAgLTI1NSA9PiAgIDB4ZmYwMVxuICogIDE2MzAwID0+ICAgMHgzZmFjXG4gKiAtMTYzMDAgPT4gICAweGMwNTRcbiAqICA2MjMwMCA9PiAweDAwZjM1Y1xuICogLTYyMzAwID0+IDB4ZmYwY2E0XG4qL1xuZnVuY3Rpb24gZW5jb2RlIChyLCBzKSB7XG4gIHZhciBsZW5SID0gci5sZW5ndGhcbiAgdmFyIGxlblMgPSBzLmxlbmd0aFxuICBpZiAobGVuUiA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSIGxlbmd0aCBpcyB6ZXJvJylcbiAgaWYgKGxlblMgPT09IDApIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgemVybycpXG4gIGlmIChsZW5SID4gMzMpIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgdG9vIGxvbmcnKVxuICBpZiAobGVuUyA+IDMzKSB0aHJvdyBuZXcgRXJyb3IoJ1MgbGVuZ3RoIGlzIHRvbyBsb25nJylcbiAgaWYgKHJbMF0gJiAweDgwKSB0aHJvdyBuZXcgRXJyb3IoJ1IgdmFsdWUgaXMgbmVnYXRpdmUnKVxuICBpZiAoc1swXSAmIDB4ODApIHRocm93IG5ldyBFcnJvcignUyB2YWx1ZSBpcyBuZWdhdGl2ZScpXG4gIGlmIChsZW5SID4gMSAmJiAoclswXSA9PT0gMHgwMCkgJiYgIShyWzFdICYgMHg4MCkpIHRocm93IG5ldyBFcnJvcignUiB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKVxuICBpZiAobGVuUyA+IDEgJiYgKHNbMF0gPT09IDB4MDApICYmICEoc1sxXSAmIDB4ODApKSB0aHJvdyBuZXcgRXJyb3IoJ1MgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJylcblxuICB2YXIgc2lnbmF0dXJlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDYgKyBsZW5SICsgbGVuUylcblxuICAvLyAweDMwIFt0b3RhbC1sZW5ndGhdIDB4MDIgW1ItbGVuZ3RoXSBbUl0gMHgwMiBbUy1sZW5ndGhdIFtTXVxuICBzaWduYXR1cmVbMF0gPSAweDMwXG4gIHNpZ25hdHVyZVsxXSA9IHNpZ25hdHVyZS5sZW5ndGggLSAyXG4gIHNpZ25hdHVyZVsyXSA9IDB4MDJcbiAgc2lnbmF0dXJlWzNdID0gci5sZW5ndGhcbiAgci5jb3B5KHNpZ25hdHVyZSwgNClcbiAgc2lnbmF0dXJlWzQgKyBsZW5SXSA9IDB4MDJcbiAgc2lnbmF0dXJlWzUgKyBsZW5SXSA9IHMubGVuZ3RoXG4gIHMuY29weShzaWduYXR1cmUsIDYgKyBsZW5SKVxuXG4gIHJldHVybiBzaWduYXR1cmVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNoZWNrOiBjaGVjayxcbiAgZGVjb2RlOiBkZWNvZGUsXG4gIGVuY29kZTogZW5jb2RlXG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgRUMgPSByZXF1aXJlKCdlbGxpcHRpYycpLmVjXG5cbnZhciBtZXNzYWdlcyA9IHJlcXVpcmUoJy4uL21lc3NhZ2VzLmpzb24nKVxuXG52YXIgZWMgPSBuZXcgRUMoJ3NlY3AyNTZrMScpXG52YXIgZWNwYXJhbXMgPSBlYy5jdXJ2ZVxuXG5mdW5jdGlvbiBsb2FkQ29tcHJlc3NlZFB1YmxpY0tleSAoZmlyc3QsIHhCdWZmZXIpIHtcbiAgdmFyIHggPSBuZXcgQk4oeEJ1ZmZlcilcblxuICAvLyBvdmVyZmxvd1xuICBpZiAoeC5jbXAoZWNwYXJhbXMucCkgPj0gMCkgcmV0dXJuIG51bGxcbiAgeCA9IHgudG9SZWQoZWNwYXJhbXMucmVkKVxuXG4gIC8vIGNvbXB1dGUgY29ycmVzcG9uZGluZyBZXG4gIHZhciB5ID0geC5yZWRTcXIoKS5yZWRJTXVsKHgpLnJlZElBZGQoZWNwYXJhbXMuYikucmVkU3FydCgpXG4gIGlmICgoZmlyc3QgPT09IDB4MDMpICE9PSB5LmlzT2RkKCkpIHkgPSB5LnJlZE5lZygpXG5cbiAgcmV0dXJuIGVjLmtleVBhaXIoeyBwdWI6IHsgeDogeCwgeTogeSB9IH0pXG59XG5cbmZ1bmN0aW9uIGxvYWRVbmNvbXByZXNzZWRQdWJsaWNLZXkgKGZpcnN0LCB4QnVmZmVyLCB5QnVmZmVyKSB7XG4gIHZhciB4ID0gbmV3IEJOKHhCdWZmZXIpXG4gIHZhciB5ID0gbmV3IEJOKHlCdWZmZXIpXG5cbiAgLy8gb3ZlcmZsb3dcbiAgaWYgKHguY21wKGVjcGFyYW1zLnApID49IDAgfHwgeS5jbXAoZWNwYXJhbXMucCkgPj0gMCkgcmV0dXJuIG51bGxcblxuICB4ID0geC50b1JlZChlY3BhcmFtcy5yZWQpXG4gIHkgPSB5LnRvUmVkKGVjcGFyYW1zLnJlZClcblxuICAvLyBpcyBvZGQgZmxhZ1xuICBpZiAoKGZpcnN0ID09PSAweDA2IHx8IGZpcnN0ID09PSAweDA3KSAmJiB5LmlzT2RkKCkgIT09IChmaXJzdCA9PT0gMHgwNykpIHJldHVybiBudWxsXG5cbiAgLy8geCp4KnggKyBiID0geSp5XG4gIHZhciB4MyA9IHgucmVkU3FyKCkucmVkSU11bCh4KVxuICBpZiAoIXkucmVkU3FyKCkucmVkSVN1Yih4My5yZWRJQWRkKGVjcGFyYW1zLmIpKS5pc1plcm8oKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gZWMua2V5UGFpcih7IHB1YjogeyB4OiB4LCB5OiB5IH0gfSlcbn1cblxuZnVuY3Rpb24gbG9hZFB1YmxpY0tleSAocHVibGljS2V5KSB7XG4gIHZhciBmaXJzdCA9IHB1YmxpY0tleVswXVxuICBzd2l0Y2ggKGZpcnN0KSB7XG4gICAgY2FzZSAweDAyOlxuICAgIGNhc2UgMHgwMzpcbiAgICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSAzMykgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBsb2FkQ29tcHJlc3NlZFB1YmxpY0tleShmaXJzdCwgcHVibGljS2V5LnNsaWNlKDEsIDMzKSlcbiAgICBjYXNlIDB4MDQ6XG4gICAgY2FzZSAweDA2OlxuICAgIGNhc2UgMHgwNzpcbiAgICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSA2NSkgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBsb2FkVW5jb21wcmVzc2VkUHVibGljS2V5KGZpcnN0LCBwdWJsaWNLZXkuc2xpY2UoMSwgMzMpLCBwdWJsaWNLZXkuc2xpY2UoMzMsIDY1KSlcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlWZXJpZnkgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSkge1xuICB2YXIgYm4gPSBuZXcgQk4ocHJpdmF0ZUtleSlcbiAgcmV0dXJuIGJuLmNtcChlY3BhcmFtcy5uKSA8IDAgJiYgIWJuLmlzWmVybygpXG59XG5cbmV4cG9ydHMucHJpdmF0ZUtleUV4cG9ydCA9IGZ1bmN0aW9uIChwcml2YXRlS2V5LCBjb21wcmVzc2VkKSB7XG4gIHZhciBkID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIGlmIChkLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IGQuaXNaZXJvKCkpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9FWFBPUlRfREVSX0ZBSUwpXG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVjLmtleUZyb21Qcml2YXRlKHByaXZhdGVLZXkpLmdldFB1YmxpYyhjb21wcmVzc2VkLCB0cnVlKSlcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5TmVnYXRlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGJuID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIHJldHVybiBibi5pc1plcm8oKSA/IEJ1ZmZlci5hbGxvYygzMikgOiBlY3BhcmFtcy5uLnN1YihibikudW1vZChlY3BhcmFtcy5uKS50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlNb2RJbnZlcnNlID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgdmFyIGJuID0gbmV3IEJOKHByaXZhdGVLZXkpXG4gIGlmIChibi5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1JBTkdFX0lOVkFMSUQpXG5cbiAgcmV0dXJuIGJuLmludm0oZWNwYXJhbXMubikudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcbn1cblxuZXhwb3J0cy5wcml2YXRlS2V5VHdlYWtBZGQgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSwgdHdlYWspIHtcbiAgdmFyIGJuID0gbmV3IEJOKHR3ZWFrKVxuICBpZiAoYm4uY21wKGVjcGFyYW1zLm4pID49IDApIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QUklWQVRFX0tFWV9UV0VBS19BRERfRkFJTClcblxuICBibi5pYWRkKG5ldyBCTihwcml2YXRlS2V5KSlcbiAgaWYgKGJuLmNtcChlY3BhcmFtcy5uKSA+PSAwKSBibi5pc3ViKGVjcGFyYW1zLm4pXG4gIGlmIChibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHJldHVybiBibi50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxufVxuXG5leHBvcnRzLnByaXZhdGVLZXlUd2Vha011bCA9IGZ1bmN0aW9uIChwcml2YXRlS2V5LCB0d2Vhaykge1xuICB2YXIgYm4gPSBuZXcgQk4odHdlYWspXG4gIGlmIChibi5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBibi5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BSSVZBVEVfS0VZX1RXRUFLX01VTF9GQUlMKVxuXG4gIGJuLmltdWwobmV3IEJOKHByaXZhdGVLZXkpKVxuICBpZiAoYm4uY21wKGVjcGFyYW1zLm4pKSBibiA9IGJuLnVtb2QoZWNwYXJhbXMubilcblxuICByZXR1cm4gYm4udG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlDcmVhdGUgPSBmdW5jdGlvbiAocHJpdmF0ZUtleSwgY29tcHJlc3NlZCkge1xuICB2YXIgZCA9IG5ldyBCTihwcml2YXRlS2V5KVxuICBpZiAoZC5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBkLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9DUkVBVEVfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20oZWMua2V5RnJvbVByaXZhdGUocHJpdmF0ZUtleSkuZ2V0UHVibGljKGNvbXByZXNzZWQsIHRydWUpKVxufVxuXG5leHBvcnRzLnB1YmxpY0tleUNvbnZlcnQgPSBmdW5jdGlvbiAocHVibGljS2V5LCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlyID0gbG9hZFB1YmxpY0tleShwdWJsaWNLZXkpXG4gIGlmIChwYWlyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwYWlyLmdldFB1YmxpYyhjb21wcmVzc2VkLCB0cnVlKSlcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlWZXJpZnkgPSBmdW5jdGlvbiAocHVibGljS2V5KSB7XG4gIHJldHVybiBsb2FkUHVibGljS2V5KHB1YmxpY0tleSkgIT09IG51bGxcbn1cblxuZXhwb3J0cy5wdWJsaWNLZXlUd2Vha0FkZCA9IGZ1bmN0aW9uIChwdWJsaWNLZXksIHR3ZWFrLCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlyID0gbG9hZFB1YmxpY0tleShwdWJsaWNLZXkpXG4gIGlmIChwYWlyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuXG4gIHR3ZWFrID0gbmV3IEJOKHR3ZWFrKVxuICBpZiAodHdlYWsuY21wKGVjcGFyYW1zLm4pID49IDApIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHZhciBwb2ludCA9IGVjcGFyYW1zLmcubXVsKHR3ZWFrKS5hZGQocGFpci5wdWIpXG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1RXRUFLX0FERF9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMucHVibGljS2V5VHdlYWtNdWwgPSBmdW5jdGlvbiAocHVibGljS2V5LCB0d2VhaywgY29tcHJlc3NlZCkge1xuICB2YXIgcGFpciA9IGxvYWRQdWJsaWNLZXkocHVibGljS2V5KVxuICBpZiAocGFpciA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfUEFSU0VfRkFJTClcblxuICB0d2VhayA9IG5ldyBCTih0d2VhaylcbiAgaWYgKHR3ZWFrLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IHR3ZWFrLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9UV0VBS19NVUxfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20ocGFpci5wdWIubXVsKHR3ZWFrKS5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMucHVibGljS2V5Q29tYmluZSA9IGZ1bmN0aW9uIChwdWJsaWNLZXlzLCBjb21wcmVzc2VkKSB7XG4gIHZhciBwYWlycyA9IG5ldyBBcnJheShwdWJsaWNLZXlzLmxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwdWJsaWNLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgcGFpcnNbaV0gPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleXNbaV0pXG4gICAgaWYgKHBhaXJzW2ldID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKVxuICB9XG5cbiAgdmFyIHBvaW50ID0gcGFpcnNbMF0ucHViXG4gIGZvciAodmFyIGogPSAxOyBqIDwgcGFpcnMubGVuZ3RoOyArK2opIHBvaW50ID0gcG9pbnQuYWRkKHBhaXJzW2pdLnB1YilcbiAgaWYgKHBvaW50LmlzSW5maW5pdHkoKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDX1BVQkxJQ19LRVlfQ09NQklORV9GQUlMKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG59XG5cbmV4cG9ydHMuc2lnbmF0dXJlTm9ybWFsaXplID0gZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICB2YXIgciA9IG5ldyBCTihzaWduYXR1cmUuc2xpY2UoMCwgMzIpKVxuICB2YXIgcyA9IG5ldyBCTihzaWduYXR1cmUuc2xpY2UoMzIsIDY0KSlcbiAgaWYgKHIuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgcy5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuXG4gIHZhciByZXN1bHQgPSBCdWZmZXIuZnJvbShzaWduYXR1cmUpXG4gIGlmIChzLmNtcChlYy5uaCkgPT09IDEpIGVjcGFyYW1zLm4uc3ViKHMpLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgMzIpLmNvcHkocmVzdWx0LCAzMilcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydHMuc2lnbmF0dXJlRXhwb3J0ID0gZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICB2YXIgciA9IHNpZ25hdHVyZS5zbGljZSgwLCAzMilcbiAgdmFyIHMgPSBzaWduYXR1cmUuc2xpY2UoMzIsIDY0KVxuICBpZiAobmV3IEJOKHIpLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IG5ldyBCTihzKS5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuXG4gIHJldHVybiB7IHI6IHIsIHM6IHMgfVxufVxuXG5leHBvcnRzLnNpZ25hdHVyZUltcG9ydCA9IGZ1bmN0aW9uIChzaWdPYmopIHtcbiAgdmFyIHIgPSBuZXcgQk4oc2lnT2JqLnIpXG4gIGlmIChyLmNtcChlY3BhcmFtcy5uKSA+PSAwKSByID0gbmV3IEJOKDApXG5cbiAgdmFyIHMgPSBuZXcgQk4oc2lnT2JqLnMpXG4gIGlmIChzLmNtcChlY3BhcmFtcy5uKSA+PSAwKSBzID0gbmV3IEJOKDApXG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIHIudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMiksXG4gICAgcy50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKVxuICBdKVxufVxuXG5leHBvcnRzLnNpZ24gPSBmdW5jdGlvbiAobWVzc2FnZSwgcHJpdmF0ZUtleSwgbm9uY2VmbiwgZGF0YSkge1xuICBpZiAodHlwZW9mIG5vbmNlZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZ2V0Tm9uY2UgPSBub25jZWZuXG4gICAgbm9uY2VmbiA9IGZ1bmN0aW9uIChjb3VudGVyKSB7XG4gICAgICB2YXIgbm9uY2UgPSBnZXROb25jZShtZXNzYWdlLCBwcml2YXRlS2V5LCBudWxsLCBkYXRhLCBjb3VudGVyKVxuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobm9uY2UpIHx8IG5vbmNlLmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9TSUdOX0ZBSUwpXG5cbiAgICAgIHJldHVybiBuZXcgQk4obm9uY2UpXG4gICAgfVxuICB9XG5cbiAgdmFyIGQgPSBuZXcgQk4ocHJpdmF0ZUtleSlcbiAgaWYgKGQuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgZC5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05fRkFJTClcblxuICB2YXIgcmVzdWx0ID0gZWMuc2lnbihtZXNzYWdlLCBwcml2YXRlS2V5LCB7IGNhbm9uaWNhbDogdHJ1ZSwgazogbm9uY2VmbiwgcGVyczogZGF0YSB9KVxuICByZXR1cm4ge1xuICAgIHNpZ25hdHVyZTogQnVmZmVyLmNvbmNhdChbXG4gICAgICByZXN1bHQuci50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIDMyKSxcbiAgICAgIHJlc3VsdC5zLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgMzIpXG4gICAgXSksXG4gICAgcmVjb3Zlcnk6IHJlc3VsdC5yZWNvdmVyeVBhcmFtXG4gIH1cbn1cblxuZXhwb3J0cy52ZXJpZnkgPSBmdW5jdGlvbiAobWVzc2FnZSwgc2lnbmF0dXJlLCBwdWJsaWNLZXkpIHtcbiAgdmFyIHNpZ09iaiA9IHsgcjogc2lnbmF0dXJlLnNsaWNlKDAsIDMyKSwgczogc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkgfVxuXG4gIHZhciBzaWdyID0gbmV3IEJOKHNpZ09iai5yKVxuICB2YXIgc2lncyA9IG5ldyBCTihzaWdPYmoucylcbiAgaWYgKHNpZ3IuY21wKGVjcGFyYW1zLm4pID49IDAgfHwgc2lncy5jbXAoZWNwYXJhbXMubikgPj0gMCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKVxuICBpZiAoc2lncy5jbXAoZWMubmgpID09PSAxIHx8IHNpZ3IuaXNaZXJvKCkgfHwgc2lncy5pc1plcm8oKSkgcmV0dXJuIGZhbHNlXG5cbiAgdmFyIHBhaXIgPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleSlcbiAgaWYgKHBhaXIgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpXG5cbiAgcmV0dXJuIGVjLnZlcmlmeShtZXNzYWdlLCBzaWdPYmosIHsgeDogcGFpci5wdWIueCwgeTogcGFpci5wdWIueSB9KVxufVxuXG5leHBvcnRzLnJlY292ZXIgPSBmdW5jdGlvbiAobWVzc2FnZSwgc2lnbmF0dXJlLCByZWNvdmVyeSwgY29tcHJlc3NlZCkge1xuICB2YXIgc2lnT2JqID0geyByOiBzaWduYXR1cmUuc2xpY2UoMCwgMzIpLCBzOiBzaWduYXR1cmUuc2xpY2UoMzIsIDY0KSB9XG5cbiAgdmFyIHNpZ3IgPSBuZXcgQk4oc2lnT2JqLnIpXG4gIHZhciBzaWdzID0gbmV3IEJOKHNpZ09iai5zKVxuICBpZiAoc2lnci5jbXAoZWNwYXJhbXMubikgPj0gMCB8fCBzaWdzLmNtcChlY3BhcmFtcy5uKSA+PSAwKSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0ZBSUwpXG5cbiAgdHJ5IHtcbiAgICBpZiAoc2lnci5pc1plcm8oKSB8fCBzaWdzLmlzWmVybygpKSB0aHJvdyBuZXcgRXJyb3IoKVxuXG4gICAgdmFyIHBvaW50ID0gZWMucmVjb3ZlclB1YktleShtZXNzYWdlLCBzaWdPYmosIHJlY292ZXJ5KVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShwb2ludC5lbmNvZGUodHJ1ZSwgY29tcHJlc3NlZCkpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ0RTQV9SRUNPVkVSX0ZBSUwpXG4gIH1cbn1cblxuZXhwb3J0cy5lY2RoID0gZnVuY3Rpb24gKHB1YmxpY0tleSwgcHJpdmF0ZUtleSkge1xuICB2YXIgc2hhcmVkID0gZXhwb3J0cy5lY2RoVW5zYWZlKHB1YmxpY0tleSwgcHJpdmF0ZUtleSwgdHJ1ZSlcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzaGFyZWQpLmRpZ2VzdCgpXG59XG5cbmV4cG9ydHMuZWNkaFVuc2FmZSA9IGZ1bmN0aW9uIChwdWJsaWNLZXksIHByaXZhdGVLZXksIGNvbXByZXNzZWQpIHtcbiAgdmFyIHBhaXIgPSBsb2FkUHVibGljS2V5KHB1YmxpY0tleSlcbiAgaWYgKHBhaXIgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcihtZXNzYWdlcy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpXG5cbiAgdmFyIHNjYWxhciA9IG5ldyBCTihwcml2YXRlS2V5KVxuICBpZiAoc2NhbGFyLmNtcChlY3BhcmFtcy5uKSA+PSAwIHx8IHNjYWxhci5pc1plcm8oKSkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzLkVDREhfRkFJTClcblxuICByZXR1cm4gQnVmZmVyLmZyb20ocGFpci5wdWIubXVsKHNjYWxhcikuZW5jb2RlKHRydWUsIGNvbXByZXNzZWQpKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaEJhc2UgPSByZXF1aXJlKCdoYXNoLWJhc2UnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBBUlJBWTE2ID0gbmV3IEFycmF5KDE2KVxuXG5mdW5jdGlvbiBNRDUgKCkge1xuICBIYXNoQmFzZS5jYWxsKHRoaXMsIDY0KVxuXG4gIC8vIHN0YXRlXG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG59XG5cbmluaGVyaXRzKE1ENSwgSGFzaEJhc2UpXG5cbk1ENS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIE0gPSBBUlJBWTE2XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgTVtpXSA9IHRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKGkgKiA0KVxuXG4gIHZhciBhID0gdGhpcy5fYVxuICB2YXIgYiA9IHRoaXMuX2JcbiAgdmFyIGMgPSB0aGlzLl9jXG4gIHZhciBkID0gdGhpcy5fZFxuXG4gIGEgPSBmbkYoYSwgYiwgYywgZCwgTVswXSwgMHhkNzZhYTQ3OCwgNylcbiAgZCA9IGZuRihkLCBhLCBiLCBjLCBNWzFdLCAweGU4YzdiNzU2LCAxMilcbiAgYyA9IGZuRihjLCBkLCBhLCBiLCBNWzJdLCAweDI0MjA3MGRiLCAxNylcbiAgYiA9IGZuRihiLCBjLCBkLCBhLCBNWzNdLCAweGMxYmRjZWVlLCAyMilcbiAgYSA9IGZuRihhLCBiLCBjLCBkLCBNWzRdLCAweGY1N2MwZmFmLCA3KVxuICBkID0gZm5GKGQsIGEsIGIsIGMsIE1bNV0sIDB4NDc4N2M2MmEsIDEyKVxuICBjID0gZm5GKGMsIGQsIGEsIGIsIE1bNl0sIDB4YTgzMDQ2MTMsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bN10sIDB4ZmQ0Njk1MDEsIDIyKVxuICBhID0gZm5GKGEsIGIsIGMsIGQsIE1bOF0sIDB4Njk4MDk4ZDgsIDcpXG4gIGQgPSBmbkYoZCwgYSwgYiwgYywgTVs5XSwgMHg4YjQ0ZjdhZiwgMTIpXG4gIGMgPSBmbkYoYywgZCwgYSwgYiwgTVsxMF0sIDB4ZmZmZjViYjEsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bMTFdLCAweDg5NWNkN2JlLCAyMilcbiAgYSA9IGZuRihhLCBiLCBjLCBkLCBNWzEyXSwgMHg2YjkwMTEyMiwgNylcbiAgZCA9IGZuRihkLCBhLCBiLCBjLCBNWzEzXSwgMHhmZDk4NzE5MywgMTIpXG4gIGMgPSBmbkYoYywgZCwgYSwgYiwgTVsxNF0sIDB4YTY3OTQzOGUsIDE3KVxuICBiID0gZm5GKGIsIGMsIGQsIGEsIE1bMTVdLCAweDQ5YjQwODIxLCAyMilcblxuICBhID0gZm5HKGEsIGIsIGMsIGQsIE1bMV0sIDB4ZjYxZTI1NjIsIDUpXG4gIGQgPSBmbkcoZCwgYSwgYiwgYywgTVs2XSwgMHhjMDQwYjM0MCwgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzExXSwgMHgyNjVlNWE1MSwgMTQpXG4gIGIgPSBmbkcoYiwgYywgZCwgYSwgTVswXSwgMHhlOWI2YzdhYSwgMjApXG4gIGEgPSBmbkcoYSwgYiwgYywgZCwgTVs1XSwgMHhkNjJmMTA1ZCwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzEwXSwgMHgwMjQ0MTQ1MywgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzE1XSwgMHhkOGExZTY4MSwgMTQpXG4gIGIgPSBmbkcoYiwgYywgZCwgYSwgTVs0XSwgMHhlN2QzZmJjOCwgMjApXG4gIGEgPSBmbkcoYSwgYiwgYywgZCwgTVs5XSwgMHgyMWUxY2RlNiwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzE0XSwgMHhjMzM3MDdkNiwgOSlcbiAgYyA9IGZuRyhjLCBkLCBhLCBiLCBNWzNdLCAweGY0ZDUwZDg3LCAxNClcbiAgYiA9IGZuRyhiLCBjLCBkLCBhLCBNWzhdLCAweDQ1NWExNGVkLCAyMClcbiAgYSA9IGZuRyhhLCBiLCBjLCBkLCBNWzEzXSwgMHhhOWUzZTkwNSwgNSlcbiAgZCA9IGZuRyhkLCBhLCBiLCBjLCBNWzJdLCAweGZjZWZhM2Y4LCA5KVxuICBjID0gZm5HKGMsIGQsIGEsIGIsIE1bN10sIDB4Njc2ZjAyZDksIDE0KVxuICBiID0gZm5HKGIsIGMsIGQsIGEsIE1bMTJdLCAweDhkMmE0YzhhLCAyMClcblxuICBhID0gZm5IKGEsIGIsIGMsIGQsIE1bNV0sIDB4ZmZmYTM5NDIsIDQpXG4gIGQgPSBmbkgoZCwgYSwgYiwgYywgTVs4XSwgMHg4NzcxZjY4MSwgMTEpXG4gIGMgPSBmbkgoYywgZCwgYSwgYiwgTVsxMV0sIDB4NmQ5ZDYxMjIsIDE2KVxuICBiID0gZm5IKGIsIGMsIGQsIGEsIE1bMTRdLCAweGZkZTUzODBjLCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzFdLCAweGE0YmVlYTQ0LCA0KVxuICBkID0gZm5IKGQsIGEsIGIsIGMsIE1bNF0sIDB4NGJkZWNmYTksIDExKVxuICBjID0gZm5IKGMsIGQsIGEsIGIsIE1bN10sIDB4ZjZiYjRiNjAsIDE2KVxuICBiID0gZm5IKGIsIGMsIGQsIGEsIE1bMTBdLCAweGJlYmZiYzcwLCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzEzXSwgMHgyODliN2VjNiwgNClcbiAgZCA9IGZuSChkLCBhLCBiLCBjLCBNWzBdLCAweGVhYTEyN2ZhLCAxMSlcbiAgYyA9IGZuSChjLCBkLCBhLCBiLCBNWzNdLCAweGQ0ZWYzMDg1LCAxNilcbiAgYiA9IGZuSChiLCBjLCBkLCBhLCBNWzZdLCAweDA0ODgxZDA1LCAyMylcbiAgYSA9IGZuSChhLCBiLCBjLCBkLCBNWzldLCAweGQ5ZDRkMDM5LCA0KVxuICBkID0gZm5IKGQsIGEsIGIsIGMsIE1bMTJdLCAweGU2ZGI5OWU1LCAxMSlcbiAgYyA9IGZuSChjLCBkLCBhLCBiLCBNWzE1XSwgMHgxZmEyN2NmOCwgMTYpXG4gIGIgPSBmbkgoYiwgYywgZCwgYSwgTVsyXSwgMHhjNGFjNTY2NSwgMjMpXG5cbiAgYSA9IGZuSShhLCBiLCBjLCBkLCBNWzBdLCAweGY0MjkyMjQ0LCA2KVxuICBkID0gZm5JKGQsIGEsIGIsIGMsIE1bN10sIDB4NDMyYWZmOTcsIDEwKVxuICBjID0gZm5JKGMsIGQsIGEsIGIsIE1bMTRdLCAweGFiOTQyM2E3LCAxNSlcbiAgYiA9IGZuSShiLCBjLCBkLCBhLCBNWzVdLCAweGZjOTNhMDM5LCAyMSlcbiAgYSA9IGZuSShhLCBiLCBjLCBkLCBNWzEyXSwgMHg2NTViNTljMywgNilcbiAgZCA9IGZuSShkLCBhLCBiLCBjLCBNWzNdLCAweDhmMGNjYzkyLCAxMClcbiAgYyA9IGZuSShjLCBkLCBhLCBiLCBNWzEwXSwgMHhmZmVmZjQ3ZCwgMTUpXG4gIGIgPSBmbkkoYiwgYywgZCwgYSwgTVsxXSwgMHg4NTg0NWRkMSwgMjEpXG4gIGEgPSBmbkkoYSwgYiwgYywgZCwgTVs4XSwgMHg2ZmE4N2U0ZiwgNilcbiAgZCA9IGZuSShkLCBhLCBiLCBjLCBNWzE1XSwgMHhmZTJjZTZlMCwgMTApXG4gIGMgPSBmbkkoYywgZCwgYSwgYiwgTVs2XSwgMHhhMzAxNDMxNCwgMTUpXG4gIGIgPSBmbkkoYiwgYywgZCwgYSwgTVsxM10sIDB4NGUwODExYTEsIDIxKVxuICBhID0gZm5JKGEsIGIsIGMsIGQsIE1bNF0sIDB4Zjc1MzdlODIsIDYpXG4gIGQgPSBmbkkoZCwgYSwgYiwgYywgTVsxMV0sIDB4YmQzYWYyMzUsIDEwKVxuICBjID0gZm5JKGMsIGQsIGEsIGIsIE1bMl0sIDB4MmFkN2QyYmIsIDE1KVxuICBiID0gZm5JKGIsIGMsIGQsIGEsIE1bOV0sIDB4ZWI4NmQzOTEsIDIxKVxuXG4gIHRoaXMuX2EgPSAodGhpcy5fYSArIGEpIHwgMFxuICB0aGlzLl9iID0gKHRoaXMuX2IgKyBiKSB8IDBcbiAgdGhpcy5fYyA9ICh0aGlzLl9jICsgYykgfCAwXG4gIHRoaXMuX2QgPSAodGhpcy5fZCArIGQpIHwgMFxufVxuXG5NRDUucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGNyZWF0ZSBwYWRkaW5nIGFuZCBoYW5kbGUgYmxvY2tzXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdID0gMHg4MFxuICBpZiAodGhpcy5fYmxvY2tPZmZzZXQgPiA1Nikge1xuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fYmxvY2tPZmZzZXQsIDY0KVxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gICAgdGhpcy5fYmxvY2tPZmZzZXQgPSAwXG4gIH1cblxuICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2Jsb2NrT2Zmc2V0LCA1NilcbiAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sIDU2KVxuICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSwgNjApXG4gIHRoaXMuX3VwZGF0ZSgpXG5cbiAgLy8gcHJvZHVjZSByZXN1bHRcbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNilcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9hLCAwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2IsIDQpXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYywgOClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9kLCAxMilcbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiByb3RsICh4LCBuKSB7XG4gIHJldHVybiAoeCA8PCBuKSB8ICh4ID4+PiAoMzIgLSBuKSlcbn1cblxuZnVuY3Rpb24gZm5GIChhLCBiLCBjLCBkLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGMpIHwgKCh+YikgJiBkKSkgKyBtICsgaykgfCAwLCBzKSArIGIpIHwgMFxufVxuXG5mdW5jdGlvbiBmbkcgKGEsIGIsIGMsIGQsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiICYgZCkgfCAoYyAmICh+ZCkpKSArIG0gKyBrKSB8IDAsIHMpICsgYikgfCAwXG59XG5cbmZ1bmN0aW9uIGZuSCAoYSwgYiwgYywgZCwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoYiBeIGMgXiBkKSArIG0gKyBrKSB8IDAsIHMpICsgYikgfCAwXG59XG5cbmZ1bmN0aW9uIGZuSSAoYSwgYiwgYywgZCwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGMgXiAoYiB8ICh+ZCkpKSkgKyBtICsgaykgfCAwLCBzKSArIGIpIHwgMFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1ENVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzO1xuZXhwb3J0cy5SZWFkYWJsZSA9IGV4cG9ydHM7XG5leHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuZXhwb3J0cy5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcycpO1xuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbmV4cG9ydHMuZmluaXNoZWQgPSByZXF1aXJlKCcuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanMnKTtcbmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJ2J1ZmZlcicpLFxuICAgIEJ1ZmZlciA9IF9yZXF1aXJlLkJ1ZmZlcjtcblxudmFyIF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3V0aWwnKSxcbiAgICBpbnNwZWN0ID0gX3JlcXVpcmUyLmluc3BlY3Q7XG5cbnZhciBjdXN0b20gPSBpbnNwZWN0ICYmIGluc3BlY3QuY3VzdG9tIHx8ICdpbnNwZWN0JztcblxuZnVuY3Rpb24gY29weUJ1ZmZlcihzcmMsIHRhcmdldCwgb2Zmc2V0KSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuY29weS5jYWxsKHNyYywgdGFyZ2V0LCBvZmZzZXQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJ1ZmZlckxpc3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1ZmZlckxpc3QpO1xuXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhCdWZmZXJMaXN0LCBbe1xuICAgIGtleTogXCJwdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2godikge1xuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgICBkYXRhOiB2LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICAgdGhpcy50YWlsID0gZW50cnk7XG4gICAgICArK3RoaXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnNoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuc2hpZnQodikge1xuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgICBkYXRhOiB2LFxuICAgICAgICBuZXh0OiB0aGlzLmhlYWRcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICArK3RoaXMubGVuZ3RoO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaGlmdCgpIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHJldCA9IHRoaXMuaGVhZC5kYXRhO1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJqb2luXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGpvaW4ocykge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciByZXQgPSAnJyArIHAuZGF0YTtcblxuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICAgICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbmNhdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25jYXQobikge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAocCkge1xuICAgICAgICBjb3B5QnVmZmVyKHAuZGF0YSwgcmV0LCBpKTtcbiAgICAgICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cblxuICB9LCB7XG4gICAga2V5OiBcImNvbnN1bWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgICB2YXIgcmV0O1xuXG4gICAgICBpZiAobiA8IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgICByZXQgPSB0aGlzLmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICAgICAgdGhpcy5oZWFkLmRhdGEgPSB0aGlzLmhlYWQuZGF0YS5zbGljZShuKTtcbiAgICAgIH0gZWxzZSBpZiAobiA9PT0gdGhpcy5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgICAgcmV0ID0gdGhpcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgICAgICByZXQgPSBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaXJzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaXJzdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhlYWQuZGF0YTtcbiAgICB9IC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTdHJpbmcobikge1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgYyA9IDE7XG4gICAgICB2YXIgcmV0ID0gcC5kYXRhO1xuICAgICAgbiAtPSByZXQubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gc3RyLmxlbmd0aCA/IHN0ci5sZW5ndGggOiBuO1xuICAgICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHJldCArPSBzdHI7ZWxzZSByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgICAgICBuIC09IG5iO1xuXG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAocC5uZXh0KSB0aGlzLmhlYWQgPSBwLm5leHQ7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgICsrYztcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggLT0gYztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cblxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRCdWZmZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldEJ1ZmZlcihuKSB7XG4gICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgYyA9IDE7XG4gICAgICBwLmRhdGEuY29weShyZXQpO1xuICAgICAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgICAgICB2YXIgYnVmID0gcC5kYXRhO1xuICAgICAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgICAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgICAgIG4gLT0gbmI7XG5cbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgKytjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IC8vIE1ha2Ugc3VyZSB0aGUgbGlua2VkIGxpc3Qgb25seSBzaG93cyB0aGUgbWluaW1hbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cbiAgfSwge1xuICAgIGtleTogY3VzdG9tLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIC8vIE9ubHkgaW5zcGVjdCBvbmUgbGV2ZWwuXG4gICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJ1ZmZlckxpc3Q7XG59KCk7IiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFnbG9iYWwubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IGdsb2JhbC5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgZmluaXNoZWQgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcblxudmFyIGtMYXN0UmVzb2x2ZSA9IFN5bWJvbCgnbGFzdFJlc29sdmUnKTtcbnZhciBrTGFzdFJlamVjdCA9IFN5bWJvbCgnbGFzdFJlamVjdCcpO1xudmFyIGtFcnJvciA9IFN5bWJvbCgnZXJyb3InKTtcbnZhciBrRW5kZWQgPSBTeW1ib2woJ2VuZGVkJyk7XG52YXIga0xhc3RQcm9taXNlID0gU3ltYm9sKCdsYXN0UHJvbWlzZScpO1xudmFyIGtIYW5kbGVQcm9taXNlID0gU3ltYm9sKCdoYW5kbGVQcm9taXNlJyk7XG52YXIga1N0cmVhbSA9IFN5bWJvbCgnc3RyZWFtJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJSZXN1bHQodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZG9uZTogZG9uZVxuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkQW5kUmVzb2x2ZShpdGVyKSB7XG4gIHZhciByZXNvbHZlID0gaXRlcltrTGFzdFJlc29sdmVdO1xuXG4gIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgdmFyIGRhdGEgPSBpdGVyW2tTdHJlYW1dLnJlYWQoKTsgLy8gd2UgZGVmZXIgaWYgZGF0YSBpcyBudWxsXG4gICAgLy8gd2UgY2FuIGJlIGV4cGVjdGluZyBlaXRoZXIgJ2VuZCcgb3JcbiAgICAvLyAnZXJyb3InXG5cbiAgICBpZiAoZGF0YSAhPT0gbnVsbCkge1xuICAgICAgaXRlcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICBpdGVyW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25SZWFkYWJsZShpdGVyKSB7XG4gIC8vIHdlIHdhaXQgZm9yIHRoZSBuZXh0IHRpY2ssIGJlY2F1c2UgaXQgbWlnaHRcbiAgLy8gZW1pdCBhbiBlcnJvciB3aXRoIHByb2Nlc3MubmV4dFRpY2tcbiAgcHJvY2Vzcy5uZXh0VGljayhyZWFkQW5kUmVzb2x2ZSwgaXRlcik7XG59XG5cbmZ1bmN0aW9uIHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCBpdGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGFzdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXRlcltrRW5kZWRdKSB7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpdGVyW2tIYW5kbGVQcm9taXNlXShyZXNvbHZlLCByZWplY3QpO1xuICAgIH0sIHJlamVjdCk7XG4gIH07XG59XG5cbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uICgpIHt9KTtcbnZhciBSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoKF9PYmplY3Qkc2V0UHJvdG90eXBlTyA9IHtcbiAgZ2V0IHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RyZWFtXTtcbiAgfSxcblxuICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGRldGVjdGVkIGFuIGVycm9yIGluIHRoZSBtZWFud2hpbGVcbiAgICAvLyByZWplY3Qgc3RyYWlnaHQgYXdheVxuICAgIHZhciBlcnJvciA9IHRoaXNba0Vycm9yXTtcblxuICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRW5kZWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1N0cmVhbV0uZGVzdHJveWVkKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHZpYSBuZXh0VGljayBiZWNhdXNlIGlmIC5kZXN0cm95KGVycikgaXNcbiAgICAgIC8vIGNhbGxlZCwgdGhlIGVycm9yIHdpbGwgYmUgZW1pdHRlZCB2aWEgbmV4dFRpY2ssIGFuZFxuICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZXJlIGlzIG5vIGVycm9yIGxpbmdlcmluZyBhcm91bmRcbiAgICAgIC8vIHdhaXRpbmcgdG8gYmUgZW1pdHRlZC5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpc1trRXJyb3JdKSB7XG4gICAgICAgICAgICByZWplY3QoX3RoaXNba0Vycm9yXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSAvLyBpZiB3ZSBoYXZlIG11bHRpcGxlIG5leHQoKSBjYWxsc1xuICAgIC8vIHdlIHdpbGwgd2FpdCBmb3IgdGhlIHByZXZpb3VzIFByb21pc2UgdG8gZmluaXNoXG4gICAgLy8gdGhpcyBsb2dpYyBpcyBvcHRpbWl6ZWQgdG8gc3VwcG9ydCBmb3IgYXdhaXQgbG9vcHMsXG4gICAgLy8gd2hlcmUgbmV4dCgpIGlzIG9ubHkgY2FsbGVkIG9uY2UgYXQgYSB0aW1lXG5cblxuICAgIHZhciBsYXN0UHJvbWlzZSA9IHRoaXNba0xhc3RQcm9taXNlXTtcbiAgICB2YXIgcHJvbWlzZTtcblxuICAgIGlmIChsYXN0UHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCB0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhc3QgcGF0aCBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0aGlzLnB1c2goKVxuICAgICAgLy8gd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBuZXh0KCkgcXVldWVcbiAgICAgIHZhciBkYXRhID0gdGhpc1trU3RyZWFtXS5yZWFkKCk7XG5cbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2UodGhpc1trSGFuZGxlUHJvbWlzZV0pO1xuICAgIH1cblxuICAgIHRoaXNba0xhc3RQcm9taXNlXSA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbn0sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JHNldFByb3RvdHlwZU8sIFwicmV0dXJuXCIsIGZ1bmN0aW9uIF9yZXR1cm4oKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIC8vIGRlc3Ryb3koZXJyLCBjYikgaXMgYSBwcml2YXRlIEFQSVxuICAvLyB3ZSBjYW4gZ3VhcmFudGVlIHdlIGhhdmUgdGhhdCBoZXJlLCBiZWNhdXNlIHdlIGNvbnRyb2wgdGhlXG4gIC8vIFJlYWRhYmxlIGNsYXNzIHRoaXMgaXMgYXR0YWNoZWQgdG9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBfdGhpczJba1N0cmVhbV0uZGVzdHJveShudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9KTtcbiAgfSk7XG59KSwgX09iamVjdCRzZXRQcm90b3R5cGVPKSwgQXN5bmNJdGVyYXRvclByb3RvdHlwZSk7XG5cbnZhciBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3IgPSBmdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3Ioc3RyZWFtKSB7XG4gIHZhciBfT2JqZWN0JGNyZWF0ZTtcblxuICB2YXIgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgKF9PYmplY3QkY3JlYXRlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga1N0cmVhbSwge1xuICAgIHZhbHVlOiBzdHJlYW0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZXNvbHZlLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZWplY3QsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRXJyb3IsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRW5kZWQsIHtcbiAgICB2YWx1ZTogc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0hhbmRsZVByb21pc2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZGF0YSA9IGl0ZXJhdG9yW2tTdHJlYW1dLnJlYWQoKTtcblxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQoZGF0YSwgZmFsc2UpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSByZXNvbHZlO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlamVjdF0gPSByZWplY3Q7XG4gICAgICB9XG4gICAgfSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX09iamVjdCRjcmVhdGUpKTtcbiAgaXRlcmF0b3Jba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gIGZpbmlzaGVkKHN0cmVhbSwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRScpIHtcbiAgICAgIHZhciByZWplY3QgPSBpdGVyYXRvcltrTGFzdFJlamVjdF07IC8vIHJlamVjdCBpZiB3ZSBhcmUgd2FpdGluZyBmb3IgZGF0YSBpbiB0aGUgUHJvbWlzZVxuICAgICAgLy8gcmV0dXJuZWQgYnkgbmV4dCgpIGFuZCBzdG9yZSB0aGUgZXJyb3JcblxuICAgICAgaWYgKHJlamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuXG4gICAgICBpdGVyYXRvcltrRXJyb3JdID0gZXJyO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXNvbHZlID0gaXRlcmF0b3Jba0xhc3RSZXNvbHZlXTtcblxuICAgIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG5cbiAgICBpdGVyYXRvcltrRW5kZWRdID0gdHJ1ZTtcbiAgfSk7XG4gIHN0cmVhbS5vbigncmVhZGFibGUnLCBvblJlYWRhYmxlLmJpbmQobnVsbCwgaXRlcmF0b3IpKTtcbiAgcmV0dXJuIGl0ZXJhdG9yO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbUFzeW5jSXRlcmF0b3I7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyJylcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIGEgcGFzc3Rocm91Z2ggc3RyZWFtLlxuLy8gYmFzaWNhbGx5IGp1c3QgdGhlIG1vc3QgbWluaW1hbCBzb3J0IG9mIFRyYW5zZm9ybSBzdHJlYW0uXG4vLyBFdmVyeSB3cml0dGVuIGNodW5rIGdldHMgb3V0cHV0IGFzLWlzLlxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xuXG5yZXF1aXJlKCdpbmhlcml0cycpKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07IiwiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9wdW1wIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW9zO1xuXG5mdW5jdGlvbiBvbmNlKGNhbGxiYWNrKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLFxuICAgIEVSUl9NSVNTSU5HX0FSR1MgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfTUlTU0lOR19BUkdTLFxuICAgIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7XG5cbmZ1bmN0aW9uIG5vb3AoZXJyKSB7XG4gIC8vIFJldGhyb3cgdGhlIGVycm9yIGlmIGl0IGV4aXN0cyB0byBhdm9pZCBzd2FsbG93aW5nIGl0XG4gIGlmIChlcnIpIHRocm93IGVycjtcbn1cblxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuICB2YXIgY2xvc2VkID0gZmFsc2U7XG4gIHN0cmVhbS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChlb3MgPT09IHVuZGVmaW5lZCkgZW9zID0gcmVxdWlyZSgnLi9lbmQtb2Ytc3RyZWFtJyk7XG4gIGVvcyhzdHJlYW0sIHtcbiAgICByZWFkYWJsZTogcmVhZGluZyxcbiAgICB3cml0YWJsZTogd3JpdGluZ1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgY2xvc2VkID0gdHJ1ZTtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGVzdHJveWVkKSByZXR1cm47XG4gICAgZGVzdHJveWVkID0gdHJ1ZTsgLy8gcmVxdWVzdC5kZXN0cm95IGp1c3QgZG8gLmVuZCAtIC5hYm9ydCBpcyB3aGF0IHdlIHdhbnRcblxuICAgIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkgcmV0dXJuIHN0cmVhbS5hYm9ydCgpO1xuICAgIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHJldHVybiBzdHJlYW0uZGVzdHJveSgpO1xuICAgIGNhbGxiYWNrKGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoJ3BpcGUnKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNhbGwoZm4pIHtcbiAgZm4oKTtcbn1cblxuZnVuY3Rpb24gcGlwZShmcm9tLCB0bykge1xuICByZXR1cm4gZnJvbS5waXBlKHRvKTtcbn1cblxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICBpZiAoIXN0cmVhbXMubGVuZ3RoKSByZXR1cm4gbm9vcDtcbiAgaWYgKHR5cGVvZiBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0gIT09ICdmdW5jdGlvbicpIHJldHVybiBub29wO1xuICByZXR1cm4gc3RyZWFtcy5wb3AoKTtcbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzdHJlYW1zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHN0cmVhbXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgY2FsbGJhY2sgPSBwb3BDYWxsYmFjayhzdHJlYW1zKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkpIHN0cmVhbXMgPSBzdHJlYW1zWzBdO1xuXG4gIGlmIChzdHJlYW1zLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygnc3RyZWFtcycpO1xuICB9XG5cbiAgdmFyIGVycm9yO1xuICB2YXIgZGVzdHJveXMgPSBzdHJlYW1zLm1hcChmdW5jdGlvbiAoc3RyZWFtLCBpKSB7XG4gICAgdmFyIHJlYWRpbmcgPSBpIDwgc3RyZWFtcy5sZW5ndGggLSAxO1xuICAgIHZhciB3cml0aW5nID0gaSA+IDA7XG4gICAgcmV0dXJuIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuICAgICAgaWYgKGVycikgZGVzdHJveXMuZm9yRWFjaChjYWxsKTtcbiAgICAgIGlmIChyZWFkaW5nKSByZXR1cm47XG4gICAgICBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHN0cmVhbXMucmVkdWNlKHBpcGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lOyIsIid1c2Ugc3RyaWN0J1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2hCYXNlID0gcmVxdWlyZSgnaGFzaC1iYXNlJylcblxudmFyIEFSUkFZMTYgPSBuZXcgQXJyYXkoMTYpXG5cbnZhciB6bCA9IFtcbiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCxcbiAgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMixcbiAgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMixcbiAgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM1xuXVxuXG52YXIgenIgPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl1cblxudmFyIHNsID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXVxuXG52YXIgc3IgPSBbXG4gIDgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNixcbiAgOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExLFxuICA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDUsXG4gIDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOCxcbiAgOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXG5dXG5cbnZhciBobCA9IFsweDAwMDAwMDAwLCAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGE5NTNmZDRlXVxudmFyIGhyID0gWzB4NTBhMjhiZTYsIDB4NWM0ZGQxMjQsIDB4NmQ3MDNlZjMsIDB4N2E2ZDc2ZTksIDB4MDAwMDAwMDBdXG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCAoKSB7XG4gIEhhc2hCYXNlLmNhbGwodGhpcywgNjQpXG5cbiAgLy8gc3RhdGVcbiAgdGhpcy5fYSA9IDB4Njc0NTIzMDFcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODlcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmVcbiAgdGhpcy5fZCA9IDB4MTAzMjU0NzZcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjBcbn1cblxuaW5oZXJpdHMoUklQRU1EMTYwLCBIYXNoQmFzZSlcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgd29yZHMgPSBBUlJBWTE2XG4gIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikgd29yZHNbal0gPSB0aGlzLl9ibG9jay5yZWFkSW50MzJMRShqICogNClcblxuICB2YXIgYWwgPSB0aGlzLl9hIHwgMFxuICB2YXIgYmwgPSB0aGlzLl9iIHwgMFxuICB2YXIgY2wgPSB0aGlzLl9jIHwgMFxuICB2YXIgZGwgPSB0aGlzLl9kIHwgMFxuICB2YXIgZWwgPSB0aGlzLl9lIHwgMFxuXG4gIHZhciBhciA9IHRoaXMuX2EgfCAwXG4gIHZhciBiciA9IHRoaXMuX2IgfCAwXG4gIHZhciBjciA9IHRoaXMuX2MgfCAwXG4gIHZhciBkciA9IHRoaXMuX2QgfCAwXG4gIHZhciBlciA9IHRoaXMuX2UgfCAwXG5cbiAgLy8gY29tcHV0YXRpb25cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSArPSAxKSB7XG4gICAgdmFyIHRsXG4gICAgdmFyIHRyXG4gICAgaWYgKGkgPCAxNikge1xuICAgICAgdGwgPSBmbjEoYWwsIGJsLCBjbCwgZGwsIGVsLCB3b3Jkc1t6bFtpXV0sIGhsWzBdLCBzbFtpXSlcbiAgICAgIHRyID0gZm41KGFyLCBiciwgY3IsIGRyLCBlciwgd29yZHNbenJbaV1dLCBoclswXSwgc3JbaV0pXG4gICAgfSBlbHNlIGlmIChpIDwgMzIpIHtcbiAgICAgIHRsID0gZm4yKGFsLCBibCwgY2wsIGRsLCBlbCwgd29yZHNbemxbaV1dLCBobFsxXSwgc2xbaV0pXG4gICAgICB0ciA9IGZuNChhciwgYnIsIGNyLCBkciwgZXIsIHdvcmRzW3pyW2ldXSwgaHJbMV0sIHNyW2ldKVxuICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7XG4gICAgICB0bCA9IGZuMyhhbCwgYmwsIGNsLCBkbCwgZWwsIHdvcmRzW3psW2ldXSwgaGxbMl0sIHNsW2ldKVxuICAgICAgdHIgPSBmbjMoYXIsIGJyLCBjciwgZHIsIGVyLCB3b3Jkc1t6cltpXV0sIGhyWzJdLCBzcltpXSlcbiAgICB9IGVsc2UgaWYgKGkgPCA2NCkge1xuICAgICAgdGwgPSBmbjQoYWwsIGJsLCBjbCwgZGwsIGVsLCB3b3Jkc1t6bFtpXV0sIGhsWzNdLCBzbFtpXSlcbiAgICAgIHRyID0gZm4yKGFyLCBiciwgY3IsIGRyLCBlciwgd29yZHNbenJbaV1dLCBoclszXSwgc3JbaV0pXG4gICAgfSBlbHNlIHsgLy8gaWYgKGk8ODApIHtcbiAgICAgIHRsID0gZm41KGFsLCBibCwgY2wsIGRsLCBlbCwgd29yZHNbemxbaV1dLCBobFs0XSwgc2xbaV0pXG4gICAgICB0ciA9IGZuMShhciwgYnIsIGNyLCBkciwgZXIsIHdvcmRzW3pyW2ldXSwgaHJbNF0sIHNyW2ldKVxuICAgIH1cblxuICAgIGFsID0gZWxcbiAgICBlbCA9IGRsXG4gICAgZGwgPSByb3RsKGNsLCAxMClcbiAgICBjbCA9IGJsXG4gICAgYmwgPSB0bFxuXG4gICAgYXIgPSBlclxuICAgIGVyID0gZHJcbiAgICBkciA9IHJvdGwoY3IsIDEwKVxuICAgIGNyID0gYnJcbiAgICBiciA9IHRyXG4gIH1cblxuICAvLyB1cGRhdGUgc3RhdGVcbiAgdmFyIHQgPSAodGhpcy5fYiArIGNsICsgZHIpIHwgMFxuICB0aGlzLl9iID0gKHRoaXMuX2MgKyBkbCArIGVyKSB8IDBcbiAgdGhpcy5fYyA9ICh0aGlzLl9kICsgZWwgKyBhcikgfCAwXG4gIHRoaXMuX2QgPSAodGhpcy5fZSArIGFsICsgYnIpIHwgMFxuICB0aGlzLl9lID0gKHRoaXMuX2EgKyBibCArIGNyKSB8IDBcbiAgdGhpcy5fYSA9IHRcbn1cblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBjcmVhdGUgcGFkZGluZyBhbmQgaGFuZGxlIGJsb2Nrc1xuICB0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXSA9IDB4ODBcbiAgaWYgKHRoaXMuX2Jsb2NrT2Zmc2V0ID4gNTYpIHtcbiAgICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2Jsb2NrT2Zmc2V0LCA2NClcbiAgICB0aGlzLl91cGRhdGUoKVxuICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gMFxuICB9XG5cbiAgdGhpcy5fYmxvY2suZmlsbCgwLCB0aGlzLl9ibG9ja09mZnNldCwgNTYpXG4gIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLCA1NilcbiAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sIDYwKVxuICB0aGlzLl91cGRhdGUoKVxuXG4gIC8vIHByb2R1Y2UgcmVzdWx0XG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2MgPyBCdWZmZXIuYWxsb2MoMjApIDogbmV3IEJ1ZmZlcigyMClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9hLCAwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2IsIDQpXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYywgOClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9kLCAxMilcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9lLCAxNilcbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiByb3RsICh4LCBuKSB7XG4gIHJldHVybiAoeCA8PCBuKSB8ICh4ID4+PiAoMzIgLSBuKSlcbn1cblxuZnVuY3Rpb24gZm4xIChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArIChiIF4gYyBeIGQpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm4yIChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGMpIHwgKCh+YikgJiBkKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjMgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiIHwgKH5jKSkgXiBkKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbmZ1bmN0aW9uIGZuNCAoYSwgYiwgYywgZCwgZSwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGIgJiBkKSB8IChjICYgKH5kKSkpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm41IChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArIChiIF4gKGMgfCAofmQpKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJJUEVNRDE2MFxuIiwidmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFNIQSAoYWxnb3JpdGhtKSB7XG4gIGFsZ29yaXRobSA9IGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIEFsZ29yaXRobSA9IGV4cG9ydHNbYWxnb3JpdGhtXVxuICBpZiAoIUFsZ29yaXRobSkgdGhyb3cgbmV3IEVycm9yKGFsZ29yaXRobSArICcgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpJylcblxuICByZXR1cm4gbmV3IEFsZ29yaXRobSgpXG59XG5cbmV4cG9ydHMuc2hhID0gcmVxdWlyZSgnLi9zaGEnKVxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGExJylcbmV4cG9ydHMuc2hhMjI0ID0gcmVxdWlyZSgnLi9zaGEyMjQnKVxuZXhwb3J0cy5zaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhMzg0JylcbmV4cG9ydHMuc2hhNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMCwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNoYTEuanMgb2YgdGhlIHNhbWUgcmVwb3NpdG9yeS5cbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU0hBLTAgYW5kIFNIQS0xIGlzIGp1c3QgYSBiaXR3aXNlIHJvdGF0ZSBsZWZ0XG4gKiBvcGVyYXRpb24gd2FzIGFkZGVkLlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgSyA9IFtcbiAgMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYyB8IDAsIDB4Y2E2MmMxZDYgfCAwXG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDgwKVxuXG5mdW5jdGlvbiBTaGEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYSwgSGFzaClcblxuU2hhLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2NzQ1MjMwMVxuICB0aGlzLl9iID0gMHhlZmNkYWI4OVxuICB0aGlzLl9jID0gMHg5OGJhZGNmZVxuICB0aGlzLl9kID0gMHgxMDMyNTQ3NlxuICB0aGlzLl9lID0gMHhjM2QyZTFmMFxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIHJvdGw1IChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgNSkgfCAobnVtID4+PiAyNylcbn1cblxuZnVuY3Rpb24gcm90bDMwIChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgMzApIHwgKG51bSA+Pj4gMilcbn1cblxuZnVuY3Rpb24gZnQgKHMsIGIsIGMsIGQpIHtcbiAgaWYgKHMgPT09IDApIHJldHVybiAoYiAmIGMpIHwgKCh+YikgJiBkKVxuICBpZiAocyA9PT0gMikgcmV0dXJuIChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKVxuICByZXR1cm4gYiBeIGMgXiBkXG59XG5cblNoYS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gIGZvciAoOyBpIDwgODA7ICsraSkgV1tpXSA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl1cblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICB2YXIgcyA9IH5+KGogLyAyMClcbiAgICB2YXIgdCA9IChyb3RsNShhKSArIGZ0KHMsIGIsIGMsIGQpICsgZSArIFdbal0gKyBLW3NdKSB8IDBcblxuICAgIGUgPSBkXG4gICAgZCA9IGNcbiAgICBjID0gcm90bDMwKGIpXG4gICAgYiA9IGFcbiAgICBhID0gdFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxufVxuXG5TaGEucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMSwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFZlcnNpb24gMi4xYSBDb3B5cmlnaHQgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwMi5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIGRldGFpbHMuXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYTEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTEsIEhhc2gpXG5cblNoYTEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDEgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSB8IChudW0gPj4+IDMxKVxufVxuXG5mdW5jdGlvbiByb3RsNSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDUpIHwgKG51bSA+Pj4gMjcpXG59XG5cbmZ1bmN0aW9uIHJvdGwzMCAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDMwKSB8IChudW0gPj4+IDIpXG59XG5cbmZ1bmN0aW9uIGZ0IChzLCBiLCBjLCBkKSB7XG4gIGlmIChzID09PSAwKSByZXR1cm4gKGIgJiBjKSB8ICgofmIpICYgZClcbiAgaWYgKHMgPT09IDIpIHJldHVybiAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZClcbiAgcmV0dXJuIGIgXiBjIF4gZFxufVxuXG5TaGExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gcm90bDEoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSlcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICB2YXIgcyA9IH5+KGogLyAyMClcbiAgICB2YXIgdCA9IChyb3RsNShhKSArIGZ0KHMsIGIsIGMsIGQpICsgZSArIFdbal0gKyBLW3NdKSB8IDBcblxuICAgIGUgPSBkXG4gICAgZCA9IGNcbiAgICBjID0gcm90bDMwKGIpXG4gICAgYiA9IGFcbiAgICBhID0gdFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxufVxuXG5TaGExLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBCdWZmZXIuYWxsb2NVbnNhZmUoMjApXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSB8IDAsIDApXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2IgfCAwLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jIHwgMCwgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCB8IDAsIDEyKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9lIHwgMCwgMTYpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGExXG4iLCIvKipcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMjU2LCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIDE4MC0yXG4gKiBWZXJzaW9uIDIuMi1iZXRhIENvcHlyaWdodCBBbmdlbCBNYXJpbiwgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwOS5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIFNoYTI1NiA9IHJlcXVpcmUoJy4vc2hhMjU2JylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjI0ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjI0LCBTaGEyNTYpXG5cblNoYTIyNC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYiA9IDB4MzY3Y2Q1MDdcbiAgdGhpcy5fYyA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZSA9IDB4ZmZjMDBiMzFcbiAgdGhpcy5fZiA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZyA9IDB4NjRmOThmYTdcbiAgdGhpcy5faCA9IDB4YmVmYTRmYTRcblxuICByZXR1cm4gdGhpc1xufVxuXG5TaGEyMjQucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyOClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTIyNFxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIFNIQTUxMiA9IHJlcXVpcmUoJy4vc2hhNTEyJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgVyA9IG5ldyBBcnJheSgxNjApXG5cbmZ1bmN0aW9uIFNoYTM4NCAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDEyOCwgMTEyKVxufVxuXG5pbmhlcml0cyhTaGEzODQsIFNIQTUxMilcblxuU2hhMzg0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9haCA9IDB4Y2JiYjlkNWRcbiAgdGhpcy5fYmggPSAweDYyOWEyOTJhXG4gIHRoaXMuX2NoID0gMHg5MTU5MDE1YVxuICB0aGlzLl9kaCA9IDB4MTUyZmVjZDhcbiAgdGhpcy5fZWggPSAweDY3MzMyNjY3XG4gIHRoaXMuX2ZoID0gMHg4ZWI0NGE4N1xuICB0aGlzLl9naCA9IDB4ZGIwYzJlMGRcbiAgdGhpcy5faGggPSAweDQ3YjU0ODFkXG5cbiAgdGhpcy5fYWwgPSAweGMxMDU5ZWQ4XG4gIHRoaXMuX2JsID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jbCA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZGwgPSAweGY3MGU1OTM5XG4gIHRoaXMuX2VsID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mbCA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZ2wgPSAweDY0Zjk4ZmE3XG4gIHRoaXMuX2hsID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTM4NC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQ4KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTM4NFxuIiwidmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtXG52YXIgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlclxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5mdW5jdGlvbiBDaXBoZXJCYXNlIChoYXNoTW9kZSkge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLmhhc2hNb2RlID0gdHlwZW9mIGhhc2hNb2RlID09PSAnc3RyaW5nJ1xuICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgIHRoaXNbaGFzaE1vZGVdID0gdGhpcy5fZmluYWxPckRpZ2VzdFxuICB9IGVsc2Uge1xuICAgIHRoaXMuZmluYWwgPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH1cbiAgaWYgKHRoaXMuX2ZpbmFsKSB7XG4gICAgdGhpcy5fX2ZpbmFsID0gdGhpcy5fZmluYWxcbiAgICB0aGlzLl9maW5hbCA9IG51bGxcbiAgfVxuICB0aGlzLl9kZWNvZGVyID0gbnVsbFxuICB0aGlzLl9lbmNvZGluZyA9IG51bGxcbn1cbmluaGVyaXRzKENpcGhlckJhc2UsIFRyYW5zZm9ybSlcblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGlucHV0RW5jLCBvdXRwdXRFbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBpbnB1dEVuYylcbiAgfVxuXG4gIHZhciBvdXREYXRhID0gdGhpcy5fdXBkYXRlKGRhdGEpXG4gIGlmICh0aGlzLmhhc2hNb2RlKSByZXR1cm4gdGhpc1xuXG4gIGlmIChvdXRwdXRFbmMpIHtcbiAgICBvdXREYXRhID0gdGhpcy5fdG9TdHJpbmcob3V0RGF0YSwgb3V0cHV0RW5jKVxuICB9XG5cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmcgPSBmdW5jdGlvbiAoKSB7fVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuZ2V0QXV0aFRhZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QUFEID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChkYXRhLCBfLCBuZXh0KSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgICAgdGhpcy5fdXBkYXRlKGRhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLl91cGRhdGUoZGF0YSkpXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyID0gZVxuICB9IGZpbmFsbHkge1xuICAgIG5leHQoZXJyKVxuICB9XG59XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoZG9uZSkge1xuICB2YXIgZXJyXG4gIHRyeSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyID0gZVxuICB9XG5cbiAgZG9uZShlcnIpXG59XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdCA9IGZ1bmN0aW9uIChvdXRwdXRFbmMpIHtcbiAgdmFyIG91dERhdGEgPSB0aGlzLl9fZmluYWwoKSB8fCBCdWZmZXIuYWxsb2MoMClcbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKHZhbHVlLCBlbmMsIGZpbikge1xuICBpZiAoIXRoaXMuX2RlY29kZXIpIHtcbiAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoZW5jKVxuICAgIHRoaXMuX2VuY29kaW5nID0gZW5jXG4gIH1cblxuICBpZiAodGhpcy5fZW5jb2RpbmcgIT09IGVuYykgdGhyb3cgbmV3IEVycm9yKCdjYW5cXCd0IHN3aXRjaCBlbmNvZGluZ3MnKVxuXG4gIHZhciBvdXQgPSB0aGlzLl9kZWNvZGVyLndyaXRlKHZhbHVlKVxuICBpZiAoZmluKSB7XG4gICAgb3V0ICs9IHRoaXMuX2RlY29kZXIuZW5kKClcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDaXBoZXJCYXNlXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbGxpcHRpYyA9IGV4cG9ydHM7XG5cbmVsbGlwdGljLnZlcnNpb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuZWxsaXB0aWMudXRpbHMgPSByZXF1aXJlKCcuL2VsbGlwdGljL3V0aWxzJyk7XG5lbGxpcHRpYy5yYW5kID0gcmVxdWlyZSgnYnJvcmFuZCcpO1xuZWxsaXB0aWMuY3VydmUgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlJyk7XG5lbGxpcHRpYy5jdXJ2ZXMgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlcycpO1xuXG4vLyBQcm90b2NvbHNcbmVsbGlwdGljLmVjID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lYycpO1xuZWxsaXB0aWMuZWRkc2EgPSByZXF1aXJlKCcuL2VsbGlwdGljL2VkZHNhJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5cbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFNob3J0Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ3Nob3J0JywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5iID0gbmV3IEJOKGNvbmYuYiwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50aW52ID0gdGhpcy50d28ucmVkSW52bSgpO1xuXG4gIHRoaXMuemVyb0EgPSB0aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCkgPT09IDA7XG4gIHRoaXMudGhyZWVBID0gdGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSA9PT0gMDtcblxuICAvLyBJZiB0aGUgY3VydmUgaXMgZW5kb21vcnBoaWMsIHByZWNhbGN1bGF0ZSBiZXRhIGFuZCBsYW1iZGFcbiAgdGhpcy5lbmRvID0gdGhpcy5fZ2V0RW5kb21vcnBoaXNtKGNvbmYpO1xuICB0aGlzLl9lbmRvV25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl9lbmRvV25hZlQyID0gbmV3IEFycmF5KDQpO1xufVxuaW5oZXJpdHMoU2hvcnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IFNob3J0Q3VydmU7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc20gPSBmdW5jdGlvbiBfZ2V0RW5kb21vcnBoaXNtKGNvbmYpIHtcbiAgLy8gTm8gZWZmaWNpZW50IGVuZG9tb3JwaGlzbVxuICBpZiAoIXRoaXMuemVyb0EgfHwgIXRoaXMuZyB8fCAhdGhpcy5uIHx8IHRoaXMucC5tb2RuKDMpICE9PSAxKVxuICAgIHJldHVybjtcblxuICAvLyBDb21wdXRlIGJldGEgYW5kIGxhbWJkYSwgdGhhdCBsYW1iZGEgKiBQID0gKGJldGEgKiBQeDsgUHkpXG4gIHZhciBiZXRhO1xuICB2YXIgbGFtYmRhO1xuICBpZiAoY29uZi5iZXRhKSB7XG4gICAgYmV0YSA9IG5ldyBCTihjb25mLmJldGEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJldGFzID0gdGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7XG4gICAgLy8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBiZXRhXG4gICAgYmV0YSA9IGJldGFzWzBdLmNtcChiZXRhc1sxXSkgPCAwID8gYmV0YXNbMF0gOiBiZXRhc1sxXTtcbiAgICBiZXRhID0gYmV0YS50b1JlZCh0aGlzLnJlZCk7XG4gIH1cbiAgaWYgKGNvbmYubGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEJOKGNvbmYubGFtYmRhLCAxNik7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2hvb3NlIHRoZSBsYW1iZGEgdGhhdCBpcyBtYXRjaGluZyBzZWxlY3RlZCBiZXRhXG4gICAgdmFyIGxhbWJkYXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTtcbiAgICBpZiAodGhpcy5nLm11bChsYW1iZGFzWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzFdO1xuICAgICAgYXNzZXJ0KHRoaXMuZy5tdWwobGFtYmRhKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgYmFzaXMgdmVjdG9ycywgdXNlZCBmb3IgYmFsYW5jZWQgbGVuZ3RoLXR3byByZXByZXNlbnRhdGlvblxuICB2YXIgYmFzaXM7XG4gIGlmIChjb25mLmJhc2lzKSB7XG4gICAgYmFzaXMgPSBjb25mLmJhc2lzLm1hcChmdW5jdGlvbih2ZWMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGE6IG5ldyBCTih2ZWMuYSwgMTYpLFxuICAgICAgICBiOiBuZXcgQk4odmVjLmIsIDE2KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiYXNpcyA9IHRoaXMuX2dldEVuZG9CYXNpcyhsYW1iZGEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiZXRhOiBiZXRhLFxuICAgIGxhbWJkYTogbGFtYmRhLFxuICAgIGJhc2lzOiBiYXNpc1xuICB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cyA9IGZ1bmN0aW9uIF9nZXRFbmRvUm9vdHMobnVtKSB7XG4gIC8vIEZpbmQgcm9vdHMgb2YgZm9yIHheMiArIHggKyAxIGluIEZcbiAgLy8gUm9vdCA9ICgtMSArLSBTcXJ0KC0zKSkgLyAyXG4gIC8vXG4gIHZhciByZWQgPSBudW0gPT09IHRoaXMucCA/IHRoaXMucmVkIDogQk4ubW9udChudW0pO1xuICB2YXIgdGludiA9IG5ldyBCTigyKS50b1JlZChyZWQpLnJlZEludm0oKTtcbiAgdmFyIG50aW52ID0gdGludi5yZWROZWcoKTtcblxuICB2YXIgcyA9IG5ldyBCTigzKS50b1JlZChyZWQpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwodGludik7XG5cbiAgdmFyIGwxID0gbnRpbnYucmVkQWRkKHMpLmZyb21SZWQoKTtcbiAgdmFyIGwyID0gbnRpbnYucmVkU3ViKHMpLmZyb21SZWQoKTtcbiAgcmV0dXJuIFsgbDEsIGwyIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzID0gZnVuY3Rpb24gX2dldEVuZG9CYXNpcyhsYW1iZGEpIHtcbiAgLy8gYXByeFNxcnQgPj0gc3FydCh0aGlzLm4pXG4gIHZhciBhcHJ4U3FydCA9IHRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKSAvIDIpKTtcblxuICAvLyAzLjc0XG4gIC8vIFJ1biBFR0NELCB1bnRpbCByKEwgKyAxKSA8IGFwcnhTcXJ0XG4gIHZhciB1ID0gbGFtYmRhO1xuICB2YXIgdiA9IHRoaXMubi5jbG9uZSgpO1xuICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gIHZhciB5MSA9IG5ldyBCTigwKTtcbiAgdmFyIHgyID0gbmV3IEJOKDApO1xuICB2YXIgeTIgPSBuZXcgQk4oMSk7XG5cbiAgLy8gTk9URTogYWxsIHZlY3RvcnMgYXJlIHJvb3RzIG9mOiBhICsgYiAqIGxhbWJkYSA9IDAgKG1vZCBuKVxuICB2YXIgYTA7XG4gIHZhciBiMDtcbiAgLy8gRmlyc3QgdmVjdG9yXG4gIHZhciBhMTtcbiAgdmFyIGIxO1xuICAvLyBTZWNvbmQgdmVjdG9yXG4gIHZhciBhMjtcbiAgdmFyIGIyO1xuXG4gIHZhciBwcmV2UjtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcjtcbiAgdmFyIHg7XG4gIHdoaWxlICh1LmNtcG4oMCkgIT09IDApIHtcbiAgICB2YXIgcSA9IHYuZGl2KHUpO1xuICAgIHIgPSB2LnN1YihxLm11bCh1KSk7XG4gICAgeCA9IHgyLnN1YihxLm11bCh4MSkpO1xuICAgIHZhciB5ID0geTIuc3ViKHEubXVsKHkxKSk7XG5cbiAgICBpZiAoIWExICYmIHIuY21wKGFwcnhTcXJ0KSA8IDApIHtcbiAgICAgIGEwID0gcHJldlIubmVnKCk7XG4gICAgICBiMCA9IHgxO1xuICAgICAgYTEgPSByLm5lZygpO1xuICAgICAgYjEgPSB4O1xuICAgIH0gZWxzZSBpZiAoYTEgJiYgKytpID09PSAyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcHJldlIgPSByO1xuXG4gICAgdiA9IHU7XG4gICAgdSA9IHI7XG4gICAgeDIgPSB4MTtcbiAgICB4MSA9IHg7XG4gICAgeTIgPSB5MTtcbiAgICB5MSA9IHk7XG4gIH1cbiAgYTIgPSByLm5lZygpO1xuICBiMiA9IHg7XG5cbiAgdmFyIGxlbjEgPSBhMS5zcXIoKS5hZGQoYjEuc3FyKCkpO1xuICB2YXIgbGVuMiA9IGEyLnNxcigpLmFkZChiMi5zcXIoKSk7XG4gIGlmIChsZW4yLmNtcChsZW4xKSA+PSAwKSB7XG4gICAgYTIgPSBhMDtcbiAgICBiMiA9IGIwO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNpZ25zXG4gIGlmIChhMS5uZWdhdGl2ZSkge1xuICAgIGExID0gYTEubmVnKCk7XG4gICAgYjEgPSBiMS5uZWcoKTtcbiAgfVxuICBpZiAoYTIubmVnYXRpdmUpIHtcbiAgICBhMiA9IGEyLm5lZygpO1xuICAgIGIyID0gYjIubmVnKCk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgYTogYTEsIGI6IGIxIH0sXG4gICAgeyBhOiBhMiwgYjogYjIgfVxuICBdO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9TcGxpdCA9IGZ1bmN0aW9uIF9lbmRvU3BsaXQoaykge1xuICB2YXIgYmFzaXMgPSB0aGlzLmVuZG8uYmFzaXM7XG4gIHZhciB2MSA9IGJhc2lzWzBdO1xuICB2YXIgdjIgPSBiYXNpc1sxXTtcblxuICB2YXIgYzEgPSB2Mi5iLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuICB2YXIgYzIgPSB2MS5iLm5lZygpLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuXG4gIHZhciBwMSA9IGMxLm11bCh2MS5hKTtcbiAgdmFyIHAyID0gYzIubXVsKHYyLmEpO1xuICB2YXIgcTEgPSBjMS5tdWwodjEuYik7XG4gIHZhciBxMiA9IGMyLm11bCh2Mi5iKTtcblxuICAvLyBDYWxjdWxhdGUgYW5zd2VyXG4gIHZhciBrMSA9IGsuc3ViKHAxKS5zdWIocDIpO1xuICB2YXIgazIgPSBxMS5hZGQocTIpLm5lZygpO1xuICByZXR1cm4geyBrMTogazEsIGsyOiBrMiB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWCA9IGZ1bmN0aW9uIHBvaW50RnJvbVgoeCwgb2RkKSB7XG4gIHggPSBuZXcgQk4oeCwgMTYpO1xuICBpZiAoIXgucmVkKVxuICAgIHggPSB4LnRvUmVkKHRoaXMucmVkKTtcblxuICB2YXIgeTIgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKHgucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKTtcbiAgdmFyIHkgPSB5Mi5yZWRTcXJ0KCk7XG4gIGlmICh5LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgLy8gWFhYIElzIHRoZXJlIGFueSB3YXkgdG8gdGVsbCBpZiB0aGUgbnVtYmVyIGlzIG9kZCB3aXRob3V0IGNvbnZlcnRpbmcgaXRcbiAgLy8gdG8gbm9uLXJlZCBmb3JtP1xuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaW5mKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4ID0gcG9pbnQueDtcbiAgdmFyIHkgPSBwb2ludC55O1xuXG4gIHZhciBheCA9IHRoaXMuYS5yZWRNdWwoeCk7XG4gIHZhciByaHMgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKGF4KS5yZWRJQWRkKHRoaXMuYik7XG4gIHJldHVybiB5LnJlZFNxcigpLnJlZElTdWIocmhzKS5jbXBuKDApID09PSAwO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkID1cbiAgICBmdW5jdGlvbiBfZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciBucG9pbnRzID0gdGhpcy5fZW5kb1duYWZUMTtcbiAgdmFyIG5jb2VmZnMgPSB0aGlzLl9lbmRvV25hZlQyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGxpdCA9IHRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pO1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBiZXRhID0gcC5fZ2V0QmV0YSgpO1xuXG4gICAgaWYgKHNwbGl0LmsxLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMS5pbmVnKCk7XG4gICAgICBwID0gcC5uZWcodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzcGxpdC5rMi5uZWdhdGl2ZSkge1xuICAgICAgc3BsaXQuazIuaW5lZygpO1xuICAgICAgYmV0YSA9IGJldGEubmVnKHRydWUpO1xuICAgIH1cblxuICAgIG5wb2ludHNbaSAqIDJdID0gcDtcbiAgICBucG9pbnRzW2kgKiAyICsgMV0gPSBiZXRhO1xuICAgIG5jb2VmZnNbaSAqIDJdID0gc3BsaXQuazE7XG4gICAgbmNvZWZmc1tpICogMiArIDFdID0gc3BsaXQuazI7XG4gIH1cbiAgdmFyIHJlcyA9IHRoaXMuX3duYWZNdWxBZGQoMSwgbnBvaW50cywgbmNvZWZmcywgaSAqIDIsIGphY29iaWFuUmVzdWx0KTtcblxuICAvLyBDbGVhbi11cCByZWZlcmVuY2VzIHRvIHBvaW50cyBhbmQgY29lZmZpY2llbnRzXG4gIGZvciAodmFyIGogPSAwOyBqIDwgaSAqIDI7IGorKykge1xuICAgIG5wb2ludHNbal0gPSBudWxsO1xuICAgIG5jb2VmZnNbal0gPSBudWxsO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgaXNSZWQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ2FmZmluZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gbnVsbDtcbiAgICB0aGlzLnkgPSBudWxsO1xuICAgIHRoaXMuaW5mID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgLy8gRm9yY2UgcmVkZ29tZXJ5IHJlcHJlc2VudGF0aW9uIHdoZW4gbG9hZGluZyBmcm9tIEpTT05cbiAgICBpZiAoaXNSZWQpIHtcbiAgICAgIHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgICB0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy5pbmYgPSBmYWxzZTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCBpc1JlZCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIGlzUmVkKTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaiwgcmVkKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmosIHJlZCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuO1xuXG4gIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICBpZiAocHJlICYmIHByZS5iZXRhKVxuICAgIHJldHVybiBwcmUuYmV0YTtcblxuICB2YXIgYmV0YSA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksIHRoaXMueSk7XG4gIGlmIChwcmUpIHtcbiAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlO1xuICAgIHZhciBlbmRvTXVsID0gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIGN1cnZlLnBvaW50KHAueC5yZWRNdWwoY3VydmUuZW5kby5iZXRhKSwgcC55KTtcbiAgICB9O1xuICAgIHByZS5iZXRhID0gYmV0YTtcbiAgICBiZXRhLnByZWNvbXB1dGVkID0ge1xuICAgICAgYmV0YTogbnVsbCxcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKGVuZG9NdWwpXG4gICAgICB9LFxuICAgICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgICBzdGVwOiBwcmUuZG91Ymxlcy5zdGVwLFxuICAgICAgICBwb2ludHM6IHByZS5kb3VibGVzLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBiZXRhO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBbIHRoaXMueCwgdGhpcy55IF07XG5cbiAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnksIHRoaXMucHJlY29tcHV0ZWQgJiYge1xuICAgIGRvdWJsZXM6IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyAmJiB7XG4gICAgICBzdGVwOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKVxuICAgIH0sXG4gICAgbmFmOiB0aGlzLnByZWNvbXB1dGVkLm5hZiAmJiB7XG4gICAgICB3bmQ6IHRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpXG4gICAgfVxuICB9IF07XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmosIHJlZCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpXG4gICAgb2JqID0gSlNPTi5wYXJzZShvYmopO1xuICB2YXIgcmVzID0gY3VydmUucG9pbnQob2JqWzBdLCBvYmpbMV0sIHJlZCk7XG4gIGlmICghb2JqWzJdKVxuICAgIHJldHVybiByZXM7XG5cbiAgZnVuY3Rpb24gb2JqMnBvaW50KG9iaikge1xuICAgIHJldHVybiBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgfVxuXG4gIHZhciBwcmUgPSBvYmpbMl07XG4gIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICBiZXRhOiBudWxsLFxuICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5kb3VibGVzLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9LFxuICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICB3bmQ6IHByZS5uYWYud25kLFxuICAgICAgcG9pbnRzOiBbIHJlcyBdLmNvbmNhdChwcmUubmFmLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9XG4gIH07XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIHJldHVybiB0aGlzLmluZjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gUCArIFAgPSAyUFxuICBpZiAodGhpcy5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICAvLyBQICsgKC1QKSA9IE9cbiAgaWYgKHRoaXMubmVnKCkuZXEocCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgLy8gUCArIFEgPSBPXG4gIGlmICh0aGlzLnguY21wKHAueCkgPT09IDApXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIGMgPSB0aGlzLnkucmVkU3ViKHAueSk7XG4gIGlmIChjLmNtcG4oMCkgIT09IDApXG4gICAgYyA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIocC54KS5yZWRJbnZtKCkpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHAueCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMlAgPSBPXG4gIHZhciB5czEgPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIGlmICh5czEuY21wbigwKSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICB2YXIgeDIgPSB0aGlzLngucmVkU3FyKCk7XG4gIHZhciBkeWludiA9IHlzMS5yZWRJbnZtKCk7XG4gIHZhciBjID0geDIucmVkQWRkKHgyKS5yZWRJQWRkKHgyKS5yZWRJQWRkKGEpLnJlZE11bChkeWludik7XG5cbiAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBrID0gbmV3IEJOKGssIDE2KTtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuICBlbHNlIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbIHRoaXMgXSwgWyBrIF0pO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwMiwgazIpIHtcbiAgdmFyIHBvaW50cyA9IFsgdGhpcywgcDIgXTtcbiAgdmFyIGNvZWZmcyA9IFsgazEsIGsyIF07XG4gIGlmICh0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIHBvaW50cywgY29lZmZzLCAyKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5qbXVsQWRkID0gZnVuY3Rpb24gam11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIHJldHVybiB0aGlzID09PSBwIHx8XG4gICAgICAgICB0aGlzLmluZiA9PT0gcC5pbmYgJiZcbiAgICAgICAgICAgICAodGhpcy5pbmYgfHwgdGhpcy54LmNtcChwLngpID09PSAwICYmIHRoaXMueS5jbXAocC55KSA9PT0gMCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKF9wcmVjb21wdXRlKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsIHRoaXMueS5yZWROZWcoKSk7XG4gIGlmIChfcHJlY29tcHV0ZSAmJiB0aGlzLnByZWNvbXB1dGVkKSB7XG4gICAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gICAgdmFyIG5lZ2F0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBwLm5lZygpO1xuICAgIH07XG4gICAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAobmVnYXRlKVxuICAgICAgfSxcbiAgICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgICAgcG9pbnRzOiBwcmUuZG91Ymxlcy5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KID0gZnVuY3Rpb24gdG9KKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuXG4gIHZhciByZXMgPSB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsIHRoaXMueSwgdGhpcy5jdXJ2ZS5vbmUpO1xuICByZXR1cm4gcmVzO1xufTtcblxuZnVuY3Rpb24gSlBvaW50KGN1cnZlLCB4LCB5LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdqYWNvYmlhbicpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSBuZXcgQk4oMCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gIH1cbiAgaWYgKCF0aGlzLngucmVkKVxuICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIGlmICghdGhpcy55LnJlZClcbiAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMuei5yZWQpXG4gICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcblxuICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xufVxuaW5oZXJpdHMoSlBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6KSB7XG4gIHJldHVybiBuZXcgSlBvaW50KHRoaXMsIHgsIHksIHopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50b1AgPSBmdW5jdGlvbiB0b1AoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgemludiA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHZhciB6aW52MiA9IHppbnYucmVkU3FyKCk7XG4gIHZhciBheCA9IHRoaXMueC5yZWRNdWwoemludjIpO1xuICB2YXIgYXkgPSB0aGlzLnkucmVkTXVsKHppbnYyKS5yZWRNdWwoemludik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQoYXgsIGF5KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCksIHRoaXMueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAxMk0gKyA0UyArIDdBXG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54LnJlZE11bChwejIpO1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55LnJlZE11bChwejIucmVkTXVsKHAueikpO1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyLnJlZE11bCh0aGlzLnopKTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChwLnopLnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gZnVuY3Rpb24gbWl4ZWRBZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwLnRvSigpO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gOE0gKyAzUyArIDdBXG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54O1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55O1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyKS5yZWRNdWwodGhpcy56KTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKHBvdykge1xuICBpZiAocG93ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG4gIGlmICghcG93KVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BIHx8IHRoaXMuY3VydmUudGhyZWVBKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG93OyBpKyspXG4gICAgICByID0gci5kYmwoKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8vIDFNICsgMlMgKyAxQSArIE4gKiAoNFMgKyA1TSArIDhBKVxuICAvLyBOID0gMSA9PiA2TSArIDZTICsgOUFcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG4gIHZhciB0aW52ID0gdGhpcy5jdXJ2ZS50aW52O1xuXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICAvLyBSZXVzZSByZXN1bHRzXG4gIHZhciBqeWQgPSBqeS5yZWRBZGQoankpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKSB7XG4gICAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICAgIHZhciBqeWQyID0ganlkLnJlZFNxcigpO1xuICAgIHZhciBqeWQ0ID0ganlkMi5yZWRTcXIoKTtcbiAgICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICAgIHZhciB0MSA9IGp4LnJlZE11bChqeWQyKTtcbiAgICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gICAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG4gICAgdmFyIGRueSA9IGMucmVkTXVsKHQyKTtcbiAgICBkbnkgPSBkbnkucmVkSUFkZChkbnkpLnJlZElTdWIoanlkNCk7XG4gICAgdmFyIG56ID0ganlkLnJlZE11bChqeik7XG4gICAgaWYgKGkgKyAxIDwgcG93KVxuICAgICAgano0ID0gano0LnJlZE11bChqeWQ0KTtcblxuICAgIGp4ID0gbng7XG4gICAganogPSBuejtcbiAgICBqeWQgPSBkbnk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoangsIGp5ZC5yZWRNdWwodGludiksIGp6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuemVyb0EpXG4gICAgcmV0dXJuIHRoaXMuX3plcm9EYmwoKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS50aHJlZUEpXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlRGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fZGJsKCk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl96ZXJvRGJsID0gZnVuY3Rpb24gX3plcm9EYmwoKSB7XG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIC8vIFogPSAxXG4gIGlmICh0aGlzLnpPbmUpIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctbWRibC0yMDA3LWJsXG4gICAgLy8gMU0gKyA1UyArIDE0QVxuXG4gICAgLy8gWFggPSBYMV4yXG4gICAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIFlZID0gWTFeMlxuICAgIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBZWVlZID0gWVleMlxuICAgIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gICAgLy8gUyA9IDIgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpXG4gICAgdmFyIHMgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICAgIHMgPSBzLnJlZElBZGQocyk7XG4gICAgLy8gTSA9IDMgKiBYWCArIGE7IGEgPSAwXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAgIC8vIFQgPSBNIF4gMiAtIDIqU1xuICAgIHZhciB0ID0gbS5yZWRTcXIoKS5yZWRJU3ViKHMpLnJlZElTdWIocyk7XG5cbiAgICAvLyA4ICogWVlZWVxuICAgIHZhciB5eXl5OCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG5cbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgbnkgPSBtLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpO1xuICAgIC8vIFozID0gMipZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOS1sXG4gICAgLy8gMk0gKyA1UyArIDEzQVxuXG4gICAgLy8gQSA9IFgxXjJcbiAgICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBCID0gWTFeMlxuICAgIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIEMgPSBCXjJcbiAgICB2YXIgYyA9IGIucmVkU3FyKCk7XG4gICAgLy8gRCA9IDIgKiAoKFgxICsgQileMiAtIEEgLSBDKVxuICAgIHZhciBkID0gdGhpcy54LnJlZEFkZChiKS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYyk7XG4gICAgZCA9IGQucmVkSUFkZChkKTtcbiAgICAvLyBFID0gMyAqIEFcbiAgICB2YXIgZSA9IGEucmVkQWRkKGEpLnJlZElBZGQoYSk7XG4gICAgLy8gRiA9IEVeMlxuICAgIHZhciBmID0gZS5yZWRTcXIoKTtcblxuICAgIC8vIDggKiBDXG4gICAgdmFyIGM4ID0gYy5yZWRJQWRkKGMpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG4gICAgYzggPSBjOC5yZWRJQWRkKGM4KTtcblxuICAgIC8vIFgzID0gRiAtIDIgKiBEXG4gICAgbnggPSBmLnJlZElTdWIoZCkucmVkSVN1YihkKTtcbiAgICAvLyBZMyA9IEUgKiAoRCAtIFgzKSAtIDggKiBDXG4gICAgbnkgPSBlLnJlZE11bChkLnJlZElTdWIobngpKS5yZWRJU3ViKGM4KTtcbiAgICAvLyBaMyA9IDIgKiBZMSAqIFoxXG4gICAgbnogPSB0aGlzLnkucmVkTXVsKHRoaXMueik7XG4gICAgbnogPSBuei5yZWRJQWRkKG56KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX3RocmVlRGJsID0gZnVuY3Rpb24gX3RocmVlRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0zLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNUFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKTtcbiAgICAvLyBUID0gTV4yIC0gMiAqIFNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuICAgIC8vIFgzID0gVFxuICAgIG54ID0gdDtcbiAgICAvLyBZMyA9IE0gKiAoUyAtIFQpIC0gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIgKiBZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sI2RvdWJsaW5nLWRibC0yMDAxLWJcbiAgICAvLyAzTSArIDVTXG5cbiAgICAvLyBkZWx0YSA9IFoxXjJcbiAgICB2YXIgZGVsdGEgPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgLy8gZ2FtbWEgPSBZMV4yXG4gICAgdmFyIGdhbW1hID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIGJldGEgPSBYMSAqIGdhbW1hXG4gICAgdmFyIGJldGEgPSB0aGlzLngucmVkTXVsKGdhbW1hKTtcbiAgICAvLyBhbHBoYSA9IDMgKiAoWDEgLSBkZWx0YSkgKiAoWDEgKyBkZWx0YSlcbiAgICB2YXIgYWxwaGEgPSB0aGlzLngucmVkU3ViKGRlbHRhKS5yZWRNdWwodGhpcy54LnJlZEFkZChkZWx0YSkpO1xuICAgIGFscGhhID0gYWxwaGEucmVkQWRkKGFscGhhKS5yZWRJQWRkKGFscGhhKTtcbiAgICAvLyBYMyA9IGFscGhhXjIgLSA4ICogYmV0YVxuICAgIHZhciBiZXRhNCA9IGJldGEucmVkSUFkZChiZXRhKTtcbiAgICBiZXRhNCA9IGJldGE0LnJlZElBZGQoYmV0YTQpO1xuICAgIHZhciBiZXRhOCA9IGJldGE0LnJlZEFkZChiZXRhNCk7XG4gICAgbnggPSBhbHBoYS5yZWRTcXIoKS5yZWRJU3ViKGJldGE4KTtcbiAgICAvLyBaMyA9IChZMSArIFoxKV4yIC0gZ2FtbWEgLSBkZWx0YVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoZ2FtbWEpLnJlZElTdWIoZGVsdGEpO1xuICAgIC8vIFkzID0gYWxwaGEgKiAoNCAqIGJldGEgLSBYMykgLSA4ICogZ2FtbWFeMlxuICAgIHZhciBnZ2FtbWE4ID0gZ2FtbWEucmVkU3FyKCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgbnkgPSBhbHBoYS5yZWRNdWwoYmV0YTQucmVkSVN1YihueCkpLnJlZElTdWIoZ2dhbW1hOCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl9kYmwgPSBmdW5jdGlvbiBfZGJsKCkge1xuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICAvLyA0TSArIDZTICsgMTBBXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICB2YXIgangyID0gangucmVkU3FyKCk7XG4gIHZhciBqeTIgPSBqeS5yZWRTcXIoKTtcblxuICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICB2YXIganhkNCA9IGp4LnJlZEFkZChqeCk7XG4gIGp4ZDQgPSBqeGQ0LnJlZElBZGQoanhkNCk7XG4gIHZhciB0MSA9IGp4ZDQucmVkTXVsKGp5Mik7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0MS5yZWRBZGQodDEpKTtcbiAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG5cbiAgdmFyIGp5ZDggPSBqeTIucmVkU3FyKCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHQyKS5yZWRJU3ViKGp5ZDgpO1xuICB2YXIgbnogPSBqeS5yZWRBZGQoankpLnJlZE11bChqeik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50cnBsID0gZnVuY3Rpb24gdHJwbCgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTtcblxuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbCN0cmlwbGluZy10cGwtMjAwNy1ibFxuICAvLyA1TSArIDEwUyArIC4uLlxuXG4gIC8vIFhYID0gWDFeMlxuICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIFlZID0gWTFeMlxuICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIFpaID0gWjFeMlxuICB2YXIgenogPSB0aGlzLnoucmVkU3FyKCk7XG4gIC8vIFlZWVkgPSBZWV4yXG4gIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gIC8vIE0gPSAzICogWFggKyBhICogWloyOyBhID0gMFxuICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCk7XG4gIC8vIE1NID0gTV4yXG4gIHZhciBtbSA9IG0ucmVkU3FyKCk7XG4gIC8vIEUgPSA2ICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKSAtIE1NXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgZSA9IGUucmVkSUFkZChlKTtcbiAgZSA9IGUucmVkQWRkKGUpLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZElTdWIobW0pO1xuICAvLyBFRSA9IEVeMlxuICB2YXIgZWUgPSBlLnJlZFNxcigpO1xuICAvLyBUID0gMTYqWVlZWVxuICB2YXIgdCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgLy8gVSA9IChNICsgRSleMiAtIE1NIC0gRUUgLSBUXG4gIHZhciB1ID0gbS5yZWRJQWRkKGUpLnJlZFNxcigpLnJlZElTdWIobW0pLnJlZElTdWIoZWUpLnJlZElTdWIodCk7XG4gIC8vIFgzID0gNCAqIChYMSAqIEVFIC0gNCAqIFlZICogVSlcbiAgdmFyIHl5dTQgPSB5eS5yZWRNdWwodSk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHZhciBueCA9IHRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoeXl1NCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIC8vIFkzID0gOCAqIFkxICogKFUgKiAoVCAtIFUpIC0gRSAqIEVFKVxuICB2YXIgbnkgPSB0aGlzLnkucmVkTXVsKHUucmVkTXVsKHQucmVkSVN1Yih1KSkucmVkSVN1YihlLnJlZE11bChlZSkpKTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgLy8gWjMgPSAoWjEgKyBFKV4yIC0gWlogLSBFRVxuICB2YXIgbnogPSB0aGlzLnoucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIoenopLnJlZElTdWIoZWUpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGssIGtiYXNlKSB7XG4gIGsgPSBuZXcgQk4oaywga2Jhc2UpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKHApIHtcbiAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgcmV0dXJuIHRoaXMuZXEocC50b0ooKSk7XG5cbiAgaWYgKHRoaXMgPT09IHApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8geDEgKiB6Ml4yID09IHgyICogejFeMlxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIGlmICh0aGlzLngucmVkTXVsKHB6MikucmVkSVN1YihwLngucmVkTXVsKHoyKSkuY21wbigwKSAhPT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8geTEgKiB6Ml4zID09IHkyICogejFeM1xuICB2YXIgejMgPSB6Mi5yZWRNdWwodGhpcy56KTtcbiAgdmFyIHB6MyA9IHB6Mi5yZWRNdWwocC56KTtcbiAgcmV0dXJuIHRoaXMueS5yZWRNdWwocHozKS5yZWRJU3ViKHAueS5yZWRNdWwoejMpKS5jbXBuKDApID09PSAwO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgenMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh6cyk7XG4gIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeGMgPSB4LmNsb25lKCk7XG4gIHZhciB0ID0gdGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh6cyk7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgSlBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIEpQb2ludCB4OiAnICsgdGhpcy54LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnbW9udCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuaTQgPSBuZXcgQk4oNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmEyNCA9IHRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKTtcbn1cbmluaGVyaXRzKE1vbnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRDdXJ2ZTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQubm9ybWFsaXplKCkueDtcbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtcbiAgdmFyIHkgPSByaHMucmVkU3FydCgpO1xuXG4gIHJldHVybiB5LnJlZFNxcigpLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUuemVybztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICByZXR1cm4gdGhpcy5wb2ludCh1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpLCAxKTtcbn07XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB6KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeik7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcbiAgLy8gTm8tb3Bcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZSgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0gfHwgY3VydmUub25lKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZG91YmxpbmctZGJsLTE5ODctbS0zXG4gIC8vIDJNICsgMlMgKyA0QVxuXG4gIC8vIEEgPSBYMSArIFoxXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBBQSA9IEFeMlxuICB2YXIgYWEgPSBhLnJlZFNxcigpO1xuICAvLyBCID0gWDEgLSBaMVxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQkIgPSBCXjJcbiAgdmFyIGJiID0gYi5yZWRTcXIoKTtcbiAgLy8gQyA9IEFBIC0gQkJcbiAgdmFyIGMgPSBhYS5yZWRTdWIoYmIpO1xuICAvLyBYMyA9IEFBICogQkJcbiAgdmFyIG54ID0gYWEucmVkTXVsKGJiKTtcbiAgLy8gWjMgPSBDICogKEJCICsgQTI0ICogQylcbiAgdmFyIG56ID0gYy5yZWRNdWwoYmIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChjKSkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaWZmQWRkID0gZnVuY3Rpb24gZGlmZkFkZChwLCBkaWZmKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RpZmZhZGQtZGFkZC0xOTg3LW0tM1xuICAvLyA0TSArIDJTICsgNkFcblxuICAvLyBBID0gWDIgKyBaMlxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQiA9IFgyIC0gWjJcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEMgPSBYMyArIFozXG4gIHZhciBjID0gcC54LnJlZEFkZChwLnopO1xuICAvLyBEID0gWDMgLSBaM1xuICB2YXIgZCA9IHAueC5yZWRTdWIocC56KTtcbiAgLy8gREEgPSBEICogQVxuICB2YXIgZGEgPSBkLnJlZE11bChhKTtcbiAgLy8gQ0IgPSBDICogQlxuICB2YXIgY2IgPSBjLnJlZE11bChiKTtcbiAgLy8gWDUgPSBaMSAqIChEQSArIENCKV4yXG4gIHZhciBueCA9IGRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSk7XG4gIC8vIFo1ID0gWDEgKiAoREEgLSBDQileMlxuICB2YXIgbnogPSBkaWZmLngucmVkTXVsKGRhLnJlZElTdWIoY2IpLnJlZFNxcigpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICB2YXIgdCA9IGsuY2xvbmUoKTtcbiAgdmFyIGEgPSB0aGlzOyAvLyAoTiAvIDIpICogUSArIFFcbiAgdmFyIGIgPSB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpOyAvLyAoTiAvIDIpICogUVxuICB2YXIgYyA9IHRoaXM7IC8vIFFcblxuICBmb3IgKHZhciBiaXRzID0gW107IHQuY21wbigwKSAhPT0gMDsgdC5pdXNocm4oMSkpXG4gICAgYml0cy5wdXNoKHQuYW5kbG4oMSkpO1xuXG4gIGZvciAodmFyIGkgPSBiaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJpdHNbaV0gPT09IDApIHtcbiAgICAgIC8vIE4gKiBRICsgUSA9ICgoTiAvIDIpICogUSArIFEpKSArIChOIC8gMikgKiBRXG4gICAgICBhID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgPSAyICogKChOIC8gMikgKiBRICsgUSkpXG4gICAgICBiID0gYi5kYmwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTiAqIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSArICgoTiAvIDIpICogUSlcbiAgICAgIGIgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSArIFEgPSAyICogKChOIC8gMikgKiBRICsgUSlcbiAgICAgIGEgPSBhLmRibCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuanVtbEFkZCA9IGZ1bmN0aW9uIGp1bWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSByZXF1aXJlKCcuL2Jhc2UnKTtcblxudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gRWR3YXJkc0N1cnZlKGNvbmYpIHtcbiAgLy8gTk9URTogSW1wb3J0YW50IGFzIHdlIGFyZSBjcmVhdGluZyBwb2ludCBpbiBCYXNlLmNhbGwoKVxuICB0aGlzLnR3aXN0ZWQgPSAoY29uZi5hIHwgMCkgIT09IDE7XG4gIHRoaXMubU9uZUEgPSB0aGlzLnR3aXN0ZWQgJiYgKGNvbmYuYSB8IDApID09PSAtMTtcbiAgdGhpcy5leHRlbmRlZCA9IHRoaXMubU9uZUE7XG5cbiAgQmFzZS5jYWxsKHRoaXMsICdlZHdhcmRzJywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnVtb2QodGhpcy5yZWQubSk7XG4gIHRoaXMuYSA9IHRoaXMuYS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYyA9IG5ldyBCTihjb25mLmMsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYzIgPSB0aGlzLmMucmVkU3FyKCk7XG4gIHRoaXMuZCA9IG5ldyBCTihjb25mLmQsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuZGQgPSB0aGlzLmQucmVkQWRkKHRoaXMuZCk7XG5cbiAgYXNzZXJ0KCF0aGlzLnR3aXN0ZWQgfHwgdGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpID09PSAwKTtcbiAgdGhpcy5vbmVDID0gKGNvbmYuYyB8IDApID09PSAxO1xufVxuaW5oZXJpdHMoRWR3YXJkc0N1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gRWR3YXJkc0N1cnZlO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxBID0gZnVuY3Rpb24gX211bEEobnVtKSB7XG4gIGlmICh0aGlzLm1PbmVBKVxuICAgIHJldHVybiBudW0ucmVkTmVnKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5hLnJlZE11bChudW0pO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQyA9IGZ1bmN0aW9uIF9tdWxDKG51bSkge1xuICBpZiAodGhpcy5vbmVDKVxuICAgIHJldHVybiBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jLnJlZE11bChudW0pO1xufTtcblxuLy8gSnVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNob3J0IGN1cnZlXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHksIHosIHQpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHgyKSk7XG4gIHZhciBsaHMgPSB0aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeDIpKTtcblxuICB2YXIgeTIgPSByaHMucmVkTXVsKGxocy5yZWRJbnZtKCkpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21ZID0gZnVuY3Rpb24gcG9pbnRGcm9tWSh5LCBvZGQpIHtcbiAgeSA9IG5ldyBCTih5LCAxNik7XG4gIGlmICgheS5yZWQpXG4gICAgeSA9IHkudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIHheMiA9ICh5XjIgLSBjXjIpIC8gKGNeMiBkIHleMiAtIGEpXG4gIHZhciB5MiA9IHkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB5Mi5yZWRTdWIodGhpcy5jMik7XG4gIHZhciByaHMgPSB5Mi5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSk7XG4gIHZhciB4MiA9IGxocy5yZWRNdWwocmhzLnJlZEludm0oKSk7XG5cbiAgaWYgKHgyLmNtcCh0aGlzLnplcm8pID09PSAwKSB7XG4gICAgaWYgKG9kZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLnBvaW50KHRoaXMuemVybywgeSk7XG4gIH1cblxuICB2YXIgeCA9IHgyLnJlZFNxcnQoKTtcbiAgaWYgKHgucmVkU3FyKCkucmVkU3ViKHgyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICBpZiAoeC5mcm9tUmVkKCkuaXNPZGQoKSAhPT0gb2RkKVxuICAgIHggPSB4LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ3VydmU6IEEgKiBYXjIgKyBZXjIgPSBDXjIgKiAoMSArIEQgKiBYXjIgKiBZXjIpXG4gIHBvaW50Lm5vcm1hbGl6ZSgpO1xuXG4gIHZhciB4MiA9IHBvaW50LngucmVkU3FyKCk7XG4gIHZhciB5MiA9IHBvaW50LnkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB4Mi5yZWRNdWwodGhpcy5hKS5yZWRBZGQoeTIpO1xuICB2YXIgcmhzID0gdGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoeDIpLnJlZE11bCh5MikpKTtcblxuICByZXR1cm4gbGhzLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHksIHosIHQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMueSA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnpPbmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSB6ID8gbmV3IEJOKHosIDE2KSA6IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHQgJiYgbmV3IEJOKHQsIDE2KTtcbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAodGhpcy50ICYmICF0aGlzLnQucmVkKVxuICAgICAgdGhpcy50ID0gdGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xuXG4gICAgLy8gVXNlIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gICAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQgJiYgIXRoaXMudCkge1xuICAgICAgdGhpcy50ID0gdGhpcy54LnJlZE11bCh0aGlzLnkpO1xuICAgICAgaWYgKCF0aGlzLnpPbmUpXG4gICAgICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSk7XG4gICAgfVxuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgeiwgdCk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0sIG9ialsyXSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnguY21wbigwKSA9PT0gMCAmJlxuICAgICh0aGlzLnkuY21wKHRoaXMueikgPT09IDAgfHxcbiAgICAodGhpcy56T25lICYmIHRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSA9PT0gMCkpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHREYmwgPSBmdW5jdGlvbiBfZXh0RGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1od2NkXG4gIC8vIDRNICsgNFNcblxuICAvLyBBID0gWDFeMlxuICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gQiA9IFkxXjJcbiAgdmFyIGIgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIEMgPSAyICogWjFeMlxuICB2YXIgYyA9IHRoaXMuei5yZWRTcXIoKTtcbiAgYyA9IGMucmVkSUFkZChjKTtcbiAgLy8gRCA9IGEgKiBBXG4gIHZhciBkID0gdGhpcy5jdXJ2ZS5fbXVsQShhKTtcbiAgLy8gRSA9IChYMSArIFkxKV4yIC0gQSAtIEJcbiAgdmFyIGUgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGIpO1xuICAvLyBHID0gRCArIEJcbiAgdmFyIGcgPSBkLnJlZEFkZChiKTtcbiAgLy8gRiA9IEcgLSBDXG4gIHZhciBmID0gZy5yZWRTdWIoYyk7XG4gIC8vIEggPSBEIC0gQlxuICB2YXIgaCA9IGQucmVkU3ViKGIpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pEYmwgPSBmdW5jdGlvbiBfcHJvakRibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtYmJqbHBcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwNy1ibFxuICAvLyBhbmQgb3RoZXJzXG4gIC8vIEdlbmVyYWxseSAzTSArIDRTIG9yIDJNICsgNFNcblxuICAvLyBCID0gKFgxICsgWTEpXjJcbiAgdmFyIGIgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCk7XG4gIC8vIEMgPSBYMV4yXG4gIHZhciBjID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBEID0gWTFeMlxuICB2YXIgZCA9IHRoaXMueS5yZWRTcXIoKTtcblxuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gRSA9IGEgKiBDXG4gICAgdmFyIGUgPSB0aGlzLmN1cnZlLl9tdWxBKGMpO1xuICAgIC8vIEYgPSBFICsgRFxuICAgIHZhciBmID0gZS5yZWRBZGQoZCk7XG4gICAgaWYgKHRoaXMuek9uZSkge1xuICAgICAgLy8gWDMgPSAoQiAtIEMgLSBEKSAqIChGIC0gMilcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkU3ViKGQpLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEZeMiAtIDIgKiBGXG4gICAgICBueiA9IGYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSCA9IFoxXjJcbiAgICAgIHZhciBoID0gdGhpcy56LnJlZFNxcigpO1xuICAgICAgLy8gSiA9IEYgLSAyICogSFxuICAgICAgdmFyIGogPSBmLnJlZFN1YihoKS5yZWRJU3ViKGgpO1xuICAgICAgLy8gWDMgPSAoQi1DLUQpKkpcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkSVN1YihkKS5yZWRNdWwoaik7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRiAqIEpcbiAgICAgIG56ID0gZi5yZWRNdWwoaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEUgPSBDICsgRFxuICAgIHZhciBlID0gYy5yZWRBZGQoZCk7XG4gICAgLy8gSCA9IChjICogWjEpXjJcbiAgICB2YXIgaCA9IHRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKTtcbiAgICAvLyBKID0gRSAtIDIgKiBIXG4gICAgdmFyIGogPSBlLnJlZFN1YihoKS5yZWRTdWIoaCk7XG4gICAgLy8gWDMgPSBjICogKEIgLSBFKSAqIEpcbiAgICBueCA9IHRoaXMuY3VydmUuX211bEMoYi5yZWRJU3ViKGUpKS5yZWRNdWwoaik7XG4gICAgLy8gWTMgPSBjICogRSAqIChDIC0gRClcbiAgICBueSA9IHRoaXMuY3VydmUuX211bEMoZSkucmVkTXVsKGMucmVkSVN1YihkKSk7XG4gICAgLy8gWjMgPSBFICogSlxuICAgIG56ID0gZS5yZWRNdWwoaik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRG91YmxlIGluIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHREYmwoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qRGJsKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dEFkZCA9IGZ1bmN0aW9uIF9leHRBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1od2NkLTNcbiAgLy8gOE1cblxuICAvLyBBID0gKFkxIC0gWDEpICogKFkyIC0gWDIpXG4gIHZhciBhID0gdGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChwLnkucmVkU3ViKHAueCkpO1xuICAvLyBCID0gKFkxICsgWDEpICogKFkyICsgWDIpXG4gIHZhciBiID0gdGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChwLnkucmVkQWRkKHAueCkpO1xuICAvLyBDID0gVDEgKiBrICogVDJcbiAgdmFyIGMgPSB0aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChwLnQpO1xuICAvLyBEID0gWjEgKiAyICogWjJcbiAgdmFyIGQgPSB0aGlzLnoucmVkTXVsKHAuei5yZWRBZGQocC56KSk7XG4gIC8vIEUgPSBCIC0gQVxuICB2YXIgZSA9IGIucmVkU3ViKGEpO1xuICAvLyBGID0gRCAtIENcbiAgdmFyIGYgPSBkLnJlZFN1YihjKTtcbiAgLy8gRyA9IEQgKyBDXG4gIHZhciBnID0gZC5yZWRBZGQoYyk7XG4gIC8vIEggPSBCICsgQVxuICB2YXIgaCA9IGIucmVkQWRkKGEpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pBZGQgPSBmdW5jdGlvbiBfcHJvakFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWJiamxwXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDctYmxcbiAgLy8gMTBNICsgMVNcblxuICAvLyBBID0gWjEgKiBaMlxuICB2YXIgYSA9IHRoaXMuei5yZWRNdWwocC56KTtcbiAgLy8gQiA9IEFeMlxuICB2YXIgYiA9IGEucmVkU3FyKCk7XG4gIC8vIEMgPSBYMSAqIFgyXG4gIHZhciBjID0gdGhpcy54LnJlZE11bChwLngpO1xuICAvLyBEID0gWTEgKiBZMlxuICB2YXIgZCA9IHRoaXMueS5yZWRNdWwocC55KTtcbiAgLy8gRSA9IGQgKiBDICogRFxuICB2YXIgZSA9IHRoaXMuY3VydmUuZC5yZWRNdWwoYykucmVkTXVsKGQpO1xuICAvLyBGID0gQiAtIEVcbiAgdmFyIGYgPSBiLnJlZFN1YihlKTtcbiAgLy8gRyA9IEIgKyBFXG4gIHZhciBnID0gYi5yZWRBZGQoZSk7XG4gIC8vIFgzID0gQSAqIEYgKiAoKFgxICsgWTEpICogKFgyICsgWTIpIC0gQyAtIEQpXG4gIHZhciB0bXAgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHAueC5yZWRBZGQocC55KSkucmVkSVN1YihjKS5yZWRJU3ViKGQpO1xuICB2YXIgbnggPSBhLnJlZE11bChmKS5yZWRNdWwodG1wKTtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBhICogQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGMpKSk7XG4gICAgLy8gWjMgPSBGICogR1xuICAgIG56ID0gZi5yZWRNdWwoZyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1YihjKSk7XG4gICAgLy8gWjMgPSBjICogRiAqIEdcbiAgICBueiA9IHRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKGcpO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcDtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHRBZGQocCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakFkZChwKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCBmYWxzZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCB0cnVlKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIGlmICh0aGlzLnpPbmUpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gTm9ybWFsaXplIGNvb3JkaW5hdGVzXG4gIHZhciB6aSA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHRoaXMueCA9IHRoaXMueC5yZWRNdWwoemkpO1xuICB0aGlzLnkgPSB0aGlzLnkucmVkTXVsKHppKTtcbiAgaWYgKHRoaXMudClcbiAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHppKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHRoaXMuek9uZSA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ICYmIHRoaXMudC5yZWROZWcoKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKG90aGVyKSB7XG4gIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMuZ2V0WSgpLmNtcChvdGhlci5nZXRZKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxWFRvUCA9IGZ1bmN0aW9uIGVxWFRvUCh4KSB7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTtcbiAgZm9yICg7Oykge1xuICAgIHhjLmlhZGQodGhpcy5jdXJ2ZS5uKTtcbiAgICBpZiAoeGMuY21wKHRoaXMuY3VydmUucCkgPj0gMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJ4LnJlZElBZGQodCk7XG4gICAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8vIENvbXBhdGliaWxpdHkgd2l0aCBCYXNlQ3VydmVcblBvaW50LnByb3RvdHlwZS50b1AgPSBQb2ludC5wcm90b3R5cGUubm9ybWFsaXplO1xuUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gUG9pbnQucHJvdG90eXBlLmFkZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBzaGFDb21tb24gPSByZXF1aXJlKCcuL2NvbW1vbicpO1xuXG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgZnRfMSA9IHNoYUNvbW1vbi5mdF8xO1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGExX0sgPSBbXG4gIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsXG4gIDB4OEYxQkJDREMsIDB4Q0E2MkMxRDZcbl07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gW1xuICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsXG4gICAgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoODApO1xufVxuXG51dGlscy5pbmhlcml0cyhTSEExLCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yIChpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuLzUxMicpO1xuXG5mdW5jdGlvbiBTSEEzODQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKVxuICAgIHJldHVybiBuZXcgU0hBMzg0KCk7XG5cbiAgU0hBNTEyLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4LFxuICAgIDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcsXG4gICAgMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyxcbiAgICAweDE1MmZlY2Q4LCAweGY3MGU1OTM5LFxuICAgIDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEsXG4gICAgMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSxcbiAgICAweGRiMGMyZTBkLCAweDY0Zjk4ZmE3LFxuICAgIDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTM4NCwgU0hBNTEyKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMzg0O1xuXG5TSEEzODQuYmxvY2tTaXplID0gMTAyNDtcblNIQTM4NC5vdXRTaXplID0gMzg0O1xuU0hBMzg0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTM4NC5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTM4NC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDEyKSwgJ2JpZycpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl8zID0gdXRpbHMuc3VtMzJfMztcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG5mdW5jdGlvbiBSSVBFTUQxNjAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSSVBFTUQxNjApKVxuICAgIHJldHVybiBuZXcgUklQRU1EMTYwKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG5cbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuZW5kaWFuID0gJ2xpdHRsZSc7XG59XG51dGlscy5pbmhlcml0cyhSSVBFTUQxNjAsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnJpcGVtZDE2MCA9IFJJUEVNRDE2MDtcblxuUklQRU1EMTYwLmJsb2NrU2l6ZSA9IDUxMjtcblJJUEVNRDE2MC5vdXRTaXplID0gMTYwO1xuUklQRU1EMTYwLmhtYWNTdHJlbmd0aCA9IDE5MjtcblJJUEVNRDE2MC5wYWRMZW5ndGggPSA2NDtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIEEgPSB0aGlzLmhbMF07XG4gIHZhciBCID0gdGhpcy5oWzFdO1xuICB2YXIgQyA9IHRoaXMuaFsyXTtcbiAgdmFyIEQgPSB0aGlzLmhbM107XG4gIHZhciBFID0gdGhpcy5oWzRdO1xuICB2YXIgQWggPSBBO1xuICB2YXIgQmggPSBCO1xuICB2YXIgQ2ggPSBDO1xuICB2YXIgRGggPSBEO1xuICB2YXIgRWggPSBFO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyBqKyspIHtcbiAgICB2YXIgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEEsIGYoaiwgQiwgQywgRCksIG1zZ1tyW2pdICsgc3RhcnRdLCBLKGopKSxcbiAgICAgICAgc1tqXSksXG4gICAgICBFKTtcbiAgICBBID0gRTtcbiAgICBFID0gRDtcbiAgICBEID0gcm90bDMyKEMsIDEwKTtcbiAgICBDID0gQjtcbiAgICBCID0gVDtcbiAgICBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQWgsIGYoNzkgLSBqLCBCaCwgQ2gsIERoKSwgbXNnW3JoW2pdICsgc3RhcnRdLCBLaChqKSksXG4gICAgICAgIHNoW2pdKSxcbiAgICAgIEVoKTtcbiAgICBBaCA9IEVoO1xuICAgIEVoID0gRGg7XG4gICAgRGggPSByb3RsMzIoQ2gsIDEwKTtcbiAgICBDaCA9IEJoO1xuICAgIEJoID0gVDtcbiAgfVxuICBUID0gc3VtMzJfMyh0aGlzLmhbMV0sIEMsIERoKTtcbiAgdGhpcy5oWzFdID0gc3VtMzJfMyh0aGlzLmhbMl0sIEQsIEVoKTtcbiAgdGhpcy5oWzJdID0gc3VtMzJfMyh0aGlzLmhbM10sIEUsIEFoKTtcbiAgdGhpcy5oWzNdID0gc3VtMzJfMyh0aGlzLmhbNF0sIEEsIEJoKTtcbiAgdGhpcy5oWzRdID0gc3VtMzJfMyh0aGlzLmhbMF0sIEIsIENoKTtcbiAgdGhpcy5oWzBdID0gVDtcbn07XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnbGl0dGxlJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdsaXR0bGUnKTtcbn07XG5cbmZ1bmN0aW9uIGYoaiwgeCwgeSwgeikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4geCBeIHkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAoeCAmIHkpIHwgKCh+eCkgJiB6KTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gKHggfCAofnkpKSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuICh4ICYgeikgfCAoeSAmICh+eikpO1xuICBlbHNlXG4gICAgcmV0dXJuIHggXiAoeSB8ICh+eikpO1xufVxuXG5mdW5jdGlvbiBLKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWE4Mjc5OTk7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmVkOWViYTE7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4OGYxYmJjZGM7XG4gIGVsc2VcbiAgICByZXR1cm4gMHhhOTUzZmQ0ZTtcbn1cblxuZnVuY3Rpb24gS2goaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHg1MGEyOGJlNjtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YzRkZDEyNDtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZDcwM2VmMztcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg3YTZkNzZlOTtcbiAgZWxzZVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xufVxuXG52YXIgciA9IFtcbiAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgNywgNCwgMTMsIDEsIDEwLCA2LCAxNSwgMywgMTIsIDAsIDksIDUsIDIsIDE0LCAxMSwgOCxcbiAgMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMixcbiAgMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMixcbiAgNCwgMCwgNSwgOSwgNywgMTIsIDIsIDEwLCAxNCwgMSwgMywgOCwgMTEsIDYsIDE1LCAxM1xuXTtcblxudmFyIHJoID0gW1xuICA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyLFxuICA2LCAxMSwgMywgNywgMCwgMTMsIDUsIDEwLCAxNCwgMTUsIDgsIDEyLCA0LCA5LCAxLCAyLFxuICAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzLFxuICA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0LFxuICAxMiwgMTUsIDEwLCA0LCAxLCA1LCA4LCA3LCA2LCAyLCAxMywgMTQsIDAsIDMsIDksIDExXG5dO1xuXG52YXIgcyA9IFtcbiAgMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4LFxuICA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTIsXG4gIDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNSxcbiAgMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyLFxuICA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbl07XG5cbnZhciBzaCA9IFtcbiAgOCwgOSwgOSwgMTEsIDEzLCAxNSwgMTUsIDUsIDcsIDcsIDgsIDExLCAxNCwgMTQsIDEyLCA2LFxuICA5LCAxMywgMTUsIDcsIDEyLCA4LCA5LCAxMSwgNywgNywgMTIsIDcsIDYsIDE1LCAxMywgMTEsXG4gIDksIDcsIDE1LCAxMSwgOCwgNiwgNiwgMTQsIDEyLCAxMywgNSwgMTQsIDEzLCAxMywgNywgNSxcbiAgMTUsIDUsIDgsIDExLCAxNCwgMTQsIDYsIDE0LCA2LCA5LCAxMiwgOSwgMTIsIDUsIDE1LCA4LFxuICA4LCA1LCAxMiwgOSwgMTIsIDUsIDE0LCA2LCA4LCAxMywgNiwgNSwgMTUsIDEzLCAxMSwgMTFcbl07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yIChpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHg2YTtcbiAgdGhpcy5vdXRlciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcbn07XG5cbkhtYWMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIGVuYykge1xuICB0aGlzLmlubmVyLnVwZGF0ZShtc2csIGVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuSG1hYy5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKTtcbiAgcmV0dXJuIHRoaXMub3V0ZXIuZGlnZXN0KGVuYyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRvdWJsZXM6IHtcbiAgICBzdGVwOiA0LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYScsXG4gICAgICAgICdmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgnLFxuICAgICAgICAnMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5JyxcbiAgICAgICAgJ2QzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCcsXG4gICAgICAgICc0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYycsXG4gICAgICAgICc0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEnLFxuICAgICAgICAnOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhJyxcbiAgICAgICAgJzVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCcsXG4gICAgICAgICdjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQnLFxuICAgICAgICAnOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkJyxcbiAgICAgICAgJ2U1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMScsXG4gICAgICAgICc5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAnLFxuICAgICAgICAnNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3JyxcbiAgICAgICAgJzEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MicsXG4gICAgICAgICcyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNycsXG4gICAgICAgICc3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQnLFxuICAgICAgICAnNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzJyxcbiAgICAgICAgJzdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhJyxcbiAgICAgICAgJzUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCcsXG4gICAgICAgICdiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQnLFxuICAgICAgICAnNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1JyxcbiAgICAgICAgJzdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCcsXG4gICAgICAgICc0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MnLFxuICAgICAgICAnMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2JyxcbiAgICAgICAgJzZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOScsXG4gICAgICAgICdjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEnLFxuICAgICAgICAnODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiJyxcbiAgICAgICAgJ2ZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMycsXG4gICAgICAgICcyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQnLFxuICAgICAgICAnZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwJyxcbiAgICAgICAgJzczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCcsXG4gICAgICAgICdlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYScsXG4gICAgICAgICc2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEnLFxuICAgICAgICAnMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllJyxcbiAgICAgICAgJ2VmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MScsXG4gICAgICAgICcyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYnLFxuICAgICAgICAnNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgnLFxuICAgICAgICAnZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkJyxcbiAgICAgICAgJzY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NicsXG4gICAgICAgICczNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkJyxcbiAgICAgICAgJ2RkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNScsXG4gICAgICAgICc5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYnLFxuICAgICAgICAnNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxJyxcbiAgICAgICAgJzM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjJyxcbiAgICAgICAgJ2MyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MScsXG4gICAgICAgICcxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UnLFxuICAgICAgICAnNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxJyxcbiAgICAgICAgJ2M2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMycsXG4gICAgICAgICdiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYnLFxuICAgICAgICAnNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5JyxcbiAgICAgICAgJ2FlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZScsXG4gICAgICAgICdiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjknLFxuICAgICAgICAnNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyJyxcbiAgICAgICAgJzgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMycsXG4gICAgICAgICc3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MnLFxuICAgICAgICAnY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhJyxcbiAgICAgICAgJzJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MScsXG4gICAgICAgICdlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMnLFxuICAgICAgICAnZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4JyxcbiAgICAgICAgJzM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YicsXG4gICAgICAgICc2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYnLFxuICAgICAgICAnZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEnLFxuICAgICAgICAnNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAnLFxuICAgICAgICAnNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3JyxcbiAgICAgICAgJzdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZScsXG4gICAgICAgICdlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyJ1xuICAgICAgXVxuICAgIF1cbiAgfSxcbiAgbmFmOiB7XG4gICAgd25kOiA3LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOScsXG4gICAgICAgICczODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQnLFxuICAgICAgICAnZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjJyxcbiAgICAgICAgJzZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZScsXG4gICAgICAgICdjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2InLFxuICAgICAgICAnZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4JyxcbiAgICAgICAgJ2FiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlJyxcbiAgICAgICAgJzU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCcsXG4gICAgICAgICc0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMnLFxuICAgICAgICAnODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1JyxcbiAgICAgICAgJzMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZicsXG4gICAgICAgICcyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCcsXG4gICAgICAgICc3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjknLFxuICAgICAgICAnYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiJyxcbiAgICAgICAgJzIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCcsXG4gICAgICAgICdlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUnLFxuICAgICAgICAnYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5JyxcbiAgICAgICAgJzI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkJyxcbiAgICAgICAgJzgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZicsXG4gICAgICAgICcxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmInLFxuICAgICAgICAnZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzknLFxuICAgICAgICAnZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMnLFxuICAgICAgICAnNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0JyxcbiAgICAgICAgJzk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCcsXG4gICAgICAgICdlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWInLFxuICAgICAgICAnNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3JyxcbiAgICAgICAgJ2NlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMScsXG4gICAgICAgICdjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAnLFxuICAgICAgICAnNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1JyxcbiAgICAgICAgJzkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4JyxcbiAgICAgICAgJzY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4JyxcbiAgICAgICAgJzU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYicsXG4gICAgICAgICczYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YnLFxuICAgICAgICAnNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzJyxcbiAgICAgICAgJ2VmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYScsXG4gICAgICAgICdlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUnLFxuICAgICAgICAnZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhJyxcbiAgICAgICAgJzc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZScsXG4gICAgICAgICdjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgnLFxuICAgICAgICAnZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjJyxcbiAgICAgICAgJzMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOScsXG4gICAgICAgICdlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWInLFxuICAgICAgICAnMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhJyxcbiAgICAgICAgJ2VmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZicsXG4gICAgICAgICc4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAnLFxuICAgICAgICAnNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0JyxcbiAgICAgICAgJ2Y1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YycsXG4gICAgICAgICdkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAnLFxuICAgICAgICAnZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwJyxcbiAgICAgICAgJ2E4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzJyxcbiAgICAgICAgJzY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZicsXG4gICAgICAgICc5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MycsXG4gICAgICAgICc0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgnLFxuICAgICAgICAnZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmJyxcbiAgICAgICAgJzVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNScsXG4gICAgICAgICc4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYnLFxuICAgICAgICAnOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1JyxcbiAgICAgICAgJzVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OScsXG4gICAgICAgICdmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MScsXG4gICAgICAgICdmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUnLFxuICAgICAgICAnNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1JyxcbiAgICAgICAgJzIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NycsXG4gICAgICAgICc0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MScsXG4gICAgICAgICc3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNScsXG4gICAgICAgICczOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYnLFxuICAgICAgICAnZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYnLFxuICAgICAgICAnZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlJyxcbiAgICAgICAgJzZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCcsXG4gICAgICAgICc2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMScsXG4gICAgICAgICczZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEnLFxuICAgICAgICAnYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2EwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTInLFxuICAgICAgICAnYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUnLFxuICAgICAgICAnY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiJyxcbiAgICAgICAgJzZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCcsXG4gICAgICAgICczMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYnLFxuICAgICAgICAnNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OScsXG4gICAgICAgICcyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYnLFxuICAgICAgICAnYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0JyxcbiAgICAgICAgJzk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YScsXG4gICAgICAgICdiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAnLFxuICAgICAgICAnYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3JyxcbiAgICAgICAgJzZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzJyxcbiAgICAgICAgJ2MzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZicsXG4gICAgICAgICcyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCcsXG4gICAgICAgICc2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEnLFxuICAgICAgICAnNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExJyxcbiAgICAgICAgJzVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMicsXG4gICAgICAgICc3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEnLFxuICAgICAgICAnYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2JyxcbiAgICAgICAgJzhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NicsXG4gICAgICAgICczOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUnLFxuICAgICAgICAnNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0JyxcbiAgICAgICAgJzI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYScsXG4gICAgICAgICdlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTknLFxuICAgICAgICAnY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmJyxcbiAgICAgICAgJ2Y1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYycsXG4gICAgICAgICc2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDInLFxuICAgICAgICAnZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhJyxcbiAgICAgICAgJzFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCcsXG4gICAgICAgICc1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQnLFxuICAgICAgICAnNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExJyxcbiAgICAgICAgJ2NkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MycsXG4gICAgICAgICdjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MicsXG4gICAgICAgICc2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMnLFxuICAgICAgICAnY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwJyxcbiAgICAgICAgJzk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4JyxcbiAgICAgICAgJ2VlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNycsXG4gICAgICAgICdkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgnLFxuICAgICAgICAnYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlJyxcbiAgICAgICAgJzY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCcsXG4gICAgICAgICdjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YicsXG4gICAgICAgICcyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYnLFxuICAgICAgICAnZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2JyxcbiAgICAgICAgJzQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NycsXG4gICAgICAgICc2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEnLFxuICAgICAgICAnN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjJyxcbiAgICAgICAgJ2FiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MicsXG4gICAgICAgICc0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmInLFxuICAgICAgICAnYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1JyxcbiAgICAgICAgJ2JmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNycsXG4gICAgICAgICc2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTknLFxuICAgICAgICAnY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzJyxcbiAgICAgICAgJzU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NycsXG4gICAgICAgICc3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NicsXG4gICAgICAgICdlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgnLFxuICAgICAgICAnOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxJyxcbiAgICAgICAgJzllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCcsXG4gICAgICAgICc0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5J1xuICAgICAgXVxuICAgIF1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBIbWFjRFJCRyA9IHJlcXVpcmUoJ2htYWMtZHJiZycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuLi9jdXJ2ZXMnKTtcbnZhciByYW5kID0gcmVxdWlyZSgnYnJvcmFuZCcpO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxudmFyIEtleVBhaXIgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIEVDKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVDKSlcbiAgICByZXR1cm4gbmV3IEVDKG9wdGlvbnMpO1xuXG4gIC8vIFNob3J0Y3V0IGBlbGxpcHRpYy5lYyhjdXJ2ZS1uYW1lKWBcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIGFzc2VydChjdXJ2ZXMuaGFzT3duUHJvcGVydHkob3B0aW9ucyksICdVbmtub3duIGN1cnZlICcgKyBvcHRpb25zKTtcblxuICAgIG9wdGlvbnMgPSBjdXJ2ZXNbb3B0aW9uc107XG4gIH1cblxuICAvLyBTaG9ydGN1dCBmb3IgYGVsbGlwdGljLmVjKGVsbGlwdGljLmN1cnZlcy5jdXJ2ZU5hbWUpYFxuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIGN1cnZlcy5QcmVzZXRDdXJ2ZSlcbiAgICBvcHRpb25zID0geyBjdXJ2ZTogb3B0aW9ucyB9O1xuXG4gIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlLmN1cnZlO1xuICB0aGlzLm4gPSB0aGlzLmN1cnZlLm47XG4gIHRoaXMubmggPSB0aGlzLm4udXNocm4oMSk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcblxuICAvLyBQb2ludCBvbiBjdXJ2ZVxuICB0aGlzLmcgPSBvcHRpb25zLmN1cnZlLmc7XG4gIHRoaXMuZy5wcmVjb21wdXRlKG9wdGlvbnMuY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIC8vIEhhc2ggZm9yIGZ1bmN0aW9uIGZvciBEUkJHXG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaCB8fCBvcHRpb25zLmN1cnZlLmhhc2g7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEVDO1xuXG5FQy5wcm90b3R5cGUua2V5UGFpciA9IGZ1bmN0aW9uIGtleVBhaXIob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEtleVBhaXIodGhpcywgb3B0aW9ucyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGUgPSBmdW5jdGlvbiBrZXlGcm9tUHJpdmF0ZShwcml2LCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVByaXZhdGUodGhpcywgcHJpdiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHVibGljID0gZnVuY3Rpb24ga2V5RnJvbVB1YmxpYyhwdWIsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1YiwgZW5jKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZW5LZXlQYWlyID0gZnVuY3Rpb24gZ2VuS2V5UGFpcihvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCcsXG4gICAgZW50cm9weTogb3B0aW9ucy5lbnRyb3B5IHx8IHJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksXG4gICAgZW50cm9weUVuYzogb3B0aW9ucy5lbnRyb3B5ICYmIG9wdGlvbnMuZW50cm9weUVuYyB8fCAndXRmOCcsXG4gICAgbm9uY2U6IHRoaXMubi50b0FycmF5KClcbiAgfSk7XG5cbiAgdmFyIGJ5dGVzID0gdGhpcy5uLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG5zMiA9IHRoaXMubi5zdWIobmV3IEJOKDIpKTtcbiAgZG8ge1xuICAgIHZhciBwcml2ID0gbmV3IEJOKGRyYmcuZ2VuZXJhdGUoYnl0ZXMpKTtcbiAgICBpZiAocHJpdi5jbXAobnMyKSA+IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHByaXYuaWFkZG4oMSk7XG4gICAgcmV0dXJuIHRoaXMua2V5RnJvbVByaXZhdGUocHJpdik7XG4gIH0gd2hpbGUgKHRydWUpO1xufTtcblxuRUMucHJvdG90eXBlLl90cnVuY2F0ZVRvTiA9IGZ1bmN0aW9uIHRydW5jYXRlVG9OKG1zZywgdHJ1bmNPbmx5KSB7XG4gIHZhciBkZWx0YSA9IG1zZy5ieXRlTGVuZ3RoKCkgKiA4IC0gdGhpcy5uLmJpdExlbmd0aCgpO1xuICBpZiAoZGVsdGEgPiAwKVxuICAgIG1zZyA9IG1zZy51c2hybihkZWx0YSk7XG4gIGlmICghdHJ1bmNPbmx5ICYmIG1zZy5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBtc2cuc3ViKHRoaXMubik7XG4gIGVsc2VcbiAgICByZXR1cm4gbXNnO1xufTtcblxuRUMucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywga2V5LCBlbmMsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBlbmMgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IGVuYztcbiAgICBlbmMgPSBudWxsO1xuICB9XG4gIGlmICghb3B0aW9ucylcbiAgICBvcHRpb25zID0ge307XG5cbiAga2V5ID0gdGhpcy5rZXlGcm9tUHJpdmF0ZShrZXksIGVuYyk7XG4gIG1zZyA9IHRoaXMuX3RydW5jYXRlVG9OKG5ldyBCTihtc2csIDE2KSk7XG5cbiAgLy8gWmVyby1leHRlbmQga2V5IHRvIHByb3ZpZGUgZW5vdWdoIGVudHJvcHlcbiAgdmFyIGJ5dGVzID0gdGhpcy5uLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIGJrZXkgPSBrZXkuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoJ2JlJywgYnl0ZXMpO1xuXG4gIC8vIFplcm8tZXh0ZW5kIG5vbmNlIHRvIGhhdmUgdGhlIHNhbWUgYnl0ZSBzaXplIGFzIE5cbiAgdmFyIG5vbmNlID0gbXNnLnRvQXJyYXkoJ2JlJywgYnl0ZXMpO1xuXG4gIC8vIEluc3RhbnRpYXRlIEhtYWNfRFJCR1xuICB2YXIgZHJiZyA9IG5ldyBIbWFjRFJCRyh7XG4gICAgaGFzaDogdGhpcy5oYXNoLFxuICAgIGVudHJvcHk6IGJrZXksXG4gICAgbm9uY2U6IG5vbmNlLFxuICAgIHBlcnM6IG9wdGlvbnMucGVycyxcbiAgICBwZXJzRW5jOiBvcHRpb25zLnBlcnNFbmMgfHwgJ3V0ZjgnXG4gIH0pO1xuXG4gIC8vIE51bWJlciBvZiBieXRlcyB0byBnZW5lcmF0ZVxuICB2YXIgbnMxID0gdGhpcy5uLnN1YihuZXcgQk4oMSkpO1xuXG4gIGZvciAodmFyIGl0ZXIgPSAwOyB0cnVlOyBpdGVyKyspIHtcbiAgICB2YXIgayA9IG9wdGlvbnMuayA/XG4gICAgICAgIG9wdGlvbnMuayhpdGVyKSA6XG4gICAgICAgIG5ldyBCTihkcmJnLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtcbiAgICBrID0gdGhpcy5fdHJ1bmNhdGVUb04oaywgdHJ1ZSk7XG4gICAgaWYgKGsuY21wbigxKSA8PSAwIHx8IGsuY21wKG5zMSkgPj0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGtwID0gdGhpcy5nLm11bChrKTtcbiAgICBpZiAoa3AuaXNJbmZpbml0eSgpKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3BYID0ga3AuZ2V0WCgpO1xuICAgIHZhciByID0ga3BYLnVtb2QodGhpcy5uKTtcbiAgICBpZiAoci5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcyA9IGsuaW52bSh0aGlzLm4pLm11bChyLm11bChrZXkuZ2V0UHJpdmF0ZSgpKS5pYWRkKG1zZykpO1xuICAgIHMgPSBzLnVtb2QodGhpcy5uKTtcbiAgICBpZiAocy5jbXBuKDApID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIgcmVjb3ZlcnlQYXJhbSA9IChrcC5nZXRZKCkuaXNPZGQoKSA/IDEgOiAwKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAoa3BYLmNtcChyKSAhPT0gMCA/IDIgOiAwKTtcblxuICAgIC8vIFVzZSBjb21wbGVtZW50IG9mIGBzYCwgaWYgaXQgaXMgPiBgbiAvIDJgXG4gICAgaWYgKG9wdGlvbnMuY2Fub25pY2FsICYmIHMuY21wKHRoaXMubmgpID4gMCkge1xuICAgICAgcyA9IHRoaXMubi5zdWIocyk7XG4gICAgICByZWNvdmVyeVBhcmFtIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoeyByOiByLCBzOiBzLCByZWNvdmVyeVBhcmFtOiByZWNvdmVyeVBhcmFtIH0pO1xuICB9XG59O1xuXG5FQy5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlLCBrZXksIGVuYykge1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuICBrZXkgPSB0aGlzLmtleUZyb21QdWJsaWMoa2V5LCBlbmMpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgJ2hleCcpO1xuXG4gIC8vIFBlcmZvcm0gcHJpbWl0aXZlIHZhbHVlcyB2YWxpZGF0aW9uXG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG4gIGlmIChyLmNtcG4oMSkgPCAwIHx8IHIuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChzLmNtcG4oMSkgPCAwIHx8IHMuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gVmFsaWRhdGUgc2lnbmF0dXJlXG4gIHZhciBzaW52ID0gcy5pbnZtKHRoaXMubik7XG4gIHZhciB1MSA9IHNpbnYubXVsKG1zZykudW1vZCh0aGlzLm4pO1xuICB2YXIgdTIgPSBzaW52Lm11bChyKS51bW9kKHRoaXMubik7XG5cbiAgaWYgKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spIHtcbiAgICB2YXIgcCA9IHRoaXMuZy5tdWxBZGQodTEsIGtleS5nZXRQdWJsaWMoKSwgdTIpO1xuICAgIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBwLmdldFgoKS51bW9kKHRoaXMubikuY21wKHIpID09PSAwO1xuICB9XG5cbiAgLy8gTk9URTogR3JlZyBNYXh3ZWxsJ3MgdHJpY2ssIGluc3BpcmVkIGJ5OlxuICAvLyBodHRwczovL2dpdC5pby92YWQzS1xuXG4gIHZhciBwID0gdGhpcy5nLmptdWxBZGQodTEsIGtleS5nZXRQdWJsaWMoKSwgdTIpO1xuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIENvbXBhcmUgYHAueGAgb2YgSmFjb2JpYW4gcG9pbnQgd2l0aCBgcmAsXG4gIC8vIHRoaXMgd2lsbCBkbyBgcC54ID09IHIgKiBwLnpeMmAgaW5zdGVhZCBvZiBtdWx0aXBseWluZyBgcC54YCBieSB0aGVcbiAgLy8gaW52ZXJzZSBvZiBgcC56XjJgXG4gIHJldHVybiBwLmVxWFRvUChyKTtcbn07XG5cbkVDLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5ID0gZnVuY3Rpb24obXNnLCBzaWduYXR1cmUsIGosIGVuYykge1xuICBhc3NlcnQoKDMgJiBqKSA9PT0gaiwgJ1RoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMnKTtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG5cbiAgdmFyIG4gPSB0aGlzLm47XG4gIHZhciBlID0gbmV3IEJOKG1zZyk7XG4gIHZhciByID0gc2lnbmF0dXJlLnI7XG4gIHZhciBzID0gc2lnbmF0dXJlLnM7XG5cbiAgLy8gQSBzZXQgTFNCIHNpZ25pZmllcyB0aGF0IHRoZSB5LWNvb3JkaW5hdGUgaXMgb2RkXG4gIHZhciBpc1lPZGQgPSBqICYgMTtcbiAgdmFyIGlzU2Vjb25kS2V5ID0gaiA+PiAxO1xuICBpZiAoci5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSkgPj0gMCAmJiBpc1NlY29uZEtleSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZScpO1xuXG4gIC8vIDEuMS4gTGV0IHggPSByICsgam4uXG4gIGlmIChpc1NlY29uZEtleSlcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIuYWRkKHRoaXMuY3VydmUubiksIGlzWU9kZCk7XG4gIGVsc2VcbiAgICByID0gdGhpcy5jdXJ2ZS5wb2ludEZyb21YKHIsIGlzWU9kZCk7XG5cbiAgdmFyIHJJbnYgPSBzaWduYXR1cmUuci5pbnZtKG4pO1xuICB2YXIgczEgPSBuLnN1YihlKS5tdWwockludikudW1vZChuKTtcbiAgdmFyIHMyID0gcy5tdWwockludikudW1vZChuKTtcblxuICAvLyAxLjYuMSBDb21wdXRlIFEgPSByXi0xIChzUiAtICBlRylcbiAgLy8gICAgICAgICAgICAgICBRID0gcl4tMSAoc1IgKyAtZUcpXG4gIHJldHVybiB0aGlzLmcubXVsQWRkKHMxLCByLCBzMik7XG59O1xuXG5FQy5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbSA9IGZ1bmN0aW9uKGUsIHNpZ25hdHVyZSwgUSwgZW5jKSB7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCBlbmMpO1xuICBpZiAoc2lnbmF0dXJlLnJlY292ZXJ5UGFyYW0gIT09IG51bGwpXG4gICAgcmV0dXJuIHNpZ25hdHVyZS5yZWNvdmVyeVBhcmFtO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgdmFyIFFwcmltZTtcbiAgICB0cnkge1xuICAgICAgUXByaW1lID0gdGhpcy5yZWNvdmVyUHViS2V5KGUsIHNpZ25hdHVyZSwgaSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFFwcmltZS5lcShRKSlcbiAgICAgIHJldHVybiBpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlcbiAgICByZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG4gIHRoaXMucHJlZFJlc2lzdCA9ICEhb3B0aW9ucy5wcmVkUmVzaXN0O1xuXG4gIHRoaXMub3V0TGVuID0gdGhpcy5oYXNoLm91dFNpemU7XG4gIHRoaXMubWluRW50cm9weSA9IG9wdGlvbnMubWluRW50cm9weSB8fCB0aGlzLmhhc2guaG1hY1N0cmVuZ3RoO1xuXG4gIHRoaXMuX3Jlc2VlZCA9IG51bGw7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLksgPSBudWxsO1xuICB0aGlzLlYgPSBudWxsO1xuXG4gIHZhciBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShvcHRpb25zLmVudHJvcHksIG9wdGlvbnMuZW50cm9weUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBub25jZSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSwgb3B0aW9ucy5ub25jZUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBwZXJzID0gdXRpbHMudG9BcnJheShvcHRpb25zLnBlcnMsIG9wdGlvbnMucGVyc0VuYyB8fCAnaGV4Jyk7XG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG4gIHRoaXMuX2luaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjRFJCRztcblxuSG1hY0RSQkcucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChlbnRyb3B5LCBub25jZSwgcGVycykge1xuICB2YXIgc2VlZCA9IGVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7XG5cbiAgdGhpcy5LID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIHRoaXMuViA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVi5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuS1tpXSA9IDB4MDA7XG4gICAgdGhpcy5WW2ldID0gMHgwMTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZShzZWVkKTtcbiAgdGhpcy5fcmVzZWVkID0gMTtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IDB4MTAwMDAwMDAwMDAwMDsgIC8vIDJeNDhcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faG1hYyA9IGZ1bmN0aW9uIGhtYWMoKSB7XG4gIHJldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCwgdGhpcy5LKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWQpIHtcbiAgdmFyIGttYWMgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAwIF0pO1xuICBpZiAoc2VlZClcbiAgICBrbWFjID0ga21hYy51cGRhdGUoc2VlZCk7XG4gIHRoaXMuSyA9IGttYWMuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbiAgaWYgKCFzZWVkKVxuICAgIHJldHVybjtcblxuICB0aGlzLksgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDEgXSlcbiAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZCA9IGZ1bmN0aW9uIHJlc2VlZChlbnRyb3B5LCBlbnRyb3B5RW5jLCBhZGQsIGFkZEVuYykge1xuICAvLyBPcHRpb25hbCBlbnRyb3B5IGVuY1xuICBpZiAodHlwZW9mIGVudHJvcHlFbmMgIT09ICdzdHJpbmcnKSB7XG4gICAgYWRkRW5jID0gYWRkO1xuICAgIGFkZCA9IGVudHJvcHlFbmM7XG4gICAgZW50cm9weUVuYyA9IG51bGw7XG4gIH1cblxuICBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShlbnRyb3B5LCBlbnRyb3B5RW5jKTtcbiAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyk7XG5cbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcblxuICB0aGlzLl91cGRhdGUoZW50cm9weS5jb25jYXQoYWRkIHx8IFtdKSk7XG4gIHRoaXMuX3Jlc2VlZCA9IDE7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4sIGVuYywgYWRkLCBhZGRFbmMpIHtcbiAgaWYgKHRoaXMuX3Jlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMgfHwgJ2hleCcpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMuX3Jlc2VlZCsrO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gS2V5UGFpcihlYywgb3B0aW9ucykge1xuICB0aGlzLmVjID0gZWM7XG4gIHRoaXMucHJpdiA9IG51bGw7XG4gIHRoaXMucHViID0gbnVsbDtcblxuICAvLyBLZXlQYWlyKGVjLCB7IHByaXY6IC4uLiwgcHViOiAuLi4gfSlcbiAgaWYgKG9wdGlvbnMucHJpdilcbiAgICB0aGlzLl9pbXBvcnRQcml2YXRlKG9wdGlvbnMucHJpdiwgb3B0aW9ucy5wcml2RW5jKTtcbiAgaWYgKG9wdGlvbnMucHViKVxuICAgIHRoaXMuX2ltcG9ydFB1YmxpYyhvcHRpb25zLnB1Yiwgb3B0aW9ucy5wdWJFbmMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBLZXlQYWlyO1xuXG5LZXlQYWlyLmZyb21QdWJsaWMgPSBmdW5jdGlvbiBmcm9tUHVibGljKGVjLCBwdWIsIGVuYykge1xuICBpZiAocHViIGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHViO1xuXG4gIHJldHVybiBuZXcgS2V5UGFpcihlYywge1xuICAgIHB1YjogcHViLFxuICAgIHB1YkVuYzogZW5jXG4gIH0pO1xufTtcblxuS2V5UGFpci5mcm9tUHJpdmF0ZSA9IGZ1bmN0aW9uIGZyb21Qcml2YXRlKGVjLCBwcml2LCBlbmMpIHtcbiAgaWYgKHByaXYgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwcml2O1xuXG4gIHJldHVybiBuZXcgS2V5UGFpcihlYywge1xuICAgIHByaXY6IHByaXYsXG4gICAgcHJpdkVuYzogZW5jXG4gIH0pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdmFyIHB1YiA9IHRoaXMuZ2V0UHVibGljKCk7XG5cbiAgaWYgKHB1Yi5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnSW52YWxpZCBwdWJsaWMga2V5JyB9O1xuICBpZiAoIXB1Yi52YWxpZGF0ZSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ1B1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQnIH07XG4gIGlmICghcHViLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdQdWJsaWMga2V5ICogTiAhPSBPJyB9O1xuXG4gIHJldHVybiB7IHJlc3VsdDogdHJ1ZSwgcmVhc29uOiBudWxsIH07XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQdWJsaWMgPSBmdW5jdGlvbiBnZXRQdWJsaWMoY29tcGFjdCwgZW5jKSB7XG4gIC8vIGNvbXBhY3QgaXMgb3B0aW9uYWwgYXJndW1lbnRcbiAgaWYgKHR5cGVvZiBjb21wYWN0ID09PSAnc3RyaW5nJykge1xuICAgIGVuYyA9IGNvbXBhY3Q7XG4gICAgY29tcGFjdCA9IG51bGw7XG4gIH1cblxuICBpZiAoIXRoaXMucHViKVxuICAgIHRoaXMucHViID0gdGhpcy5lYy5nLm11bCh0aGlzLnByaXYpO1xuXG4gIGlmICghZW5jKVxuICAgIHJldHVybiB0aGlzLnB1YjtcblxuICByZXR1cm4gdGhpcy5wdWIuZW5jb2RlKGVuYywgY29tcGFjdCk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQcml2YXRlID0gZnVuY3Rpb24gZ2V0UHJpdmF0ZShlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRoaXMucHJpdi50b1N0cmluZygxNiwgMik7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5wcml2O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGUgPSBmdW5jdGlvbiBfaW1wb3J0UHJpdmF0ZShrZXksIGVuYykge1xuICB0aGlzLnByaXYgPSBuZXcgQk4oa2V5LCBlbmMgfHwgMTYpO1xuXG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBwcml2IHdvbid0IGJlIGJpZ2dlciB0aGFuIG4sIG90aGVyd2lzZSB3ZSBtYXkgZmFpbFxuICAvLyBpbiBmaXhlZCBtdWx0aXBsaWNhdGlvbiBtZXRob2RcbiAgdGhpcy5wcml2ID0gdGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLl9pbXBvcnRQdWJsaWMgPSBmdW5jdGlvbiBfaW1wb3J0UHVibGljKGtleSwgZW5jKSB7XG4gIGlmIChrZXkueCB8fCBrZXkueSkge1xuICAgIC8vIE1vbnRnb21lcnkgcG9pbnRzIG9ubHkgaGF2ZSBhbiBgeGAgY29vcmRpbmF0ZS5cbiAgICAvLyBXZWllcnN0cmFzcy9FZHdhcmRzIHBvaW50cyBvbiB0aGUgb3RoZXIgaGFuZCBoYXZlIGJvdGggYHhgIGFuZFxuICAgIC8vIGB5YCBjb29yZGluYXRlcy5cbiAgICBpZiAodGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnbW9udCcpIHtcbiAgICAgIGFzc2VydChrZXkueCwgJ05lZWQgeCBjb29yZGluYXRlJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdzaG9ydCcgfHxcbiAgICAgICAgICAgICAgIHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ2Vkd2FyZHMnKSB7XG4gICAgICBhc3NlcnQoa2V5LnggJiYga2V5LnksICdOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlJyk7XG4gICAgfVxuICAgIHRoaXMucHViID0gdGhpcy5lYy5jdXJ2ZS5wb2ludChrZXkueCwga2V5LnkpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnB1YiA9IHRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoa2V5LCBlbmMpO1xufTtcblxuLy8gRUNESFxuS2V5UGFpci5wcm90b3R5cGUuZGVyaXZlID0gZnVuY3Rpb24gZGVyaXZlKHB1Yikge1xuICByZXR1cm4gcHViLm11bCh0aGlzLnByaXYpLmdldFgoKTtcbn07XG5cbi8vIEVDRFNBXG5LZXlQYWlyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtc2csIGVuYywgb3B0aW9ucykge1xuICByZXR1cm4gdGhpcy5lYy5zaWduKG1zZywgdGhpcywgZW5jLCBvcHRpb25zKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtc2csIHNpZ25hdHVyZSkge1xuICByZXR1cm4gdGhpcy5lYy52ZXJpZnkobXNnLCBzaWduYXR1cmUsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIHJldHVybiAnPEtleSBwcml2OiAnICsgKHRoaXMucHJpdiAmJiB0aGlzLnByaXYudG9TdHJpbmcoMTYsIDIpKSArXG4gICAgICAgICAnIHB1YjogJyArICh0aGlzLnB1YiAmJiB0aGlzLnB1Yi5pbnNwZWN0KCkpICsgJyA+Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBTaWduYXR1cmUob3B0aW9ucywgZW5jKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBvcHRpb25zO1xuXG4gIGlmICh0aGlzLl9pbXBvcnRERVIob3B0aW9ucywgZW5jKSlcbiAgICByZXR1cm47XG5cbiAgYXNzZXJ0KG9wdGlvbnMuciAmJiBvcHRpb25zLnMsICdTaWduYXR1cmUgd2l0aG91dCByIG9yIHMnKTtcbiAgdGhpcy5yID0gbmV3IEJOKG9wdGlvbnMuciwgMTYpO1xuICB0aGlzLnMgPSBuZXcgQk4ob3B0aW9ucy5zLCAxNik7XG4gIGlmIChvcHRpb25zLnJlY292ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZClcbiAgICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuICBlbHNlXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gb3B0aW9ucy5yZWNvdmVyeVBhcmFtO1xufVxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG5cbmZ1bmN0aW9uIFBvc2l0aW9uKCkge1xuICB0aGlzLnBsYWNlID0gMDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVuZ3RoKGJ1ZiwgcCkge1xuICB2YXIgaW5pdGlhbCA9IGJ1ZltwLnBsYWNlKytdO1xuICBpZiAoIShpbml0aWFsICYgMHg4MCkpIHtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfVxuICB2YXIgb2N0ZXRMZW4gPSBpbml0aWFsICYgMHhmO1xuICB2YXIgdmFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDAsIG9mZiA9IHAucGxhY2U7IGkgPCBvY3RldExlbjsgaSsrLCBvZmYrKykge1xuICAgIHZhbCA8PD0gODtcbiAgICB2YWwgfD0gYnVmW29mZl07XG4gIH1cbiAgcC5wbGFjZSA9IG9mZjtcbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcm1QYWRkaW5nKGJ1Zikge1xuICB2YXIgaSA9IDA7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCFidWZbaV0gJiYgIShidWZbaSArIDFdICYgMHg4MCkgJiYgaSA8IGxlbikge1xuICAgIGkrKztcbiAgfVxuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuIGJ1Zi5zbGljZShpKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS5faW1wb3J0REVSID0gZnVuY3Rpb24gX2ltcG9ydERFUihkYXRhLCBlbmMpIHtcbiAgZGF0YSA9IHV0aWxzLnRvQXJyYXkoZGF0YSwgZW5jKTtcbiAgdmFyIHAgPSBuZXcgUG9zaXRpb24oKTtcbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgzMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoKGxlbiArIHAucGxhY2UpICE9PSBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBybGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICB2YXIgciA9IGRhdGEuc2xpY2UocC5wbGFjZSwgcmxlbiArIHAucGxhY2UpO1xuICBwLnBsYWNlICs9IHJsZW47XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIGlmIChkYXRhLmxlbmd0aCAhPT0gc2xlbiArIHAucGxhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHMgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHNsZW4gKyBwLnBsYWNlKTtcbiAgaWYgKHJbMF0gPT09IDAgJiYgKHJbMV0gJiAweDgwKSkge1xuICAgIHIgPSByLnNsaWNlKDEpO1xuICB9XG4gIGlmIChzWzBdID09PSAwICYmIChzWzFdICYgMHg4MCkpIHtcbiAgICBzID0gcy5zbGljZSgxKTtcbiAgfVxuXG4gIHRoaXMuciA9IG5ldyBCTihyKTtcbiAgdGhpcy5zID0gbmV3IEJOKHMpO1xuICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gY29uc3RydWN0TGVuZ3RoKGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPCAweDgwKSB7XG4gICAgYXJyLnB1c2gobGVuKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG9jdGV0cyA9IDEgKyAoTWF0aC5sb2cobGVuKSAvIE1hdGguTE4yID4+PiAzKTtcbiAgYXJyLnB1c2gob2N0ZXRzIHwgMHg4MCk7XG4gIHdoaWxlICgtLW9jdGV0cykge1xuICAgIGFyci5wdXNoKChsZW4gPj4+IChvY3RldHMgPDwgMykpICYgMHhmZik7XG4gIH1cbiAgYXJyLnB1c2gobGVuKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0RFUiA9IGZ1bmN0aW9uIHRvREVSKGVuYykge1xuICB2YXIgciA9IHRoaXMuci50b0FycmF5KCk7XG4gIHZhciBzID0gdGhpcy5zLnRvQXJyYXkoKTtcblxuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChyWzBdICYgMHg4MClcbiAgICByID0gWyAwIF0uY29uY2F0KHIpO1xuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChzWzBdICYgMHg4MClcbiAgICBzID0gWyAwIF0uY29uY2F0KHMpO1xuXG4gIHIgPSBybVBhZGRpbmcocik7XG4gIHMgPSBybVBhZGRpbmcocyk7XG5cbiAgd2hpbGUgKCFzWzBdICYmICEoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cbiAgdmFyIGFyciA9IFsgMHgwMiBdO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCByLmxlbmd0aCk7XG4gIGFyciA9IGFyci5jb25jYXQocik7XG4gIGFyci5wdXNoKDB4MDIpO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCBzLmxlbmd0aCk7XG4gIHZhciBiYWNrSGFsZiA9IGFyci5jb25jYXQocyk7XG4gIHZhciByZXMgPSBbIDB4MzAgXTtcbiAgY29uc3RydWN0TGVuZ3RoKHJlcywgYmFja0hhbGYubGVuZ3RoKTtcbiAgcmVzID0gcmVzLmNvbmNhdChiYWNrSGFsZik7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgY3VydmVzID0gcmVxdWlyZSgnLi4vY3VydmVzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFRERTQShjdXJ2ZSkge1xuICBhc3NlcnQoY3VydmUgPT09ICdlZDI1NTE5JywgJ29ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXInKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUREU0EpKVxuICAgIHJldHVybiBuZXcgRUREU0EoY3VydmUpO1xuXG4gIHZhciBjdXJ2ZSA9IGN1cnZlc1tjdXJ2ZV0uY3VydmU7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5nID0gY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUoY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIHRoaXMucG9pbnRDbGFzcyA9IGN1cnZlLnBvaW50KCkuY29uc3RydWN0b3I7XG4gIHRoaXMuZW5jb2RpbmdMZW5ndGggPSBNYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKSAvIDgpO1xuICB0aGlzLmhhc2ggPSBoYXNoLnNoYTUxMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFRERTQTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xLZXlQYWlyfSBzZWNyZXQgLSBzZWNyZXQgYnl0ZXMgb3IgYSBrZXlwYWlyXG4qIEByZXR1cm5zIHtTaWduYXR1cmV9IC0gc2lnbmF0dXJlXG4qL1xuRUREU0EucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UsIHNlY3JldCkge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVNlY3JldChzZWNyZXQpO1xuICB2YXIgciA9IHRoaXMuaGFzaEludChrZXkubWVzc2FnZVByZWZpeCgpLCBtZXNzYWdlKTtcbiAgdmFyIFIgPSB0aGlzLmcubXVsKHIpO1xuICB2YXIgUmVuY29kZWQgPSB0aGlzLmVuY29kZVBvaW50KFIpO1xuICB2YXIgc18gPSB0aGlzLmhhc2hJbnQoUmVuY29kZWQsIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgLm11bChrZXkucHJpdigpKTtcbiAgdmFyIFMgPSByLmFkZChzXykudW1vZCh0aGlzLmN1cnZlLm4pO1xuICByZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHsgUjogUiwgUzogUywgUmVuY29kZWQ6IFJlbmNvZGVkIH0pO1xufTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFNpZ25hdHVyZX0gc2lnIC0gc2lnIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFBvaW50fEtleVBhaXJ9IHB1YiAtIHB1YmxpYyBrZXlcbiogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBwdWJsaWMga2V5IG1hdGNoZXMgc2lnIG9mIG1lc3NhZ2VcbiovXG5FRERTQS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZywgcHViKSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICBzaWcgPSB0aGlzLm1ha2VTaWduYXR1cmUoc2lnKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhwdWIpO1xuICB2YXIgaCA9IHRoaXMuaGFzaEludChzaWcuUmVuY29kZWQoKSwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpO1xuICB2YXIgU0cgPSB0aGlzLmcubXVsKHNpZy5TKCkpO1xuICB2YXIgUnBsdXNBaCA9IHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpO1xuICByZXR1cm4gUnBsdXNBaC5lcShTRyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQoKSB7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgIGhhc2gudXBkYXRlKGFyZ3VtZW50c1tpXSk7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yikge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1Yik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21TZWNyZXQodGhpcywgc2VjcmV0KTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWFrZVNpZ25hdHVyZShzaWcpIHtcbiAgaWYgKHNpZyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gc2lnO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZSh0aGlzLCBzaWcpO1xufTtcblxuLyoqXG4qICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWpvc2Vmc3Nvbi1lZGRzYS1lZDI1NTE5LTAzI3NlY3Rpb24tNS4yXG4qXG4qIEVERFNBIGRlZmluZXMgbWV0aG9kcyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBvaW50cyBhbmQgaW50ZWdlcnMuIFRoZXNlIGFyZVxuKiBoZWxwZXIgY29udmVuaWVuY2UgbWV0aG9kcywgdGhhdCBwYXNzIGFsb25nIHRvIHV0aWxpdHkgZnVuY3Rpb25zIGltcGxpZWRcbiogcGFyYW1ldGVycy5cbipcbiovXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlUG9pbnQgPSBmdW5jdGlvbiBlbmNvZGVQb2ludChwb2ludCkge1xuICB2YXIgZW5jID0gcG9pbnQuZ2V0WSgpLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG4gIGVuY1t0aGlzLmVuY29kaW5nTGVuZ3RoIC0gMV0gfD0gcG9pbnQuZ2V0WCgpLmlzT2RkKCkgPyAweDgwIDogMDtcbiAgcmV0dXJuIGVuYztcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzKSB7XG4gIGJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcyhieXRlcyk7XG5cbiAgdmFyIGxhc3RJeCA9IGJ5dGVzLmxlbmd0aCAtIDE7XG4gIHZhciBub3JtZWQgPSBieXRlcy5zbGljZSgwLCBsYXN0SXgpLmNvbmNhdChieXRlc1tsYXN0SXhdICYgfjB4ODApO1xuICB2YXIgeElzT2RkID0gKGJ5dGVzW2xhc3RJeF0gJiAweDgwKSAhPT0gMDtcblxuICB2YXIgeSA9IHV0aWxzLmludEZyb21MRShub3JtZWQpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKHksIHhJc09kZCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSkge1xuICByZXR1cm4gbnVtLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlSW50ID0gZnVuY3Rpb24gZGVjb2RlSW50KGJ5dGVzKSB7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoYnl0ZXMpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmlzUG9pbnQgPSBmdW5jdGlvbiBpc1BvaW50KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gaW5zdGFuY2VcbiogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIHB1YmxpYy9wcml2YXRlIGtleSBwYXJhbWV0ZXJzXG4qXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMuc2VjcmV0XSAtIHNlY3JldCBzZWVkIGJ5dGVzXG4qIEBwYXJhbSB7UG9pbnR9IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgKGFrYSBgQWAgaW4gZWRkc2EgdGVybXMpXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZT59IFtwYXJhbXMucHViXSAtIHB1YmxpYyBrZXkgcG9pbnQgZW5jb2RlZCBhcyBieXRlc1xuKlxuKi9cbmZ1bmN0aW9uIEtleVBhaXIoZWRkc2EsIHBhcmFtcykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG4gIHRoaXMuX3NlY3JldCA9IHBhcnNlQnl0ZXMocGFyYW1zLnNlY3JldCk7XG4gIGlmIChlZGRzYS5pc1BvaW50KHBhcmFtcy5wdWIpKVxuICAgIHRoaXMuX3B1YiA9IHBhcmFtcy5wdWI7XG4gIGVsc2VcbiAgICB0aGlzLl9wdWJCeXRlcyA9IHBhcnNlQnl0ZXMocGFyYW1zLnB1Yik7XG59XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWRkc2EsIHB1Yikge1xuICBpZiAocHViIGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHViO1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgcHViOiBwdWIgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21TZWNyZXQgPSBmdW5jdGlvbiBmcm9tU2VjcmV0KGVkZHNhLCBzZWNyZXQpIHtcbiAgaWYgKHNlY3JldCBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHNlY3JldDtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVkZHNhLCB7IHNlY3JldDogc2VjcmV0IH0pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2VjcmV0ID0gZnVuY3Rpb24gc2VjcmV0KCkge1xuICByZXR1cm4gdGhpcy5fc2VjcmV0O1xufTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3B1YkJ5dGVzJywgZnVuY3Rpb24gcHViQnl0ZXMoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwdWInLCBmdW5jdGlvbiBwdWIoKSB7XG4gIGlmICh0aGlzLl9wdWJCeXRlcylcbiAgICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk7XG4gIHJldHVybiB0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdkJ5dGVzJywgZnVuY3Rpb24gcHJpdkJ5dGVzKCkge1xuICB2YXIgZWRkc2EgPSB0aGlzLmVkZHNhO1xuICB2YXIgaGFzaCA9IHRoaXMuaGFzaCgpO1xuICB2YXIgbGFzdEl4ID0gZWRkc2EuZW5jb2RpbmdMZW5ndGggLSAxO1xuXG4gIHZhciBhID0gaGFzaC5zbGljZSgwLCBlZGRzYS5lbmNvZGluZ0xlbmd0aCk7XG4gIGFbMF0gJj0gMjQ4O1xuICBhW2xhc3RJeF0gJj0gMTI3O1xuICBhW2xhc3RJeF0gfD0gNjQ7XG5cbiAgcmV0dXJuIGE7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3ByaXYnLCBmdW5jdGlvbiBwcml2KCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ2hhc2gnLCBmdW5jdGlvbiBoYXNoKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdtZXNzYWdlUHJlZml4JywgZnVuY3Rpb24gbWVzc2FnZVByZWZpeCgpIHtcbiAgcmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpO1xufSk7XG5cbktleVBhaXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UpIHtcbiAgYXNzZXJ0KHRoaXMuX3NlY3JldCwgJ0tleVBhaXIgY2FuIG9ubHkgdmVyaWZ5Jyk7XG4gIHJldHVybiB0aGlzLmVkZHNhLnNpZ24obWVzc2FnZSwgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSwgc2lnKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLnZlcmlmeShtZXNzYWdlLCBzaWcsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0U2VjcmV0ID0gZnVuY3Rpb24gZ2V0U2VjcmV0KGVuYykge1xuICBhc3NlcnQodGhpcy5fc2VjcmV0LCAnS2V5UGFpciBpcyBwdWJsaWMgb25seScpO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMuc2VjcmV0KCksIGVuYyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRQdWJsaWMgPSBmdW5jdGlvbiBnZXRQdWJsaWMoZW5jKSB7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5wdWJCeXRlcygpLCBlbmMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlQYWlyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gZWRkc2EgaW5zdGFuY2VcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58T2JqZWN0fSBzaWcgLVxuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPnxQb2ludH0gW3NpZy5SXSAtIFIgcG9pbnQgYXMgUG9pbnQgb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58Ym59IFtzaWcuU10gLSBTIHNjYWxhciBhcyBibiBvciBieXRlc1xuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPn0gW3NpZy5SZW5jb2RlZF0gLSBSIHBvaW50IGVuY29kZWRcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuU2VuY29kZWRdIC0gUyBzY2FsYXIgZW5jb2RlZFxuKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShlZGRzYSwgc2lnKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcblxuICBpZiAodHlwZW9mIHNpZyAhPT0gJ29iamVjdCcpXG4gICAgc2lnID0gcGFyc2VCeXRlcyhzaWcpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHNpZykpIHtcbiAgICBzaWcgPSB7XG4gICAgICBSOiBzaWcuc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpLFxuICAgICAgUzogc2lnLnNsaWNlKGVkZHNhLmVuY29kaW5nTGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBhc3NlcnQoc2lnLlIgJiYgc2lnLlMsICdTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMnKTtcblxuICBpZiAoZWRkc2EuaXNQb2ludChzaWcuUikpXG4gICAgdGhpcy5fUiA9IHNpZy5SO1xuICBpZiAoc2lnLlMgaW5zdGFuY2VvZiBCTilcbiAgICB0aGlzLl9TID0gc2lnLlM7XG5cbiAgdGhpcy5fUmVuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5SKSA/IHNpZy5SIDogc2lnLlJlbmNvZGVkO1xuICB0aGlzLl9TZW5jb2RlZCA9IEFycmF5LmlzQXJyYXkoc2lnLlMpID8gc2lnLlMgOiBzaWcuU2VuY29kZWQ7XG59XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1MnLCBmdW5jdGlvbiBTKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSJywgZnVuY3Rpb24gUigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSZW5jb2RlZCcsIGZ1bmN0aW9uIFJlbmNvZGVkKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnU2VuY29kZWQnLCBmdW5jdGlvbiBTZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKTtcbn0pO1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKCkge1xuICByZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpO1xufTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uIHRvSGV4KCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMudG9CeXRlcygpLCAnaGV4JykudG9VcHBlckNhc2UoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsInZhciBpc0hleFByZWZpeGVkID0gcmVxdWlyZSgnaXMtaGV4LXByZWZpeGVkJyk7XG5cbi8qKlxuICogUmVtb3ZlcyAnMHgnIGZyb20gYSBnaXZlbiBgU3RyaW5nYCBpcyBwcmVzZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdmFsdWVcbiAqIEByZXR1cm4ge1N0cmluZ3xPcHRpb25hbH0gYSBzdHJpbmcgYnkgcGFzcyBpZiBuZWNlc3NhcnlcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpcEhleFByZWZpeChzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBpc0hleFByZWZpeGVkKHN0cikgPyBzdHIuc2xpY2UoMikgOiBzdHI7XG59XG4iLCIvLyBjb25zdCBFdGhRdWVyeSA9IHJlcXVpcmUoJ2V0aGpzLXF1ZXJ5JylcbmNvbnN0IEV0aFF1ZXJ5ID0gcmVxdWlyZSgnZXRoLXF1ZXJ5JylcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCBwaWZ5ID0gcmVxdWlyZSgncGlmeScpXG5jb25zdCBoZXhVdGlscyA9IHJlcXVpcmUoJy4vaGV4VXRpbHMnKVxuY29uc3QgaW5jcmVtZW50SGV4TnVtYmVyID0gaGV4VXRpbHMuaW5jcmVtZW50SGV4TnVtYmVyXG5jb25zdCBzZWMgPSAxMDAwXG5jb25zdCBtaW4gPSA2MCAqIHNlY1xuXG5jbGFzcyBScGNCbG9ja1RyYWNrZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICBpZiAoIW9wdHMucHJvdmlkZXIpIHRocm93IG5ldyBFcnJvcignUnBjQmxvY2tUcmFja2VyIC0gbm8gcHJvdmlkZXIgc3BlY2lmaWVkLicpXG4gICAgdGhpcy5fcHJvdmlkZXIgPSBvcHRzLnByb3ZpZGVyXG4gICAgdGhpcy5fcXVlcnkgPSBuZXcgRXRoUXVlcnkob3B0cy5wcm92aWRlcilcbiAgICAvLyBjb25maWdcbiAgICB0aGlzLl9wb2xsaW5nSW50ZXJ2YWwgPSBvcHRzLnBvbGxpbmdJbnRlcnZhbCB8fCA0ICogc2VjXG4gICAgdGhpcy5fc3luY2luZ1RpbWVvdXQgPSBvcHRzLnN5bmNpbmdUaW1lb3V0IHx8IDEgKiBtaW5cbiAgICAvLyBzdGF0ZVxuICAgIHRoaXMuX3RyYWNraW5nQmxvY2sgPSBudWxsXG4gICAgdGhpcy5fdHJhY2tpbmdCbG9ja1RpbWVzdGFtcCA9IG51bGxcbiAgICB0aGlzLl9jdXJyZW50QmxvY2sgPSBudWxsXG4gICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2VcbiAgICAvLyBiaW5kIG1ldGhvZHMgZm9yIGNsZWFuZXIgc3ludGF4IGxhdGVyXG4gICAgdGhpcy5fcGVyZm9ybVN5bmMgPSB0aGlzLl9wZXJmb3JtU3luYy5iaW5kKHRoaXMpXG4gICAgdGhpcy5faGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24gPSB0aGlzLl9oYW5kbGVOZXdCbG9ja05vdGlmaWNhdGlvbi5iaW5kKHRoaXMpXG4gIH1cblxuICBnZXRUcmFja2luZ0Jsb2NrICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tpbmdCbG9ja1xuICB9XG5cbiAgZ2V0Q3VycmVudEJsb2NrICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJsb2NrXG4gIH1cblxuICBhc3luYyBhd2FpdEN1cnJlbnRCbG9jayAoKSB7XG4gICAgLy8gcmV0dXJuIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLl9jdXJyZW50QmxvY2spIHJldHVybiB0aGlzLl9jdXJyZW50QmxvY2tcbiAgICAvLyB3YWl0IGZvciBcInN5bmNcIiBldmVudFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5vbmNlKCdsYXRlc3QnLCByZXNvbHZlKSlcbiAgICAvLyByZXR1cm4gbmV3bHkgc2V0IGN1cnJlbnQgYmxvY2tcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEJsb2NrXG4gIH1cblxuICBhc3luYyBzdGFydCAob3B0cyA9IHt9KSB7XG4gICAgLy8gYWJvcnQgaWYgYWxyZWFkeSBzdGFydGVkXG4gICAgaWYgKHRoaXMuX2lzUnVubmluZykgcmV0dXJuXG4gICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZVxuICAgIC8vIGlmIHRoaXMuX2N1cnJlbnRCbG9ja1xuICAgIGlmIChvcHRzLmZyb21CbG9jaykge1xuICAgICAgLy8gdXNlIHNwZWNpZmllZCBzdGFydCBwb2ludFxuICAgICAgYXdhaXQgdGhpcy5fc2V0VHJhY2tpbmdCbG9jayhhd2FpdCB0aGlzLl9mZXRjaEJsb2NrQnlOdW1iZXIob3B0cy5mcm9tQmxvY2spKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvciBxdWVyeSBmb3IgbGF0ZXN0XG4gICAgICBhd2FpdCB0aGlzLl9zZXRUcmFja2luZ0Jsb2NrKGF3YWl0IHRoaXMuX2ZldGNoTGF0ZXN0QmxvY2soKSlcbiAgICB9XG4gICAgaWYgKHRoaXMuX3Byb3ZpZGVyLm9uKSB7XG4gICAgICBhd2FpdCB0aGlzLl9pbml0U3Vic2NyaXB0aW9uKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGVyZm9ybVN5bmMoKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuX3Byb3ZpZGVyLm9uKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb24oKVxuICAgIH1cbiAgfVxuXG4gIC8vXG4gIC8vIHByaXZhdGVcbiAgLy9cblxuICBhc3luYyBfc2V0VHJhY2tpbmdCbG9jayAobmV3QmxvY2spIHtcbiAgICBpZiAodGhpcy5fdHJhY2tpbmdCbG9jayAmJiAodGhpcy5fdHJhY2tpbmdCbG9jay5oYXNoID09PSBuZXdCbG9jay5oYXNoKSkgcmV0dXJuXG4gICAgLy8gY2hlY2sgZm9yIGxhcmdlIHRpbWVzdGFtcCBsYXBzZVxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fdHJhY2tpbmdCbG9ja1RpbWVzdGFtcFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAvLyBjaGVjayBmb3IgZGVzeW5jaHJvbml6YXRpb24gKGNvbXB1dGVyIHNsZWVwIG9yIG5vIGludGVybmV0KVxuICAgIGlmIChwcmV2aW91cyAmJiAobm93IC0gcHJldmlvdXMpID4gdGhpcy5fc3luY2luZ1RpbWVvdXQpIHtcbiAgICAgIHRoaXMuX3RyYWNraW5nQmxvY2tUaW1lc3RhbXAgPSBudWxsXG4gICAgICBhd2FpdCB0aGlzLl93YXJwVG9MYXRlc3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cmFja2luZ0Jsb2NrID0gbmV3QmxvY2tcbiAgICAgIHRoaXMuX3RyYWNraW5nQmxvY2tUaW1lc3RhbXAgPSBub3dcbiAgICAgIHRoaXMuZW1pdCgnYmxvY2snLCBuZXdCbG9jaylcbiAgICB9XG4gIH1cblxuICBhc3luYyBfc2V0Q3VycmVudEJsb2NrIChuZXdCbG9jaykge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QmxvY2sgJiYgKHRoaXMuX2N1cnJlbnRCbG9jay5oYXNoID09PSBuZXdCbG9jay5oYXNoKSkgcmV0dXJuXG4gICAgY29uc3Qgb2xkQmxvY2sgPSB0aGlzLl9jdXJyZW50QmxvY2tcbiAgICB0aGlzLl9jdXJyZW50QmxvY2sgPSBuZXdCbG9ja1xuICAgIHRoaXMuZW1pdCgnbGF0ZXN0JywgbmV3QmxvY2spXG4gICAgdGhpcy5lbWl0KCdzeW5jJywgeyBuZXdCbG9jaywgb2xkQmxvY2sgfSlcbiAgfVxuXG4gIGFzeW5jIF93YXJwVG9MYXRlc3QoKSB7XG4gICAgLy8gc2V0IGxhdGVzdCBhcyB0cmFja2luZyBibG9ja1xuICAgIGF3YWl0IHRoaXMuX3NldFRyYWNraW5nQmxvY2soYXdhaXQgdGhpcy5fZmV0Y2hMYXRlc3RCbG9jaygpKVxuICB9XG5cbiAgYXN5bmMgX3BvbGxGb3JOZXh0QmxvY2sgKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fcGVyZm9ybVN5bmMoKSwgdGhpcy5fcG9sbGluZ0ludGVydmFsKVxuICB9XG5cbiAgYXN5bmMgX3BlcmZvcm1TeW5jICgpIHtcbiAgICBpZiAoIXRoaXMuX2lzUnVubmluZykgcmV0dXJuXG4gICAgY29uc3QgdHJhY2tpbmdCbG9jayA9IHRoaXMuZ2V0VHJhY2tpbmdCbG9jaygpXG4gICAgaWYgKCF0cmFja2luZ0Jsb2NrKSB0aHJvdyBuZXcgRXJyb3IoJ1JwY0Jsb2NrVHJhY2tlciAtIHRyYWNraW5nIGJsb2NrIGlzIG1pc3NpbmcnKVxuICAgIGNvbnN0IG5leHROdW1iZXIgPSBpbmNyZW1lbnRIZXhOdW1iZXIodHJhY2tpbmdCbG9jay5udW1iZXIpXG4gICAgdHJ5IHtcblxuICAgICAgY29uc3QgbmV3QmxvY2sgPSBhd2FpdCB0aGlzLl9mZXRjaEJsb2NrQnlOdW1iZXIobmV4dE51bWJlcilcbiAgICAgIGlmIChuZXdCbG9jaykge1xuICAgICAgICAvLyBzZXQgYXMgbmV3IHRyYWNraW5nIGJsb2NrXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldFRyYWNraW5nQmxvY2sobmV3QmxvY2spXG4gICAgICAgIC8vIGFzayBmb3IgbmV4dCBibG9ja1xuICAgICAgICB0aGlzLl9wZXJmb3JtU3luYygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzZXQgdHJhY2tpbmcgYmxvY2sgYXMgY3VycmVudCBibG9ja1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50QmxvY2sodHJhY2tpbmdCbG9jaylcbiAgICAgICAgLy8gc2V0dXAgcG9sbCBmb3IgbmV4dCBibG9ja1xuICAgICAgICB0aGlzLl9wb2xsRm9yTmV4dEJsb2NrKClcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycikge1xuXG4gICAgICAvLyBob3RmaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bWpzL3Rlc3RycGMvaXNzdWVzLzI5MFxuICAgICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdpbmRleCBvdXQgb2YgcmFuZ2UnKSB8fFxuICAgICAgICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiQ291bGRuJ3QgZmluZCBibG9jayBieSByZWZlcmVuY2VcIikpIHtcbiAgICAgICAgLy8gc2V0IHRyYWNraW5nIGJsb2NrIGFzIGN1cnJlbnQgYmxvY2tcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEJsb2NrKHRyYWNraW5nQmxvY2spXG4gICAgICAgIC8vIHNldHVwIHBvbGwgZm9yIG5leHQgYmxvY2tcbiAgICAgICAgdGhpcy5fcG9sbEZvck5leHRCbG9jaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5fcG9sbEZvck5leHRCbG9jaygpXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24oZXJyLCBub3RpZmljYXRpb24pIHtcbiAgICBpZiAobm90aWZpY2F0aW9uLmlkICE9IHRoaXMuX3N1YnNjcmlwdGlvbklkKVxuICAgICAgcmV0dXJuIC8vIHRoaXMgbm90aWZpY2F0aW9uIGlzbid0IGZvciB1c1xuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIGF3YWl0IHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbigpXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5fc2V0VHJhY2tpbmdCbG9jayhhd2FpdCB0aGlzLl9mZXRjaEJsb2NrQnlOdW1iZXIobm90aWZpY2F0aW9uLnJlc3VsdC5udW1iZXIpKVxuICB9XG5cbiAgYXN5bmMgX2luaXRTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fcHJvdmlkZXIub24oJ2RhdGEnLCB0aGlzLl9oYW5kbGVOZXdCbG9ja05vdGlmaWNhdGlvbilcblxuICAgIGxldCByZXN1bHQgPSBhd2FpdCBwaWZ5KHRoaXMuX3Byb3ZpZGVyLnNlbmRBc3luYyB8fCB0aGlzLl9wcm92aWRlci5zZW5kKSh7XG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgIGlkOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgIG1ldGhvZDogJ2V0aF9zdWJzY3JpYmUnLFxuICAgICAgcGFyYW1zOiBbXG4gICAgICAgICduZXdIZWFkcydcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbklkID0gcmVzdWx0LnJlc3VsdFxuICB9XG5cbiAgYXN5bmMgX3JlbW92ZVN1YnNjcmlwdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3Vic2NyaWJlZC5cIilcblxuICAgIHRoaXMuX3Byb3ZpZGVyLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgdGhpcy5faGFuZGxlTmV3QmxvY2tOb3RpZmljYXRpb24pXG5cbiAgICBhd2FpdCBwaWZ5KHRoaXMuX3Byb3ZpZGVyLnNlbmRBc3luYyB8fCB0aGlzLl9wcm92aWRlci5zZW5kKSh7XG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgIGlkOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgIG1ldGhvZDogJ2V0aF91bnN1YnNjcmliZScsXG4gICAgICBwYXJhbXM6IFtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uSWRcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGRlbGV0ZSB0aGlzLl9zdWJzY3JpcHRpb25JZFxuICB9XG5cbiAgX2ZldGNoTGF0ZXN0QmxvY2sgKCkge1xuICAgIHJldHVybiBwaWZ5KHRoaXMuX3F1ZXJ5LmdldEJsb2NrQnlOdW1iZXIpLmNhbGwodGhpcy5fcXVlcnksICdsYXRlc3QnLCB0cnVlKVxuICB9XG5cbiAgX2ZldGNoQmxvY2tCeU51bWJlciAoaGV4TnVtYmVyKSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXhVdGlscy5mb3JtYXRIZXgoaGV4TnVtYmVyKVxuICAgIHJldHVybiBwaWZ5KHRoaXMuX3F1ZXJ5LmdldEJsb2NrQnlOdW1iZXIpLmNhbGwodGhpcy5fcXVlcnksIGNsZWFuSGV4LCB0cnVlKVxuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBScGNCbG9ja1RyYWNrZXJcblxuIC8vIOKUnOKUgCBkaWZmaWN1bHR5OiAweDI4OTJkZGNhXG4gLy8g4pSc4pSAIGV4dHJhRGF0YTogMHhkOTgzMDEwNTA3ODQ2NzY1NzQ2ODg3Njc2ZjMxMmUzNzJlMzQ4Nzc3Njk2ZTY0NmY3NzczXG4gLy8g4pSc4pSAIGdhc0xpbWl0OiAweDQ3ZTdjNFxuIC8vIOKUnOKUgCBnYXNVc2VkOiAweDYzODRcbiAvLyDilJzilIAgaGFzaDogMHhmNjA5MDM2ODdiMTU1OWI5YzgwZjJkOTM1YjRjNGY0NjhhZDk1YzMwNzY5MjhjNDMyZWMzNGYyZWYzZDRlZWM5XG4gLy8g4pSc4pSAIGxvZ3NCbG9vbTogMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFxuIC8vIOKUnOKUgCBtaW5lcjogMHgwMTcxMTg1MzMzNWY4NTc0NDJlZjZmMzQ5YjI0NjdjNTMxNzMxMzE4XG4gLy8g4pSc4pSAIG1peEhhc2g6IDB4ZjBkOWJlYzk5OTYwMGVlYzkyZThlNGRhOGZjMTE4MmUzNTc0NjhjOWVkMmY4NDlhYTE3ZTBlOTAwNDEyYjM1MlxuIC8vIOKUnOKUgCBub25jZTogMHhkNTU2ZDVhNTUwNDE5OGU0XG4gLy8g4pSc4pSAIG51bWJlcjogMHg3MmFjOFxuIC8vIOKUnOKUgCBwYXJlbnRIYXNoOiAweGY1MjM5YzNjZTEwODUxOTQ1MjE0MzVhNTA1MjQ5NGMwMmJiYjEwMDJiMDE5Njg0ZGNmMzY4NDkwZWE2MjA4ZTVcbiAvLyDilJzilIAgcmVjZWlwdHNSb290OiAweDc4YzZmODIzNjA5NGIzOTJiY2M0M2I0N2IwZGMxY2U5M2VjZDI4NzViZmI1ZTRlNGMzNDMxZTVhZjY5OGZmOTlcbiAvLyDilJzilIAgc2hhM1VuY2xlczogMHgxZGNjNGRlOGRlYzc1ZDdhYWI4NWI1NjdiNmNjZDQxYWQzMTI0NTFiOTQ4YTc0MTNmMGExNDJmZDQwZDQ5MzQ3XG4gLy8g4pSc4pSAIHNpemU6IDB4MmFkXG4gLy8g4pSc4pSAIHN0YXRlUm9vdDogMHgwNTU0ZjE0NWM0ODFkZjJmYTAyZWNkMmRhMTcwNzE2NzI3NDBjM2FhOTQ4Yzg5NmYxNDY1ZTY3NzJmNzQxYWM2XG4gLy8g4pSc4pSAIHRpbWVzdGFtcDogMHg1ODk1NTg0NFxuIC8vIOKUnOKUgCB0b3RhbERpZmZpY3VsdHk6IDB4NzUxZDBkZmEwM2MxXG4gLy8g4pSc4pSAIHRyYW5zYWN0aW9uc1xuIC8vIOKUgiAg4pSU4pSAIDBcbiAvLyDilIIgICAgIOKUnOKUgCBibG9ja0hhc2g6IDB4ZjYwOTAzNjg3YjE1NTliOWM4MGYyZDkzNWI0YzRmNDY4YWQ5NWMzMDc2OTI4YzQzMmVjMzRmMmVmM2Q0ZWVjOVxuIC8vIOKUgiAgICAg4pSc4pSAIGJsb2NrTnVtYmVyOiAweDcyYWM4XG4gLy8g4pSCICAgICDilJzilIAgZnJvbTogMHgyMDEzNTQ3MjlmOGQwZjhiNjRlOWEwYzM1M2M2NzJjNmE2NmIzODU3XG4gLy8g4pSCICAgICDilJzilIAgZ2FzOiAweDE1ZjkwXG4gLy8g4pSCICAgICDilJzilIAgZ2FzUHJpY2U6IDB4NGE4MTdjODAwXG4gLy8g4pSCICAgICDilJzilIAgaGFzaDogMHhkNWExNWQ3YzI0NDkxNTBkYjRmNzRmNDJhNmNhMDcwMjE1MGEyNGM0NmM1YjQwNmE3ZTFiM2U0NDkwOGVmNDRkXG4gLy8g4pSCICAgICDilJzilIAgaW5wdXQ6IDB4ZTFmYThlODQ5YmMxMGQ4N2ZiMDNjNmIwNjAzYjA1YTNlMjkwNDNjN2UwYjdjOTI3MTE5NTc2YTRiZWM0NTdlOTZjN2Q3Y2RlXG4gLy8g4pSCICAgICDilJzilIAgbm9uY2U6IDB4MzIzZVxuIC8vIOKUgiAgICAg4pSc4pSAIHRvOiAweGQxMGUzYmUyYmM4Zjk1OWJjOGM0MWNmNjVmNjBkZTcyMWNmODlhZGZcbiAvLyDilIIgICAgIOKUnOKUgCB0cmFuc2FjdGlvbkluZGV4OiAweDBcbiAvLyDilIIgICAgIOKUnOKUgCB2YWx1ZTogMHgwXG4gLy8g4pSCICAgICDilJzilIAgdjogMHgyOVxuIC8vIOKUgiAgICAg4pSc4pSAIHI6IDB4ZjM1ZjhhYjI0MWU2YmIzY2NhZmZkMjFiMjY4ZGJmYzdmY2I1ZGYxYzFmYjgzZWU1MzA2MjA3ZTRhMWEzZTk1NFxuIC8vIOKUgiAgICAg4pSU4pSAIHM6IDB4MTYxMGNkYWMyNzgyYzkxMDY1ZmQ0MzU4NGNkODk3NGY3ZjNiNGU2ZDQ2YTJhYWZlN2IxMDE3ODgyODViZjNmMlxuIC8vIOKUnOKUgCB0cmFuc2FjdGlvbnNSb290OiAweGIwOTBjMzJkODQwZGVjMWU5NzUyNzE5ZjIxYmJhZTRhNzNlNTgzMzNhZWNiODliYzNiOGVkNTU5ZmIyNzEyYTNcbiAvLyDilJTilIAgdW5jbGVzXG4iLCJjb25zdCBleHRlbmQgPSByZXF1aXJlKCd4dGVuZCcpXG5jb25zdCBjcmVhdGVSYW5kb21JZCA9IHJlcXVpcmUoJ2pzb24tcnBjLXJhbmRvbS1pZCcpKClcblxubW9kdWxlLmV4cG9ydHMgPSBFdGhRdWVyeVxuXG5cbmZ1bmN0aW9uIEV0aFF1ZXJ5KHByb3ZpZGVyKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgc2VsZi5jdXJyZW50UHJvdmlkZXIgPSBwcm92aWRlclxufVxuXG4vL1xuLy8gYmFzZSBxdWVyaWVzXG4vL1xuXG4vLyBkZWZhdWx0IGJsb2NrXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuV2l0aERlZmF1bHRCbG9ja0ZvcigyLCAnZXRoX2dldEJhbGFuY2UnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldENvZGUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbldpdGhEZWZhdWx0QmxvY2tGb3IoMiwgJ2V0aF9nZXRDb2RlJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkNvdW50ID0gICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5XaXRoRGVmYXVsdEJsb2NrRm9yKDIsICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0U3RvcmFnZUF0ID0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuV2l0aERlZmF1bHRCbG9ja0ZvcigzLCAnZXRoX2dldFN0b3JhZ2VBdCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuY2FsbCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuV2l0aERlZmF1bHRCbG9ja0ZvcigyLCAnZXRoX2NhbGwnKVxuLy8gc3RhbmRhcmRcbkV0aFF1ZXJ5LnByb3RvdHlwZS5wcm90b2NvbFZlcnNpb24gPSAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9wcm90b2NvbFZlcnNpb24nKVxuRXRoUXVlcnkucHJvdG90eXBlLnN5bmNpbmcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX3N5bmNpbmcnKVxuRXRoUXVlcnkucHJvdG90eXBlLmNvaW5iYXNlID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2NvaW5iYXNlJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5taW5pbmcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9taW5pbmcnKVxuRXRoUXVlcnkucHJvdG90eXBlLmhhc2hyYXRlID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2hhc2hyYXRlJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nYXNQcmljZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nYXNQcmljZScpXG5FdGhRdWVyeS5wcm90b3R5cGUuYWNjb3VudHMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfYWNjb3VudHMnKVxuRXRoUXVlcnkucHJvdG90eXBlLmJsb2NrTnVtYmVyID0gICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2Jsb2NrTnVtYmVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2ggPSAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2gnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyID0gICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRVbmNsZUNvdW50QnlCbG9ja0hhc2ggPSAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRVbmNsZUNvdW50QnlCbG9ja0hhc2gnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldFVuY2xlQ291bnRCeUJsb2NrTnVtYmVyID0gICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldFVuY2xlQ291bnRCeUJsb2NrTnVtYmVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zaWduID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zaWduJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zZW5kVHJhbnNhY3Rpb24gPSAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zZW5kVHJhbnNhY3Rpb24nKVxuRXRoUXVlcnkucHJvdG90eXBlLnNlbmRSYXdUcmFuc2FjdGlvbiA9ICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX3NlbmRSYXdUcmFuc2FjdGlvbicpXG5FdGhRdWVyeS5wcm90b3R5cGUuZXN0aW1hdGVHYXMgPSAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZXN0aW1hdGVHYXMnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldEJsb2NrQnlIYXNoID0gICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldEJsb2NrQnlIYXNoJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRCbG9ja0J5TnVtYmVyID0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRCbG9ja0J5TnVtYmVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkJ5SGFzaCA9ICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4ID0gICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4JylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCA9IGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleCcpXG5FdGhRdWVyeS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25SZWNlaXB0ID0gICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfZ2V0VHJhbnNhY3Rpb25SZWNlaXB0JylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRVbmNsZUJ5QmxvY2tIYXNoQW5kSW5kZXggPSAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRVbmNsZUJ5QmxvY2tIYXNoQW5kSW5kZXgnKVxuRXRoUXVlcnkucHJvdG90eXBlLmdldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4ID0gICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2dldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4JylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRDb21waWxlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRDb21waWxlcnMnKVxuRXRoUXVlcnkucHJvdG90eXBlLmNvbXBpbGVMTEwgPSAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2NvbXBpbGVMTEwnKVxuRXRoUXVlcnkucHJvdG90eXBlLmNvbXBpbGVTb2xpZGl0eSA9ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX2NvbXBpbGVTb2xpZGl0eScpXG5FdGhRdWVyeS5wcm90b3R5cGUuY29tcGlsZVNlcnBlbnQgPSAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfY29tcGlsZVNlcnBlbnQnKVxuRXRoUXVlcnkucHJvdG90eXBlLm5ld0ZpbHRlciA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX25ld0ZpbHRlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUubmV3QmxvY2tGaWx0ZXIgPSAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfbmV3QmxvY2tGaWx0ZXInKVxuRXRoUXVlcnkucHJvdG90eXBlLm5ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlciA9ICAgICAgICAgZ2VuZXJhdGVGbkZvcignZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcicpXG5FdGhRdWVyeS5wcm90b3R5cGUudW5pbnN0YWxsRmlsdGVyID0gICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZuRm9yKCdldGhfdW5pbnN0YWxsRmlsdGVyJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRGaWx0ZXJDaGFuZ2VzID0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRGaWx0ZXJDaGFuZ2VzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRGaWx0ZXJMb2dzID0gICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRGaWx0ZXJMb2dzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRMb2dzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRMb2dzJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5nZXRXb3JrID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9nZXRXb3JrJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zdWJtaXRXb3JrID0gICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zdWJtaXRXb3JrJylcbkV0aFF1ZXJ5LnByb3RvdHlwZS5zdWJtaXRIYXNocmF0ZSA9ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlRm5Gb3IoJ2V0aF9zdWJtaXRIYXNocmF0ZScpXG5cbi8vIG5ldHdvcmsgbGV2ZWxcblxuRXRoUXVlcnkucHJvdG90eXBlLnNlbmRBc3luYyA9IGZ1bmN0aW9uKG9wdHMsIGNiKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgc2VsZi5jdXJyZW50UHJvdmlkZXIuc2VuZEFzeW5jKGNyZWF0ZVBheWxvYWQob3B0cyksIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2Upe1xuICAgIGlmICghZXJyICYmIHJlc3BvbnNlLmVycm9yKSBlcnIgPSBuZXcgRXJyb3IoJ0V0aFF1ZXJ5IC0gUlBDIEVycm9yIC0gJytyZXNwb25zZS5lcnJvci5tZXNzYWdlKVxuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY2IobnVsbCwgcmVzcG9uc2UucmVzdWx0KVxuICB9KVxufVxuXG4vLyB1dGlsXG5cbmZ1bmN0aW9uIGdlbmVyYXRlRm5Gb3IobWV0aG9kTmFtZSl7XG4gIHJldHVybiBmdW5jdGlvbigpe1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgc2VsZi5zZW5kQXN5bmMoe1xuICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgcGFyYW1zOiBhcmdzLFxuICAgIH0sIGNiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRm5XaXRoRGVmYXVsdEJsb2NrRm9yKGFyZ0NvdW50LCBtZXRob2ROYW1lKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgIHZhciBjYiA9IGFyZ3MucG9wKClcbiAgICAvLyBzZXQgb3B0aW9uYWwgZGVmYXVsdCBibG9jayBwYXJhbVxuICAgIGlmIChhcmdzLmxlbmd0aCA8IGFyZ0NvdW50KSBhcmdzLnB1c2goJ2xhdGVzdCcpXG4gICAgc2VsZi5zZW5kQXN5bmMoe1xuICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgcGFyYW1zOiBhcmdzLFxuICAgIH0sIGNiKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBheWxvYWQoZGF0YSl7XG4gIHJldHVybiBleHRlbmQoe1xuICAgIC8vIGRlZmF1bHRzXG4gICAgaWQ6IGNyZWF0ZVJhbmRvbUlkKCksXG4gICAganNvbnJwYzogJzIuMCcsXG4gICAgcGFyYW1zOiBbXSxcbiAgICAvLyB1c2VyLXNwZWNpZmllZFxuICB9LCBkYXRhKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBJZEl0ZXJhdG9yXG5cbmZ1bmN0aW9uIElkSXRlcmF0b3Iob3B0cyl7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIHZhciBtYXggPSBvcHRzLm1heCB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICB2YXIgaWRDb3VudGVyID0gdHlwZW9mIG9wdHMuc3RhcnQgIT09ICd1bmRlZmluZWQnID8gb3B0cy5zdGFydCA6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heClcblxuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUmFuZG9tSWQgKCkge1xuICAgIGlkQ291bnRlciA9IGlkQ291bnRlciAlIG1heFxuICAgIHJldHVybiBpZENvdW50ZXIrK1xuICB9XG5cbn0iLCIndXNlIHN0cmljdCc7XG5cbnZhciBwcm9jZXNzRm4gPSBmdW5jdGlvbiAoZm4sIFAsIG9wdHMpIHtcblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0YXJncy5wdXNoKGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuXHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdH0gZWxzZSBpZiAob3B0cy5tdWx0aUFyZ3MpIHtcblx0XHRcdFx0XHR2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG5cblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0cmVzdWx0c1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRmbi5hcHBseSh0aGF0LCBhcmdzKTtcblx0XHR9KTtcblx0fTtcbn07XG5cbnZhciBwaWZ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBQLCBvcHRzKSB7XG5cdGlmICh0eXBlb2YgUCAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdG9wdHMgPSBQO1xuXHRcdFAgPSBQcm9taXNlO1xuXHR9XG5cblx0b3B0cyA9IG9wdHMgfHwge307XG5cdG9wdHMuZXhjbHVkZSA9IG9wdHMuZXhjbHVkZSB8fCBbLy4rU3luYyQvXTtcblxuXHR2YXIgZmlsdGVyID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdHZhciBtYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnID8ga2V5ID09PSBwYXR0ZXJuIDogcGF0dGVybi50ZXN0KGtleSk7XG5cdFx0fTtcblxuXHRcdHJldHVybiBvcHRzLmluY2x1ZGUgPyBvcHRzLmluY2x1ZGUuc29tZShtYXRjaCkgOiAhb3B0cy5leGNsdWRlLnNvbWUobWF0Y2gpO1xuXHR9O1xuXG5cdHZhciByZXQgPSB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKCkge1xuXHRcdGlmIChvcHRzLmV4Y2x1ZGVNYWluKSB7XG5cdFx0XHRyZXR1cm4gb2JqLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb2Nlc3NGbihvYmosIFAsIG9wdHMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdH0gOiB7fTtcblxuXHRyZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoZnVuY3Rpb24gKHJldCwga2V5KSB7XG5cdFx0dmFyIHggPSBvYmpba2V5XTtcblxuXHRcdHJldFtrZXldID0gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgJiYgZmlsdGVyKGtleSkgPyBwcm9jZXNzRm4oeCwgUCwgb3B0cykgOiB4O1xuXG5cdFx0cmV0dXJuIHJldDtcblx0fSwgcmV0KTtcbn07XG5cbnBpZnkuYWxsID0gcGlmeTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBldGhqc1V0aWwgPSByZXF1aXJlKCdldGhqcy11dGlsJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluY3JlbWVudEhleE51bWJlcixcbiAgZm9ybWF0SGV4LFxufVxuXG5mdW5jdGlvbiBpbmNyZW1lbnRIZXhOdW1iZXIoaGV4TnVtKSB7XG4gIHJldHVybiBmb3JtYXRIZXgoZXRoanNVdGlsLmludFRvSGV4KChwYXJzZUludChoZXhOdW0sIDE2KSArIDEpKSlcbn1cblxuZnVuY3Rpb24gZm9ybWF0SGV4IChoZXhOdW0pIHtcbiAgbGV0IHN0cmlwcGVkID0gZXRoanNVdGlsLnN0cmlwSGV4UHJlZml4KGhleE51bSlcbiAgd2hpbGUgKHN0cmlwcGVkWzBdID09PSAnMCcpIHtcbiAgICBzdHJpcHBlZCA9IHN0cmlwcGVkLnN1YnN0cigxKVxuICB9XG4gIHJldHVybiBgMHgke3N0cmlwcGVkfWBcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9kb1BhcmFsbGVsID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9kb1BhcmFsbGVsJyk7XG5cbnZhciBfZG9QYXJhbGxlbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kb1BhcmFsbGVsKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKCcuL2ludGVybmFsL21hcCcpO1xuXG52YXIgX21hcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYXApO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFByb2R1Y2VzIGEgbmV3IGNvbGxlY3Rpb24gb2YgdmFsdWVzIGJ5IG1hcHBpbmcgZWFjaCB2YWx1ZSBpbiBgY29sbGAgdGhyb3VnaFxuICogdGhlIGBpdGVyYXRlZWAgZnVuY3Rpb24uIFRoZSBgaXRlcmF0ZWVgIGlzIGNhbGxlZCB3aXRoIGFuIGl0ZW0gZnJvbSBgY29sbGBcbiAqIGFuZCBhIGNhbGxiYWNrIGZvciB3aGVuIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBFYWNoIG9mIHRoZXNlIGNhbGxiYWNrXG4gKiB0YWtlcyAyIGFyZ3VtZW50czogYW4gYGVycm9yYCwgYW5kIHRoZSB0cmFuc2Zvcm1lZCBpdGVtIGZyb20gYGNvbGxgLiBJZlxuICogYGl0ZXJhdGVlYCBwYXNzZXMgYW4gZXJyb3IgdG8gaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIChmb3IgdGhlXG4gKiBgbWFwYCBmdW5jdGlvbikgaXMgaW1tZWRpYXRlbHkgY2FsbGVkIHdpdGggdGhlIGVycm9yLlxuICpcbiAqIE5vdGUsIHRoYXQgc2luY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBgaXRlcmF0ZWVgIHRvIGVhY2ggaXRlbSBpblxuICogcGFyYWxsZWwsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyB3aWxsIGNvbXBsZXRlXG4gKiBpbiBvcmRlci4gSG93ZXZlciwgdGhlIHJlc3VsdHMgYXJyYXkgd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbiAqIG9yaWdpbmFsIGBjb2xsYC5cbiAqXG4gKiBJZiBgbWFwYCBpcyBwYXNzZWQgYW4gT2JqZWN0LCB0aGUgcmVzdWx0cyB3aWxsIGJlIGFuIEFycmF5LiAgVGhlIHJlc3VsdHNcbiAqIHdpbGwgcm91Z2hseSBiZSBpbiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIE9iamVjdHMnIGtleXMgKGJ1dCB0aGlzIGNhblxuICogdmFyeSBhY3Jvc3MgSmF2YVNjcmlwdCBlbmdpbmVzKS5cbiAqXG4gKiBAbmFtZSBtYXBcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAqIEBtZXRob2RcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gKiBgY29sbGAuXG4gKiBUaGUgaXRlcmF0ZWUgc2hvdWxkIGNvbXBsZXRlIHdpdGggdGhlIHRyYW5zZm9ybWVkIGl0ZW0uXG4gKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbCBgaXRlcmF0ZWVgXG4gKiBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBSZXN1bHRzIGlzIGFuIEFycmF5IG9mIHRoZVxuICogdHJhbnNmb3JtZWQgaXRlbXMgZnJvbSB0aGUgYGNvbGxgLiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGFzeW5jLm1hcChbJ2ZpbGUxJywnZmlsZTInLCdmaWxlMyddLCBmcy5zdGF0LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAqICAgICAvLyByZXN1bHRzIGlzIG5vdyBhbiBhcnJheSBvZiBzdGF0cyBmb3IgZWFjaCBmaWxlXG4gKiB9KTtcbiAqL1xuZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9kb1BhcmFsbGVsMi5kZWZhdWx0KShfbWFwMi5kZWZhdWx0KTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZG9QYXJhbGxlbDtcblxudmFyIF9lYWNoT2YgPSByZXF1aXJlKCcuLi9lYWNoT2YnKTtcblxudmFyIF9lYWNoT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWFjaE9mKTtcblxudmFyIF93cmFwQXN5bmMgPSByZXF1aXJlKCcuL3dyYXBBc3luYycpO1xuXG52YXIgX3dyYXBBc3luYzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93cmFwQXN5bmMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBkb1BhcmFsbGVsKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZm4oX2VhY2hPZjIuZGVmYXVsdCwgb2JqLCAoMCwgX3dyYXBBc3luYzIuZGVmYXVsdCkoaXRlcmF0ZWUpLCBjYWxsYmFjayk7XG4gICAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGVhY2hPZkxpbWl0O1xuXG52YXIgX2VhY2hPZkxpbWl0MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvZWFjaE9mTGltaXQnKTtcblxudmFyIF9lYWNoT2ZMaW1pdDMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lYWNoT2ZMaW1pdDIpO1xuXG52YXIgX3dyYXBBc3luYyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd3JhcEFzeW5jJyk7XG5cbnZhciBfd3JhcEFzeW5jMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyYXBBc3luYyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGhlIHNhbWUgYXMgW2BlYWNoT2ZgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaE9mfSBidXQgcnVucyBhIG1heGltdW0gb2YgYGxpbWl0YCBhc3luYyBvcGVyYXRpb25zIGF0IGFcbiAqIHRpbWUuXG4gKlxuICogQG5hbWUgZWFjaE9mTGltaXRcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q29sbGVjdGlvbnNcbiAqIEBtZXRob2RcbiAqIEBzZWUgW2FzeW5jLmVhY2hPZl17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2hPZn1cbiAqIEBhbGlhcyBmb3JFYWNoT2ZMaW1pdFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8SXRlcmFibGV8T2JqZWN0fSBjb2xsIC0gQSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhc3luYyBvcGVyYXRpb25zIGF0IGEgdGltZS5cbiAqIEBwYXJhbSB7QXN5bmNGdW5jdGlvbn0gaXRlcmF0ZWUgLSBBbiBhc3luYyBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoXG4gKiBpdGVtIGluIGBjb2xsYC4gVGhlIGBrZXlgIGlzIHRoZSBpdGVtJ3Mga2V5LCBvciBpbmRleCBpbiB0aGUgY2FzZSBvZiBhblxuICogYXJyYXkuXG4gKiBJbnZva2VkIHdpdGggKGl0ZW0sIGtleSwgY2FsbGJhY2spLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYWxsXG4gKiBgaXRlcmF0ZWVgIGZ1bmN0aW9ucyBoYXZlIGZpbmlzaGVkLCBvciBhbiBlcnJvciBvY2N1cnMuIEludm9rZWQgd2l0aCAoZXJyKS5cbiAqL1xuZnVuY3Rpb24gZWFjaE9mTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAoMCwgX2VhY2hPZkxpbWl0My5kZWZhdWx0KShsaW1pdCkoY29sbCwgKDAsIF93cmFwQXN5bmMyLmRlZmF1bHQpKGl0ZXJhdGVlKSwgY2FsbGJhY2spO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBpdGVyYXRvcjtcblxudmFyIF9pc0FycmF5TGlrZSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5TGlrZScpO1xuXG52YXIgX2lzQXJyYXlMaWtlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzQXJyYXlMaWtlKTtcblxudmFyIF9nZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3InKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJdGVyYXRvcik7XG5cbnZhciBfa2V5cyA9IHJlcXVpcmUoJ2xvZGFzaC9rZXlzJyk7XG5cbnZhciBfa2V5czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9rZXlzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gY3JlYXRlQXJyYXlJdGVyYXRvcihjb2xsKSB7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB2YXIgbGVuID0gY29sbC5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHJldHVybiArK2kgPCBsZW4gPyB7IHZhbHVlOiBjb2xsW2ldLCBrZXk6IGkgfSA6IG51bGw7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRVMyMDE1SXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICB2YXIgaXRlbSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKGl0ZW0uZG9uZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGkrKztcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0udmFsdWUsIGtleTogaSB9O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdEl0ZXJhdG9yKG9iaikge1xuICAgIHZhciBva2V5cyA9ICgwLCBfa2V5czIuZGVmYXVsdCkob2JqKTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHZhciBsZW4gPSBva2V5cy5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciBrZXkgPSBva2V5c1srK2ldO1xuICAgICAgICByZXR1cm4gaSA8IGxlbiA/IHsgdmFsdWU6IG9ialtrZXldLCBrZXk6IGtleSB9IDogbnVsbDtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpdGVyYXRvcihjb2xsKSB7XG4gICAgaWYgKCgwLCBfaXNBcnJheUxpa2UyLmRlZmF1bHQpKGNvbGwpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBcnJheUl0ZXJhdG9yKGNvbGwpO1xuICAgIH1cblxuICAgIHZhciBpdGVyYXRvciA9ICgwLCBfZ2V0SXRlcmF0b3IyLmRlZmF1bHQpKGNvbGwpO1xuICAgIHJldHVybiBpdGVyYXRvciA/IGNyZWF0ZUVTMjAxNUl0ZXJhdG9yKGl0ZXJhdG9yKSA6IGNyZWF0ZU9iamVjdEl0ZXJhdG9yKGNvbGwpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChjb2xsKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yU3ltYm9sICYmIGNvbGxbaXRlcmF0b3JTeW1ib2xdICYmIGNvbGxbaXRlcmF0b3JTeW1ib2xdKCk7XG59O1xuXG52YXIgaXRlcmF0b3JTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGFzeW5jaWZ5O1xuXG52YXIgX2lzT2JqZWN0ID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0Jyk7XG5cbnZhciBfaXNPYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXNPYmplY3QpO1xuXG52YXIgX2luaXRpYWxQYXJhbXMgPSByZXF1aXJlKCcuL2ludGVybmFsL2luaXRpYWxQYXJhbXMnKTtcblxudmFyIF9pbml0aWFsUGFyYW1zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luaXRpYWxQYXJhbXMpO1xuXG52YXIgX3NldEltbWVkaWF0ZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc2V0SW1tZWRpYXRlJyk7XG5cbnZhciBfc2V0SW1tZWRpYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NldEltbWVkaWF0ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGFrZSBhIHN5bmMgZnVuY3Rpb24gYW5kIG1ha2UgaXQgYXN5bmMsIHBhc3NpbmcgaXRzIHJldHVybiB2YWx1ZSB0byBhXG4gKiBjYWxsYmFjay4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdnaW5nIHN5bmMgZnVuY3Rpb25zIGludG8gYSB3YXRlcmZhbGwsXG4gKiBzZXJpZXMsIG9yIG90aGVyIGFzeW5jIGZ1bmN0aW9ucy4gQW55IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGdlbmVyYXRlZFxuICogZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gKGV4Y2VwdCBmb3IgdGhlIGZpbmFsXG4gKiBjYWxsYmFjayBhcmd1bWVudCkuIEVycm9ycyB0aHJvd24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICpcbiAqIElmIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYGFzeW5jaWZ5YCByZXR1cm5zIGEgUHJvbWlzZSwgdGhhdCBwcm9taXNlcydzXG4gKiByZXNvbHZlZC9yZWplY3RlZCBzdGF0ZSB3aWxsIGJlIHVzZWQgdG8gY2FsbCB0aGUgY2FsbGJhY2ssIHJhdGhlciB0aGFuIHNpbXBseVxuICogdGhlIHN5bmNocm9ub3VzIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBUaGlzIGFsc28gbWVhbnMgeW91IGNhbiBhc3luY2lmeSBFUzIwMTcgYGFzeW5jYCBmdW5jdGlvbnMuXG4gKlxuICogQG5hbWUgYXN5bmNpZnlcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VXRpbHNcbiAqIEBtZXRob2RcbiAqIEBhbGlhcyB3cmFwU3luY1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24sIG9yIFByb21pc2UtcmV0dXJuaW5nXG4gKiBmdW5jdGlvbiB0byBjb252ZXJ0IHRvIGFuIHtAbGluayBBc3luY0Z1bmN0aW9ufS5cbiAqIEByZXR1cm5zIHtBc3luY0Z1bmN0aW9ufSBBbiBhc3luY2hyb25vdXMgd3JhcHBlciBvZiB0aGUgYGZ1bmNgLiBUbyBiZVxuICogaW52b2tlZCB3aXRoIGAoYXJncy4uLiwgY2FsbGJhY2spYC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gcGFzc2luZyBhIHJlZ3VsYXIgc3luY2hyb25vdXMgZnVuY3Rpb25cbiAqIGFzeW5jLndhdGVyZmFsbChbXG4gKiAgICAgYXN5bmMuYXBwbHkoZnMucmVhZEZpbGUsIGZpbGVuYW1lLCBcInV0ZjhcIiksXG4gKiAgICAgYXN5bmMuYXN5bmNpZnkoSlNPTi5wYXJzZSksXG4gKiAgICAgZnVuY3Rpb24gKGRhdGEsIG5leHQpIHtcbiAqICAgICAgICAgLy8gZGF0YSBpcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIHRleHQuXG4gKiAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHBhcnNpbmcgZXJyb3IsIGl0IHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQuXG4gKiAgICAgfVxuICogXSwgY2FsbGJhY2spO1xuICpcbiAqIC8vIHBhc3NpbmcgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBwcm9taXNlXG4gKiBhc3luYy53YXRlcmZhbGwoW1xuICogICAgIGFzeW5jLmFwcGx5KGZzLnJlYWRGaWxlLCBmaWxlbmFtZSwgXCJ1dGY4XCIpLFxuICogICAgIGFzeW5jLmFzeW5jaWZ5KGZ1bmN0aW9uIChjb250ZW50cykge1xuICogICAgICAgICByZXR1cm4gZGIubW9kZWwuY3JlYXRlKGNvbnRlbnRzKTtcbiAqICAgICB9KSxcbiAqICAgICBmdW5jdGlvbiAobW9kZWwsIG5leHQpIHtcbiAqICAgICAgICAgLy8gYG1vZGVsYCBpcyB0aGUgaW5zdGFudGlhdGVkIG1vZGVsIG9iamVjdC5cbiAqICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHNraXBwZWQuXG4gKiAgICAgfVxuICogXSwgY2FsbGJhY2spO1xuICpcbiAqIC8vIGVzMjAxNyBleGFtcGxlLCB0aG91Z2ggYGFzeW5jaWZ5YCBpcyBub3QgbmVlZGVkIGlmIHlvdXIgSlMgZW52aXJvbm1lbnRcbiAqIC8vIHN1cHBvcnRzIGFzeW5jIGZ1bmN0aW9ucyBvdXQgb2YgdGhlIGJveFxuICogdmFyIHEgPSBhc3luYy5xdWV1ZShhc3luYy5hc3luY2lmeShhc3luYyBmdW5jdGlvbihmaWxlKSB7XG4gKiAgICAgdmFyIGludGVybWVkaWF0ZVN0ZXAgPSBhd2FpdCBwcm9jZXNzRmlsZShmaWxlKTtcbiAqICAgICByZXR1cm4gYXdhaXQgc29tZVByb21pc2UoaW50ZXJtZWRpYXRlU3RlcClcbiAqIH0pKTtcbiAqXG4gKiBxLnB1c2goZmlsZXMpO1xuICovXG5mdW5jdGlvbiBhc3luY2lmeShmdW5jKSB7XG4gICAgcmV0dXJuICgwLCBfaW5pdGlhbFBhcmFtczIuZGVmYXVsdCkoZnVuY3Rpb24gKGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgcmVzdWx0IGlzIFByb21pc2Ugb2JqZWN0XG4gICAgICAgIGlmICgoMCwgX2lzT2JqZWN0Mi5kZWZhdWx0KShyZXN1bHQpICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIG51bGwsIHZhbHVlKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjYWxsYmFjaywgZXJyLm1lc3NhZ2UgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soY2FsbGJhY2ssIGVycm9yLCB2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3NldEltbWVkaWF0ZTIuZGVmYXVsdCkocmV0aHJvdywgZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXRocm93KGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIC8qLi4uYXJncywgY2FsbGJhY2sqL3tcbiAgICAgICAgdmFyIGFyZ3MgPSAoMCwgX3NsaWNlMi5kZWZhdWx0KShhcmd1bWVudHMpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmdzLnBvcCgpO1xuICAgICAgICBmbi5jYWxsKHRoaXMsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcblxudmFyIF9zbGljZSA9IHJlcXVpcmUoJy4vc2xpY2UnKTtcblxudmFyIF9zbGljZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOZXh0VGljayA9IGV4cG9ydHMuaGFzU2V0SW1tZWRpYXRlID0gdW5kZWZpbmVkO1xuZXhwb3J0cy5mYWxsYmFjayA9IGZhbGxiYWNrO1xuZXhwb3J0cy53cmFwID0gd3JhcDtcblxudmFyIF9zbGljZSA9IHJlcXVpcmUoJy4vc2xpY2UnKTtcblxudmFyIF9zbGljZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zbGljZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBoYXNTZXRJbW1lZGlhdGUgPSBleHBvcnRzLmhhc1NldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicgJiYgc2V0SW1tZWRpYXRlO1xudmFyIGhhc05leHRUaWNrID0gZXhwb3J0cy5oYXNOZXh0VGljayA9IHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PT0gJ2Z1bmN0aW9uJztcblxuZnVuY3Rpb24gZmFsbGJhY2soZm4pIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbn1cblxuZnVuY3Rpb24gd3JhcChkZWZlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZm4gLyosIC4uLmFyZ3MqLykge1xuICAgICAgICB2YXIgYXJncyA9ICgwLCBfc2xpY2UyLmRlZmF1bHQpKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGRlZmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG52YXIgX2RlZmVyO1xuXG5pZiAoaGFzU2V0SW1tZWRpYXRlKSB7XG4gICAgX2RlZmVyID0gc2V0SW1tZWRpYXRlO1xufSBlbHNlIGlmIChoYXNOZXh0VGljaykge1xuICAgIF9kZWZlciA9IHByb2Nlc3MubmV4dFRpY2s7XG59IGVsc2Uge1xuICAgIF9kZWZlciA9IGZhbGxiYWNrO1xufVxuXG5leHBvcnRzLmRlZmF1bHQgPSB3cmFwKF9kZWZlcik7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBfYXN5bmNNYXA7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoJ2xvZGFzaC9ub29wJyk7XG5cbnZhciBfbm9vcDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ub29wKTtcblxudmFyIF93cmFwQXN5bmMgPSByZXF1aXJlKCcuL3dyYXBBc3luYycpO1xuXG52YXIgX3dyYXBBc3luYzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93cmFwQXN5bmMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfYXN5bmNNYXAoZWFjaGZuLCBhcnIsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgX25vb3AyLmRlZmF1bHQ7XG4gICAgYXJyID0gYXJyIHx8IFtdO1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBfaXRlcmF0ZWUgPSAoMCwgX3dyYXBBc3luYzIuZGVmYXVsdCkoaXRlcmF0ZWUpO1xuXG4gICAgZWFjaGZuKGFyciwgZnVuY3Rpb24gKHZhbHVlLCBfLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIF9pdGVyYXRlZSh2YWx1ZSwgZnVuY3Rpb24gKGVyciwgdikge1xuICAgICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB2O1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgIH0pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2VhY2hMaW1pdCA9IHJlcXVpcmUoJy4vZWFjaExpbWl0Jyk7XG5cbnZhciBfZWFjaExpbWl0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VhY2hMaW1pdCk7XG5cbnZhciBfZG9MaW1pdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvZG9MaW1pdCcpO1xuXG52YXIgX2RvTGltaXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZG9MaW1pdCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogVGhlIHNhbWUgYXMgW2BlYWNoYF17QGxpbmsgbW9kdWxlOkNvbGxlY3Rpb25zLmVhY2h9IGJ1dCBydW5zIG9ubHkgYSBzaW5nbGUgYXN5bmMgb3BlcmF0aW9uIGF0IGEgdGltZS5cbiAqXG4gKiBAbmFtZSBlYWNoU2VyaWVzXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gKiBAbWV0aG9kXG4gKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAqIEBhbGlhcyBmb3JFYWNoU2VyaWVzXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxPYmplY3R9IGNvbGwgLSBBIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtBc3luY0Z1bmN0aW9ufSBpdGVyYXRlZSAtIEFuIGFzeW5jIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2hcbiAqIGl0ZW0gaW4gYGNvbGxgLlxuICogVGhlIGFycmF5IGluZGV4IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGl0ZXJhdGVlLlxuICogSWYgeW91IG5lZWQgdGhlIGluZGV4LCB1c2UgYGVhY2hPZlNlcmllc2AuXG4gKiBJbnZva2VkIHdpdGggKGl0ZW0sIGNhbGxiYWNrKS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBBIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGFsbFxuICogYGl0ZXJhdGVlYCBmdW5jdGlvbnMgaGF2ZSBmaW5pc2hlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLiBJbnZva2VkIHdpdGggKGVycikuXG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfZG9MaW1pdDIuZGVmYXVsdCkoX2VhY2hMaW1pdDIuZGVmYXVsdCwgMSk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBlYWNoTGltaXQ7XG5cbnZhciBfZWFjaE9mTGltaXQgPSByZXF1aXJlKCcuL2ludGVybmFsL2VhY2hPZkxpbWl0Jyk7XG5cbnZhciBfZWFjaE9mTGltaXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZWFjaE9mTGltaXQpO1xuXG52YXIgX3dpdGhvdXRJbmRleCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd2l0aG91dEluZGV4Jyk7XG5cbnZhciBfd2l0aG91dEluZGV4MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dpdGhvdXRJbmRleCk7XG5cbnZhciBfd3JhcEFzeW5jID0gcmVxdWlyZSgnLi9pbnRlcm5hbC93cmFwQXN5bmMnKTtcblxudmFyIF93cmFwQXN5bmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd3JhcEFzeW5jKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBUaGUgc2FtZSBhcyBbYGVhY2hgXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH0gYnV0IHJ1bnMgYSBtYXhpbXVtIG9mIGBsaW1pdGAgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gKlxuICogQG5hbWUgZWFjaExpbWl0XG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkNvbGxlY3Rpb25zXG4gKiBAbWV0aG9kXG4gKiBAc2VlIFthc3luYy5lYWNoXXtAbGluayBtb2R1bGU6Q29sbGVjdGlvbnMuZWFjaH1cbiAqIEBhbGlhcyBmb3JFYWNoTGltaXRcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fEl0ZXJhYmxlfE9iamVjdH0gY29sbCAtIEEgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXN5bmMgb3BlcmF0aW9ucyBhdCBhIHRpbWUuXG4gKiBAcGFyYW0ge0FzeW5jRnVuY3Rpb259IGl0ZXJhdGVlIC0gQW4gYXN5bmMgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBpdGVtIGluXG4gKiBgY29sbGAuXG4gKiBUaGUgYXJyYXkgaW5kZXggaXMgbm90IHBhc3NlZCB0byB0aGUgaXRlcmF0ZWUuXG4gKiBJZiB5b3UgbmVlZCB0aGUgaW5kZXgsIHVzZSBgZWFjaE9mTGltaXRgLlxuICogSW52b2tlZCB3aXRoIChpdGVtLCBjYWxsYmFjaykuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiBhbGxcbiAqIGBpdGVyYXRlZWAgZnVuY3Rpb25zIGhhdmUgZmluaXNoZWQsIG9yIGFuIGVycm9yIG9jY3Vycy4gSW52b2tlZCB3aXRoIChlcnIpLlxuICovXG5mdW5jdGlvbiBlYWNoTGltaXQoY29sbCwgbGltaXQsIGl0ZXJhdGVlLCBjYWxsYmFjaykge1xuICAoMCwgX2VhY2hPZkxpbWl0Mi5kZWZhdWx0KShsaW1pdCkoY29sbCwgKDAsIF93aXRob3V0SW5kZXgyLmRlZmF1bHQpKCgwLCBfd3JhcEFzeW5jMi5kZWZhdWx0KShpdGVyYXRlZSkpLCBjYWxsYmFjayk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX3dpdGhvdXRJbmRleDtcbmZ1bmN0aW9uIF93aXRob3V0SW5kZXgoaXRlcmF0ZWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0c1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0b3BsaWdodFxuXG5cbmluaGVyaXRzKFN0b3BsaWdodCwgRXZlbnRFbWl0dGVyKVxuXG5mdW5jdGlvbiBTdG9wbGlnaHQoKXtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgRXZlbnRFbWl0dGVyLmNhbGwoc2VsZilcbiAgc2VsZi5pc0xvY2tlZCA9IHRydWVcbn1cblxuU3RvcGxpZ2h0LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uKCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuaXNMb2NrZWQgPSBmYWxzZVxuICBzZWxmLmVtaXQoJ3VubG9jaycpXG59XG5cblN0b3BsaWdodC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCl7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuaXNMb2NrZWQgPSB0cnVlXG4gIHNlbGYuZW1pdCgnbG9jaycpXG59XG5cblN0b3BsaWdodC5wcm90b3R5cGUuYXdhaXQgPSBmdW5jdGlvbihmbil7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLmlzTG9ja2VkKSB7XG4gICAgc2VsZi5vbmNlKCd1bmxvY2snLCBmbilcbiAgfSBlbHNlIHtcbiAgICBzZXRUaW1lb3V0KGZuKVxuICB9XG59IiwiY29uc3Qgc3RyaW5naWZ5ID0gcmVxdWlyZSgnanNvbi1zdGFibGUtc3RyaW5naWZ5JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNhY2hlSWRlbnRpZmllckZvclBheWxvYWQ6IGNhY2hlSWRlbnRpZmllckZvclBheWxvYWQsXG4gIGNhbkNhY2hlOiBjYW5DYWNoZSxcbiAgYmxvY2tUYWdGb3JQYXlsb2FkOiBibG9ja1RhZ0ZvclBheWxvYWQsXG4gIHBhcmFtc1dpdGhvdXRCbG9ja1RhZzogcGFyYW1zV2l0aG91dEJsb2NrVGFnLFxuICBibG9ja1RhZ1BhcmFtSW5kZXg6IGJsb2NrVGFnUGFyYW1JbmRleCxcbiAgY2FjaGVUeXBlRm9yUGF5bG9hZDogY2FjaGVUeXBlRm9yUGF5bG9hZCxcbn1cblxuZnVuY3Rpb24gY2FjaGVJZGVudGlmaWVyRm9yUGF5bG9hZChwYXlsb2FkLCBvcHRzID0ge30pe1xuICBpZiAoIWNhbkNhY2hlKHBheWxvYWQpKSByZXR1cm4gbnVsbFxuICBjb25zdCB7IGluY2x1ZGVCbG9ja1JlZiB9ID0gb3B0c1xuICBjb25zdCBwYXJhbXMgPSBpbmNsdWRlQmxvY2tSZWYgPyBwYXlsb2FkLnBhcmFtcyA6IHBhcmFtc1dpdGhvdXRCbG9ja1RhZyhwYXlsb2FkKVxuICByZXR1cm4gcGF5bG9hZC5tZXRob2QgKyAnOicgKyBzdHJpbmdpZnkocGFyYW1zKVxufVxuXG5mdW5jdGlvbiBjYW5DYWNoZShwYXlsb2FkKXtcbiAgcmV0dXJuIGNhY2hlVHlwZUZvclBheWxvYWQocGF5bG9hZCkgIT09ICduZXZlcidcbn1cblxuZnVuY3Rpb24gYmxvY2tUYWdGb3JQYXlsb2FkKHBheWxvYWQpe1xuICB2YXIgaW5kZXggPSBibG9ja1RhZ1BhcmFtSW5kZXgocGF5bG9hZCk7XG5cbiAgLy8gQmxvY2sgdGFnIHBhcmFtIG5vdCBwYXNzZWQuXG4gIGlmIChpbmRleCA+PSBwYXlsb2FkLnBhcmFtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwYXlsb2FkLnBhcmFtc1tpbmRleF07XG59XG5cbmZ1bmN0aW9uIHBhcmFtc1dpdGhvdXRCbG9ja1RhZyhwYXlsb2FkKXtcbiAgdmFyIGluZGV4ID0gYmxvY2tUYWdQYXJhbUluZGV4KHBheWxvYWQpO1xuXG4gIC8vIEJsb2NrIHRhZyBwYXJhbSBub3QgcGFzc2VkLlxuICBpZiAoaW5kZXggPj0gcGF5bG9hZC5wYXJhbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHBheWxvYWQucGFyYW1zO1xuICB9XG5cbiAgLy8gZXRoX2dldEJsb2NrQnlOdW1iZXIgaGFzIHRoZSBibG9jayB0YWcgZmlyc3QsIHRoZW4gdGhlIG9wdGlvbmFsIGluY2x1ZGVUeD8gcGFyYW1cbiAgaWYgKHBheWxvYWQubWV0aG9kID09PSAnZXRoX2dldEJsb2NrQnlOdW1iZXInKSB7XG4gICAgcmV0dXJuIHBheWxvYWQucGFyYW1zLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIHBheWxvYWQucGFyYW1zLnNsaWNlKDAsaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBibG9ja1RhZ1BhcmFtSW5kZXgocGF5bG9hZCl7XG4gIHN3aXRjaChwYXlsb2FkLm1ldGhvZCkge1xuICAgIC8vIGJsb2NrVGFnIGlzIHRoaXJkIHBhcmFtXG4gICAgY2FzZSAnZXRoX2dldFN0b3JhZ2VBdCc6XG4gICAgICByZXR1cm4gMlxuICAgIC8vIGJsb2NrVGFnIGlzIHNlY29uZCBwYXJhbVxuICAgIGNhc2UgJ2V0aF9nZXRCYWxhbmNlJzpcbiAgICBjYXNlICdldGhfZ2V0Q29kZSc6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnOlxuICAgIGNhc2UgJ2V0aF9jYWxsJzpcbiAgICBjYXNlICdldGhfZXN0aW1hdGVHYXMnOlxuICAgICAgcmV0dXJuIDFcbiAgICAvLyBibG9ja1RhZyBpcyBmaXJzdCBwYXJhbVxuICAgIGNhc2UgJ2V0aF9nZXRCbG9ja0J5TnVtYmVyJzpcbiAgICAgIHJldHVybiAwXG4gICAgLy8gdGhlcmUgaXMgbm8gYmxvY2tUYWdcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlVHlwZUZvclBheWxvYWQocGF5bG9hZCkge1xuICBzd2l0Y2ggKHBheWxvYWQubWV0aG9kKSB7XG4gICAgLy8gY2FjaGUgcGVybWFuZW50bHlcbiAgICBjYXNlICd3ZWIzX2NsaWVudFZlcnNpb24nOlxuICAgIGNhc2UgJ3dlYjNfc2hhMyc6XG4gICAgY2FzZSAnZXRoX3Byb3RvY29sVmVyc2lvbic6XG4gICAgY2FzZSAnZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5SGFzaCc6XG4gICAgY2FzZSAnZXRoX2dldFVuY2xlQ291bnRCeUJsb2NrSGFzaCc6XG4gICAgY2FzZSAnZXRoX2dldENvZGUnOlxuICAgIGNhc2UgJ2V0aF9nZXRCbG9ja0J5SGFzaCc6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoJzpcbiAgICBjYXNlICdldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4JzpcbiAgICBjYXNlICdldGhfZ2V0VHJhbnNhY3Rpb25SZWNlaXB0JzpcbiAgICBjYXNlICdldGhfZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4JzpcbiAgICBjYXNlICdldGhfZ2V0Q29tcGlsZXJzJzpcbiAgICBjYXNlICdldGhfY29tcGlsZUxMTCc6XG4gICAgY2FzZSAnZXRoX2NvbXBpbGVTb2xpZGl0eSc6XG4gICAgY2FzZSAnZXRoX2NvbXBpbGVTZXJwZW50JzpcbiAgICBjYXNlICdzaGhfdmVyc2lvbic6XG4gICAgICByZXR1cm4gJ3Blcm1hJ1xuXG4gICAgLy8gY2FjaGUgdW50aWwgZm9ya1xuICAgIGNhc2UgJ2V0aF9nZXRCbG9ja0J5TnVtYmVyJzpcbiAgICBjYXNlICdldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlOdW1iZXInOlxuICAgIGNhc2UgJ2V0aF9nZXRVbmNsZUNvdW50QnlCbG9ja051bWJlcic6XG4gICAgY2FzZSAnZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja051bWJlckFuZEluZGV4JzpcbiAgICBjYXNlICdldGhfZ2V0VW5jbGVCeUJsb2NrTnVtYmVyQW5kSW5kZXgnOlxuICAgICAgcmV0dXJuICdmb3JrJ1xuXG4gICAgLy8gY2FjaGUgZm9yIGJsb2NrXG4gICAgY2FzZSAnZXRoX2dhc1ByaWNlJzpcbiAgICBjYXNlICdldGhfYmxvY2tOdW1iZXInOlxuICAgIGNhc2UgJ2V0aF9nZXRCYWxhbmNlJzpcbiAgICBjYXNlICdldGhfZ2V0U3RvcmFnZUF0JzpcbiAgICBjYXNlICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCc6XG4gICAgY2FzZSAnZXRoX2NhbGwnOlxuICAgIGNhc2UgJ2V0aF9lc3RpbWF0ZUdhcyc6XG4gICAgY2FzZSAnZXRoX2dldEZpbHRlckxvZ3MnOlxuICAgIGNhc2UgJ2V0aF9nZXRMb2dzJzpcbiAgICAgIHJldHVybiAnYmxvY2snXG5cbiAgICAvLyBuZXZlciBjYWNoZVxuICAgIGNhc2UgJ25ldF92ZXJzaW9uJzpcbiAgICBjYXNlICduZXRfcGVlckNvdW50JzpcbiAgICBjYXNlICduZXRfbGlzdGVuaW5nJzpcbiAgICBjYXNlICdldGhfc3luY2luZyc6XG4gICAgY2FzZSAnZXRoX3NpZ24nOlxuICAgIGNhc2UgJ2V0aF9jb2luYmFzZSc6XG4gICAgY2FzZSAnZXRoX21pbmluZyc6XG4gICAgY2FzZSAnZXRoX2hhc2hyYXRlJzpcbiAgICBjYXNlICdldGhfYWNjb3VudHMnOlxuICAgIGNhc2UgJ2V0aF9zZW5kVHJhbnNhY3Rpb24nOlxuICAgIGNhc2UgJ2V0aF9zZW5kUmF3VHJhbnNhY3Rpb24nOlxuICAgIGNhc2UgJ2V0aF9uZXdGaWx0ZXInOlxuICAgIGNhc2UgJ2V0aF9uZXdCbG9ja0ZpbHRlcic6XG4gICAgY2FzZSAnZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcic6XG4gICAgY2FzZSAnZXRoX3VuaW5zdGFsbEZpbHRlcic6XG4gICAgY2FzZSAnZXRoX2dldEZpbHRlckNoYW5nZXMnOlxuICAgIGNhc2UgJ2V0aF9nZXRXb3JrJzpcbiAgICBjYXNlICdldGhfc3VibWl0V29yayc6XG4gICAgY2FzZSAnZXRoX3N1Ym1pdEhhc2hyYXRlJzpcbiAgICBjYXNlICdkYl9wdXRTdHJpbmcnOlxuICAgIGNhc2UgJ2RiX2dldFN0cmluZyc6XG4gICAgY2FzZSAnZGJfcHV0SGV4JzpcbiAgICBjYXNlICdkYl9nZXRIZXgnOlxuICAgIGNhc2UgJ3NoaF9wb3N0JzpcbiAgICBjYXNlICdzaGhfbmV3SWRlbnRpdHknOlxuICAgIGNhc2UgJ3NoaF9oYXNJZGVudGl0eSc6XG4gICAgY2FzZSAnc2hoX25ld0dyb3VwJzpcbiAgICBjYXNlICdzaGhfYWRkVG9Hcm91cCc6XG4gICAgY2FzZSAnc2hoX25ld0ZpbHRlcic6XG4gICAgY2FzZSAnc2hoX3VuaW5zdGFsbEZpbHRlcic6XG4gICAgY2FzZSAnc2hoX2dldEZpbHRlckNoYW5nZXMnOlxuICAgIGNhc2UgJ3NoaF9nZXRNZXNzYWdlcyc6XG4gICAgICByZXR1cm4gJ25ldmVyJ1xuICB9XG59XG4iLCJ2YXIganNvbiA9IHR5cGVvZiBKU09OICE9PSAndW5kZWZpbmVkJyA/IEpTT04gOiByZXF1aXJlKCdqc29uaWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgb3B0cyA9IHsgY21wOiBvcHRzIH07XG4gICAgdmFyIHNwYWNlID0gb3B0cy5zcGFjZSB8fCAnJztcbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykgc3BhY2UgPSBBcnJheShzcGFjZSsxKS5qb2luKCcgJyk7XG4gICAgdmFyIGN5Y2xlcyA9ICh0eXBlb2Ygb3B0cy5jeWNsZXMgPT09ICdib29sZWFuJykgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlO1xuICAgIHZhciByZXBsYWNlciA9IG9wdHMucmVwbGFjZXIgfHwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYSwgdmFsdWU6IG5vZGVbYV0gfTtcbiAgICAgICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiLCB2YWx1ZTogbm9kZVtiXSB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFvYmosIGJvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9KShvcHRzLmNtcCk7XG5cbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5IChwYXJlbnQsIGtleSwgbm9kZSwgbGV2ZWwpIHtcbiAgICAgICAgdmFyIGluZGVudCA9IHNwYWNlID8gKCdcXG4nICsgbmV3IEFycmF5KGxldmVsICsgMSkuam9pbihzcGFjZSkpIDogJyc7XG4gICAgICAgIHZhciBjb2xvblNlcGFyYXRvciA9IHNwYWNlID8gJzogJyA6ICc6JztcblxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnRvSlNPTigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHJlcGxhY2VyLmNhbGwocGFyZW50LCBrZXksIG5vZGUpO1xuXG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8IG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uLnN0cmluZ2lmeShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBzdHJpbmdpZnkobm9kZSwgaSwgbm9kZVtpXSwgbGV2ZWwrMSkgfHwganNvbi5zdHJpbmdpZnkobnVsbCk7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnWycgKyBvdXQuam9pbignLCcpICsgaW5kZW50ICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4ganNvbi5zdHJpbmdpZnkoJ19fY3ljbGVfXycpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Ugc2Vlbi5wdXNoKG5vZGUpO1xuXG4gICAgICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMobm9kZSkuc29ydChjbXAgJiYgY21wKG5vZGUpKTtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmluZ2lmeShub2RlLCBrZXksIG5vZGVba2V5XSwgbGV2ZWwrMSk7XG5cbiAgICAgICAgICAgICAgICBpZighdmFsdWUpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleVZhbHVlID0ganNvbi5zdHJpbmdpZnkoa2V5KVxuICAgICAgICAgICAgICAgICAgICArIGNvbG9uU2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKGluZGVudCArIHNwYWNlICsga2V5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5zcGxpY2Uoc2Vlbi5pbmRleE9mKG5vZGUpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiAneycgKyBvdXQuam9pbignLCcpICsgaW5kZW50ICsgJ30nO1xuICAgICAgICB9XG4gICAgfSkoeyAnJzogb2JqIH0sICcnLCBvYmosIDApO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlIH07XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn07XG4iLCJleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5Jyk7XG4iLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGdhcCxcbiAgICBpbmRlbnQsXG4gICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgIH0sXG4gICAgcmVwO1xuXG5mdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcbiAgICAvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4gICAgLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbiAgICAvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbiAgICAvLyBzZXF1ZW5jZXMuXG4gICAgXG4gICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgPyBjIDpcbiAgICAgICAgICAgICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xufVxuXG5mdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcbiAgICAvLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG4gICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgIHBhcnRpYWwsXG4gICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgXG4gICAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4gICAgLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG4gICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbiAgICAgICAgICAgIC8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4gICAgICAgICAgICAvLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBcnJheS5pc0FycmF5XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZFxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlbSBpbiBicmFja2V0cy5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAnW10nIDogZ2FwID9cbiAgICAgICAgICAgICAgICAgICAgJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXScgOlxuICAgICAgICAgICAgICAgICAgICAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmVcbiAgICAgICAgICAgIC8vIHN0cmluZ2lmaWVkLlxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbiAgICAgICAgLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ3t9JyA6IGdhcCA/XG4gICAgICAgICAgICAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9JyA6XG4gICAgICAgICAgICAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgdmFyIGk7XG4gICAgZ2FwID0gJyc7XG4gICAgaW5kZW50ID0gJyc7XG4gICAgXG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuICAgIC8vIG1hbnkgc3BhY2VzLlxuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cbiAgICBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbiAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbidcbiAgICAmJiAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgIH1cbiAgICBcbiAgICAvLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG4gICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xufTtcbiIsIi8vIGdvdHRhIGtlZXAgaXQgd2l0aGluIE1BWF9TQUZFX0lOVEVHRVJcbmNvbnN0IGV4dHJhRGlnaXRzID0gM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbUlkXG5cblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tSWQoKXtcbiAgLy8gMTMgdGltZSBkaWdpdHNcbiAgdmFyIGRhdGVQYXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCkqTWF0aC5wb3coMTAsIGV4dHJhRGlnaXRzKVxuICAvLyAzIHJhbmRvbSBkaWdpdHNcbiAgdmFyIGV4dHJhUGFydCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpNYXRoLnBvdygxMCwgZXh0cmFEaWdpdHMpKVxuICAvLyAxNiBkaWdpdHNcbiAgcmV0dXJuIGRhdGVQYXJ0K2V4dHJhUGFydFxufSIsIlwidXNlIHN0cmljdFwiO1xudmFyIHdpbmRvdyA9IHJlcXVpcmUoXCJnbG9iYWwvd2luZG93XCIpXG52YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoXCJpcy1mdW5jdGlvblwiKVxudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoXCJwYXJzZS1oZWFkZXJzXCIpXG52YXIgeHRlbmQgPSByZXF1aXJlKFwieHRlbmRcIilcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVYSFJcbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVhIUjtcbmNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCA9IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCB8fCBub29wXG5jcmVhdGVYSFIuWERvbWFpblJlcXVlc3QgPSBcIndpdGhDcmVkZW50aWFsc1wiIGluIChuZXcgY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0KCkpID8gY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0IDogd2luZG93LlhEb21haW5SZXF1ZXN0XG5cbmZvckVhY2hBcnJheShbXCJnZXRcIiwgXCJwdXRcIiwgXCJwb3N0XCIsIFwicGF0Y2hcIiwgXCJoZWFkXCIsIFwiZGVsZXRlXCJdLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgICBjcmVhdGVYSFJbbWV0aG9kID09PSBcImRlbGV0ZVwiID8gXCJkZWxcIiA6IG1ldGhvZF0gPSBmdW5jdGlvbih1cmksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIG9wdGlvbnMgPSBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgICAgIG9wdGlvbnMubWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVYSFIob3B0aW9ucylcbiAgICB9XG59KVxuXG5mdW5jdGlvbiBmb3JFYWNoQXJyYXkoYXJyYXksIGl0ZXJhdG9yKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRvcihhcnJheVtpXSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKXtcbiAgICBmb3IodmFyIGkgaW4gb2JqKXtcbiAgICAgICAgaWYob2JqLmhhc093blByb3BlcnR5KGkpKSByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHBhcmFtcyA9IHVyaVxuXG4gICAgaWYgKGlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgICAgIGlmICh0eXBlb2YgdXJpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB7dXJpOnVyaX1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcyA9IHh0ZW5kKG9wdGlvbnMsIHt1cmk6IHVyaX0pXG4gICAgfVxuXG4gICAgcGFyYW1zLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICByZXR1cm4gcGFyYW1zXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVhIUih1cmksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlWEhSKG9wdGlvbnMpIHtcbiAgICBpZih0eXBlb2Ygb3B0aW9ucy5jYWxsYmFjayA9PT0gXCJ1bmRlZmluZWRcIil7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbGxiYWNrIGFyZ3VtZW50IG1pc3NpbmdcIilcbiAgICB9XG5cbiAgICB2YXIgY2FsbGVkID0gZmFsc2VcbiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYk9uY2UoZXJyLCByZXNwb25zZSwgYm9keSl7XG4gICAgICAgIGlmKCFjYWxsZWQpe1xuICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjayhlcnIsIHJlc3BvbnNlLCBib2R5KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGxvYWRGdW5jLCAwKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICAgICAgLy8gQ2hyb21lIHdpdGggcmVxdWVzdFR5cGU9YmxvYiB0aHJvd3MgZXJyb3JzIGFycm91bmQgd2hlbiBldmVuIHRlc3RpbmcgYWNjZXNzIHRvIHJlc3BvbnNlVGV4dFxuICAgICAgICB2YXIgYm9keSA9IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmICh4aHIucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGJvZHkgPSB4aHIucmVzcG9uc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB4aHIucmVzcG9uc2VUZXh0IHx8IGdldFhtbCh4aHIpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc29uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvZHlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcnJvckZ1bmMoZXZ0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0VGltZXIpXG4gICAgICAgIGlmKCEoZXZ0IGluc3RhbmNlb2YgRXJyb3IpKXtcbiAgICAgICAgICAgIGV2dCA9IG5ldyBFcnJvcihcIlwiICsgKGV2dCB8fCBcIlVua25vd24gWE1MSHR0cFJlcXVlc3QgRXJyb3JcIikgKVxuICAgICAgICB9XG4gICAgICAgIGV2dC5zdGF0dXNDb2RlID0gMFxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXZ0LCBmYWlsdXJlUmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gd2lsbCBsb2FkIHRoZSBkYXRhICYgcHJvY2VzcyB0aGUgcmVzcG9uc2UgaW4gYSBzcGVjaWFsIHJlc3BvbnNlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGxvYWRGdW5jKCkge1xuICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuXG4gICAgICAgIHZhciBzdGF0dXNcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYob3B0aW9ucy51c2VYRFIgJiYgeGhyLnN0YXR1cz09PXVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy9JRTggQ09SUyBHRVQgc3VjY2Vzc2Z1bCByZXNwb25zZSBkb2Vzbid0IGhhdmUgYSBzdGF0dXMgZmllbGQsIGJ1dCBib2R5IGlzIGZpbmVcbiAgICAgICAgICAgIHN0YXR1cyA9IDIwMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gKHhoci5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiB4aHIuc3RhdHVzKVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXNwb25zZSA9IGZhaWx1cmVSZXNwb25zZVxuICAgICAgICB2YXIgZXJyID0gbnVsbFxuXG4gICAgICAgIGlmIChzdGF0dXMgIT09IDApe1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgYm9keTogZ2V0Qm9keSgpLFxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1cyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMpeyAvL3JlbWVtYmVyIHhociBjYW4gaW4gZmFjdCBiZSBYRFIgZm9yIENPUlMgaW4gSUVcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzID0gcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyciA9IG5ldyBFcnJvcihcIkludGVybmFsIFhNTEh0dHBSZXF1ZXN0IEVycm9yXCIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIHJlc3BvbnNlLmJvZHkpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG9wdGlvbnMueGhyIHx8IG51bGxcblxuICAgIGlmICgheGhyKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNvcnMgfHwgb3B0aW9ucy51c2VYRFIpIHtcbiAgICAgICAgICAgIHhociA9IG5ldyBjcmVhdGVYSFIuWERvbWFpblJlcXVlc3QoKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHhociA9IG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleVxuICAgIHZhciBhYm9ydGVkXG4gICAgdmFyIHVyaSA9IHhoci51cmwgPSBvcHRpb25zLnVyaSB8fCBvcHRpb25zLnVybFxuICAgIHZhciBtZXRob2QgPSB4aHIubWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIlxuICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5IHx8IG9wdGlvbnMuZGF0YVxuICAgIHZhciBoZWFkZXJzID0geGhyLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB2YXIgc3luYyA9ICEhb3B0aW9ucy5zeW5jXG4gICAgdmFyIGlzSnNvbiA9IGZhbHNlXG4gICAgdmFyIHRpbWVvdXRUaW1lclxuICAgIHZhciBmYWlsdXJlUmVzcG9uc2UgPSB7XG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIHN0YXR1c0NvZGU6IDAsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgcmF3UmVxdWVzdDogeGhyXG4gICAgfVxuXG4gICAgaWYgKFwianNvblwiIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5qc29uICE9PSBmYWxzZSkge1xuICAgICAgICBpc0pzb24gPSB0cnVlXG4gICAgICAgIGhlYWRlcnNbXCJhY2NlcHRcIl0gfHwgaGVhZGVyc1tcIkFjY2VwdFwiXSB8fCAoaGVhZGVyc1tcIkFjY2VwdFwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiKSAvL0Rvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGFjY2VwdCBoZWFkZXIgZGVjbGFyZWQgYnkgdXNlclxuICAgICAgICBpZiAobWV0aG9kICE9PSBcIkdFVFwiICYmIG1ldGhvZCAhPT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gfHwgaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSB8fCAoaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiKSAvL0Rvbid0IG92ZXJyaWRlIGV4aXN0aW5nIGFjY2VwdCBoZWFkZXIgZGVjbGFyZWQgYnkgdXNlclxuICAgICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuanNvbiA9PT0gdHJ1ZSA/IGJvZHkgOiBvcHRpb25zLmpzb24pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gcmVhZHlzdGF0ZWNoYW5nZVxuICAgIHhoci5vbmxvYWQgPSBsb2FkRnVuY1xuICAgIHhoci5vbmVycm9yID0gZXJyb3JGdW5jXG4gICAgLy8gSUU5IG11c3QgaGF2ZSBvbnByb2dyZXNzIGJlIHNldCB0byBhIHVuaXF1ZSBmdW5jdGlvbi5cbiAgICB4aHIub25wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSUUgbXVzdCBkaWVcbiAgICB9XG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpe1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgeGhyLm9udGltZW91dCA9IGVycm9yRnVuY1xuICAgIHhoci5vcGVuKG1ldGhvZCwgdXJpLCAhc3luYywgb3B0aW9ucy51c2VybmFtZSwgb3B0aW9ucy5wYXNzd29yZClcbiAgICAvL2hhcyB0byBiZSBhZnRlciBvcGVuXG4gICAgaWYoIXN5bmMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9ICEhb3B0aW9ucy53aXRoQ3JlZGVudGlhbHNcbiAgICB9XG4gICAgLy8gQ2Fubm90IHNldCB0aW1lb3V0IHdpdGggc3luYyByZXF1ZXN0XG4gICAgLy8gbm90IHNldHRpbmcgdGltZW91dCBvbiB0aGUgeGhyIG9iamVjdCwgYmVjYXVzZSBvZiBvbGQgd2Via2l0cyBldGMuIG5vdCBoYW5kbGluZyB0aGF0IGNvcnJlY3RseVxuICAgIC8vIGJvdGggbnBtJ3MgcmVxdWVzdCBhbmQganF1ZXJ5IDEueCB1c2UgdGhpcyBraW5kIG9mIHRpbWVvdXQsIHNvIHRoaXMgaXMgYmVpbmcgY29uc2lzdGVudFxuICAgIGlmICghc3luYyAmJiBvcHRpb25zLnRpbWVvdXQgPiAwICkge1xuICAgICAgICB0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuXG4gICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZS8vSUU5IG1heSBzdGlsbCBjYWxsIHJlYWR5c3RhdGVjaGFuZ2VcbiAgICAgICAgICAgIHhoci5hYm9ydChcInRpbWVvdXRcIilcbiAgICAgICAgICAgIHZhciBlID0gbmV3IEVycm9yKFwiWE1MSHR0cFJlcXVlc3QgdGltZW91dFwiKVxuICAgICAgICAgICAgZS5jb2RlID0gXCJFVElNRURPVVRcIlxuICAgICAgICAgICAgZXJyb3JGdW5jKGUpXG4gICAgICAgIH0sIG9wdGlvbnMudGltZW91dCApXG4gICAgfVxuXG4gICAgaWYgKHhoci5zZXRSZXF1ZXN0SGVhZGVyKSB7XG4gICAgICAgIGZvcihrZXkgaW4gaGVhZGVycyl7XG4gICAgICAgICAgICBpZihoZWFkZXJzLmhhc093blByb3BlcnR5KGtleSkpe1xuICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmhlYWRlcnMgJiYgIWlzRW1wdHkob3B0aW9ucy5oZWFkZXJzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIZWFkZXJzIGNhbm5vdCBiZSBzZXQgb24gYW4gWERvbWFpblJlcXVlc3Qgb2JqZWN0XCIpXG4gICAgfVxuXG4gICAgaWYgKFwicmVzcG9uc2VUeXBlXCIgaW4gb3B0aW9ucykge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGVcbiAgICB9XG5cbiAgICBpZiAoXCJiZWZvcmVTZW5kXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgICAgb3B0aW9ucy5iZWZvcmVTZW5kKHhocilcbiAgICB9XG5cbiAgICAvLyBNaWNyb3NvZnQgRWRnZSBicm93c2VyIHNlbmRzIFwidW5kZWZpbmVkXCIgd2hlbiBzZW5kIGlzIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCB2YWx1ZS5cbiAgICAvLyBYTUxIdHRwUmVxdWVzdCBzcGVjIHNheXMgdG8gcGFzcyBudWxsIGFzIGJvZHkgdG8gaW5kaWNhdGUgbm8gYm9keVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmF1Z3R1ci94aHIvaXNzdWVzLzEwMC5cbiAgICB4aHIuc2VuZChib2R5IHx8IG51bGwpXG5cbiAgICByZXR1cm4geGhyXG5cblxufVxuXG5mdW5jdGlvbiBnZXRYbWwoeGhyKSB7XG4gICAgLy8geGhyLnJlc3BvbnNlWE1MIHdpbGwgdGhyb3cgRXhjZXB0aW9uIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBvciBcIkRPTUV4Y2VwdGlvblwiXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9yZXNwb25zZVhNTC5cbiAgICB0cnkge1xuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZpcmVmb3hCdWdUYWtlbkVmZmVjdCA9IHhoci5yZXNwb25zZVhNTCAmJiB4aHIucmVzcG9uc2VYTUwuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lID09PSBcInBhcnNlcmVycm9yXCJcbiAgICAgICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiXCIgJiYgIWZpcmVmb3hCdWdUYWtlbkVmZmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVhNTFxuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuIiwidmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW4gPSBnbG9iYWw7XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKXtcbiAgICB3aW4gPSBzZWxmO1xufSBlbHNlIHtcbiAgICB3aW4gPSB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aW47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb25cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uIChmbikge1xuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIHN0cmluZyA9IHRvU3RyaW5nLmNhbGwoZm4pXG4gIHJldHVybiBzdHJpbmcgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHN0cmluZyAhPT0gJ1tvYmplY3QgUmVnRXhwXScpIHx8XG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgIC8vIElFOCBhbmQgYmVsb3dcbiAgICAgKGZuID09PSB3aW5kb3cuc2V0VGltZW91dCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5hbGVydCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5jb25maXJtIHx8XG4gICAgICBmbiA9PT0gd2luZG93LnByb21wdCkpXG59O1xuIiwidmFyIHRyaW0gPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgdmFyIGhlYWRlcnNBcnIgPSB0cmltKGhlYWRlcnMpLnNwbGl0KCdcXG4nKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVyc0Fyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciByb3cgPSBoZWFkZXJzQXJyW2ldXG4gICAgdmFyIGluZGV4ID0gcm93LmluZGV4T2YoJzonKVxuICAgICwga2V5ID0gdHJpbShyb3cuc2xpY2UoMCwgaW5kZXgpKS50b0xvd2VyQ2FzZSgpXG4gICAgLCB2YWx1ZSA9IHRyaW0ocm93LnNsaWNlKGluZGV4ICsgMSkpXG5cbiAgICBpZiAodHlwZW9mKHJlc3VsdFtrZXldKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkocmVzdWx0W2tleV0pKSB7XG4gICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IFsgcmVzdWx0W2tleV0sIHZhbHVlIF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2Vycm9ycycpOyIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBKc29uUnBjRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKc29uUnBjRXJyb3IpKSB7XG4gICAgcmV0dXJuIG5ldyBKc29uUnBjRXJyb3IobWVzc2FnZSwgY29kZSwgZGF0YSk7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLmNvZGUgPSBjb2RlO1xuXG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59O1xuXG5pbmhlcml0cyhKc29uUnBjRXJyb3IsIEVycm9yKTtcblxudmFyIFBhcnNlRXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcnNlRXJyb3IpKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZUVycm9yKCk7XG4gIH1cblxuICBKc29uUnBjRXJyb3IuY2FsbCh0aGlzLCAnUGFyc2UgZXJyb3InLCAtMzI3MDApO1xufTtcblxuaW5oZXJpdHMoUGFyc2VFcnJvciwgSnNvblJwY0Vycm9yKTtcblxudmFyIEludmFsaWRSZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbnZhbGlkUmVxdWVzdCkpIHtcbiAgICByZXR1cm4gbmV3IEludmFsaWRSZXF1ZXN0KCk7XG4gIH1cblxuICBKc29uUnBjRXJyb3IuY2FsbCh0aGlzLCAnSW52YWxpZCBSZXF1ZXN0JywgLTMyNjAwKTtcbn07XG5cbmluaGVyaXRzKEludmFsaWRSZXF1ZXN0LCBKc29uUnBjRXJyb3IpO1xuXG52YXIgTWV0aG9kTm90Rm91bmQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1ldGhvZE5vdEZvdW5kKSkge1xuICAgIHJldHVybiBuZXcgTWV0aG9kTm90Rm91bmQoKTtcbiAgfVxuXG4gIEpzb25ScGNFcnJvci5jYWxsKHRoaXMsICdNZXRob2Qgbm90IGZvdW5kJywgLTMyNjAxKTtcbn07XG5cbmluaGVyaXRzKE1ldGhvZE5vdEZvdW5kLCBKc29uUnBjRXJyb3IpO1xuXG52YXIgSW52YWxpZFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW52YWxpZFBhcmFtcykpIHtcbiAgICByZXR1cm4gbmV3IEludmFsaWRQYXJhbXMoKTtcbiAgfVxuXG4gIEpzb25ScGNFcnJvci5jYWxsKHRoaXMsICdJbnZhbGlkIHBhcmFtcycsIC0zMjYwMik7XG59O1xuXG5pbmhlcml0cyhJbnZhbGlkUGFyYW1zLCBKc29uUnBjRXJyb3IpO1xuXG52YXIgSW50ZXJuYWxFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB2YXIgbWVzc2FnZTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcikpIHtcbiAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgfVxuXG4gIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UpIHtcbiAgICBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9ICdJbnRlcm5hbCBlcnJvcic7XG4gIH1cblxuICBKc29uUnBjRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCAtMzI2MDMpO1xufTtcblxuaW5oZXJpdHMoSW50ZXJuYWxFcnJvciwgSnNvblJwY0Vycm9yKTtcblxudmFyIFNlcnZlckVycm9yID0gZnVuY3Rpb24oY29kZSkge1xuICBpZiAoY29kZSA8IC0zMjA5OSB8fCBjb2RlID4gLTMyMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVycm9yIGNvZGUnKTtcbiAgfVxuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTZXJ2ZXJFcnJvcikpIHtcbiAgICByZXR1cm4gbmV3IFNlcnZlckVycm9yKGNvZGUpO1xuICB9XG5cbiAgSnNvblJwY0Vycm9yLmNhbGwodGhpcywgJ1NlcnZlciBlcnJvcicsIGNvZGUpO1xufTtcblxuaW5oZXJpdHMoU2VydmVyRXJyb3IsIEpzb25ScGNFcnJvcik7XG5cbkpzb25ScGNFcnJvci5QYXJzZUVycm9yID0gUGFyc2VFcnJvcjtcbkpzb25ScGNFcnJvci5JbnZhbGlkUmVxdWVzdCA9IEludmFsaWRSZXF1ZXN0O1xuSnNvblJwY0Vycm9yLk1ldGhvZE5vdEZvdW5kID0gTWV0aG9kTm90Rm91bmQ7XG5Kc29uUnBjRXJyb3IuSW52YWxpZFBhcmFtcyA9IEludmFsaWRQYXJhbXM7XG5Kc29uUnBjRXJyb3IuSW50ZXJuYWxFcnJvciA9IEludGVybmFsRXJyb3I7XG5Kc29uUnBjRXJyb3IuU2VydmVyRXJyb3IgPSBTZXJ2ZXJFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBKc29uUnBjRXJyb3I7XG5cblxuIiwiLy8gICAgICBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aGlldSBUdXJjb3R0ZVxuLy8gICAgICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbnZhciBCYWNrb2ZmID0gcmVxdWlyZSgnLi9saWIvYmFja29mZicpO1xudmFyIEV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9saWIvc3RyYXRlZ3kvZXhwb25lbnRpYWwnKTtcbnZhciBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kgPSByZXF1aXJlKCcuL2xpYi9zdHJhdGVneS9maWJvbmFjY2knKTtcbnZhciBGdW5jdGlvbkNhbGwgPSByZXF1aXJlKCcuL2xpYi9mdW5jdGlvbl9jYWxsLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzLkJhY2tvZmYgPSBCYWNrb2ZmO1xubW9kdWxlLmV4cG9ydHMuRnVuY3Rpb25DYWxsID0gRnVuY3Rpb25DYWxsO1xubW9kdWxlLmV4cG9ydHMuRmlib25hY2NpU3RyYXRlZ3kgPSBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3k7XG5tb2R1bGUuZXhwb3J0cy5FeHBvbmVudGlhbFN0cmF0ZWd5ID0gRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3k7XG5cbi8vIENvbnN0cnVjdHMgYSBGaWJvbmFjY2kgYmFja29mZi5cbm1vZHVsZS5leHBvcnRzLmZpYm9uYWNjaSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tvZmYobmV3IEZpYm9uYWNjaUJhY2tvZmZTdHJhdGVneShvcHRpb25zKSk7XG59O1xuXG4vLyBDb25zdHJ1Y3RzIGFuIGV4cG9uZW50aWFsIGJhY2tvZmYuXG5tb2R1bGUuZXhwb3J0cy5leHBvbmVudGlhbCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tvZmYobmV3IEV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5KG9wdGlvbnMpKTtcbn07XG5cbi8vIENvbnN0cnVjdHMgYSBGdW5jdGlvbkNhbGwgZm9yIHRoZSBnaXZlbiBmdW5jdGlvbiBhbmQgYXJndW1lbnRzLlxubW9kdWxlLmV4cG9ydHMuY2FsbCA9IGZ1bmN0aW9uKGZuLCB2YXJncywgY2FsbGJhY2spIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgZm4gPSBhcmdzWzBdO1xuICAgIHZhcmdzID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCAtIDEpO1xuICAgIGNhbGxiYWNrID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25DYWxsKGZuLCB2YXJncywgY2FsbGJhY2spO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgTWF0aGlldSBUdXJjb3R0ZVxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgZXJyb3JzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xuXG5mdW5jdGlvbiBmYWlsQ2hlY2soRXhjZXB0aW9uQ29uc3RydWN0b3IsIGNhbGxlZSwgbWVzc2FnZUZvcm1hdCwgZm9ybWF0QXJncykge1xuICAgIG1lc3NhZ2VGb3JtYXQgPSBtZXNzYWdlRm9ybWF0IHx8ICcnO1xuICAgIHZhciBtZXNzYWdlID0gdXRpbC5mb3JtYXQuYXBwbHkodGhpcywgW21lc3NhZ2VGb3JtYXRdLmNvbmNhdChmb3JtYXRBcmdzKSk7XG4gICAgdmFyIGVycm9yID0gbmV3IEV4Y2VwdGlvbkNvbnN0cnVjdG9yKG1lc3NhZ2UpO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBjYWxsZWUpO1xuICAgIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiBmYWlsQXJndW1lbnRDaGVjayhjYWxsZWUsIG1lc3NhZ2UsIGZvcm1hdEFyZ3MpIHtcbiAgICBmYWlsQ2hlY2soZXJyb3JzLklsbGVnYWxBcmd1bWVudEVycm9yLCBjYWxsZWUsIG1lc3NhZ2UsIGZvcm1hdEFyZ3MpO1xufVxuXG5mdW5jdGlvbiBmYWlsU3RhdGVDaGVjayhjYWxsZWUsIG1lc3NhZ2UsIGZvcm1hdEFyZ3MpIHtcbiAgICBmYWlsQ2hlY2soZXJyb3JzLklsbGVnYWxTdGF0ZUVycm9yLCBjYWxsZWUsIG1lc3NhZ2UsIGZvcm1hdEFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jaGVja0FyZ3VtZW50ID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIGZhaWxBcmd1bWVudENoZWNrKGFyZ3VtZW50cy5jYWxsZWUsIG1lc3NhZ2UsXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jaGVja1N0YXRlID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIGZhaWxTdGF0ZUNoZWNrKGFyZ3VtZW50cy5jYWxsZWUsIG1lc3NhZ2UsXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jaGVja0lzRGVmID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZmFpbEFyZ3VtZW50Q2hlY2soYXJndW1lbnRzLmNhbGxlZSwgbWVzc2FnZSB8fFxuICAgICAgICAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgZGVmaW5lZCBidXQgd2FzIHVuZGVmaW5lZC4nLFxuICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNEZWZBbmROb3ROdWxsID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAvLyBOb3RlIHRoYXQgdW5kZWZpbmVkID09IG51bGwuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZhaWxBcmd1bWVudENoZWNrKGFyZ3VtZW50cy5jYWxsZWUsIG1lc3NhZ2UgfHxcbiAgICAgICAgJ0V4cGVjdGVkIHZhbHVlIHRvIGJlIGRlZmluZWQgYW5kIG5vdCBudWxsIGJ1dCBnb3QgXCInICtcbiAgICAgICAgdHlwZU9mKHZhbHVlKSArICdcIi4nLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbn07XG5cbi8vIEZpeGVkIHZlcnNpb24gb2YgdGhlIHR5cGVPZiBvcGVyYXRvciB3aGljaCByZXR1cm5zICdudWxsJyBmb3IgbnVsbCB2YWx1ZXNcbi8vIGFuZCAnYXJyYXknIGZvciBhcnJheXMuXG5mdW5jdGlvbiB0eXBlT2YodmFsdWUpIHtcbiAgICB2YXIgcyA9IHR5cGVvZiB2YWx1ZTtcbiAgICBpZiAocyA9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0eXBlQ2hlY2soZXhwZWN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZU9mKHZhbHVlKTtcblxuICAgICAgICBpZiAodHlwZSA9PSBleHBlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZhaWxBcmd1bWVudENoZWNrKGFyZ3VtZW50cy5jYWxsZWUsIG1lc3NhZ2UgfHxcbiAgICAgICAgICAgICdFeHBlY3RlZCBcIicgKyBleHBlY3QgKyAnXCIgYnV0IGdvdCBcIicgKyB0eXBlICsgJ1wiLicsXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTtcbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jaGVja0lzU3RyaW5nID0gdHlwZUNoZWNrKCdzdHJpbmcnKTtcbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNBcnJheSA9IHR5cGVDaGVjaygnYXJyYXknKTtcbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNOdW1iZXIgPSB0eXBlQ2hlY2soJ251bWJlcicpO1xubW9kdWxlLmV4cG9ydHMuY2hlY2tJc0Jvb2xlYW4gPSB0eXBlQ2hlY2soJ2Jvb2xlYW4nKTtcbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNGdW5jdGlvbiA9IHR5cGVDaGVjaygnZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzLmNoZWNrSXNPYmplY3QgPSB0eXBlQ2hlY2soJ29iamVjdCcpO1xuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmZ1bmN0aW9uIElsbGVnYWxBcmd1bWVudEVycm9yKG1lc3NhZ2UpIHtcbiAgICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG51dGlsLmluaGVyaXRzKElsbGVnYWxBcmd1bWVudEVycm9yLCBFcnJvcik7XG5cbklsbGVnYWxBcmd1bWVudEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0lsbGVnYWxBcmd1bWVudEVycm9yJztcblxuZnVuY3Rpb24gSWxsZWdhbFN0YXRlRXJyb3IobWVzc2FnZSkge1xuICAgIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cbnV0aWwuaW5oZXJpdHMoSWxsZWdhbFN0YXRlRXJyb3IsIEVycm9yKTtcblxuSWxsZWdhbFN0YXRlRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSWxsZWdhbFN0YXRlRXJyb3InO1xuXG5tb2R1bGUuZXhwb3J0cy5JbGxlZ2FsU3RhdGVFcnJvciA9IElsbGVnYWxTdGF0ZUVycm9yO1xubW9kdWxlLmV4cG9ydHMuSWxsZWdhbEFyZ3VtZW50RXJyb3IgPSBJbGxlZ2FsQXJndW1lbnRFcnJvcjsiLCIvLyAgICAgIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4vLyAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgcHJlY29uZCA9IHJlcXVpcmUoJ3ByZWNvbmQnKTtcblxudmFyIEJhY2tvZmZTdHJhdGVneSA9IHJlcXVpcmUoJy4vc3RyYXRlZ3knKTtcblxuLy8gRXhwb25lbnRpYWwgYmFja29mZiBzdHJhdGVneS5cbmZ1bmN0aW9uIEV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5KG9wdGlvbnMpIHtcbiAgICBCYWNrb2ZmU3RyYXRlZ3kuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLmJhY2tvZmZEZWxheV8gPSAwO1xuICAgIHRoaXMubmV4dEJhY2tvZmZEZWxheV8gPSB0aGlzLmdldEluaXRpYWxEZWxheSgpO1xuICAgIHRoaXMuZmFjdG9yXyA9IEV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5LkRFRkFVTFRfRkFDVE9SO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5mYWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmVjb25kLmNoZWNrQXJndW1lbnQob3B0aW9ucy5mYWN0b3IgPiAxLFxuICAgICAgICAgICAgJ0V4cG9uZW50aWFsIGZhY3RvciBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDEgYnV0IGdvdCAlcy4nLFxuICAgICAgICAgICAgb3B0aW9ucy5mYWN0b3IpO1xuICAgICAgICB0aGlzLmZhY3Rvcl8gPSBvcHRpb25zLmZhY3RvcjtcbiAgICB9XG59XG51dGlsLmluaGVyaXRzKEV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5LCBCYWNrb2ZmU3RyYXRlZ3kpO1xuXG4vLyBEZWZhdWx0IG11bHRpcGxpY2F0aW9uIGZhY3RvciB1c2VkIHRvIGNvbXB1dGUgdGhlIG5leHQgYmFja29mZiBkZWxheSBmcm9tXG4vLyB0aGUgY3VycmVudCBvbmUuIFRoZSB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGEgY3VzdG9tIGZhY3RvciBhc1xuLy8gcGFydCBvZiB0aGUgb3B0aW9ucy5cbkV4cG9uZW50aWFsQmFja29mZlN0cmF0ZWd5LkRFRkFVTFRfRkFDVE9SID0gMjtcblxuRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3kucHJvdG90eXBlLm5leHRfID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5iYWNrb2ZmRGVsYXlfID0gTWF0aC5taW4odGhpcy5uZXh0QmFja29mZkRlbGF5XywgdGhpcy5nZXRNYXhEZWxheSgpKTtcbiAgICB0aGlzLm5leHRCYWNrb2ZmRGVsYXlfID0gdGhpcy5iYWNrb2ZmRGVsYXlfICogdGhpcy5mYWN0b3JfO1xuICAgIHJldHVybiB0aGlzLmJhY2tvZmZEZWxheV87XG59O1xuXG5FeHBvbmVudGlhbEJhY2tvZmZTdHJhdGVneS5wcm90b3R5cGUucmVzZXRfID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5iYWNrb2ZmRGVsYXlfID0gMDtcbiAgICB0aGlzLm5leHRCYWNrb2ZmRGVsYXlfID0gdGhpcy5nZXRJbml0aWFsRGVsYXkoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXhwb25lbnRpYWxCYWNrb2ZmU3RyYXRlZ3k7XG4iLCIvLyAgICAgIENvcHlyaWdodCAoYykgMjAxMiBNYXRoaWV1IFR1cmNvdHRlXG4vLyAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIHByZWNvbmQgPSByZXF1aXJlKCdwcmVjb25kJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIEJhY2tvZmYgPSByZXF1aXJlKCcuL2JhY2tvZmYnKTtcbnZhciBGaWJvbmFjY2lCYWNrb2ZmU3RyYXRlZ3kgPSByZXF1aXJlKCcuL3N0cmF0ZWd5L2ZpYm9uYWNjaScpO1xuXG4vLyBXcmFwcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpbiBhIGJhY2tvZmYgbG9vcC5cbmZ1bmN0aW9uIEZ1bmN0aW9uQ2FsbChmbiwgYXJncywgY2FsbGJhY2spIHtcbiAgICBldmVudHMuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICBwcmVjb25kLmNoZWNrSXNGdW5jdGlvbihmbiwgJ0V4cGVjdGVkIGZuIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgcHJlY29uZC5jaGVja0lzQXJyYXkoYXJncywgJ0V4cGVjdGVkIGFyZ3MgdG8gYmUgYW4gYXJyYXkuJyk7XG4gICAgcHJlY29uZC5jaGVja0lzRnVuY3Rpb24oY2FsbGJhY2ssICdFeHBlY3RlZCBjYWxsYmFjayB0byBiZSBhIGZ1bmN0aW9uLicpO1xuXG4gICAgdGhpcy5mdW5jdGlvbl8gPSBmbjtcbiAgICB0aGlzLmFyZ3VtZW50c18gPSBhcmdzO1xuICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XG4gICAgdGhpcy5sYXN0UmVzdWx0XyA9IFtdO1xuICAgIHRoaXMubnVtUmV0cmllc18gPSAwO1xuXG4gICAgdGhpcy5iYWNrb2ZmXyA9IG51bGw7XG4gICAgdGhpcy5zdHJhdGVneV8gPSBudWxsO1xuICAgIHRoaXMuZmFpbEFmdGVyXyA9IC0xO1xuICAgIHRoaXMucmV0cnlQcmVkaWNhdGVfID0gRnVuY3Rpb25DYWxsLkRFRkFVTFRfUkVUUllfUFJFRElDQVRFXztcblxuICAgIHRoaXMuc3RhdGVfID0gRnVuY3Rpb25DYWxsLlN0YXRlXy5QRU5ESU5HO1xufVxudXRpbC5pbmhlcml0cyhGdW5jdGlvbkNhbGwsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG4vLyBTdGF0ZXMgaW4gd2hpY2ggdGhlIGNhbGwgY2FuIGJlLlxuRnVuY3Rpb25DYWxsLlN0YXRlXyA9IHtcbiAgICAvLyBDYWxsIGlzbid0IHN0YXJ0ZWQgeWV0LlxuICAgIFBFTkRJTkc6IDAsXG4gICAgLy8gQ2FsbCBpcyBpbiBwcm9ncmVzcy5cbiAgICBSVU5OSU5HOiAxLFxuICAgIC8vIENhbGwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSB3aGljaCBtZWFucyB0aGF0IGVpdGhlciB0aGUgd3JhcHBlZCBmdW5jdGlvblxuICAgIC8vIHJldHVybmVkIHN1Y2Nlc3NmdWxseSBvciB0aGUgbWF4aW1hbCBudW1iZXIgb2YgYmFja29mZnMgd2FzIHJlYWNoZWQuXG4gICAgQ09NUExFVEVEOiAyLFxuICAgIC8vIFRoZSBjYWxsIHdhcyBhYm9ydGVkLlxuICAgIEFCT1JURUQ6IDNcbn07XG5cbi8vIFRoZSBkZWZhdWx0IHJldHJ5IHByZWRpY2F0ZSB3aGljaCBjb25zaWRlcnMgYW55IGVycm9yIGFzIHJldHJpYWJsZS5cbkZ1bmN0aW9uQ2FsbC5ERUZBVUxUX1JFVFJZX1BSRURJQ0FURV8gPSBmdW5jdGlvbihlcnIpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBwZW5kaW5nLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZV8gPT0gRnVuY3Rpb25DYWxsLlN0YXRlXy5QRU5ESU5HO1xufTtcblxuLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmlzUnVubmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlXyA9PSBGdW5jdGlvbkNhbGwuU3RhdGVfLlJVTk5JTkc7XG59O1xuXG4vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBpcyBjb21wbGV0ZWQuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLmlzQ29tcGxldGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVfID09IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uQ09NUExFVEVEO1xufTtcblxuLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGNhbGwgaXMgYWJvcnRlZC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuaXNBYm9ydGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVfID09IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uQUJPUlRFRDtcbn07XG5cbi8vIFNldHMgdGhlIGJhY2tvZmYgc3RyYXRlZ3kgdG8gdXNlLiBDYW4gb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjYWxsIGlzXG4vLyBzdGFydGVkIG90aGVyd2lzZSBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLnNldFN0cmF0ZWd5ID0gZnVuY3Rpb24oc3RyYXRlZ3kpIHtcbiAgICBwcmVjb25kLmNoZWNrU3RhdGUodGhpcy5pc1BlbmRpbmcoKSwgJ0Z1bmN0aW9uQ2FsbCBpbiBwcm9ncmVzcy4nKTtcbiAgICB0aGlzLnN0cmF0ZWd5XyA9IHN0cmF0ZWd5O1xuICAgIHJldHVybiB0aGlzOyAvLyBSZXR1cm4gdGhpcyBmb3IgY2hhaW5pbmcuXG59O1xuXG4vLyBTZXRzIHRoZSBwcmVkaWNhdGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBlcnJvcnNcbi8vIHJldHVybmVkIGZyb20gdGhlIHdyYXBwZWQgZnVuY3Rpb24gc2hvdWxkIGJlIHJldHJpZWQgb3Igbm90LCBlLmcuIGFcbi8vIG5ldHdvcmsgZXJyb3Igd291bGQgYmUgcmV0cmlhYmxlIHdoaWxlIGEgdHlwZSBlcnJvciB3b3VsZCBzdG9wIHRoZVxuLy8gZnVuY3Rpb24gY2FsbC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUucmV0cnlJZiA9IGZ1bmN0aW9uKHJldHJ5UHJlZGljYXRlKSB7XG4gICAgcHJlY29uZC5jaGVja1N0YXRlKHRoaXMuaXNQZW5kaW5nKCksICdGdW5jdGlvbkNhbGwgaW4gcHJvZ3Jlc3MuJyk7XG4gICAgdGhpcy5yZXRyeVByZWRpY2F0ZV8gPSByZXRyeVByZWRpY2F0ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybnMgYWxsIGludGVybWVkaWFyeSByZXN1bHRzIHJldHVybmVkIGJ5IHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHNpbmNlXG4vLyB0aGUgaW5pdGlhbCBjYWxsLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5nZXRMYXN0UmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubGFzdFJlc3VsdF8uY29uY2F0KCk7XG59O1xuXG4vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gY2FsbCB3YXMgcmV0cmllZC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuZ2V0TnVtUmV0cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm51bVJldHJpZXNfO1xufTtcblxuLy8gU2V0cyB0aGUgYmFja29mZiBsaW1pdC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuZmFpbEFmdGVyID0gZnVuY3Rpb24obWF4TnVtYmVyT2ZSZXRyeSkge1xuICAgIHByZWNvbmQuY2hlY2tTdGF0ZSh0aGlzLmlzUGVuZGluZygpLCAnRnVuY3Rpb25DYWxsIGluIHByb2dyZXNzLicpO1xuICAgIHRoaXMuZmFpbEFmdGVyXyA9IG1heE51bWJlck9mUmV0cnk7XG4gICAgcmV0dXJuIHRoaXM7IC8vIFJldHVybiB0aGlzIGZvciBjaGFpbmluZy5cbn07XG5cbi8vIEFib3J0cyB0aGUgY2FsbC5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCgpIHx8IHRoaXMuaXNBYm9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgICB0aGlzLmJhY2tvZmZfLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZV8gPSBGdW5jdGlvbkNhbGwuU3RhdGVfLkFCT1JURUQ7XG4gICAgdGhpcy5sYXN0UmVzdWx0XyA9IFtuZXcgRXJyb3IoJ0JhY2tvZmYgYWJvcnRlZC4nKV07XG4gICAgdGhpcy5lbWl0KCdhYm9ydCcpO1xuICAgIHRoaXMuZG9DYWxsYmFja18oKTtcbn07XG5cbi8vIEluaXRpYXRlcyB0aGUgY2FsbCB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbi4gQWNjZXB0cyBhbiBvcHRpb25hbCBmYWN0b3J5XG4vLyBmdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYmFja29mZiBpbnN0YW5jZTsgdXNlZCB3aGVuIHRlc3RpbmcuXG5GdW5jdGlvbkNhbGwucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oYmFja29mZkZhY3RvcnkpIHtcbiAgICBwcmVjb25kLmNoZWNrU3RhdGUoIXRoaXMuaXNBYm9ydGVkKCksICdGdW5jdGlvbkNhbGwgaXMgYWJvcnRlZC4nKTtcbiAgICBwcmVjb25kLmNoZWNrU3RhdGUodGhpcy5pc1BlbmRpbmcoKSwgJ0Z1bmN0aW9uQ2FsbCBhbHJlYWR5IHN0YXJ0ZWQuJyk7XG5cbiAgICB2YXIgc3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWd5XyB8fCBuZXcgRmlib25hY2NpQmFja29mZlN0cmF0ZWd5KCk7XG5cbiAgICB0aGlzLmJhY2tvZmZfID0gYmFja29mZkZhY3RvcnkgP1xuICAgICAgICBiYWNrb2ZmRmFjdG9yeShzdHJhdGVneSkgOlxuICAgICAgICBuZXcgQmFja29mZihzdHJhdGVneSk7XG5cbiAgICB0aGlzLmJhY2tvZmZfLm9uKCdyZWFkeScsIHRoaXMuZG9DYWxsXy5iaW5kKHRoaXMsIHRydWUgLyogaXNSZXRyeSAqLykpO1xuICAgIHRoaXMuYmFja29mZl8ub24oJ2ZhaWwnLCB0aGlzLmRvQ2FsbGJhY2tfLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYmFja29mZl8ub24oJ2JhY2tvZmYnLCB0aGlzLmhhbmRsZUJhY2tvZmZfLmJpbmQodGhpcykpO1xuXG4gICAgaWYgKHRoaXMuZmFpbEFmdGVyXyA+IDApIHtcbiAgICAgICAgdGhpcy5iYWNrb2ZmXy5mYWlsQWZ0ZXIodGhpcy5mYWlsQWZ0ZXJfKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlXyA9IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uUlVOTklORztcbiAgICB0aGlzLmRvQ2FsbF8oZmFsc2UgLyogaXNSZXRyeSAqLyk7XG59O1xuXG4vLyBDYWxscyB0aGUgd3JhcHBlZCBmdW5jdGlvbi5cbkZ1bmN0aW9uQ2FsbC5wcm90b3R5cGUuZG9DYWxsXyA9IGZ1bmN0aW9uKGlzUmV0cnkpIHtcbiAgICBpZiAoaXNSZXRyeSkge1xuICAgICAgICB0aGlzLm51bVJldHJpZXNfKys7XG4gICAgfVxuICAgIHZhciBldmVudEFyZ3MgPSBbJ2NhbGwnXS5jb25jYXQodGhpcy5hcmd1bWVudHNfKTtcbiAgICBldmVudHMuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGV2ZW50QXJncyk7XG4gICAgdmFyIGNhbGxiYWNrID0gdGhpcy5oYW5kbGVGdW5jdGlvbkNhbGxiYWNrXy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZnVuY3Rpb25fLmFwcGx5KG51bGwsIHRoaXMuYXJndW1lbnRzXy5jb25jYXQoY2FsbGJhY2spKTtcbn07XG5cbi8vIENhbGxzIHRoZSB3cmFwcGVkIGZ1bmN0aW9uJ3MgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdCByZXN1bHQgcmV0dXJuZWQgYnkgdGhlXG4vLyB3cmFwcGVkIGZ1bmN0aW9uLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5kb0NhbGxiYWNrXyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FsbGJhY2tfLmFwcGx5KG51bGwsIHRoaXMubGFzdFJlc3VsdF8pO1xufTtcblxuLy8gSGFuZGxlcyB3cmFwcGVkIGZ1bmN0aW9uJ3MgY29tcGxldGlvbi4gVGhpcyBtZXRob2QgYWN0cyBhcyBhIHJlcGxhY2VtZW50XG4vLyBmb3IgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGZ1bmN0aW9uLlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5oYW5kbGVGdW5jdGlvbkNhbGxiYWNrXyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzQWJvcnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdGhpcy5sYXN0UmVzdWx0XyA9IGFyZ3M7IC8vIFNhdmUgbGFzdCBjYWxsYmFjayBhcmd1bWVudHMuXG4gICAgZXZlbnRzLkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBbJ2NhbGxiYWNrJ10uY29uY2F0KGFyZ3MpKTtcblxuICAgIHZhciBlcnIgPSBhcmdzWzBdO1xuICAgIGlmIChlcnIgJiYgdGhpcy5yZXRyeVByZWRpY2F0ZV8oZXJyKSkge1xuICAgICAgICB0aGlzLmJhY2tvZmZfLmJhY2tvZmYoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlXyA9IEZ1bmN0aW9uQ2FsbC5TdGF0ZV8uQ09NUExFVEVEO1xuICAgICAgICB0aGlzLmRvQ2FsbGJhY2tfKCk7XG4gICAgfVxufTtcblxuLy8gSGFuZGxlcyB0aGUgYmFja29mZiBldmVudCBieSByZWVtaXR0aW5nIGl0LlxuRnVuY3Rpb25DYWxsLnByb3RvdHlwZS5oYW5kbGVCYWNrb2ZmXyA9IGZ1bmN0aW9uKG51bWJlciwgZGVsYXksIGVycikge1xuICAgIHRoaXMuZW1pdCgnYmFja29mZicsIG51bWJlciwgZGVsYXksIGVycik7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uQ2FsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAodGFza3MsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSAoMCwgX29uY2UyLmRlZmF1bHQpKGNhbGxiYWNrIHx8IF9ub29wMi5kZWZhdWx0KTtcbiAgICBpZiAoISgwLCBfaXNBcnJheTIuZGVmYXVsdCkodGFza3MpKSByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnMnKSk7XG4gICAgaWYgKCF0YXNrcy5sZW5ndGgpIHJldHVybiBjYWxsYmFjaygpO1xuICAgIHZhciB0YXNrSW5kZXggPSAwO1xuXG4gICAgZnVuY3Rpb24gbmV4dFRhc2soYXJncykge1xuICAgICAgICB2YXIgdGFzayA9ICgwLCBfd3JhcEFzeW5jMi5kZWZhdWx0KSh0YXNrc1t0YXNrSW5kZXgrK10pO1xuICAgICAgICBhcmdzLnB1c2goKDAsIF9vbmx5T25jZTIuZGVmYXVsdCkobmV4dCkpO1xuICAgICAgICB0YXNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQoZXJyIC8qLCAuLi5hcmdzKi8pIHtcbiAgICAgICAgaWYgKGVyciB8fCB0YXNrSW5kZXggPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFRhc2soKDAsIF9zbGljZTIuZGVmYXVsdCkoYXJndW1lbnRzLCAxKSk7XG4gICAgfVxuXG4gICAgbmV4dFRhc2soW10pO1xufTtcblxudmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoL2lzQXJyYXknKTtcblxudmFyIF9pc0FycmF5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzQXJyYXkpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKCdsb2Rhc2gvbm9vcCcpO1xuXG52YXIgX25vb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9vcCk7XG5cbnZhciBfb25jZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvb25jZScpO1xuXG52YXIgX29uY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb25jZSk7XG5cbnZhciBfc2xpY2UgPSByZXF1aXJlKCcuL2ludGVybmFsL3NsaWNlJyk7XG5cbnZhciBfc2xpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2xpY2UpO1xuXG52YXIgX29ubHlPbmNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9vbmx5T25jZScpO1xuXG52YXIgX29ubHlPbmNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29ubHlPbmNlKTtcblxudmFyIF93cmFwQXN5bmMgPSByZXF1aXJlKCcuL2ludGVybmFsL3dyYXBBc3luYycpO1xuXG52YXIgX3dyYXBBc3luYzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93cmFwQXN5bmMpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqXG4gKiBSdW5zIHRoZSBgdGFza3NgIGFycmF5IG9mIGZ1bmN0aW9ucyBpbiBzZXJpZXMsIGVhY2ggcGFzc2luZyB0aGVpciByZXN1bHRzIHRvXG4gKiB0aGUgbmV4dCBpbiB0aGUgYXJyYXkuIEhvd2V2ZXIsIGlmIGFueSBvZiB0aGUgYHRhc2tzYCBwYXNzIGFuIGVycm9yIHRvIHRoZWlyXG4gKiBvd24gY2FsbGJhY2ssIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIG5vdCBleGVjdXRlZCwgYW5kIHRoZSBtYWluIGBjYWxsYmFja2AgaXNcbiAqIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSBlcnJvci5cbiAqXG4gKiBAbmFtZSB3YXRlcmZhbGxcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Q29udHJvbEZsb3dcbiAqIEBtZXRob2RcbiAqIEBjYXRlZ29yeSBDb250cm9sIEZsb3dcbiAqIEBwYXJhbSB7QXJyYXl9IHRhc2tzIC0gQW4gYXJyYXkgb2YgW2FzeW5jIGZ1bmN0aW9uc117QGxpbmsgQXN5bmNGdW5jdGlvbn1cbiAqIHRvIHJ1bi5cbiAqIEVhY2ggZnVuY3Rpb24gc2hvdWxkIGNvbXBsZXRlIHdpdGggYW55IG51bWJlciBvZiBgcmVzdWx0YCB2YWx1ZXMuXG4gKiBUaGUgYHJlc3VsdGAgdmFsdWVzIHdpbGwgYmUgcGFzc2VkIGFzIGFyZ3VtZW50cywgaW4gb3JkZXIsIHRvIHRoZSBuZXh0IHRhc2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIC0gQW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIG9uY2UgYWxsIHRoZVxuICogZnVuY3Rpb25zIGhhdmUgY29tcGxldGVkLiBUaGlzIHdpbGwgYmUgcGFzc2VkIHRoZSByZXN1bHRzIG9mIHRoZSBsYXN0IHRhc2snc1xuICogY2FsbGJhY2suIEludm9rZWQgd2l0aCAoZXJyLCBbcmVzdWx0c10pLlxuICogQHJldHVybnMgdW5kZWZpbmVkXG4gKiBAZXhhbXBsZVxuICpcbiAqIGFzeW5jLndhdGVyZmFsbChbXG4gKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScsICd0d28nKTtcbiAqICAgICB9LFxuICogICAgIGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGNhbGxiYWNrKSB7XG4gKiAgICAgICAgIC8vIGFyZzEgbm93IGVxdWFscyAnb25lJyBhbmQgYXJnMiBub3cgZXF1YWxzICd0d28nXG4gKiAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0aHJlZScpO1xuICogICAgIH0sXG4gKiAgICAgZnVuY3Rpb24oYXJnMSwgY2FsbGJhY2spIHtcbiAqICAgICAgICAgLy8gYXJnMSBub3cgZXF1YWxzICd0aHJlZSdcbiAqICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ2RvbmUnKTtcbiAqICAgICB9XG4gKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAqIH0pO1xuICpcbiAqIC8vIE9yLCB3aXRoIG5hbWVkIGZ1bmN0aW9uczpcbiAqIGFzeW5jLndhdGVyZmFsbChbXG4gKiAgICAgbXlGaXJzdEZ1bmN0aW9uLFxuICogICAgIG15U2Vjb25kRnVuY3Rpb24sXG4gKiAgICAgbXlMYXN0RnVuY3Rpb24sXG4gKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAqICAgICAvLyByZXN1bHQgbm93IGVxdWFscyAnZG9uZSdcbiAqIH0pO1xuICogZnVuY3Rpb24gbXlGaXJzdEZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gKiAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScsICd0d28nKTtcbiAqIH1cbiAqIGZ1bmN0aW9uIG15U2Vjb25kRnVuY3Rpb24oYXJnMSwgYXJnMiwgY2FsbGJhY2spIHtcbiAqICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ29uZScgYW5kIGFyZzIgbm93IGVxdWFscyAndHdvJ1xuICogICAgIGNhbGxiYWNrKG51bGwsICd0aHJlZScpO1xuICogfVxuICogZnVuY3Rpb24gbXlMYXN0RnVuY3Rpb24oYXJnMSwgY2FsbGJhY2spIHtcbiAqICAgICAvLyBhcmcxIG5vdyBlcXVhbHMgJ3RocmVlJ1xuICogICAgIGNhbGxiYWNrKG51bGwsICdkb25lJyk7XG4gKiB9XG4gKi8iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBwYXJhbGxlbExpbWl0O1xuXG52YXIgX2VhY2hPZiA9IHJlcXVpcmUoJy4vZWFjaE9mJyk7XG5cbnZhciBfZWFjaE9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VhY2hPZik7XG5cbnZhciBfcGFyYWxsZWwgPSByZXF1aXJlKCcuL2ludGVybmFsL3BhcmFsbGVsJyk7XG5cbnZhciBfcGFyYWxsZWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFyYWxsZWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIFJ1biB0aGUgYHRhc2tzYCBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbCwgd2l0aG91dCB3YWl0aW5nIHVudGlsXG4gKiB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZC4gSWYgYW55IG9mIHRoZSBmdW5jdGlvbnMgcGFzcyBhbiBlcnJvciB0b1xuICogaXRzIGNhbGxiYWNrLCB0aGUgbWFpbiBgY2FsbGJhY2tgIGlzIGltbWVkaWF0ZWx5IGNhbGxlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGVcbiAqIGVycm9yLiBPbmNlIHRoZSBgdGFza3NgIGhhdmUgY29tcGxldGVkLCB0aGUgcmVzdWx0cyBhcmUgcGFzc2VkIHRvIHRoZSBmaW5hbFxuICogYGNhbGxiYWNrYCBhcyBhbiBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogYHBhcmFsbGVsYCBpcyBhYm91dCBraWNraW5nLW9mZiBJL08gdGFza3MgaW4gcGFyYWxsZWwsIG5vdCBhYm91dFxuICogcGFyYWxsZWwgZXhlY3V0aW9uIG9mIGNvZGUuICBJZiB5b3VyIHRhc2tzIGRvIG5vdCB1c2UgYW55IHRpbWVycyBvciBwZXJmb3JtXG4gKiBhbnkgSS9PLCB0aGV5IHdpbGwgYWN0dWFsbHkgYmUgZXhlY3V0ZWQgaW4gc2VyaWVzLiAgQW55IHN5bmNocm9ub3VzIHNldHVwXG4gKiBzZWN0aW9ucyBmb3IgZWFjaCB0YXNrIHdpbGwgaGFwcGVuIG9uZSBhZnRlciB0aGUgb3RoZXIuICBKYXZhU2NyaXB0IHJlbWFpbnNcbiAqIHNpbmdsZS10aHJlYWRlZC5cbiAqXG4gKiAqKkhpbnQ6KiogVXNlIFtgcmVmbGVjdGBde0BsaW5rIG1vZHVsZTpVdGlscy5yZWZsZWN0fSB0byBjb250aW51ZSB0aGVcbiAqIGV4ZWN1dGlvbiBvZiBvdGhlciB0YXNrcyB3aGVuIGEgdGFzayBmYWlscy5cbiAqXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheS4gRWFjaCBwcm9wZXJ0eSB3aWxsXG4gKiBiZSBydW4gYXMgYSBmdW5jdGlvbiBhbmQgdGhlIHJlc3VsdHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZpbmFsIGBjYWxsYmFja2BcbiAqIGFzIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGFycmF5LiBUaGlzIGNhbiBiZSBhIG1vcmUgcmVhZGFibGUgd2F5IG9mIGhhbmRsaW5nXG4gKiByZXN1bHRzIGZyb20ge0BsaW5rIGFzeW5jLnBhcmFsbGVsfS5cbiAqXG4gKiBAbmFtZSBwYXJhbGxlbFxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIG1vZHVsZTpDb250cm9sRmxvd1xuICogQG1ldGhvZFxuICogQGNhdGVnb3J5IENvbnRyb2wgRmxvd1xuICogQHBhcmFtIHtBcnJheXxJdGVyYWJsZXxPYmplY3R9IHRhc2tzIC0gQSBjb2xsZWN0aW9uIG9mXG4gKiBbYXN5bmMgZnVuY3Rpb25zXXtAbGluayBBc3luY0Z1bmN0aW9ufSB0byBydW4uXG4gKiBFYWNoIGFzeW5jIGZ1bmN0aW9uIGNhbiBjb21wbGV0ZSB3aXRoIGFueSBudW1iZXIgb2Ygb3B0aW9uYWwgYHJlc3VsdGAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIHJ1biBvbmNlIGFsbCB0aGVcbiAqIGZ1bmN0aW9ucyBoYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIHJlc3VsdHMgYXJyYXlcbiAqIChvciBvYmplY3QpIGNvbnRhaW5pbmcgYWxsIHRoZSByZXN1bHQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzayBjYWxsYmFja3MuXG4gKiBJbnZva2VkIHdpdGggKGVyciwgcmVzdWx0cykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGFzeW5jLnBhcmFsbGVsKFtcbiAqICAgICBmdW5jdGlvbihjYWxsYmFjaykge1xuICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgJ29uZScpO1xuICogICAgICAgICB9LCAyMDApO1xuICogICAgIH0sXG4gKiAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsICd0d28nKTtcbiAqICAgICAgICAgfSwgMTAwKTtcbiAqICAgICB9XG4gKiBdLFxuICogLy8gb3B0aW9uYWwgY2FsbGJhY2tcbiAqIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICogICAgIC8vIHRoZSByZXN1bHRzIGFycmF5IHdpbGwgZXF1YWwgWydvbmUnLCd0d28nXSBldmVuIHRob3VnaFxuICogICAgIC8vIHRoZSBzZWNvbmQgZnVuY3Rpb24gaGFkIGEgc2hvcnRlciB0aW1lb3V0LlxuICogfSk7XG4gKlxuICogLy8gYW4gZXhhbXBsZSB1c2luZyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheVxuICogYXN5bmMucGFyYWxsZWwoe1xuICogICAgIG9uZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAqICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIDEpO1xuICogICAgICAgICB9LCAyMDApO1xuICogICAgIH0sXG4gKiAgICAgdHdvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgMik7XG4gKiAgICAgICAgIH0sIDEwMCk7XG4gKiAgICAgfVxuICogfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gKiAgICAgLy8gcmVzdWx0cyBpcyBub3cgZXF1YWxzIHRvOiB7b25lOiAxLCB0d286IDJ9XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWxMaW1pdCh0YXNrcywgY2FsbGJhY2spIHtcbiAgKDAsIF9wYXJhbGxlbDIuZGVmYXVsdCkoX2VhY2hPZjIuZGVmYXVsdCwgdGFza3MsIGNhbGxiYWNrKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX3BhcmFsbGVsO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKCdsb2Rhc2gvbm9vcCcpO1xuXG52YXIgX25vb3AyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9vcCk7XG5cbnZhciBfaXNBcnJheUxpa2UgPSByZXF1aXJlKCdsb2Rhc2gvaXNBcnJheUxpa2UnKTtcblxudmFyIF9pc0FycmF5TGlrZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc0FycmF5TGlrZSk7XG5cbnZhciBfc2xpY2UgPSByZXF1aXJlKCcuL3NsaWNlJyk7XG5cbnZhciBfc2xpY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2xpY2UpO1xuXG52YXIgX3dyYXBBc3luYyA9IHJlcXVpcmUoJy4vd3JhcEFzeW5jJyk7XG5cbnZhciBfd3JhcEFzeW5jMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dyYXBBc3luYyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9wYXJhbGxlbChlYWNoZm4sIHRhc2tzLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgX25vb3AyLmRlZmF1bHQ7XG4gICAgdmFyIHJlc3VsdHMgPSAoMCwgX2lzQXJyYXlMaWtlMi5kZWZhdWx0KSh0YXNrcykgPyBbXSA6IHt9O1xuXG4gICAgZWFjaGZuKHRhc2tzLCBmdW5jdGlvbiAodGFzaywga2V5LCBjYWxsYmFjaykge1xuICAgICAgICAoMCwgX3dyYXBBc3luYzIuZGVmYXVsdCkodGFzaykoZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAoMCwgX3NsaWNlMi5kZWZhdWx0KShhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVzdWx0O1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdHMpO1xuICAgIH0pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiY29uc3QgZXRoVXRpbCA9IHJlcXVpcmUoJ2V0aGVyZXVtanMtdXRpbCcpXG5jb25zdCBldGhBYmkgPSByZXF1aXJlKCdldGhlcmV1bWpzLWFiaScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIGNvbmNhdFNpZzogZnVuY3Rpb24gKHYsIHIsIHMpIHtcbiAgICBjb25zdCByU2lnID0gZXRoVXRpbC5mcm9tU2lnbmVkKHIpXG4gICAgY29uc3Qgc1NpZyA9IGV0aFV0aWwuZnJvbVNpZ25lZChzKVxuICAgIGNvbnN0IHZTaWcgPSBldGhVdGlsLmJ1ZmZlclRvSW50KHYpXG4gICAgY29uc3QgclN0ciA9IHBhZFdpdGhaZXJvZXMoZXRoVXRpbC50b1Vuc2lnbmVkKHJTaWcpLnRvU3RyaW5nKCdoZXgnKSwgNjQpXG4gICAgY29uc3Qgc1N0ciA9IHBhZFdpdGhaZXJvZXMoZXRoVXRpbC50b1Vuc2lnbmVkKHNTaWcpLnRvU3RyaW5nKCdoZXgnKSwgNjQpXG4gICAgY29uc3QgdlN0ciA9IGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgoZXRoVXRpbC5pbnRUb0hleCh2U2lnKSlcbiAgICByZXR1cm4gZXRoVXRpbC5hZGRIZXhQcmVmaXgoclN0ci5jb25jYXQoc1N0ciwgdlN0cikpLnRvU3RyaW5nKCdoZXgnKVxuICB9LFxuXG4gIG5vcm1hbGl6ZTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuXG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgYnVmZmVyID0gZXRoVXRpbC50b0J1ZmZlcihpbnB1dClcbiAgICAgIGlucHV0ID0gZXRoVXRpbC5idWZmZXJUb0hleChidWZmZXIpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBtc2cgPSAnZXRoLXNpZy11dGlsLm5vcm1hbGl6ZSgpIHJlcXVpcmVzIGhleCBzdHJpbmcgb3IgaW50ZWdlciBpbnB1dC4nXG4gICAgICBtc2cgKz0gJyByZWNlaXZlZCAnICsgKHR5cGVvZiBpbnB1dCkgKyAnOiAnICsgaW5wdXRcbiAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV0aFV0aWwuYWRkSGV4UHJlZml4KGlucHV0LnRvTG93ZXJDYXNlKCkpXG4gIH0sXG5cbiAgcGVyc29uYWxTaWduOiBmdW5jdGlvbiAocHJpdmF0ZUtleSwgbXNnUGFyYW1zKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBldGhVdGlsLnRvQnVmZmVyKG1zZ1BhcmFtcy5kYXRhKVxuICAgIHZhciBtc2dIYXNoID0gZXRoVXRpbC5oYXNoUGVyc29uYWxNZXNzYWdlKG1lc3NhZ2UpXG4gICAgdmFyIHNpZyA9IGV0aFV0aWwuZWNzaWduKG1zZ0hhc2gsIHByaXZhdGVLZXkpXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBldGhVdGlsLmJ1ZmZlclRvSGV4KHRoaXMuY29uY2F0U2lnKHNpZy52LCBzaWcuciwgc2lnLnMpKVxuICAgIHJldHVybiBzZXJpYWxpemVkXG4gIH0sXG5cbiAgcmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlOiBmdW5jdGlvbiAobXNnUGFyYW1zKSB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gZ2V0UHVibGljS2V5Rm9yKG1zZ1BhcmFtcylcbiAgICBjb25zdCBzZW5kZXIgPSBldGhVdGlsLnB1YmxpY1RvQWRkcmVzcyhwdWJsaWNLZXkpXG4gICAgY29uc3Qgc2VuZGVySGV4ID0gZXRoVXRpbC5idWZmZXJUb0hleChzZW5kZXIpXG4gICAgcmV0dXJuIHNlbmRlckhleFxuICB9LFxuXG4gIGV4dHJhY3RQdWJsaWNLZXk6IGZ1bmN0aW9uIChtc2dQYXJhbXMpIHtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBnZXRQdWJsaWNLZXlGb3IobXNnUGFyYW1zKVxuICAgIHJldHVybiAnMHgnICsgcHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKVxuICB9LFxuXG4gIHR5cGVkU2lnbmF0dXJlSGFzaDogZnVuY3Rpb24gKHR5cGVkRGF0YSkge1xuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSB0eXBlZFNpZ25hdHVyZUhhc2godHlwZWREYXRhKVxuICAgIHJldHVybiBldGhVdGlsLmJ1ZmZlclRvSGV4KGhhc2hCdWZmZXIpXG4gIH0sXG5cbiAgc2lnblR5cGVkRGF0YTogZnVuY3Rpb24gKHByaXZhdGVLZXksIG1zZ1BhcmFtcykge1xuICAgIGNvbnN0IG1zZ0hhc2ggPSB0eXBlZFNpZ25hdHVyZUhhc2gobXNnUGFyYW1zLmRhdGEpXG4gICAgY29uc3Qgc2lnID0gZXRoVXRpbC5lY3NpZ24obXNnSGFzaCwgcHJpdmF0ZUtleSlcbiAgICByZXR1cm4gZXRoVXRpbC5idWZmZXJUb0hleCh0aGlzLmNvbmNhdFNpZyhzaWcudiwgc2lnLnIsIHNpZy5zKSlcbiAgfSxcblxuICByZWNvdmVyVHlwZWRTaWduYXR1cmU6IGZ1bmN0aW9uIChtc2dQYXJhbXMpIHtcbiAgICBjb25zdCBtc2dIYXNoID0gdHlwZWRTaWduYXR1cmVIYXNoKG1zZ1BhcmFtcy5kYXRhKVxuICAgIGNvbnN0IHB1YmxpY0tleSA9IHJlY292ZXJQdWJsaWNLZXkobXNnSGFzaCwgbXNnUGFyYW1zLnNpZylcbiAgICBjb25zdCBzZW5kZXIgPSBldGhVdGlsLnB1YmxpY1RvQWRkcmVzcyhwdWJsaWNLZXkpXG4gICAgcmV0dXJuIGV0aFV0aWwuYnVmZmVyVG9IZXgoc2VuZGVyKVxuICB9XG5cbn1cblxuLyoqXG4gKiBAcGFyYW0gdHlwZWREYXRhIC0gQXJyYXkgb2YgZGF0YSBhbG9uZyB3aXRoIHR5cGVzLCBhcyBwZXIgRUlQNzEyLlxuICogQHJldHVybnMgQnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHR5cGVkU2lnbmF0dXJlSGFzaCh0eXBlZERhdGEpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0V4cGVjdCBhcmd1bWVudCB0byBiZSBub24tZW1wdHkgYXJyYXknKVxuICBpZiAodHlwZW9mIHR5cGVkRGF0YSAhPT0gJ29iamVjdCcgfHwgIXR5cGVkRGF0YS5sZW5ndGgpIHRocm93IGVycm9yXG5cbiAgY29uc3QgZGF0YSA9IHR5cGVkRGF0YS5tYXAoZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gZS50eXBlID09PSAnYnl0ZXMnID8gZXRoVXRpbC50b0J1ZmZlcihlLnZhbHVlKSA6IGUudmFsdWVcbiAgfSlcbiAgY29uc3QgdHlwZXMgPSB0eXBlZERhdGEubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnR5cGUgfSlcbiAgY29uc3Qgc2NoZW1hID0gdHlwZWREYXRhLm1hcChmdW5jdGlvbiAoZSkge1xuICAgIGlmICghZS5uYW1lKSB0aHJvdyBlcnJvclxuICAgIHJldHVybiBlLnR5cGUgKyAnICcgKyBlLm5hbWVcbiAgfSlcblxuICByZXR1cm4gZXRoQWJpLnNvbGlkaXR5U0hBMyhcbiAgICBbJ2J5dGVzMzInLCAnYnl0ZXMzMiddLFxuICAgIFtcbiAgICAgIGV0aEFiaS5zb2xpZGl0eVNIQTMobmV3IEFycmF5KHR5cGVkRGF0YS5sZW5ndGgpLmZpbGwoJ3N0cmluZycpLCBzY2hlbWEpLFxuICAgICAgZXRoQWJpLnNvbGlkaXR5U0hBMyh0eXBlcywgZGF0YSlcbiAgICBdXG4gIClcbn1cblxuZnVuY3Rpb24gcmVjb3ZlclB1YmxpY0tleShoYXNoLCBzaWcpIHtcbiAgY29uc3Qgc2lnbmF0dXJlID0gZXRoVXRpbC50b0J1ZmZlcihzaWcpXG4gIGNvbnN0IHNpZ1BhcmFtcyA9IGV0aFV0aWwuZnJvbVJwY1NpZyhzaWduYXR1cmUpXG4gIHJldHVybiBldGhVdGlsLmVjcmVjb3ZlcihoYXNoLCBzaWdQYXJhbXMudiwgc2lnUGFyYW1zLnIsIHNpZ1BhcmFtcy5zKVxufVxuXG5mdW5jdGlvbiBnZXRQdWJsaWNLZXlGb3IgKG1zZ1BhcmFtcykge1xuICBjb25zdCBtZXNzYWdlID0gZXRoVXRpbC50b0J1ZmZlcihtc2dQYXJhbXMuZGF0YSlcbiAgY29uc3QgbXNnSGFzaCA9IGV0aFV0aWwuaGFzaFBlcnNvbmFsTWVzc2FnZShtZXNzYWdlKVxuICByZXR1cm4gcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoLCBtc2dQYXJhbXMuc2lnKVxufVxuXG5cbmZ1bmN0aW9uIHBhZFdpdGhaZXJvZXMgKG51bWJlciwgbGVuZ3RoKSB7XG4gIHZhciBteVN0cmluZyA9ICcnICsgbnVtYmVyXG4gIHdoaWxlIChteVN0cmluZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICBteVN0cmluZyA9ICcwJyArIG15U3RyaW5nXG4gIH1cbiAgcmV0dXJuIG15U3RyaW5nXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2luZGV4LmpzJylcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJ2V0aGVyZXVtanMtdXRpbCcpXG5jb25zdCBCTiA9IHJlcXVpcmUoJ2JuLmpzJylcblxudmFyIEFCSSA9IGZ1bmN0aW9uICgpIHtcbn1cblxuLy8gQ29udmVydCBmcm9tIHNob3J0IHRvIGNhbm9uaWNhbCBuYW1lc1xuLy8gRklYTUU6IG9wdGltaXNlIG9yIG1ha2UgdGhpcyBuaWNlcj9cbmZ1bmN0aW9uIGVsZW1lbnRhcnlOYW1lIChuYW1lKSB7XG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ2ludFsnKSkge1xuICAgIHJldHVybiAnaW50MjU2JyArIG5hbWUuc2xpY2UoMylcbiAgfSBlbHNlIGlmIChuYW1lID09PSAnaW50Jykge1xuICAgIHJldHVybiAnaW50MjU2J1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgndWludFsnKSkge1xuICAgIHJldHVybiAndWludDI1NicgKyBuYW1lLnNsaWNlKDQpXG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3VpbnQnKSB7XG4gICAgcmV0dXJuICd1aW50MjU2J1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgnZml4ZWRbJykpIHtcbiAgICByZXR1cm4gJ2ZpeGVkMTI4eDEyOCcgKyBuYW1lLnNsaWNlKDUpXG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiAnZml4ZWQxMjh4MTI4J1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgndWZpeGVkWycpKSB7XG4gICAgcmV0dXJuICd1Zml4ZWQxMjh4MTI4JyArIG5hbWUuc2xpY2UoNilcbiAgfSBlbHNlIGlmIChuYW1lID09PSAndWZpeGVkJykge1xuICAgIHJldHVybiAndWZpeGVkMTI4eDEyOCdcbiAgfVxuICByZXR1cm4gbmFtZVxufVxuXG5BQkkuZXZlbnRJRCA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlcykge1xuICAvLyBGSVhNRTogdXNlIG5vZGUuanMgdXRpbC5mb3JtYXQ/XG4gIHZhciBzaWcgPSBuYW1lICsgJygnICsgdHlwZXMubWFwKGVsZW1lbnRhcnlOYW1lKS5qb2luKCcsJykgKyAnKSdcbiAgcmV0dXJuIHV0aWxzLmtlY2NhazI1NihCdWZmZXIuZnJvbShzaWcpKVxufVxuXG5BQkkubWV0aG9kSUQgPSBmdW5jdGlvbiAobmFtZSwgdHlwZXMpIHtcbiAgcmV0dXJuIEFCSS5ldmVudElEKG5hbWUsIHR5cGVzKS5zbGljZSgwLCA0KVxufVxuXG4vLyBQYXJzZSBOIGZyb20gdHlwZTxOPlxuZnVuY3Rpb24gcGFyc2VUeXBlTiAodHlwZSkge1xuICByZXR1cm4gcGFyc2VJbnQoL15cXEQrKFxcZCspJC8uZXhlYyh0eXBlKVsxXSwgMTApXG59XG5cbi8vIFBhcnNlIE4sTSBmcm9tIHR5cGU8Tj54PE0+XG5mdW5jdGlvbiBwYXJzZVR5cGVOeE0gKHR5cGUpIHtcbiAgdmFyIHRtcCA9IC9eXFxEKyhcXGQrKXgoXFxkKykkLy5leGVjKHR5cGUpXG4gIHJldHVybiBbIHBhcnNlSW50KHRtcFsxXSwgMTApLCBwYXJzZUludCh0bXBbMl0sIDEwKSBdXG59XG5cbi8vIFBhcnNlIE4gaW4gdHlwZVs8Tj5dIHdoZXJlIFwidHlwZVwiIGNhbiBpdHNlbGYgYmUgYW4gYXJyYXkgdHlwZS5cbmZ1bmN0aW9uIHBhcnNlVHlwZUFycmF5ICh0eXBlKSB7XG4gIHZhciB0bXAgPSB0eXBlLm1hdGNoKC8oLiopXFxbKC4qPylcXF0kLylcbiAgaWYgKHRtcCkge1xuICAgIHJldHVybiB0bXBbMl0gPT09ICcnID8gJ2R5bmFtaWMnIDogcGFyc2VJbnQodG1wWzJdLCAxMClcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZU51bWJlciAoYXJnKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGFyZ1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodXRpbHMuaXNIZXhQcmVmaXhlZChhcmcpKSB7XG4gICAgICByZXR1cm4gbmV3IEJOKHV0aWxzLnN0cmlwSGV4UHJlZml4KGFyZyksIDE2KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEJOKGFyZywgMTApXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5ldyBCTihhcmcpXG4gIH0gZWxzZSBpZiAoYXJnLnRvQXJyYXkpIHtcbiAgICAvLyBhc3N1bWUgdGhpcyBpcyBhIEJOIGZvciB0aGUgbW9tZW50LCByZXBsYWNlIHdpdGggQk4uaXNCTiBzb29uXG4gICAgcmV0dXJuIGFyZ1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgaXMgbm90IGEgbnVtYmVyJylcbiAgfVxufVxuXG4vLyBzb21lTWV0aG9kKGJ5dGVzLHVpbnQpXG4vLyBzb21lTWV0aG9kKGJ5dGVzLHVpbnQpOihib29sZWFuKVxuZnVuY3Rpb24gcGFyc2VTaWduYXR1cmUgKHNpZykge1xuICB2YXIgdG1wID0gL14oXFx3KylcXCgoLiopXFwpJC8uZXhlYyhzaWcpXG5cbiAgaWYgKHRtcC5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWV0aG9kIHNpZ25hdHVyZScpXG4gIH1cblxuICB2YXIgYXJncyA9IC9eKC4rKVxcKTpcXCgoLispJC8uZXhlYyh0bXBbMl0pXG5cbiAgaWYgKGFyZ3MgIT09IG51bGwgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiB0bXBbMV0sXG4gICAgICBhcmdzOiBhcmdzWzFdLnNwbGl0KCcsJyksXG4gICAgICByZXRhcmdzOiBhcmdzWzJdLnNwbGl0KCcsJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcmFtcyA9IHRtcFsyXS5zcGxpdCgnLCcpXG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEgJiYgcGFyYW1zWzBdID09PSAnJykge1xuICAgICAgLy8gU3BlY2lhbC1jYXNlIChwb3NzaWJseSBuYWl2ZSkgZml4dXAgZm9yIGZ1bmN0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzLlxuICAgICAgLy8gVE9ETzogc3BlY2lhbCBjYXNlcyBhcmUgYWx3YXlzIGJhZCwgYnV0IHRoaXMgbWFrZXMgdGhlIGZ1bmN0aW9uIHJldHVyblxuICAgICAgLy8gbWF0Y2ggd2hhdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZXhwZWN0XG4gICAgICBwYXJhbXMgPSBbXVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiB0bXBbMV0sXG4gICAgICBhcmdzOiBwYXJhbXNcbiAgICB9XG4gIH1cbn1cblxuLy8gRW5jb2RlcyBhIHNpbmdsZSBpdGVtIChjYW4gYmUgZHluYW1pYyBhcnJheSlcbi8vIEByZXR1cm5zOiBCdWZmZXJcbmZ1bmN0aW9uIGVuY29kZVNpbmdsZSAodHlwZSwgYXJnKSB7XG4gIHZhciBzaXplLCBudW0sIHJldCwgaVxuXG4gIGlmICh0eXBlID09PSAnYWRkcmVzcycpIHtcbiAgICByZXR1cm4gZW5jb2RlU2luZ2xlKCd1aW50MTYwJywgcGFyc2VOdW1iZXIoYXJnKSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbCcpIHtcbiAgICByZXR1cm4gZW5jb2RlU2luZ2xlKCd1aW50OCcsIGFyZyA/IDEgOiAwKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGVuY29kZVNpbmdsZSgnYnl0ZXMnLCBCdWZmZXIuZnJvbShhcmcsICd1dGY4JykpXG4gIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgIC8vIHRoaXMgcGFydCBoYW5kbGVzIGZpeGVkLWxlbmd0aCAoWzJdKSBhbmQgdmFyaWFibGUgbGVuZ3RoIChbXSkgYXJyYXlzXG4gICAgLy8gTk9URTogd2UgY2F0Y2ggaGVyZSBhbGwgY2FsbHMgdG8gYXJyYXlzLCB0aGF0IHNpbXBsaWZpZXMgdGhlIHJlc3RcbiAgICBpZiAodHlwZW9mIGFyZy5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbiBhcnJheT8nKVxuICAgIH1cbiAgICBzaXplID0gcGFyc2VUeXBlQXJyYXkodHlwZSlcbiAgICBpZiAoc2l6ZSAhPT0gJ2R5bmFtaWMnICYmIHNpemUgIT09IDAgJiYgYXJnLmxlbmd0aCA+IHNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWxlbWVudHMgZXhjZWVkIGFycmF5IHNpemU6ICcgKyBzaXplKVxuICAgIH1cbiAgICByZXQgPSBbXVxuICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIHR5cGUubGFzdEluZGV4T2YoJ1snKSlcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZyA9IEpTT04ucGFyc2UoYXJnKVxuICAgIH1cbiAgICBmb3IgKGkgaW4gYXJnKSB7XG4gICAgICByZXQucHVzaChlbmNvZGVTaW5nbGUodHlwZSwgYXJnW2ldKSlcbiAgICB9XG4gICAgaWYgKHNpemUgPT09ICdkeW5hbWljJykge1xuICAgICAgdmFyIGxlbmd0aCA9IGVuY29kZVNpbmdsZSgndWludDI1NicsIGFyZy5sZW5ndGgpXG4gICAgICByZXQudW5zaGlmdChsZW5ndGgpXG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHJldClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYnl0ZXMnKSB7XG4gICAgYXJnID0gQnVmZmVyLmZyb20oYXJnKVxuXG4gICAgcmV0ID0gQnVmZmVyLmNvbmNhdChbIGVuY29kZVNpbmdsZSgndWludDI1NicsIGFyZy5sZW5ndGgpLCBhcmcgXSlcblxuICAgIGlmICgoYXJnLmxlbmd0aCAlIDMyKSAhPT0gMCkge1xuICAgICAgcmV0ID0gQnVmZmVyLmNvbmNhdChbIHJldCwgdXRpbHMuemVyb3MoMzIgLSAoYXJnLmxlbmd0aCAlIDMyKSkgXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCdieXRlcycpKSB7XG4gICAgc2l6ZSA9IHBhcnNlVHlwZU4odHlwZSlcbiAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnl0ZXM8Tj4gd2lkdGg6ICcgKyBzaXplKVxuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5zZXRMZW5ndGhSaWdodChhcmcsIDMyKVxuICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgndWludCcpKSB7XG4gICAgc2l6ZSA9IHBhcnNlVHlwZU4odHlwZSlcbiAgICBpZiAoKHNpemUgJSA4KSB8fCAoc2l6ZSA8IDgpIHx8IChzaXplID4gMjU2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVpbnQ8Tj4gd2lkdGg6ICcgKyBzaXplKVxuICAgIH1cblxuICAgIG51bSA9IHBhcnNlTnVtYmVyKGFyZylcbiAgICBpZiAobnVtLmJpdExlbmd0aCgpID4gc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCB1aW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBzaXplICsgJyB2cyAnICsgbnVtLmJpdExlbmd0aCgpKVxuICAgIH1cblxuICAgIGlmIChudW0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIHVpbnQgaXMgbmVnYXRpdmUnKVxuICAgIH1cblxuICAgIHJldHVybiBudW0udG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAzMilcbiAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2ludCcpKSB7XG4gICAgc2l6ZSA9IHBhcnNlVHlwZU4odHlwZSlcbiAgICBpZiAoKHNpemUgJSA4KSB8fCAoc2l6ZSA8IDgpIHx8IChzaXplID4gMjU2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGludDxOPiB3aWR0aDogJyArIHNpemUpXG4gICAgfVxuXG4gICAgbnVtID0gcGFyc2VOdW1iZXIoYXJnKVxuICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBzaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIGludCBleGNlZWRzIHdpZHRoOiAnICsgc2l6ZSArICcgdnMgJyArIG51bS5iaXRMZW5ndGgoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtLnRvVHdvcygyNTYpLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgMzIpXG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCd1Zml4ZWQnKSkge1xuICAgIHNpemUgPSBwYXJzZVR5cGVOeE0odHlwZSlcblxuICAgIG51bSA9IHBhcnNlTnVtYmVyKGFyZylcblxuICAgIGlmIChudW0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIHVmaXhlZCBpcyBuZWdhdGl2ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY29kZVNpbmdsZSgndWludDI1NicsIG51bS5tdWwobmV3IEJOKDIpLnBvdyhuZXcgQk4oc2l6ZVsxXSkpKSlcbiAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2ZpeGVkJykpIHtcbiAgICBzaXplID0gcGFyc2VUeXBlTnhNKHR5cGUpXG5cbiAgICByZXR1cm4gZW5jb2RlU2luZ2xlKCdpbnQyNTYnLCBwYXJzZU51bWJlcihhcmcpLm11bChuZXcgQk4oMikucG93KG5ldyBCTihzaXplWzFdKSkpKVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKVxufVxuXG4vLyBEZWNvZGVzIGEgc2luZ2xlIGl0ZW0gKGNhbiBiZSBkeW5hbWljIGFycmF5KVxuLy8gQHJldHVybnM6IGFycmF5XG4vLyBGSVhNRTogdGhpcyBtZXRob2Qgd2lsbCBuZWVkIGEgbG90IG9mIGF0dGVudGlvbiBhdCBjaGVja2luZyBsaW1pdHMgYW5kIHZhbGlkYXRpb25cbmZ1bmN0aW9uIGRlY29kZVNpbmdsZSAocGFyc2VkVHlwZSwgZGF0YSwgb2Zmc2V0KSB7XG4gIGlmICh0eXBlb2YgcGFyc2VkVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJzZWRUeXBlID0gcGFyc2VUeXBlKHBhcnNlZFR5cGUpXG4gIH1cbiAgdmFyIHNpemUsIG51bSwgcmV0LCBpXG5cbiAgaWYgKHBhcnNlZFR5cGUubmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG4gICAgcmV0dXJuIGRlY29kZVNpbmdsZShwYXJzZWRUeXBlLnJhd1R5cGUsIGRhdGEsIG9mZnNldCkudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCAyMCkudG9TdHJpbmcoJ2hleCcpXG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lID09PSAnYm9vbCcpIHtcbiAgICByZXR1cm4gZGVjb2RlU2luZ2xlKHBhcnNlZFR5cGUucmF3VHlwZSwgZGF0YSwgb2Zmc2V0KS50b1N0cmluZygpID09PSBuZXcgQk4oMSkudG9TdHJpbmcoKVxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgYnl0ZXMgPSBkZWNvZGVTaW5nbGUocGFyc2VkVHlwZS5yYXdUeXBlLCBkYXRhLCBvZmZzZXQpXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzLCAndXRmOCcpLnRvU3RyaW5nKClcbiAgfSBlbHNlIGlmIChwYXJzZWRUeXBlLmlzQXJyYXkpIHtcbiAgICAvLyB0aGlzIHBhcnQgaGFuZGxlcyBmaXhlZC1sZW5ndGggYXJyYXlzIChbMl0pIGFuZCB2YXJpYWJsZSBsZW5ndGggKFtdKSBhcnJheXNcbiAgICAvLyBOT1RFOiB3ZSBjYXRjaCBoZXJlIGFsbCBjYWxscyB0byBhcnJheXMsIHRoYXQgc2ltcGxpZmllcyB0aGUgcmVzdFxuICAgIHJldCA9IFtdXG4gICAgc2l6ZSA9IHBhcnNlZFR5cGUuc2l6ZVxuXG4gICAgaWYgKHBhcnNlZFR5cGUuc2l6ZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgICBvZmZzZXQgPSBkZWNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBkYXRhLCBvZmZzZXQpLnRvTnVtYmVyKClcbiAgICAgIHNpemUgPSBkZWNvZGVTaW5nbGUoJ3VpbnQyNTYnLCBkYXRhLCBvZmZzZXQpLnRvTnVtYmVyKClcbiAgICAgIG9mZnNldCA9IG9mZnNldCArIDMyXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhciBkZWNvZGVkID0gZGVjb2RlU2luZ2xlKHBhcnNlZFR5cGUuc3ViQXJyYXksIGRhdGEsIG9mZnNldClcbiAgICAgIHJldC5wdXNoKGRlY29kZWQpXG4gICAgICBvZmZzZXQgKz0gcGFyc2VkVHlwZS5zdWJBcnJheS5tZW1vcnlVc2FnZVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lID09PSAnYnl0ZXMnKSB7XG4gICAgb2Zmc2V0ID0gZGVjb2RlU2luZ2xlKCd1aW50MjU2JywgZGF0YSwgb2Zmc2V0KS50b051bWJlcigpXG4gICAgc2l6ZSA9IGRlY29kZVNpbmdsZSgndWludDI1NicsIGRhdGEsIG9mZnNldCkudG9OdW1iZXIoKVxuICAgIHJldHVybiBkYXRhLnNsaWNlKG9mZnNldCArIDMyLCBvZmZzZXQgKyAzMiArIHNpemUpXG4gIH0gZWxzZSBpZiAocGFyc2VkVHlwZS5uYW1lLnN0YXJ0c1dpdGgoJ2J5dGVzJykpIHtcbiAgICByZXR1cm4gZGF0YS5zbGljZShvZmZzZXQsIG9mZnNldCArIHBhcnNlZFR5cGUuc2l6ZSlcbiAgfSBlbHNlIGlmIChwYXJzZWRUeXBlLm5hbWUuc3RhcnRzV2l0aCgndWludCcpKSB7XG4gICAgbnVtID0gbmV3IEJOKGRhdGEuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyAzMiksIDE2LCAnYmUnKVxuICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBwYXJzZWRUeXBlLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVjb2RlZCBpbnQgZXhjZWVkcyB3aWR0aDogJyArIHBhcnNlZFR5cGUuc2l6ZSArICcgdnMgJyArIG51bS5iaXRMZW5ndGgoKSlcbiAgICB9XG4gICAgcmV0dXJuIG51bVxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZS5zdGFydHNXaXRoKCdpbnQnKSkge1xuICAgIG51bSA9IG5ldyBCTihkYXRhLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgMzIpLCAxNiwgJ2JlJykuZnJvbVR3b3MoMjU2KVxuICAgIGlmIChudW0uYml0TGVuZ3RoKCkgPiBwYXJzZWRUeXBlLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVjb2RlZCB1aW50IGV4Y2VlZHMgd2lkdGg6ICcgKyBwYXJzZWRUeXBlLnNpemUgKyAnIHZzICcgKyBudW0uYml0TGVuZ3RoKCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bVxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZS5zdGFydHNXaXRoKCd1Zml4ZWQnKSkge1xuICAgIHNpemUgPSBuZXcgQk4oMikucG93KG5ldyBCTihwYXJzZWRUeXBlLnNpemVbMV0pKVxuICAgIG51bSA9IGRlY29kZVNpbmdsZSgndWludDI1NicsIGRhdGEsIG9mZnNldClcbiAgICBpZiAoIW51bS5tb2Qoc2l6ZSkuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVjaW1hbHMgbm90IHN1cHBvcnRlZCB5ZXQnKVxuICAgIH1cbiAgICByZXR1cm4gbnVtLmRpdihzaXplKVxuICB9IGVsc2UgaWYgKHBhcnNlZFR5cGUubmFtZS5zdGFydHNXaXRoKCdmaXhlZCcpKSB7XG4gICAgc2l6ZSA9IG5ldyBCTigyKS5wb3cobmV3IEJOKHBhcnNlZFR5cGUuc2l6ZVsxXSkpXG4gICAgbnVtID0gZGVjb2RlU2luZ2xlKCdpbnQyNTYnLCBkYXRhLCBvZmZzZXQpXG4gICAgaWYgKCFudW0ubW9kKHNpemUpLmlzWmVybygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY2ltYWxzIG5vdCBzdXBwb3J0ZWQgeWV0JylcbiAgICB9XG4gICAgcmV0dXJuIG51bS5kaXYoc2l6ZSlcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogJyArIHBhcnNlZFR5cGUubmFtZSlcbn1cblxuLy8gUGFyc2UgdGhlIGdpdmVuIHR5cGVcbi8vIEByZXR1cm5zOiB7fSBjb250YWluaW5nIHRoZSB0eXBlIGl0c2VsZiwgbWVtb3J5IHVzYWdlIGFuZCAoaW5jbHVkaW5nIHNpemUgYW5kIHN1YkFycmF5IGlmIGFwcGxpY2FibGUpXG5mdW5jdGlvbiBwYXJzZVR5cGUgKHR5cGUpIHtcbiAgdmFyIHNpemVcbiAgdmFyIHJldFxuICBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgIHNpemUgPSBwYXJzZVR5cGVBcnJheSh0eXBlKVxuICAgIHZhciBzdWJBcnJheSA9IHR5cGUuc2xpY2UoMCwgdHlwZS5sYXN0SW5kZXhPZignWycpKVxuICAgIHN1YkFycmF5ID0gcGFyc2VUeXBlKHN1YkFycmF5KVxuICAgIHJldCA9IHtcbiAgICAgIGlzQXJyYXk6IHRydWUsXG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIG1lbW9yeVVzYWdlOiBzaXplID09PSAnZHluYW1pYycgPyAzMiA6IHN1YkFycmF5Lm1lbW9yeVVzYWdlICogc2l6ZSxcbiAgICAgIHN1YkFycmF5OiBzdWJBcnJheVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJhd1R5cGVcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgICByYXdUeXBlID0gJ3VpbnQxNjAnXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib29sJzpcbiAgICAgICAgcmF3VHlwZSA9ICd1aW50OCdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJhd1R5cGUgPSAnYnl0ZXMnXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIHJldCA9IHtcbiAgICAgIHJhd1R5cGU6IHJhd1R5cGUsXG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgbWVtb3J5VXNhZ2U6IDMyXG4gICAgfVxuXG4gICAgaWYgKCh0eXBlLnN0YXJ0c1dpdGgoJ2J5dGVzJykgJiYgdHlwZSAhPT0gJ2J5dGVzJykgfHwgdHlwZS5zdGFydHNXaXRoKCd1aW50JykgfHwgdHlwZS5zdGFydHNXaXRoKCdpbnQnKSkge1xuICAgICAgcmV0LnNpemUgPSBwYXJzZVR5cGVOKHR5cGUpXG4gICAgfSBlbHNlIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ3VmaXhlZCcpIHx8IHR5cGUuc3RhcnRzV2l0aCgnZml4ZWQnKSkge1xuICAgICAgcmV0LnNpemUgPSBwYXJzZVR5cGVOeE0odHlwZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdieXRlcycpICYmIHR5cGUgIT09ICdieXRlcycgJiYgKHJldC5zaXplIDwgMSB8fCByZXQuc2l6ZSA+IDMyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJ5dGVzPE4+IHdpZHRoOiAnICsgcmV0LnNpemUpXG4gICAgfVxuICAgIGlmICgodHlwZS5zdGFydHNXaXRoKCd1aW50JykgfHwgdHlwZS5zdGFydHNXaXRoKCdpbnQnKSkgJiYgKHJldC5zaXplICUgOCB8fCByZXQuc2l6ZSA8IDggfHwgcmV0LnNpemUgPiAyNTYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50L3VpbnQ8Tj4gd2lkdGg6ICcgKyByZXQuc2l6ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbi8vIElzIGEgdHlwZSBkeW5hbWljP1xuZnVuY3Rpb24gaXNEeW5hbWljICh0eXBlKSB7XG4gIC8vIEZJWE1FOiBoYW5kbGUgYWxsIHR5cGVzPyBJIGRvbid0IHRoaW5rIGFueXRoaW5nIGlzIG1pc3Npbmcgbm93XG4gIHJldHVybiAodHlwZSA9PT0gJ3N0cmluZycpIHx8ICh0eXBlID09PSAnYnl0ZXMnKSB8fCAocGFyc2VUeXBlQXJyYXkodHlwZSkgPT09ICdkeW5hbWljJylcbn1cblxuLy8gSXMgYSB0eXBlIGFuIGFycmF5P1xuZnVuY3Rpb24gaXNBcnJheSAodHlwZSkge1xuICByZXR1cm4gdHlwZS5sYXN0SW5kZXhPZignXScpID09PSB0eXBlLmxlbmd0aCAtIDFcbn1cblxuLy8gRW5jb2RlIGEgbWV0aG9kL2V2ZW50IHdpdGggYXJndW1lbnRzXG4vLyBAdHlwZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHR5cGUgbmFtZXNcbi8vIEBhcmdzICBhbiBhcnJheSBvZiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzXG5BQkkucmF3RW5jb2RlID0gZnVuY3Rpb24gKHR5cGVzLCB2YWx1ZXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdXG4gIHZhciBkYXRhID0gW11cblxuICB2YXIgaGVhZExlbmd0aCA9IDBcblxuICB0eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHZhciBzaXplID0gcGFyc2VUeXBlQXJyYXkodHlwZSlcblxuICAgICAgaWYgKHNpemUgIT09ICdkeW5hbWljJykge1xuICAgICAgICBoZWFkTGVuZ3RoICs9IDMyICogc2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZExlbmd0aCArPSAzMlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkTGVuZ3RoICs9IDMyXG4gICAgfVxuICB9KVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnRhcnlOYW1lKHR5cGVzW2ldKVxuICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXVxuICAgIHZhciBjdXIgPSBlbmNvZGVTaW5nbGUodHlwZSwgdmFsdWUpXG5cbiAgICAvLyBVc2UgdGhlIGhlYWQvdGFpbCBtZXRob2QgZm9yIHN0b3JpbmcgZHluYW1pYyBkYXRhXG4gICAgaWYgKGlzRHluYW1pYyh0eXBlKSkge1xuICAgICAgb3V0cHV0LnB1c2goZW5jb2RlU2luZ2xlKCd1aW50MjU2JywgaGVhZExlbmd0aCkpXG4gICAgICBkYXRhLnB1c2goY3VyKVxuICAgICAgaGVhZExlbmd0aCArPSBjdXIubGVuZ3RoXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKGN1cilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChvdXRwdXQuY29uY2F0KGRhdGEpKVxufVxuXG5BQkkucmF3RGVjb2RlID0gZnVuY3Rpb24gKHR5cGVzLCBkYXRhKSB7XG4gIHZhciByZXQgPSBbXVxuICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgdmFyIG9mZnNldCA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0eXBlID0gZWxlbWVudGFyeU5hbWUodHlwZXNbaV0pXG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlVHlwZSh0eXBlLCBkYXRhLCBvZmZzZXQpXG4gICAgdmFyIGRlY29kZWQgPSBkZWNvZGVTaW5nbGUocGFyc2VkLCBkYXRhLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IHBhcnNlZC5tZW1vcnlVc2FnZVxuICAgIHJldC5wdXNoKGRlY29kZWQpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5BQkkuc2ltcGxlRW5jb2RlID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuc2xpY2UoMSlcbiAgdmFyIHNpZyA9IHBhcnNlU2lnbmF0dXJlKG1ldGhvZClcblxuICAvLyBGSVhNRTogdmFsaWRhdGUvY29udmVydCBhcmd1bWVudHNcbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSBzaWcuYXJncy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IGNvdW50IG1pc21hdGNoJylcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFsgQUJJLm1ldGhvZElEKHNpZy5tZXRob2QsIHNpZy5hcmdzKSwgQUJJLnJhd0VuY29kZShzaWcuYXJncywgYXJncykgXSlcbn1cblxuQUJJLnNpbXBsZURlY29kZSA9IGZ1bmN0aW9uIChtZXRob2QsIGRhdGEpIHtcbiAgdmFyIHNpZyA9IHBhcnNlU2lnbmF0dXJlKG1ldGhvZClcblxuICAvLyBGSVhNRTogdmFsaWRhdGUvY29udmVydCBhcmd1bWVudHNcbiAgaWYgKCFzaWcucmV0YXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmV0dXJuIHZhbHVlcyBpbiBtZXRob2QnKVxuICB9XG5cbiAgcmV0dXJuIEFCSS5yYXdEZWNvZGUoc2lnLnJldGFyZ3MsIGRhdGEpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeSAodHlwZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGUuc3RhcnRzV2l0aCgnYWRkcmVzcycpIHx8IHR5cGUuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnMHgnICsgdmFsdWUudG9TdHJpbmcoJ2hleCcpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgfVxufVxuXG5BQkkuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHR5cGVzLCB2YWx1ZXMpIHtcbiAgdmFyIHJldCA9IFtdXG5cbiAgZm9yICh2YXIgaSBpbiB0eXBlcykge1xuICAgIHZhciB0eXBlID0gdHlwZXNbaV1cbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV1cblxuICAgIC8vIGlmIGl0IGlzIGFuIGFycmF5IHR5cGUsIGNvbmNhdCB0aGUgaXRlbXNcbiAgICBpZiAoL15bXlxcW10rXFxbLipcXF0kLy50ZXN0KHR5cGUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHR5cGUsIGl0ZW0pXG4gICAgICB9KS5qb2luKCcsICcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gc3RyaW5naWZ5KHR5cGUsIHZhbHVlKVxuICAgIH1cblxuICAgIHJldC5wdXNoKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5BQkkuc29saWRpdHlIZXhWYWx1ZSA9IGZ1bmN0aW9uICh0eXBlLCB2YWx1ZSwgYml0c2l6ZSkge1xuICAvLyBwYXNzIGluIGJpdHNpemUgPSBudWxsIGlmIHVzZSBkZWZhdWx0IGJpdHNpemVcbiAgdmFyIHNpemUsIG51bVxuICBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgIHZhciBzdWJUeXBlID0gdHlwZS5yZXBsYWNlKC9cXFsuKj9cXF0vLCAnJylcbiAgICBpZiAoIWlzQXJyYXkoc3ViVHlwZSkpIHtcbiAgICAgIHZhciBhcnJheVNpemUgPSBwYXJzZVR5cGVBcnJheSh0eXBlKVxuICAgICAgaWYgKGFycmF5U2l6ZSAhPT0gJ2R5bmFtaWMnICYmIGFycmF5U2l6ZSAhPT0gMCAmJiB2YWx1ZS5sZW5ndGggPiBhcnJheVNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbGVtZW50cyBleGNlZWQgYXJyYXkgc2l6ZTogJyArIGFycmF5U2l6ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFycmF5VmFsdWVzID0gdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gQUJJLnNvbGlkaXR5SGV4VmFsdWUoc3ViVHlwZSwgdiwgMjU2KVxuICAgIH0pXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYXJyYXlWYWx1ZXMpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2J5dGVzJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlLCAndXRmOCcpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgYml0c2l6ZSA9IGJpdHNpemUgfHwgOFxuICAgIHZhciBwYWRkaW5nID0gQXJyYXkoKGJpdHNpemUpIC8gNCkuam9pbignMCcpXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlID8gcGFkZGluZyArICcxJyA6IHBhZGRpbmcgKyAnMCcsICdoZXgnKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhZGRyZXNzJykge1xuICAgIHZhciBieXRlc2l6ZSA9IDIwXG4gICAgaWYgKGJpdHNpemUpIHtcbiAgICAgIGJ5dGVzaXplID0gYml0c2l6ZSAvIDhcbiAgICB9XG4gICAgcmV0dXJuIHV0aWxzLnNldExlbmd0aExlZnQodmFsdWUsIGJ5dGVzaXplKVxuICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHNpemUgPSBwYXJzZVR5cGVOKHR5cGUpXG4gICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJ5dGVzPE4+IHdpZHRoOiAnICsgc2l6ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbHMuc2V0TGVuZ3RoUmlnaHQodmFsdWUsIHNpemUpXG4gIH0gZWxzZSBpZiAodHlwZS5zdGFydHNXaXRoKCd1aW50JykpIHtcbiAgICBzaXplID0gcGFyc2VUeXBlTih0eXBlKVxuICAgIGlmICgoc2l6ZSAlIDgpIHx8IChzaXplIDwgOCkgfHwgKHNpemUgPiAyNTYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdWludDxOPiB3aWR0aDogJyArIHNpemUpXG4gICAgfVxuXG4gICAgbnVtID0gcGFyc2VOdW1iZXIodmFsdWUpXG4gICAgaWYgKG51bS5iaXRMZW5ndGgoKSA+IHNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcGxpZWQgdWludCBleGNlZWRzIHdpZHRoOiAnICsgc2l6ZSArICcgdnMgJyArIG51bS5iaXRMZW5ndGgoKSlcbiAgICB9XG5cbiAgICBiaXRzaXplID0gYml0c2l6ZSB8fCBzaXplXG4gICAgcmV0dXJuIG51bS50b0FycmF5TGlrZShCdWZmZXIsICdiZScsIGJpdHNpemUgLyA4KVxuICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgnaW50JykpIHtcbiAgICBzaXplID0gcGFyc2VUeXBlTih0eXBlKVxuICAgIGlmICgoc2l6ZSAlIDgpIHx8IChzaXplIDwgOCkgfHwgKHNpemUgPiAyNTYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50PE4+IHdpZHRoOiAnICsgc2l6ZSlcbiAgICB9XG5cbiAgICBudW0gPSBwYXJzZU51bWJlcih2YWx1ZSlcbiAgICBpZiAobnVtLmJpdExlbmd0aCgpID4gc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwbGllZCBpbnQgZXhjZWVkcyB3aWR0aDogJyArIHNpemUgKyAnIHZzICcgKyBudW0uYml0TGVuZ3RoKCkpXG4gICAgfVxuXG4gICAgYml0c2l6ZSA9IGJpdHNpemUgfHwgc2l6ZVxuICAgIHJldHVybiBudW0udG9Ud29zKHNpemUpLnRvQXJyYXlMaWtlKEJ1ZmZlciwgJ2JlJywgYml0c2l6ZSAvIDgpXG4gIH0gZWxzZSB7XG4gICAgLy8gRklYTUU6IHN1cHBvcnQgYWxsIG90aGVyIHR5cGVzXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKVxuICB9XG59XG5cbkFCSS5zb2xpZGl0eVBhY2sgPSBmdW5jdGlvbiAodHlwZXMsIHZhbHVlcykge1xuICBpZiAodHlwZXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgdHlwZXMgYXJlIG5vdCBtYXRjaGluZyB0aGUgdmFsdWVzJylcbiAgfVxuXG4gIHZhciByZXQgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnRhcnlOYW1lKHR5cGVzW2ldKVxuICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXVxuICAgIHJldC5wdXNoKEFCSS5zb2xpZGl0eUhleFZhbHVlKHR5cGUsIHZhbHVlLCBudWxsKSlcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJldClcbn1cblxuQUJJLnNvbGlkaXR5U0hBMyA9IGZ1bmN0aW9uICh0eXBlcywgdmFsdWVzKSB7XG4gIHJldHVybiB1dGlscy5rZWNjYWsyNTYoQUJJLnNvbGlkaXR5UGFjayh0eXBlcywgdmFsdWVzKSlcbn1cblxuQUJJLnNvbGlkaXR5U0hBMjU2ID0gZnVuY3Rpb24gKHR5cGVzLCB2YWx1ZXMpIHtcbiAgcmV0dXJuIHV0aWxzLnNoYTI1NihBQkkuc29saWRpdHlQYWNrKHR5cGVzLCB2YWx1ZXMpKVxufVxuXG5BQkkuc29saWRpdHlSSVBFTUQxNjAgPSBmdW5jdGlvbiAodHlwZXMsIHZhbHVlcykge1xuICByZXR1cm4gdXRpbHMucmlwZW1kMTYwKEFCSS5zb2xpZGl0eVBhY2sodHlwZXMsIHZhbHVlcyksIHRydWUpXG59XG5cbi8vIFNlcnBlbnQncyB1c2VycyBhcmUgZmFtaWxpYXIgd2l0aCB0aGlzIGVuY29kaW5nXG4vLyAtIHM6IHN0cmluZ1xuLy8gLSBiOiBieXRlc1xuLy8gLSBiPE4+OiBieXRlczxOPlxuLy8gLSBpOiBpbnQyNTZcbi8vIC0gYTogaW50MjU2W11cblxuZnVuY3Rpb24gaXNOdW1lcmljIChjKSB7XG4gIC8vIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3Q/IFNlZW1zIHRvIHdvcmtcbiAgcmV0dXJuIChjID49ICcwJykgJiYgKGMgPD0gJzknKVxufVxuXG4vLyBGb3IgYSBcImRvY3VtZW50YXRpb25cIiByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW0vc2VycGVudC9ibG9iL2RldmVsb3AvcHJlcHJvY2Vzcy5jcHBcbkFCSS5mcm9tU2VycGVudCA9IGZ1bmN0aW9uIChzaWcpIHtcbiAgdmFyIHJldCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHR5cGUgPSBzaWdbaV1cbiAgICBpZiAodHlwZSA9PT0gJ3MnKSB7XG4gICAgICByZXQucHVzaCgnYnl0ZXMnKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2InKSB7XG4gICAgICB2YXIgdG1wID0gJ2J5dGVzJ1xuICAgICAgdmFyIGogPSBpICsgMVxuICAgICAgd2hpbGUgKChqIDwgc2lnLmxlbmd0aCkgJiYgaXNOdW1lcmljKHNpZ1tqXSkpIHtcbiAgICAgICAgdG1wICs9IHNpZ1tqXSAtICcwJ1xuICAgICAgICBqKytcbiAgICAgIH1cbiAgICAgIGkgPSBqIC0gMVxuICAgICAgcmV0LnB1c2godG1wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2knKSB7XG4gICAgICByZXQucHVzaCgnaW50MjU2JylcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhJykge1xuICAgICAgcmV0LnB1c2goJ2ludDI1NltdJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbkFCSS50b1NlcnBlbnQgPSBmdW5jdGlvbiAodHlwZXMpIHtcbiAgdmFyIHJldCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVzW2ldXG4gICAgaWYgKHR5cGUgPT09ICdieXRlcycpIHtcbiAgICAgIHJldC5wdXNoKCdzJylcbiAgICB9IGVsc2UgaWYgKHR5cGUuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgICAgcmV0LnB1c2goJ2InICsgcGFyc2VUeXBlTih0eXBlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnQyNTYnKSB7XG4gICAgICByZXQucHVzaCgnaScpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaW50MjU2W10nKSB7XG4gICAgICByZXQucHVzaCgnYScpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3IgaW52YWxpZCB0eXBlOiAnICsgdHlwZSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldC5qb2luKCcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFCSVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBfX2V4cG9ydChtKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlY3AyNTZrMSA9IHJlcXVpcmUoJ3NlY3AyNTZrMScpO1xuZXhwb3J0cy5zZWNwMjU2azEgPSBzZWNwMjU2azE7XG52YXIgZXRoanNVdGlsID0gcmVxdWlyZSgnZXRoanMtdXRpbCcpO1xudmFyIEJOID0gcmVxdWlyZShcImJuLmpzXCIpO1xuZXhwb3J0cy5CTiA9IEJOO1xudmFyIHJscCA9IHJlcXVpcmUoXCJybHBcIik7XG5leHBvcnRzLnJscCA9IHJscDtcbk9iamVjdC5hc3NpZ24oZXhwb3J0cywgZXRoanNVdGlsKTtcbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cbl9fZXhwb3J0KHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKSk7XG4vKipcbiAqIFB1YmxpYy1rZXkgY3J5cHRvZ3JhcGh5IChzZWNwMjU2azEpIGFuZCBhZGRyZXNzZXNcbiAqL1xuX19leHBvcnQocmVxdWlyZShcIi4vYWNjb3VudFwiKSk7XG4vKipcbiAqIEhhc2ggZnVuY3Rpb25zXG4gKi9cbl9fZXhwb3J0KHJlcXVpcmUoXCIuL2hhc2hcIikpO1xuLyoqXG4gKiBFQ0RTQSBzaWduYXR1cmVcbiAqL1xuX19leHBvcnQocmVxdWlyZShcIi4vc2lnbmF0dXJlXCIpKTtcbi8qKlxuICogVXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgQnVmZmVycywgYnl0ZSBhcnJheXMsIGV0Yy5cbiAqL1xuX19leHBvcnQocmVxdWlyZShcIi4vYnl0ZXNcIikpO1xuLyoqXG4gKiBGdW5jdGlvbiBmb3IgZGVmaW5pbmluZyBwcm9wZXJ0aWVzIG9uIGFuIG9iamVjdFxuICovXG5fX2V4cG9ydChyZXF1aXJlKFwiLi9vYmplY3RcIikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG4vKipcbiAqIFRoZSBtYXggaW50ZWdlciB0aGF0IHRoaXMgVk0gY2FuIGhhbmRsZVxuICovXG5leHBvcnRzLk1BWF9JTlRFR0VSID0gbmV3IEJOKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywgMTYpO1xuLyoqXG4gKiAyXjI1NlxuICovXG5leHBvcnRzLlRXT19QT1cyNTYgPSBuZXcgQk4oJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgMTYpO1xuLyoqXG4gKiBLZWNjYWstMjU2IGhhc2ggb2YgbnVsbFxuICovXG5leHBvcnRzLktFQ0NBSzI1Nl9OVUxMX1MgPSAnYzVkMjQ2MDE4NmY3MjMzYzkyN2U3ZGIyZGNjNzAzYzBlNTAwYjY1M2NhODIyNzNiN2JmYWQ4MDQ1ZDg1YTQ3MCc7XG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiBudWxsXG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X05VTEwgPSBCdWZmZXIuZnJvbShleHBvcnRzLktFQ0NBSzI1Nl9OVUxMX1MsICdoZXgnKTtcbi8qKlxuICogS2VjY2FrLTI1NiBvZiBhbiBSTFAgb2YgYW4gZW1wdHkgYXJyYXlcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQX0FSUkFZX1MgPSAnMWRjYzRkZThkZWM3NWQ3YWFiODViNTY3YjZjY2Q0MWFkMzEyNDUxYjk0OGE3NDEzZjBhMTQyZmQ0MGQ0OTM0Nyc7XG4vKipcbiAqIEtlY2Nhay0yNTYgb2YgYW4gUkxQIG9mIGFuIGVtcHR5IGFycmF5XG4gKi9cbmV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWSA9IEJ1ZmZlci5mcm9tKGV4cG9ydHMuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TLCAnaGV4Jyk7XG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiB0aGUgUkxQIG9mIG51bGxcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1MgPSAnNTZlODFmMTcxYmNjNTVhNmZmODM0NWU2OTJjMGY4NmU1YjQ4ZTAxYjk5NmNhZGMwMDE2MjJmYjVlMzYzYjQyMSc7XG4vKipcbiAqIEtlY2Nhay0yNTYgaGFzaCBvZiB0aGUgUkxQIG9mIG51bGxcbiAqL1xuZXhwb3J0cy5LRUNDQUsyNTZfUkxQID0gQnVmZmVyLmZyb20oZXhwb3J0cy5LRUNDQUsyNTZfUkxQX1MsICdoZXgnKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBldGhqc1V0aWwgPSByZXF1aXJlKCdldGhqcy11dGlsJyk7XG52YXIgc2VjcDI1NmsxID0gcmVxdWlyZSgnc2VjcDI1NmsxJyk7XG52YXIgQk4gPSByZXF1aXJlKFwiYm4uanNcIik7XG52YXIgYnl0ZXNfMSA9IHJlcXVpcmUoXCIuL2J5dGVzXCIpO1xudmFyIGhhc2hfMSA9IHJlcXVpcmUoXCIuL2hhc2hcIik7XG4vKipcbiAqIFJldHVybnMgYSB6ZXJvIGFkZHJlc3MuXG4gKi9cbmV4cG9ydHMuemVyb0FkZHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFkZHJlc3NMZW5ndGggPSAyMDtcbiAgICB2YXIgYWRkciA9IGJ5dGVzXzEuemVyb3MoYWRkcmVzc0xlbmd0aCk7XG4gICAgcmV0dXJuIGJ5dGVzXzEuYnVmZmVyVG9IZXgoYWRkcik7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGFkZHJlc3MgaXMgYSB2YWxpZC4gQWNjZXB0cyBjaGVja3N1bW1lZCBhZGRyZXNzZXMgdG9vLlxuICovXG5leHBvcnRzLmlzVmFsaWRBZGRyZXNzID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICByZXR1cm4gL14weFswLTlhLWZBLUZdezQwfSQvLnRlc3QoYWRkcmVzcyk7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBhZGRyZXNzIGlzIGEgemVybyBhZGRyZXNzLlxuICovXG5leHBvcnRzLmlzWmVyb0FkZHJlc3MgPSBmdW5jdGlvbiAoYWRkcmVzcykge1xuICAgIHZhciB6ZXJvQWRkciA9IGV4cG9ydHMuemVyb0FkZHJlc3MoKTtcbiAgICByZXR1cm4gemVyb0FkZHIgPT09IGJ5dGVzXzEuYWRkSGV4UHJlZml4KGFkZHJlc3MpO1xufTtcbi8qKlxuICogUmV0dXJucyBhIGNoZWNrc3VtbWVkIGFkZHJlc3MuXG4gKlxuICogSWYgYSBlaXAxMTkxQ2hhaW5JZCBpcyBwcm92aWRlZCwgdGhlIGNoYWluSWQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24uIFRoaXNcbiAqIGhhcyB0aGUgZWZmZWN0IG9mIGNoZWNrc3VtbWVkIGFkZHJlc3NlcyBmb3Igb25lIGNoYWluIGhhdmluZyBpbnZhbGlkIGNoZWNrc3VtcyBmb3Igb3RoZXJzLlxuICogRm9yIG1vcmUgZGV0YWlscywgY29uc3VsdCBFSVAtMTE5MS5cbiAqXG4gKiBXQVJOSU5HOiBDaGVja3N1bXMgd2l0aCBhbmQgd2l0aG91dCB0aGUgY2hhaW5JZCB3aWxsIGRpZmZlci4gQXMgb2YgMjAxOS0wNi0yNiwgdGhlIG1vc3QgY29tbW9ubHlcbiAqIHVzZWQgdmFyaWF0aW9uIGluIEV0aGVyZXVtIHdhcyB3aXRob3V0IHRoZSBjaGFpbklkLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cbiAqL1xuZXhwb3J0cy50b0NoZWNrc3VtQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzLCBlaXAxMTkxQ2hhaW5JZCkge1xuICAgIGFkZHJlc3MgPSBldGhqc1V0aWwuc3RyaXBIZXhQcmVmaXgoYWRkcmVzcykudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcHJlZml4ID0gZWlwMTE5MUNoYWluSWQgIT09IHVuZGVmaW5lZCA/IGVpcDExOTFDaGFpbklkLnRvU3RyaW5nKCkgKyAnMHgnIDogJyc7XG4gICAgdmFyIGhhc2ggPSBoYXNoXzEua2VjY2FrKHByZWZpeCArIGFkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB2YXIgcmV0ID0gJzB4JztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KGhhc2hbaV0sIDE2KSA+PSA4KSB7XG4gICAgICAgICAgICByZXQgKz0gYWRkcmVzc1tpXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0ICs9IGFkZHJlc3NbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIENoZWNrcyBpZiB0aGUgYWRkcmVzcyBpcyBhIHZhbGlkIGNoZWNrc3VtbWVkIGFkZHJlc3MuXG4gKlxuICogU2VlIHRvQ2hlY2tzdW1BZGRyZXNzJyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIGFib3V0IHRoZSBlaXAxMTkxQ2hhaW5JZCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuaXNWYWxpZENoZWNrc3VtQWRkcmVzcyA9IGZ1bmN0aW9uIChhZGRyZXNzLCBlaXAxMTkxQ2hhaW5JZCkge1xuICAgIHJldHVybiBleHBvcnRzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpICYmIGV4cG9ydHMudG9DaGVja3N1bUFkZHJlc3MoYWRkcmVzcywgZWlwMTE5MUNoYWluSWQpID09PSBhZGRyZXNzO1xufTtcbi8qKlxuICogR2VuZXJhdGVzIGFuIGFkZHJlc3Mgb2YgYSBuZXdseSBjcmVhdGVkIGNvbnRyYWN0LlxuICogQHBhcmFtIGZyb20gVGhlIGFkZHJlc3Mgd2hpY2ggaXMgY3JlYXRpbmcgdGhpcyBuZXcgYWRkcmVzc1xuICogQHBhcmFtIG5vbmNlIFRoZSBub25jZSBvZiB0aGUgZnJvbSBhY2NvdW50XG4gKi9cbmV4cG9ydHMuZ2VuZXJhdGVBZGRyZXNzID0gZnVuY3Rpb24gKGZyb20sIG5vbmNlKSB7XG4gICAgZnJvbSA9IGJ5dGVzXzEudG9CdWZmZXIoZnJvbSk7XG4gICAgdmFyIG5vbmNlQk4gPSBuZXcgQk4obm9uY2UpO1xuICAgIGlmIChub25jZUJOLmlzWmVybygpKSB7XG4gICAgICAgIC8vIGluIFJMUCB3ZSB3YW50IHRvIGVuY29kZSBudWxsIGluIHRoZSBjYXNlIG9mIHplcm8gbm9uY2VcbiAgICAgICAgLy8gcmVhZCB0aGUgUkxQIGRvY3VtZW50YXRpb24gZm9yIGFuIGFuc3dlciBpZiB5b3UgZGFyZVxuICAgICAgICByZXR1cm4gaGFzaF8xLnJscGhhc2goW2Zyb20sIG51bGxdKS5zbGljZSgtMjApO1xuICAgIH1cbiAgICAvLyBPbmx5IHRha2UgdGhlIGxvd2VyIDE2MGJpdHMgb2YgdGhlIGhhc2hcbiAgICByZXR1cm4gaGFzaF8xLnJscGhhc2goW2Zyb20sIEJ1ZmZlci5mcm9tKG5vbmNlQk4udG9BcnJheSgpKV0pLnNsaWNlKC0yMCk7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWRkcmVzcyBmb3IgYSBjb250cmFjdCBjcmVhdGVkIHVzaW5nIENSRUFURTIuXG4gKiBAcGFyYW0gZnJvbSBUaGUgYWRkcmVzcyB3aGljaCBpcyBjcmVhdGluZyB0aGlzIG5ldyBhZGRyZXNzXG4gKiBAcGFyYW0gc2FsdCBBIHNhbHRcbiAqIEBwYXJhbSBpbml0Q29kZSBUaGUgaW5pdCBjb2RlIG9mIHRoZSBjb250cmFjdCBiZWluZyBjcmVhdGVkXG4gKi9cbmV4cG9ydHMuZ2VuZXJhdGVBZGRyZXNzMiA9IGZ1bmN0aW9uIChmcm9tLCBzYWx0LCBpbml0Q29kZSkge1xuICAgIHZhciBmcm9tQnVmID0gYnl0ZXNfMS50b0J1ZmZlcihmcm9tKTtcbiAgICB2YXIgc2FsdEJ1ZiA9IGJ5dGVzXzEudG9CdWZmZXIoc2FsdCk7XG4gICAgdmFyIGluaXRDb2RlQnVmID0gYnl0ZXNfMS50b0J1ZmZlcihpbml0Q29kZSk7XG4gICAgYXNzZXJ0KGZyb21CdWYubGVuZ3RoID09PSAyMCk7XG4gICAgYXNzZXJ0KHNhbHRCdWYubGVuZ3RoID09PSAzMik7XG4gICAgdmFyIGFkZHJlc3MgPSBoYXNoXzEua2VjY2FrMjU2KEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKCdmZicsICdoZXgnKSwgZnJvbUJ1Ziwgc2FsdEJ1ZiwgaGFzaF8xLmtlY2NhazI1Nihpbml0Q29kZUJ1ZildKSk7XG4gICAgcmV0dXJuIGFkZHJlc3Muc2xpY2UoLTIwKTtcbn07XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYWRkcmVzcyBiZWxvbmdzIHRvIGEgcHJlY29tcGlsZWQgYWNjb3VudCAoQnl6YW50aXVtKS5cbiAqL1xuZXhwb3J0cy5pc1ByZWNvbXBpbGVkID0gZnVuY3Rpb24gKGFkZHJlc3MpIHtcbiAgICB2YXIgYSA9IGJ5dGVzXzEudW5wYWQoYWRkcmVzcyk7XG4gICAgcmV0dXJuIGEubGVuZ3RoID09PSAxICYmIGFbMF0gPj0gMSAmJiBhWzBdIDw9IDg7XG59O1xuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByaXZhdGUga2V5IHNhdGlzZmllcyB0aGUgcnVsZXMgb2YgdGhlIGN1cnZlIHNlY3AyNTZrMS5cbiAqL1xuZXhwb3J0cy5pc1ZhbGlkUHJpdmF0ZSA9IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgcmV0dXJuIHNlY3AyNTZrMS5wcml2YXRlS2V5VmVyaWZ5KHByaXZhdGVLZXkpO1xufTtcbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwdWJsaWMga2V5IHNhdGlzZmllcyB0aGUgcnVsZXMgb2YgdGhlIGN1cnZlIHNlY3AyNTZrMVxuICogYW5kIHRoZSByZXF1aXJlbWVudHMgb2YgRXRoZXJldW0uXG4gKiBAcGFyYW0gcHVibGljS2V5IFRoZSB0d28gcG9pbnRzIG9mIGFuIHVuY29tcHJlc3NlZCBrZXksIHVubGVzcyBzYW5pdGl6ZSBpcyBlbmFibGVkXG4gKiBAcGFyYW0gc2FuaXRpemUgQWNjZXB0IHB1YmxpYyBrZXlzIGluIG90aGVyIGZvcm1hdHNcbiAqL1xuZXhwb3J0cy5pc1ZhbGlkUHVibGljID0gZnVuY3Rpb24gKHB1YmxpY0tleSwgc2FuaXRpemUpIHtcbiAgICBpZiAoc2FuaXRpemUgPT09IHZvaWQgMCkgeyBzYW5pdGl6ZSA9IGZhbHNlOyB9XG4gICAgaWYgKHB1YmxpY0tleS5sZW5ndGggPT09IDY0KSB7XG4gICAgICAgIC8vIENvbnZlcnQgdG8gU0VDMSBmb3Igc2VjcDI1NmsxXG4gICAgICAgIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5VmVyaWZ5KEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFs0XSksIHB1YmxpY0tleV0pKTtcbiAgICB9XG4gICAgaWYgKCFzYW5pdGl6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzZWNwMjU2azEucHVibGljS2V5VmVyaWZ5KHB1YmxpY0tleSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBldGhlcmV1bSBhZGRyZXNzIG9mIGEgZ2l2ZW4gcHVibGljIGtleS5cbiAqIEFjY2VwdHMgXCJFdGhlcmV1bSBwdWJsaWMga2V5c1wiIGFuZCBTRUMxIGVuY29kZWQga2V5cy5cbiAqIEBwYXJhbSBwdWJLZXkgVGhlIHR3byBwb2ludHMgb2YgYW4gdW5jb21wcmVzc2VkIGtleSwgdW5sZXNzIHNhbml0aXplIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSBzYW5pdGl6ZSBBY2NlcHQgcHVibGljIGtleXMgaW4gb3RoZXIgZm9ybWF0c1xuICovXG5leHBvcnRzLnB1YlRvQWRkcmVzcyA9IGZ1bmN0aW9uIChwdWJLZXksIHNhbml0aXplKSB7XG4gICAgaWYgKHNhbml0aXplID09PSB2b2lkIDApIHsgc2FuaXRpemUgPSBmYWxzZTsgfVxuICAgIHB1YktleSA9IGJ5dGVzXzEudG9CdWZmZXIocHViS2V5KTtcbiAgICBpZiAoc2FuaXRpemUgJiYgcHViS2V5Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgcHViS2V5ID0gc2VjcDI1NmsxLnB1YmxpY0tleUNvbnZlcnQocHViS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG4gICAgfVxuICAgIGFzc2VydChwdWJLZXkubGVuZ3RoID09PSA2NCk7XG4gICAgLy8gT25seSB0YWtlIHRoZSBsb3dlciAxNjBiaXRzIG9mIHRoZSBoYXNoXG4gICAgcmV0dXJuIGhhc2hfMS5rZWNjYWsocHViS2V5KS5zbGljZSgtMjApO1xufTtcbmV4cG9ydHMucHVibGljVG9BZGRyZXNzID0gZXhwb3J0cy5wdWJUb0FkZHJlc3M7XG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIGFkZHJlc3Mgb2YgYSBnaXZlbiBwcml2YXRlIGtleS5cbiAqIEBwYXJhbSBwcml2YXRlS2V5IEEgcHJpdmF0ZSBrZXkgbXVzdCBiZSAyNTYgYml0cyB3aWRlXG4gKi9cbmV4cG9ydHMucHJpdmF0ZVRvQWRkcmVzcyA9IGZ1bmN0aW9uIChwcml2YXRlS2V5KSB7XG4gICAgcmV0dXJuIGV4cG9ydHMucHVibGljVG9BZGRyZXNzKGV4cG9ydHMucHJpdmF0ZVRvUHVibGljKHByaXZhdGVLZXkpKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGV0aGVyZXVtIHB1YmxpYyBrZXkgb2YgYSBnaXZlbiBwcml2YXRlIGtleS5cbiAqIEBwYXJhbSBwcml2YXRlS2V5IEEgcHJpdmF0ZSBrZXkgbXVzdCBiZSAyNTYgYml0cyB3aWRlXG4gKi9cbmV4cG9ydHMucHJpdmF0ZVRvUHVibGljID0gZnVuY3Rpb24gKHByaXZhdGVLZXkpIHtcbiAgICBwcml2YXRlS2V5ID0gYnl0ZXNfMS50b0J1ZmZlcihwcml2YXRlS2V5KTtcbiAgICAvLyBza2lwIHRoZSB0eXBlIGZsYWcgYW5kIHVzZSB0aGUgWCwgWSBwb2ludHNcbiAgICByZXR1cm4gc2VjcDI1NmsxLnB1YmxpY0tleUNyZWF0ZShwcml2YXRlS2V5LCBmYWxzZSkuc2xpY2UoMSk7XG59O1xuLyoqXG4gKiBDb252ZXJ0cyBhIHB1YmxpYyBrZXkgdG8gdGhlIEV0aGVyZXVtIGZvcm1hdC5cbiAqL1xuZXhwb3J0cy5pbXBvcnRQdWJsaWMgPSBmdW5jdGlvbiAocHVibGljS2V5KSB7XG4gICAgcHVibGljS2V5ID0gYnl0ZXNfMS50b0J1ZmZlcihwdWJsaWNLZXkpO1xuICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSA2NCkge1xuICAgICAgICBwdWJsaWNLZXkgPSBzZWNwMjU2azEucHVibGljS2V5Q29udmVydChwdWJsaWNLZXksIGZhbHNlKS5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHB1YmxpY0tleTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hY2NvdW50LmpzLm1hcCIsIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9hcGknKShyZXF1aXJlKCcuL2xpYi9rZWNjYWsnKSlcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgY3JlYXRlS2VjY2FrID0gcmVxdWlyZSgnLi9rZWNjYWsnKVxuY29uc3QgY3JlYXRlU2hha2UgPSByZXF1aXJlKCcuL3NoYWtlJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS2VjY2FrU3RhdGUpIHtcbiAgY29uc3QgS2VjY2FrID0gY3JlYXRlS2VjY2FrKEtlY2Nha1N0YXRlKVxuICBjb25zdCBTaGFrZSA9IGNyZWF0ZVNoYWtlKEtlY2Nha1N0YXRlKVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYWxnb3JpdGhtLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaGFzaCA9IHR5cGVvZiBhbGdvcml0aG0gPT09ICdzdHJpbmcnID8gYWxnb3JpdGhtLnRvTG93ZXJDYXNlKCkgOiBhbGdvcml0aG1cbiAgICBzd2l0Y2ggKGhhc2gpIHtcbiAgICAgIGNhc2UgJ2tlY2NhazIyNCc6IHJldHVybiBuZXcgS2VjY2FrKDExNTIsIDQ0OCwgbnVsbCwgMjI0LCBvcHRpb25zKVxuICAgICAgY2FzZSAna2VjY2FrMjU2JzogcmV0dXJuIG5ldyBLZWNjYWsoMTA4OCwgNTEyLCBudWxsLCAyNTYsIG9wdGlvbnMpXG4gICAgICBjYXNlICdrZWNjYWszODQnOiByZXR1cm4gbmV3IEtlY2Nhayg4MzIsIDc2OCwgbnVsbCwgMzg0LCBvcHRpb25zKVxuICAgICAgY2FzZSAna2VjY2FrNTEyJzogcmV0dXJuIG5ldyBLZWNjYWsoNTc2LCAxMDI0LCBudWxsLCA1MTIsIG9wdGlvbnMpXG5cbiAgICAgIGNhc2UgJ3NoYTMtMjI0JzogcmV0dXJuIG5ldyBLZWNjYWsoMTE1MiwgNDQ4LCAweDA2LCAyMjQsIG9wdGlvbnMpXG4gICAgICBjYXNlICdzaGEzLTI1Nic6IHJldHVybiBuZXcgS2VjY2FrKDEwODgsIDUxMiwgMHgwNiwgMjU2LCBvcHRpb25zKVxuICAgICAgY2FzZSAnc2hhMy0zODQnOiByZXR1cm4gbmV3IEtlY2Nhayg4MzIsIDc2OCwgMHgwNiwgMzg0LCBvcHRpb25zKVxuICAgICAgY2FzZSAnc2hhMy01MTInOiByZXR1cm4gbmV3IEtlY2Nhayg1NzYsIDEwMjQsIDB4MDYsIDUxMiwgb3B0aW9ucylcblxuICAgICAgY2FzZSAnc2hha2UxMjgnOiByZXR1cm4gbmV3IFNoYWtlKDEzNDQsIDI1NiwgMHgxZiwgb3B0aW9ucylcbiAgICAgIGNhc2UgJ3NoYWtlMjU2JzogcmV0dXJuIG5ldyBTaGFrZSgxMDg4LCA1MTIsIDB4MWYsIG9wdGlvbnMpXG5cbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignSW52YWxkIGFsZ29yaXRobTogJyArIGFsZ29yaXRobSlcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbmNvbnN0IFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtlY2Nha1N0YXRlKSB7XG4gIGZ1bmN0aW9uIEtlY2NhayAocmF0ZSwgY2FwYWNpdHksIGRlbGltaXRlZFN1ZmZpeCwgaGFzaEJpdExlbmd0aCwgb3B0aW9ucykge1xuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpXG5cbiAgICB0aGlzLl9yYXRlID0gcmF0ZVxuICAgIHRoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHlcbiAgICB0aGlzLl9kZWxpbWl0ZWRTdWZmaXggPSBkZWxpbWl0ZWRTdWZmaXhcbiAgICB0aGlzLl9oYXNoQml0TGVuZ3RoID0gaGFzaEJpdExlbmd0aFxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zXG5cbiAgICB0aGlzLl9zdGF0ZSA9IG5ldyBLZWNjYWtTdGF0ZSgpXG4gICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZShyYXRlLCBjYXBhY2l0eSlcbiAgICB0aGlzLl9maW5hbGl6ZWQgPSBmYWxzZVxuICB9XG5cbiAgaW5oZXJpdHMoS2VjY2FrLCBUcmFuc2Zvcm0pXG5cbiAgS2VjY2FrLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudXBkYXRlKGNodW5rLCBlbmNvZGluZylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyb3IpXG4gIH1cblxuICBLZWNjYWsucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGxldCBlcnJvciA9IG51bGxcbiAgICB0cnkge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVyclxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yKVxuICB9XG5cbiAgS2VjY2FrLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSAmJiB0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RhdGEgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlcicpXG4gICAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgZW5jb2RpbmcpXG5cbiAgICB0aGlzLl9zdGF0ZS5hYnNvcmIoZGF0YSlcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBLZWNjYWsucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICAgIGlmICh0aGlzLl9maW5hbGl6ZWQpIHRocm93IG5ldyBFcnJvcignRGlnZXN0IGFscmVhZHkgY2FsbGVkJylcbiAgICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgICBpZiAodGhpcy5fZGVsaW1pdGVkU3VmZml4KSB0aGlzLl9zdGF0ZS5hYnNvcmJMYXN0RmV3Qml0cyh0aGlzLl9kZWxpbWl0ZWRTdWZmaXgpXG4gICAgbGV0IGRpZ2VzdCA9IHRoaXMuX3N0YXRlLnNxdWVlemUodGhpcy5faGFzaEJpdExlbmd0aCAvIDgpXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIGRpZ2VzdCA9IGRpZ2VzdC50b1N0cmluZyhlbmNvZGluZylcblxuICAgIHRoaXMuX3Jlc2V0U3RhdGUoKVxuXG4gICAgcmV0dXJuIGRpZ2VzdFxuICB9XG5cbiAgLy8gcmVtb3ZlIHJlc3VsdCBmcm9tIG1lbW9yeVxuICBLZWNjYWsucHJvdG90eXBlLl9yZXNldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHkpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIGJlY2F1c2Ugc29tZXRpbWVzIHdlIG5lZWQgaGFzaCByaWdodCBub3cgYW5kIGxpdHRsZSBsYXRlclxuICBLZWNjYWsucHJvdG90eXBlLl9jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBLZWNjYWsodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlbGltaXRlZFN1ZmZpeCwgdGhpcy5faGFzaEJpdExlbmd0aCwgdGhpcy5fb3B0aW9ucylcbiAgICB0aGlzLl9zdGF0ZS5jb3B5KGNsb25lLl9zdGF0ZSlcbiAgICBjbG9uZS5fZmluYWxpemVkID0gdGhpcy5fZmluYWxpemVkXG5cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIHJldHVybiBLZWNjYWtcbn1cbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbmNvbnN0IFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtlY2Nha1N0YXRlKSB7XG4gIGZ1bmN0aW9uIFNoYWtlIChyYXRlLCBjYXBhY2l0eSwgZGVsaW1pdGVkU3VmZml4LCBvcHRpb25zKSB7XG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucylcblxuICAgIHRoaXMuX3JhdGUgPSByYXRlXG4gICAgdGhpcy5fY2FwYWNpdHkgPSBjYXBhY2l0eVxuICAgIHRoaXMuX2RlbGltaXRlZFN1ZmZpeCA9IGRlbGltaXRlZFN1ZmZpeFxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zXG5cbiAgICB0aGlzLl9zdGF0ZSA9IG5ldyBLZWNjYWtTdGF0ZSgpXG4gICAgdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZShyYXRlLCBjYXBhY2l0eSlcbiAgICB0aGlzLl9maW5hbGl6ZWQgPSBmYWxzZVxuICB9XG5cbiAgaW5oZXJpdHMoU2hha2UsIFRyYW5zZm9ybSlcblxuICBTaGFrZS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICB0aGlzLnVwZGF0ZShjaHVuaywgZW5jb2RpbmcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVyclxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycm9yKVxuICB9XG5cbiAgU2hha2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uICgpIHt9XG5cbiAgU2hha2UucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICB0aGlzLnB1c2godGhpcy5zcXVlZXplKHNpemUpKVxuICB9XG5cbiAgU2hha2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyJylcbiAgICBpZiAodGhpcy5fZmluYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ1NxdWVlemUgYWxyZWFkeSBjYWxsZWQnKVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgZW5jb2RpbmcpXG5cbiAgICB0aGlzLl9zdGF0ZS5hYnNvcmIoZGF0YSlcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBTaGFrZS5wcm90b3R5cGUuc3F1ZWV6ZSA9IGZ1bmN0aW9uIChkYXRhQnl0ZUxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2ZpbmFsaXplZCkge1xuICAgICAgdGhpcy5fZmluYWxpemVkID0gdHJ1ZVxuICAgICAgdGhpcy5fc3RhdGUuYWJzb3JiTGFzdEZld0JpdHModGhpcy5fZGVsaW1pdGVkU3VmZml4KVxuICAgIH1cblxuICAgIGxldCBkYXRhID0gdGhpcy5fc3RhdGUuc3F1ZWV6ZShkYXRhQnl0ZUxlbmd0aClcbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkgZGF0YSA9IGRhdGEudG9TdHJpbmcoZW5jb2RpbmcpXG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgU2hha2UucHJvdG90eXBlLl9yZXNldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHkpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFNoYWtlLnByb3RvdHlwZS5fY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgU2hha2UodGhpcy5fcmF0ZSwgdGhpcy5fY2FwYWNpdHksIHRoaXMuX2RlbGltaXRlZFN1ZmZpeCwgdGhpcy5fb3B0aW9ucylcbiAgICB0aGlzLl9zdGF0ZS5jb3B5KGNsb25lLl9zdGF0ZSlcbiAgICBjbG9uZS5fZmluYWxpemVkID0gdGhpcy5fZmluYWxpemVkXG5cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIHJldHVybiBTaGFrZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5jb25zdCBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuY29uc3Qga2VjY2FrU3RhdGUgPSByZXF1aXJlKCcuL2tlY2Nhay1zdGF0ZS11bnJvbGwnKVxuXG5mdW5jdGlvbiBLZWNjYWsgKCkge1xuICAvLyBtdWNoIGZhc3RlciB0aGFuIGBuZXcgQXJyYXkoNTApYFxuICB0aGlzLnN0YXRlID0gW1xuICAgIDAsIDAsIDAsIDAsIDAsXG4gICAgMCwgMCwgMCwgMCwgMCxcbiAgICAwLCAwLCAwLCAwLCAwLFxuICAgIDAsIDAsIDAsIDAsIDAsXG4gICAgMCwgMCwgMCwgMCwgMFxuICBdXG5cbiAgdGhpcy5ibG9ja1NpemUgPSBudWxsXG4gIHRoaXMuY291bnQgPSAwXG4gIHRoaXMuc3F1ZWV6aW5nID0gZmFsc2Vcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKHJhdGUsIGNhcGFjaXR5KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkgdGhpcy5zdGF0ZVtpXSA9IDBcbiAgdGhpcy5ibG9ja1NpemUgPSByYXRlIC8gOFxuICB0aGlzLmNvdW50ID0gMFxuICB0aGlzLnNxdWVlemluZyA9IGZhbHNlXG59XG5cbktlY2Nhay5wcm90b3R5cGUuYWJzb3JiID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgdGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50IC8gNCldIF49IGRhdGFbaV0gPDwgKDggKiAodGhpcy5jb3VudCAlIDQpKVxuICAgIHRoaXMuY291bnQgKz0gMVxuICAgIGlmICh0aGlzLmNvdW50ID09PSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgICAga2VjY2FrU3RhdGUucDE2MDAodGhpcy5zdGF0ZSlcbiAgICAgIHRoaXMuY291bnQgPSAwXG4gICAgfVxuICB9XG59XG5cbktlY2Nhay5wcm90b3R5cGUuYWJzb3JiTGFzdEZld0JpdHMgPSBmdW5jdGlvbiAoYml0cykge1xuICB0aGlzLnN0YXRlW35+KHRoaXMuY291bnQgLyA0KV0gXj0gYml0cyA8PCAoOCAqICh0aGlzLmNvdW50ICUgNCkpXG4gIGlmICgoYml0cyAmIDB4ODApICE9PSAwICYmIHRoaXMuY291bnQgPT09ICh0aGlzLmJsb2NrU2l6ZSAtIDEpKSBrZWNjYWtTdGF0ZS5wMTYwMCh0aGlzLnN0YXRlKVxuICB0aGlzLnN0YXRlW35+KCh0aGlzLmJsb2NrU2l6ZSAtIDEpIC8gNCldIF49IDB4ODAgPDwgKDggKiAoKHRoaXMuYmxvY2tTaXplIC0gMSkgJSA0KSlcbiAga2VjY2FrU3RhdGUucDE2MDAodGhpcy5zdGF0ZSlcbiAgdGhpcy5jb3VudCA9IDBcbiAgdGhpcy5zcXVlZXppbmcgPSB0cnVlXG59XG5cbktlY2Nhay5wcm90b3R5cGUuc3F1ZWV6ZSA9IGZ1bmN0aW9uIChsZW5ndGgpIHtcbiAgaWYgKCF0aGlzLnNxdWVlemluZykgdGhpcy5hYnNvcmJMYXN0RmV3Qml0cygweDAxKVxuXG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBvdXRwdXRbaV0gPSAodGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50IC8gNCldID4+PiAoOCAqICh0aGlzLmNvdW50ICUgNCkpKSAmIDB4ZmZcbiAgICB0aGlzLmNvdW50ICs9IDFcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5ibG9ja1NpemUpIHtcbiAgICAgIGtlY2Nha1N0YXRlLnAxNjAwKHRoaXMuc3RhdGUpXG4gICAgICB0aGlzLmNvdW50ID0gMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuS2VjY2FrLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgKytpKSBkZXN0LnN0YXRlW2ldID0gdGhpcy5zdGF0ZVtpXVxuICBkZXN0LmJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplXG4gIGRlc3QuY291bnQgPSB0aGlzLmNvdW50XG4gIGRlc3Quc3F1ZWV6aW5nID0gdGhpcy5zcXVlZXppbmdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBLZWNjYWtcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgUDE2MDBfUk9VTkRfQ09OU1RBTlRTID0gWzEsIDAsIDMyODk4LCAwLCAzMjkwNiwgMjE0NzQ4MzY0OCwgMjE0NzUxNjQxNiwgMjE0NzQ4MzY0OCwgMzI5MDcsIDAsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY1NDUsIDIxNDc0ODM2NDgsIDMyNzc3LCAyMTQ3NDgzNjQ4LCAxMzgsIDAsIDEzNiwgMCwgMjE0NzUxNjQyNSwgMCwgMjE0NzQ4MzY1OCwgMCwgMjE0NzUxNjU1NSwgMCwgMTM5LCAyMTQ3NDgzNjQ4LCAzMjkwNSwgMjE0NzQ4MzY0OCwgMzI3NzEsIDIxNDc0ODM2NDgsIDMyNzcwLCAyMTQ3NDgzNjQ4LCAxMjgsIDIxNDc0ODM2NDgsIDMyNzc4LCAwLCAyMTQ3NDgzNjU4LCAyMTQ3NDgzNjQ4LCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjg5NiwgMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0OSwgMCwgMjE0NzUxNjQyNCwgMjE0NzQ4MzY0OF1cblxuZXhwb3J0cy5wMTYwMCA9IGZ1bmN0aW9uIChzKSB7XG4gIGZvciAobGV0IHJvdW5kID0gMDsgcm91bmQgPCAyNDsgKytyb3VuZCkge1xuICAgIC8vIHRoZXRhXG4gICAgY29uc3QgbG8wID0gc1swXSBeIHNbMTBdIF4gc1syMF0gXiBzWzMwXSBeIHNbNDBdXG4gICAgY29uc3QgaGkwID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdXG4gICAgY29uc3QgbG8xID0gc1syXSBeIHNbMTJdIF4gc1syMl0gXiBzWzMyXSBeIHNbNDJdXG4gICAgY29uc3QgaGkxID0gc1szXSBeIHNbMTNdIF4gc1syM10gXiBzWzMzXSBeIHNbNDNdXG4gICAgY29uc3QgbG8yID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdXG4gICAgY29uc3QgaGkyID0gc1s1XSBeIHNbMTVdIF4gc1syNV0gXiBzWzM1XSBeIHNbNDVdXG4gICAgY29uc3QgbG8zID0gc1s2XSBeIHNbMTZdIF4gc1syNl0gXiBzWzM2XSBeIHNbNDZdXG4gICAgY29uc3QgaGkzID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddXG4gICAgY29uc3QgbG80ID0gc1s4XSBeIHNbMThdIF4gc1syOF0gXiBzWzM4XSBeIHNbNDhdXG4gICAgY29uc3QgaGk0ID0gc1s5XSBeIHNbMTldIF4gc1syOV0gXiBzWzM5XSBeIHNbNDldXG5cbiAgICBsZXQgbG8gPSBsbzQgXiAobG8xIDw8IDEgfCBoaTEgPj4+IDMxKVxuICAgIGxldCBoaSA9IGhpNCBeIChoaTEgPDwgMSB8IGxvMSA+Pj4gMzEpXG4gICAgY29uc3QgdDFzbG8wID0gc1swXSBeIGxvXG4gICAgY29uc3QgdDFzaGkwID0gc1sxXSBeIGhpXG4gICAgY29uc3QgdDFzbG81ID0gc1sxMF0gXiBsb1xuICAgIGNvbnN0IHQxc2hpNSA9IHNbMTFdIF4gaGlcbiAgICBjb25zdCB0MXNsbzEwID0gc1syMF0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMTAgPSBzWzIxXSBeIGhpXG4gICAgY29uc3QgdDFzbG8xNSA9IHNbMzBdIF4gbG9cbiAgICBjb25zdCB0MXNoaTE1ID0gc1szMV0gXiBoaVxuICAgIGNvbnN0IHQxc2xvMjAgPSBzWzQwXSBeIGxvXG4gICAgY29uc3QgdDFzaGkyMCA9IHNbNDFdIF4gaGlcbiAgICBsbyA9IGxvMCBeIChsbzIgPDwgMSB8IGhpMiA+Pj4gMzEpXG4gICAgaGkgPSBoaTAgXiAoaGkyIDw8IDEgfCBsbzIgPj4+IDMxKVxuICAgIGNvbnN0IHQxc2xvMSA9IHNbMl0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMSA9IHNbM10gXiBoaVxuICAgIGNvbnN0IHQxc2xvNiA9IHNbMTJdIF4gbG9cbiAgICBjb25zdCB0MXNoaTYgPSBzWzEzXSBeIGhpXG4gICAgY29uc3QgdDFzbG8xMSA9IHNbMjJdIF4gbG9cbiAgICBjb25zdCB0MXNoaTExID0gc1syM10gXiBoaVxuICAgIGNvbnN0IHQxc2xvMTYgPSBzWzMyXSBeIGxvXG4gICAgY29uc3QgdDFzaGkxNiA9IHNbMzNdIF4gaGlcbiAgICBjb25zdCB0MXNsbzIxID0gc1s0Ml0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMjEgPSBzWzQzXSBeIGhpXG4gICAgbG8gPSBsbzEgXiAobG8zIDw8IDEgfCBoaTMgPj4+IDMxKVxuICAgIGhpID0gaGkxIF4gKGhpMyA8PCAxIHwgbG8zID4+PiAzMSlcbiAgICBjb25zdCB0MXNsbzIgPSBzWzRdIF4gbG9cbiAgICBjb25zdCB0MXNoaTIgPSBzWzVdIF4gaGlcbiAgICBjb25zdCB0MXNsbzcgPSBzWzE0XSBeIGxvXG4gICAgY29uc3QgdDFzaGk3ID0gc1sxNV0gXiBoaVxuICAgIGNvbnN0IHQxc2xvMTIgPSBzWzI0XSBeIGxvXG4gICAgY29uc3QgdDFzaGkxMiA9IHNbMjVdIF4gaGlcbiAgICBjb25zdCB0MXNsbzE3ID0gc1szNF0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMTcgPSBzWzM1XSBeIGhpXG4gICAgY29uc3QgdDFzbG8yMiA9IHNbNDRdIF4gbG9cbiAgICBjb25zdCB0MXNoaTIyID0gc1s0NV0gXiBoaVxuICAgIGxvID0gbG8yIF4gKGxvNCA8PCAxIHwgaGk0ID4+PiAzMSlcbiAgICBoaSA9IGhpMiBeIChoaTQgPDwgMSB8IGxvNCA+Pj4gMzEpXG4gICAgY29uc3QgdDFzbG8zID0gc1s2XSBeIGxvXG4gICAgY29uc3QgdDFzaGkzID0gc1s3XSBeIGhpXG4gICAgY29uc3QgdDFzbG84ID0gc1sxNl0gXiBsb1xuICAgIGNvbnN0IHQxc2hpOCA9IHNbMTddIF4gaGlcbiAgICBjb25zdCB0MXNsbzEzID0gc1syNl0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMTMgPSBzWzI3XSBeIGhpXG4gICAgY29uc3QgdDFzbG8xOCA9IHNbMzZdIF4gbG9cbiAgICBjb25zdCB0MXNoaTE4ID0gc1szN10gXiBoaVxuICAgIGNvbnN0IHQxc2xvMjMgPSBzWzQ2XSBeIGxvXG4gICAgY29uc3QgdDFzaGkyMyA9IHNbNDddIF4gaGlcbiAgICBsbyA9IGxvMyBeIChsbzAgPDwgMSB8IGhpMCA+Pj4gMzEpXG4gICAgaGkgPSBoaTMgXiAoaGkwIDw8IDEgfCBsbzAgPj4+IDMxKVxuICAgIGNvbnN0IHQxc2xvNCA9IHNbOF0gXiBsb1xuICAgIGNvbnN0IHQxc2hpNCA9IHNbOV0gXiBoaVxuICAgIGNvbnN0IHQxc2xvOSA9IHNbMThdIF4gbG9cbiAgICBjb25zdCB0MXNoaTkgPSBzWzE5XSBeIGhpXG4gICAgY29uc3QgdDFzbG8xNCA9IHNbMjhdIF4gbG9cbiAgICBjb25zdCB0MXNoaTE0ID0gc1syOV0gXiBoaVxuICAgIGNvbnN0IHQxc2xvMTkgPSBzWzM4XSBeIGxvXG4gICAgY29uc3QgdDFzaGkxOSA9IHNbMzldIF4gaGlcbiAgICBjb25zdCB0MXNsbzI0ID0gc1s0OF0gXiBsb1xuICAgIGNvbnN0IHQxc2hpMjQgPSBzWzQ5XSBeIGhpXG5cbiAgICAvLyByaG8gJiBwaVxuICAgIGNvbnN0IHQyc2xvMCA9IHQxc2xvMFxuICAgIGNvbnN0IHQyc2hpMCA9IHQxc2hpMFxuICAgIGNvbnN0IHQyc2xvMTYgPSAodDFzaGk1IDw8IDQgfCB0MXNsbzUgPj4+IDI4KVxuICAgIGNvbnN0IHQyc2hpMTYgPSAodDFzbG81IDw8IDQgfCB0MXNoaTUgPj4+IDI4KVxuICAgIGNvbnN0IHQyc2xvNyA9ICh0MXNsbzEwIDw8IDMgfCB0MXNoaTEwID4+PiAyOSlcbiAgICBjb25zdCB0MnNoaTcgPSAodDFzaGkxMCA8PCAzIHwgdDFzbG8xMCA+Pj4gMjkpXG4gICAgY29uc3QgdDJzbG8yMyA9ICh0MXNoaTE1IDw8IDkgfCB0MXNsbzE1ID4+PiAyMylcbiAgICBjb25zdCB0MnNoaTIzID0gKHQxc2xvMTUgPDwgOSB8IHQxc2hpMTUgPj4+IDIzKVxuICAgIGNvbnN0IHQyc2xvMTQgPSAodDFzbG8yMCA8PCAxOCB8IHQxc2hpMjAgPj4+IDE0KVxuICAgIGNvbnN0IHQyc2hpMTQgPSAodDFzaGkyMCA8PCAxOCB8IHQxc2xvMjAgPj4+IDE0KVxuICAgIGNvbnN0IHQyc2xvMTAgPSAodDFzbG8xIDw8IDEgfCB0MXNoaTEgPj4+IDMxKVxuICAgIGNvbnN0IHQyc2hpMTAgPSAodDFzaGkxIDw8IDEgfCB0MXNsbzEgPj4+IDMxKVxuICAgIGNvbnN0IHQyc2xvMSA9ICh0MXNoaTYgPDwgMTIgfCB0MXNsbzYgPj4+IDIwKVxuICAgIGNvbnN0IHQyc2hpMSA9ICh0MXNsbzYgPDwgMTIgfCB0MXNoaTYgPj4+IDIwKVxuICAgIGNvbnN0IHQyc2xvMTcgPSAodDFzbG8xMSA8PCAxMCB8IHQxc2hpMTEgPj4+IDIyKVxuICAgIGNvbnN0IHQyc2hpMTcgPSAodDFzaGkxMSA8PCAxMCB8IHQxc2xvMTEgPj4+IDIyKVxuICAgIGNvbnN0IHQyc2xvOCA9ICh0MXNoaTE2IDw8IDEzIHwgdDFzbG8xNiA+Pj4gMTkpXG4gICAgY29uc3QgdDJzaGk4ID0gKHQxc2xvMTYgPDwgMTMgfCB0MXNoaTE2ID4+PiAxOSlcbiAgICBjb25zdCB0MnNsbzI0ID0gKHQxc2xvMjEgPDwgMiB8IHQxc2hpMjEgPj4+IDMwKVxuICAgIGNvbnN0IHQyc2hpMjQgPSAodDFzaGkyMSA8PCAyIHwgdDFzbG8yMSA+Pj4gMzApXG4gICAgY29uc3QgdDJzbG8yMCA9ICh0MXNoaTIgPDwgMzAgfCB0MXNsbzIgPj4+IDIpXG4gICAgY29uc3QgdDJzaGkyMCA9ICh0MXNsbzIgPDwgMzAgfCB0MXNoaTIgPj4+IDIpXG4gICAgY29uc3QgdDJzbG8xMSA9ICh0MXNsbzcgPDwgNiB8IHQxc2hpNyA+Pj4gMjYpXG4gICAgY29uc3QgdDJzaGkxMSA9ICh0MXNoaTcgPDwgNiB8IHQxc2xvNyA+Pj4gMjYpXG4gICAgY29uc3QgdDJzbG8yID0gKHQxc2hpMTIgPDwgMTEgfCB0MXNsbzEyID4+PiAyMSlcbiAgICBjb25zdCB0MnNoaTIgPSAodDFzbG8xMiA8PCAxMSB8IHQxc2hpMTIgPj4+IDIxKVxuICAgIGNvbnN0IHQyc2xvMTggPSAodDFzbG8xNyA8PCAxNSB8IHQxc2hpMTcgPj4+IDE3KVxuICAgIGNvbnN0IHQyc2hpMTggPSAodDFzaGkxNyA8PCAxNSB8IHQxc2xvMTcgPj4+IDE3KVxuICAgIGNvbnN0IHQyc2xvOSA9ICh0MXNoaTIyIDw8IDI5IHwgdDFzbG8yMiA+Pj4gMylcbiAgICBjb25zdCB0MnNoaTkgPSAodDFzbG8yMiA8PCAyOSB8IHQxc2hpMjIgPj4+IDMpXG4gICAgY29uc3QgdDJzbG81ID0gKHQxc2xvMyA8PCAyOCB8IHQxc2hpMyA+Pj4gNClcbiAgICBjb25zdCB0MnNoaTUgPSAodDFzaGkzIDw8IDI4IHwgdDFzbG8zID4+PiA0KVxuICAgIGNvbnN0IHQyc2xvMjEgPSAodDFzaGk4IDw8IDIzIHwgdDFzbG84ID4+PiA5KVxuICAgIGNvbnN0IHQyc2hpMjEgPSAodDFzbG84IDw8IDIzIHwgdDFzaGk4ID4+PiA5KVxuICAgIGNvbnN0IHQyc2xvMTIgPSAodDFzbG8xMyA8PCAyNSB8IHQxc2hpMTMgPj4+IDcpXG4gICAgY29uc3QgdDJzaGkxMiA9ICh0MXNoaTEzIDw8IDI1IHwgdDFzbG8xMyA+Pj4gNylcbiAgICBjb25zdCB0MnNsbzMgPSAodDFzbG8xOCA8PCAyMSB8IHQxc2hpMTggPj4+IDExKVxuICAgIGNvbnN0IHQyc2hpMyA9ICh0MXNoaTE4IDw8IDIxIHwgdDFzbG8xOCA+Pj4gMTEpXG4gICAgY29uc3QgdDJzbG8xOSA9ICh0MXNoaTIzIDw8IDI0IHwgdDFzbG8yMyA+Pj4gOClcbiAgICBjb25zdCB0MnNoaTE5ID0gKHQxc2xvMjMgPDwgMjQgfCB0MXNoaTIzID4+PiA4KVxuICAgIGNvbnN0IHQyc2xvMTUgPSAodDFzbG80IDw8IDI3IHwgdDFzaGk0ID4+PiA1KVxuICAgIGNvbnN0IHQyc2hpMTUgPSAodDFzaGk0IDw8IDI3IHwgdDFzbG80ID4+PiA1KVxuICAgIGNvbnN0IHQyc2xvNiA9ICh0MXNsbzkgPDwgMjAgfCB0MXNoaTkgPj4+IDEyKVxuICAgIGNvbnN0IHQyc2hpNiA9ICh0MXNoaTkgPDwgMjAgfCB0MXNsbzkgPj4+IDEyKVxuICAgIGNvbnN0IHQyc2xvMjIgPSAodDFzaGkxNCA8PCA3IHwgdDFzbG8xNCA+Pj4gMjUpXG4gICAgY29uc3QgdDJzaGkyMiA9ICh0MXNsbzE0IDw8IDcgfCB0MXNoaTE0ID4+PiAyNSlcbiAgICBjb25zdCB0MnNsbzEzID0gKHQxc2xvMTkgPDwgOCB8IHQxc2hpMTkgPj4+IDI0KVxuICAgIGNvbnN0IHQyc2hpMTMgPSAodDFzaGkxOSA8PCA4IHwgdDFzbG8xOSA+Pj4gMjQpXG4gICAgY29uc3QgdDJzbG80ID0gKHQxc2xvMjQgPDwgMTQgfCB0MXNoaTI0ID4+PiAxOClcbiAgICBjb25zdCB0MnNoaTQgPSAodDFzaGkyNCA8PCAxNCB8IHQxc2xvMjQgPj4+IDE4KVxuXG4gICAgLy8gY2hpXG4gICAgc1swXSA9IHQyc2xvMCBeICh+dDJzbG8xICYgdDJzbG8yKVxuICAgIHNbMV0gPSB0MnNoaTAgXiAofnQyc2hpMSAmIHQyc2hpMilcbiAgICBzWzEwXSA9IHQyc2xvNSBeICh+dDJzbG82ICYgdDJzbG83KVxuICAgIHNbMTFdID0gdDJzaGk1IF4gKH50MnNoaTYgJiB0MnNoaTcpXG4gICAgc1syMF0gPSB0MnNsbzEwIF4gKH50MnNsbzExICYgdDJzbG8xMilcbiAgICBzWzIxXSA9IHQyc2hpMTAgXiAofnQyc2hpMTEgJiB0MnNoaTEyKVxuICAgIHNbMzBdID0gdDJzbG8xNSBeICh+dDJzbG8xNiAmIHQyc2xvMTcpXG4gICAgc1szMV0gPSB0MnNoaTE1IF4gKH50MnNoaTE2ICYgdDJzaGkxNylcbiAgICBzWzQwXSA9IHQyc2xvMjAgXiAofnQyc2xvMjEgJiB0MnNsbzIyKVxuICAgIHNbNDFdID0gdDJzaGkyMCBeICh+dDJzaGkyMSAmIHQyc2hpMjIpXG4gICAgc1syXSA9IHQyc2xvMSBeICh+dDJzbG8yICYgdDJzbG8zKVxuICAgIHNbM10gPSB0MnNoaTEgXiAofnQyc2hpMiAmIHQyc2hpMylcbiAgICBzWzEyXSA9IHQyc2xvNiBeICh+dDJzbG83ICYgdDJzbG84KVxuICAgIHNbMTNdID0gdDJzaGk2IF4gKH50MnNoaTcgJiB0MnNoaTgpXG4gICAgc1syMl0gPSB0MnNsbzExIF4gKH50MnNsbzEyICYgdDJzbG8xMylcbiAgICBzWzIzXSA9IHQyc2hpMTEgXiAofnQyc2hpMTIgJiB0MnNoaTEzKVxuICAgIHNbMzJdID0gdDJzbG8xNiBeICh+dDJzbG8xNyAmIHQyc2xvMTgpXG4gICAgc1szM10gPSB0MnNoaTE2IF4gKH50MnNoaTE3ICYgdDJzaGkxOClcbiAgICBzWzQyXSA9IHQyc2xvMjEgXiAofnQyc2xvMjIgJiB0MnNsbzIzKVxuICAgIHNbNDNdID0gdDJzaGkyMSBeICh+dDJzaGkyMiAmIHQyc2hpMjMpXG4gICAgc1s0XSA9IHQyc2xvMiBeICh+dDJzbG8zICYgdDJzbG80KVxuICAgIHNbNV0gPSB0MnNoaTIgXiAofnQyc2hpMyAmIHQyc2hpNClcbiAgICBzWzE0XSA9IHQyc2xvNyBeICh+dDJzbG84ICYgdDJzbG85KVxuICAgIHNbMTVdID0gdDJzaGk3IF4gKH50MnNoaTggJiB0MnNoaTkpXG4gICAgc1syNF0gPSB0MnNsbzEyIF4gKH50MnNsbzEzICYgdDJzbG8xNClcbiAgICBzWzI1XSA9IHQyc2hpMTIgXiAofnQyc2hpMTMgJiB0MnNoaTE0KVxuICAgIHNbMzRdID0gdDJzbG8xNyBeICh+dDJzbG8xOCAmIHQyc2xvMTkpXG4gICAgc1szNV0gPSB0MnNoaTE3IF4gKH50MnNoaTE4ICYgdDJzaGkxOSlcbiAgICBzWzQ0XSA9IHQyc2xvMjIgXiAofnQyc2xvMjMgJiB0MnNsbzI0KVxuICAgIHNbNDVdID0gdDJzaGkyMiBeICh+dDJzaGkyMyAmIHQyc2hpMjQpXG4gICAgc1s2XSA9IHQyc2xvMyBeICh+dDJzbG80ICYgdDJzbG8wKVxuICAgIHNbN10gPSB0MnNoaTMgXiAofnQyc2hpNCAmIHQyc2hpMClcbiAgICBzWzE2XSA9IHQyc2xvOCBeICh+dDJzbG85ICYgdDJzbG81KVxuICAgIHNbMTddID0gdDJzaGk4IF4gKH50MnNoaTkgJiB0MnNoaTUpXG4gICAgc1syNl0gPSB0MnNsbzEzIF4gKH50MnNsbzE0ICYgdDJzbG8xMClcbiAgICBzWzI3XSA9IHQyc2hpMTMgXiAofnQyc2hpMTQgJiB0MnNoaTEwKVxuICAgIHNbMzZdID0gdDJzbG8xOCBeICh+dDJzbG8xOSAmIHQyc2xvMTUpXG4gICAgc1szN10gPSB0MnNoaTE4IF4gKH50MnNoaTE5ICYgdDJzaGkxNSlcbiAgICBzWzQ2XSA9IHQyc2xvMjMgXiAofnQyc2xvMjQgJiB0MnNsbzIwKVxuICAgIHNbNDddID0gdDJzaGkyMyBeICh+dDJzaGkyNCAmIHQyc2hpMjApXG4gICAgc1s4XSA9IHQyc2xvNCBeICh+dDJzbG8wICYgdDJzbG8xKVxuICAgIHNbOV0gPSB0MnNoaTQgXiAofnQyc2hpMCAmIHQyc2hpMSlcbiAgICBzWzE4XSA9IHQyc2xvOSBeICh+dDJzbG81ICYgdDJzbG82KVxuICAgIHNbMTldID0gdDJzaGk5IF4gKH50MnNoaTUgJiB0MnNoaTYpXG4gICAgc1syOF0gPSB0MnNsbzE0IF4gKH50MnNsbzEwICYgdDJzbG8xMSlcbiAgICBzWzI5XSA9IHQyc2hpMTQgXiAofnQyc2hpMTAgJiB0MnNoaTExKVxuICAgIHNbMzhdID0gdDJzbG8xOSBeICh+dDJzbG8xNSAmIHQyc2xvMTYpXG4gICAgc1szOV0gPSB0MnNoaTE5IF4gKH50MnNoaTE1ICYgdDJzaGkxNilcbiAgICBzWzQ4XSA9IHQyc2xvMjQgXiAofnQyc2xvMjAgJiB0MnNsbzIxKVxuICAgIHNbNDldID0gdDJzaGkyNCBeICh+dDJzaGkyMCAmIHQyc2hpMjEpXG5cbiAgICAvLyBpb3RhXG4gICAgc1swXSBePSBQMTYwMF9ST1VORF9DT05TVEFOVFNbcm91bmQgKiAyXVxuICAgIHNbMV0gXj0gUDE2MDBfUk9VTkRfQ09OU1RBTlRTW3JvdW5kICogMiArIDFdXG4gIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlY3AyNTZrMSA9IHJlcXVpcmUoJ3NlY3AyNTZrMScpO1xudmFyIEJOID0gcmVxdWlyZShcImJuLmpzXCIpO1xudmFyIGJ5dGVzXzEgPSByZXF1aXJlKFwiLi9ieXRlc1wiKTtcbnZhciBoYXNoXzEgPSByZXF1aXJlKFwiLi9oYXNoXCIpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBFQ0RTQSBzaWduYXR1cmUgb2YgYSBtZXNzYWdlIGhhc2guXG4gKi9cbmV4cG9ydHMuZWNzaWduID0gZnVuY3Rpb24gKG1zZ0hhc2gsIHByaXZhdGVLZXksIGNoYWluSWQpIHtcbiAgICB2YXIgc2lnID0gc2VjcDI1NmsxLnNpZ24obXNnSGFzaCwgcHJpdmF0ZUtleSk7XG4gICAgdmFyIHJlY292ZXJ5ID0gc2lnLnJlY292ZXJ5O1xuICAgIHZhciByZXQgPSB7XG4gICAgICAgIHI6IHNpZy5zaWduYXR1cmUuc2xpY2UoMCwgMzIpLFxuICAgICAgICBzOiBzaWcuc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCksXG4gICAgICAgIHY6IGNoYWluSWQgPyByZWNvdmVyeSArIChjaGFpbklkICogMiArIDM1KSA6IHJlY292ZXJ5ICsgMjcsXG4gICAgfTtcbiAgICByZXR1cm4gcmV0O1xufTtcbi8qKlxuICogRUNEU0EgcHVibGljIGtleSByZWNvdmVyeSBmcm9tIHNpZ25hdHVyZS5cbiAqIEByZXR1cm5zIFJlY292ZXJlZCBwdWJsaWMga2V5XG4gKi9cbmV4cG9ydHMuZWNyZWNvdmVyID0gZnVuY3Rpb24gKG1zZ0hhc2gsIHYsIHIsIHMsIGNoYWluSWQpIHtcbiAgICB2YXIgc2lnbmF0dXJlID0gQnVmZmVyLmNvbmNhdChbYnl0ZXNfMS5zZXRMZW5ndGgociwgMzIpLCBieXRlc18xLnNldExlbmd0aChzLCAzMildLCA2NCk7XG4gICAgdmFyIHJlY292ZXJ5ID0gY2FsY3VsYXRlU2lnUmVjb3ZlcnkodiwgY2hhaW5JZCk7XG4gICAgaWYgKCFpc1ZhbGlkU2lnUmVjb3ZlcnkocmVjb3ZlcnkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgdiB2YWx1ZScpO1xuICAgIH1cbiAgICB2YXIgc2VuZGVyUHViS2V5ID0gc2VjcDI1NmsxLnJlY292ZXIobXNnSGFzaCwgc2lnbmF0dXJlLCByZWNvdmVyeSk7XG4gICAgcmV0dXJuIHNlY3AyNTZrMS5wdWJsaWNLZXlDb252ZXJ0KHNlbmRlclB1YktleSwgZmFsc2UpLnNsaWNlKDEpO1xufTtcbi8qKlxuICogQ29udmVydCBzaWduYXR1cmUgcGFyYW1ldGVycyBpbnRvIHRoZSBmb3JtYXQgb2YgYGV0aF9zaWduYCBSUEMgbWV0aG9kLlxuICogQHJldHVybnMgU2lnbmF0dXJlXG4gKi9cbmV4cG9ydHMudG9ScGNTaWcgPSBmdW5jdGlvbiAodiwgciwgcywgY2hhaW5JZCkge1xuICAgIHZhciByZWNvdmVyeSA9IGNhbGN1bGF0ZVNpZ1JlY292ZXJ5KHYsIGNoYWluSWQpO1xuICAgIGlmICghaXNWYWxpZFNpZ1JlY292ZXJ5KHJlY292ZXJ5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIHYgdmFsdWUnKTtcbiAgICB9XG4gICAgLy8gZ2V0aCAoYW5kIHRoZSBSUEMgZXRoX3NpZ24gbWV0aG9kKSB1c2VzIHRoZSA2NSBieXRlIGZvcm1hdCB1c2VkIGJ5IEJpdGNvaW5cbiAgICByZXR1cm4gYnl0ZXNfMS5idWZmZXJUb0hleChCdWZmZXIuY29uY2F0KFtieXRlc18xLnNldExlbmd0aExlZnQociwgMzIpLCBieXRlc18xLnNldExlbmd0aExlZnQocywgMzIpLCBieXRlc18xLnRvQnVmZmVyKHYpXSkpO1xufTtcbi8qKlxuICogQ29udmVydCBzaWduYXR1cmUgZm9ybWF0IG9mIHRoZSBgZXRoX3NpZ25gIFJQQyBtZXRob2QgdG8gc2lnbmF0dXJlIHBhcmFtZXRlcnNcbiAqIE5PVEU6IGFsbCBiZWNhdXNlIG9mIGEgYnVnIGluIGdldGg6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9nby1ldGhlcmV1bS9pc3N1ZXMvMjA1M1xuICovXG5leHBvcnRzLmZyb21ScGNTaWcgPSBmdW5jdGlvbiAoc2lnKSB7XG4gICAgdmFyIGJ1ZiA9IGJ5dGVzXzEudG9CdWZmZXIoc2lnKTtcbiAgICAvLyBOT1RFOiB3aXRoIHBvdGVudGlhbCBpbnRyb2R1Y3Rpb24gb2YgY2hhaW5JZCB0aGlzIG1pZ2h0IG5lZWQgdG8gYmUgdXBkYXRlZFxuICAgIGlmIChidWYubGVuZ3RoICE9PSA2NSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGxlbmd0aCcpO1xuICAgIH1cbiAgICB2YXIgdiA9IGJ1Zls2NF07XG4gICAgLy8gc3VwcG9ydCBib3RoIHZlcnNpb25zIG9mIGBldGhfc2lnbmAgcmVzcG9uc2VzXG4gICAgaWYgKHYgPCAyNykge1xuICAgICAgICB2ICs9IDI3O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB2OiB2LFxuICAgICAgICByOiBidWYuc2xpY2UoMCwgMzIpLFxuICAgICAgICBzOiBidWYuc2xpY2UoMzIsIDY0KSxcbiAgICB9O1xufTtcbi8qKlxuICogVmFsaWRhdGUgYSBFQ0RTQSBzaWduYXR1cmUuXG4gKiBAcGFyYW0gaG9tZXN0ZWFkT3JMYXRlciBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGJlaW5nIHVzZWQgb24gZWl0aGVyIHRoZSBob21lc3RlYWQgaGFyZGZvcmsgb3IgYSBsYXRlciBvbmVcbiAqL1xuZXhwb3J0cy5pc1ZhbGlkU2lnbmF0dXJlID0gZnVuY3Rpb24gKHYsIHIsIHMsIGhvbWVzdGVhZE9yTGF0ZXIsIGNoYWluSWQpIHtcbiAgICBpZiAoaG9tZXN0ZWFkT3JMYXRlciA9PT0gdm9pZCAwKSB7IGhvbWVzdGVhZE9yTGF0ZXIgPSB0cnVlOyB9XG4gICAgdmFyIFNFQ1AyNTZLMV9OX0RJVl8yID0gbmV3IEJOKCc3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVkNTc2ZTczNTdhNDUwMWRkZmU5MmY0NjY4MWIyMGEwJywgMTYpO1xuICAgIHZhciBTRUNQMjU2SzFfTiA9IG5ldyBCTignZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViYWFlZGNlNmFmNDhhMDNiYmZkMjVlOGNkMDM2NDE0MScsIDE2KTtcbiAgICBpZiAoci5sZW5ndGggIT09IDMyIHx8IHMubGVuZ3RoICE9PSAzMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFNpZ1JlY292ZXJ5KGNhbGN1bGF0ZVNpZ1JlY292ZXJ5KHYsIGNoYWluSWQpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciByQk4gPSBuZXcgQk4ocik7XG4gICAgdmFyIHNCTiA9IG5ldyBCTihzKTtcbiAgICBpZiAockJOLmlzWmVybygpIHx8IHJCTi5ndChTRUNQMjU2SzFfTikgfHwgc0JOLmlzWmVybygpIHx8IHNCTi5ndChTRUNQMjU2SzFfTikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaG9tZXN0ZWFkT3JMYXRlciAmJiBzQk4uY21wKFNFQ1AyNTZLMV9OX0RJVl8yKSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUga2VjY2FrLTI1NiBoYXNoIG9mIGBtZXNzYWdlYCwgcHJlZml4ZWQgd2l0aCB0aGUgaGVhZGVyIHVzZWQgYnkgdGhlIGBldGhfc2lnbmAgUlBDIGNhbGwuXG4gKiBUaGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGZlZCBpbnRvIGBlY3NpZ25gIHRvIHByb2R1Y2UgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBgZXRoX3NpZ25gXG4gKiBjYWxsIGZvciBhIGdpdmVuIGBtZXNzYWdlYCwgb3IgZmVkIHRvIGBlY3JlY292ZXJgIGFsb25nIHdpdGggYSBzaWduYXR1cmUgdG8gcmVjb3ZlciB0aGUgcHVibGljIGtleVxuICogdXNlZCB0byBwcm9kdWNlIHRoZSBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydHMuaGFzaFBlcnNvbmFsTWVzc2FnZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgdmFyIHByZWZpeCA9IEJ1ZmZlci5mcm9tKFwiXFx1MDAxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOlxcblwiICsgbWVzc2FnZS5sZW5ndGgudG9TdHJpbmcoKSwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIGhhc2hfMS5rZWNjYWsoQnVmZmVyLmNvbmNhdChbcHJlZml4LCBtZXNzYWdlXSkpO1xufTtcbmZ1bmN0aW9uIGNhbGN1bGF0ZVNpZ1JlY292ZXJ5KHYsIGNoYWluSWQpIHtcbiAgICByZXR1cm4gY2hhaW5JZCA/IHYgLSAoMiAqIGNoYWluSWQgKyAzNSkgOiB2IC0gMjc7XG59XG5mdW5jdGlvbiBpc1ZhbGlkU2lnUmVjb3ZlcnkocmVjb3ZlcnkpIHtcbiAgICByZXR1cm4gcmVjb3ZlcnkgPT09IDAgfHwgcmVjb3ZlcnkgPT09IDE7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYXR1cmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgZXRoanNVdGlsID0gcmVxdWlyZSgnZXRoanMtdXRpbCcpO1xudmFyIHJscCA9IHJlcXVpcmUoXCJybHBcIik7XG52YXIgYnl0ZXNfMSA9IHJlcXVpcmUoXCIuL2J5dGVzXCIpO1xuLyoqXG4gKiBEZWZpbmVzIHByb3BlcnRpZXMgb24gYSBgT2JqZWN0YC4gSXQgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHVuZGVybHlpbmcgZGF0YSBpcyBiaW5hcnkuXG4gKiBAcGFyYW0gc2VsZiB0aGUgYE9iamVjdGAgdG8gZGVmaW5lIHByb3BlcnRpZXMgb25cbiAqIEBwYXJhbSBmaWVsZHMgYW4gYXJyYXkgZmllbGRzIHRvIGRlZmluZS4gRmllbGRzIGNhbiBjb250YWluOlxuICogKiBgbmFtZWAgLSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydGllc1xuICogKiBgbGVuZ3RoYCAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGZpZWxkIGNhbiBoYXZlXG4gKiAqIGBhbGxvd0xlc3NgIC0gaWYgdGhlIGZpZWxkIGNhbiBiZSBsZXNzIHRoYW4gdGhlIGxlbmd0aFxuICogKiBgYWxsb3dFbXB0eWBcbiAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gYmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGRlZmluaXRpb25zXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnRzLmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoc2VsZiwgZmllbGRzLCBkYXRhKSB7XG4gICAgc2VsZi5yYXcgPSBbXTtcbiAgICBzZWxmLl9maWVsZHMgPSBbXTtcbiAgICAvLyBhdHRhY2ggdGhlIGB0b0pTT05gXG4gICAgc2VsZi50b0pTT04gPSBmdW5jdGlvbiAobGFiZWwpIHtcbiAgICAgICAgaWYgKGxhYmVsID09PSB2b2lkIDApIHsgbGFiZWwgPSBmYWxzZTsgfVxuICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgIHZhciBvYmpfMSA9IHt9O1xuICAgICAgICAgICAgc2VsZi5fZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgb2JqXzFbZmllbGRdID0gXCIweFwiICsgc2VsZltmaWVsZF0udG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb2JqXzE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ5dGVzXzEuYmFUb0pTT04oc2VsZi5yYXcpO1xuICAgIH07XG4gICAgc2VsZi5zZXJpYWxpemUgPSBmdW5jdGlvbiBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBybHAuZW5jb2RlKHNlbGYucmF3KTtcbiAgICB9O1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCwgaSkge1xuICAgICAgICBzZWxmLl9maWVsZHMucHVzaChmaWVsZC5uYW1lKTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYucmF3W2ldO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHRlcih2KSB7XG4gICAgICAgICAgICB2ID0gYnl0ZXNfMS50b0J1ZmZlcih2KTtcbiAgICAgICAgICAgIGlmICh2LnRvU3RyaW5nKCdoZXgnKSA9PT0gJzAwJyAmJiAhZmllbGQuYWxsb3daZXJvKSB7XG4gICAgICAgICAgICAgICAgdiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC5hbGxvd0xlc3MgJiYgZmllbGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdiA9IGJ5dGVzXzEuc3RyaXBaZXJvcyh2KTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmllbGQubGVuZ3RoID49IHYubGVuZ3RoLCBcIlRoZSBmaWVsZCBcIiArIGZpZWxkLm5hbWUgKyBcIiBtdXN0IG5vdCBoYXZlIG1vcmUgXCIgKyBmaWVsZC5sZW5ndGggKyBcIiBieXRlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCEoZmllbGQuYWxsb3daZXJvICYmIHYubGVuZ3RoID09PSAwKSAmJiBmaWVsZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmllbGQubGVuZ3RoID09PSB2Lmxlbmd0aCwgXCJUaGUgZmllbGQgXCIgKyBmaWVsZC5uYW1lICsgXCIgbXVzdCBoYXZlIGJ5dGUgbGVuZ3RoIG9mIFwiICsgZmllbGQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmF3W2ldID0gdjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQubmFtZSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgICAgICAgc2V0OiBzZXR0ZXIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZmllbGQuZGVmYXVsdCkge1xuICAgICAgICAgICAgc2VsZltmaWVsZC5uYW1lXSA9IGZpZWxkLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXR0YWNoIGFsaWFzXG4gICAgICAgIGlmIChmaWVsZC5hbGlhcykge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIGZpZWxkLmFsaWFzLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNldDogc2V0dGVyLFxuICAgICAgICAgICAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBpZiB0aGUgY29uc3R1Y3RvciBpcyBwYXNzZWQgZGF0YVxuICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShldGhqc1V0aWwuc3RyaXBIZXhQcmVmaXgoZGF0YSksICdoZXgnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhID0gcmxwLmRlY29kZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gc2VsZi5fZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBpbiBkYXRhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgYWxsIHRoZSBpdGVtcyBhcmUgYnVmZmVyc1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgICAgICAgICAgc2VsZltzZWxmLl9maWVsZHNbaV1dID0gYnl0ZXNfMS50b0J1ZmZlcihkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFyIGtleXNfMSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleXNfMS5pbmRleE9mKGZpZWxkLm5hbWUpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZltmaWVsZC5uYW1lXSA9IGRhdGFbZmllbGQubmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGtleXNfMS5pbmRleE9mKGZpZWxkLmFsaWFzKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIHNlbGZbZmllbGQuYWxpYXNdID0gZGF0YVtmaWVsZC5hbGlhc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkYXRhJyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsIjsoZnVuY3Rpb24oZ2xvYmFsKSB7XG5cbid1c2Ugc3RyaWN0JztcblxudmFyIG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7IHNldFRpbWVvdXQoZm4sIDApOyB9XG5pZiAodHlwZW9mIHByb2Nlc3MgIT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2VzcyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nKSB7XG5cdC8vIG5vZGUuanMgYW5kIHRoZSBsaWtlXG5cdG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbn1cblxuZnVuY3Rpb24gc2VtYXBob3JlKGNhcGFjaXR5KSB7XG5cdHZhciBzZW1hcGhvcmUgPSB7XG5cdFx0Y2FwYWNpdHk6IGNhcGFjaXR5IHx8IDEsXG5cdFx0Y3VycmVudDogMCxcblx0XHRxdWV1ZTogW10sXG5cdFx0Zmlyc3RIZXJlOiBmYWxzZSxcblxuXHRcdHRha2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKHNlbWFwaG9yZS5maXJzdEhlcmUgPT09IGZhbHNlKSB7XG4gICAgICAgIFx0XHRcdHNlbWFwaG9yZS5jdXJyZW50Kys7XG4gICAgICAgIFx0XHRcdHNlbWFwaG9yZS5maXJzdEhlcmUgPSB0cnVlO1xuICAgICAgICBcdFx0XHR2YXIgaXNGaXJzdCA9IDE7XG4gICAgICBcdFx0XHR9IGVsc2Uge1xuICAgICAgICBcdFx0XHR2YXIgaXNGaXJzdCA9IDA7XG4gICAgICBcdFx0XHR9XG5cdFx0XHR2YXIgaXRlbSA9IHsgbjogMSB9O1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdGl0ZW0udGFzayA9IGFyZ3VtZW50c1swXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW0ubiA9IGFyZ3VtZW50c1swXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT0gJ2Z1bmN0aW9uJykgaXRlbS50YXNrID0gYXJndW1lbnRzWzFdO1xuXHRcdFx0XHRlbHNlIGl0ZW0ubiA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHRhc2sgPSBpdGVtLnRhc2s7XG5cdFx0XHRpdGVtLnRhc2sgPSBmdW5jdGlvbigpIHsgdGFzayhzZW1hcGhvcmUubGVhdmUpOyB9O1xuXG5cdFx0XHRpZiAoc2VtYXBob3JlLmN1cnJlbnQgKyBpdGVtLm4gLSBpc0ZpcnN0ID4gc2VtYXBob3JlLmNhcGFjaXR5KSB7XG4gICAgICAgIFx0XHRcdGlmIChpc0ZpcnN0ID09PSAxKSB7XG4gICAgICAgIFx0XHRcdFx0c2VtYXBob3JlLmN1cnJlbnQtLTtcbiAgICAgICAgXHRcdFx0XHRzZW1hcGhvcmUuZmlyc3RIZXJlID0gZmFsc2U7XG4gICAgICAgIFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNlbWFwaG9yZS5xdWV1ZS5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRzZW1hcGhvcmUuY3VycmVudCArPSBpdGVtLm4gLSBpc0ZpcnN0O1xuXHRcdFx0aXRlbS50YXNrKHNlbWFwaG9yZS5sZWF2ZSk7XG4gICAgICBcdFx0XHRpZiAoaXNGaXJzdCA9PT0gMSkgc2VtYXBob3JlLmZpcnN0SGVyZSA9IGZhbHNlO1xuXHRcdH0sXG5cblx0XHRsZWF2ZTogZnVuY3Rpb24obikge1xuXHRcdFx0biA9IG4gfHwgMTtcblxuXHRcdFx0c2VtYXBob3JlLmN1cnJlbnQgLT0gbjtcblxuXHRcdFx0aWYgKCFzZW1hcGhvcmUucXVldWUubGVuZ3RoKSB7XG5cdFx0XHRcdGlmIChzZW1hcGhvcmUuY3VycmVudCA8IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2xlYXZlIGNhbGxlZCB0b28gbWFueSB0aW1lcy4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGl0ZW0gPSBzZW1hcGhvcmUucXVldWVbMF07XG5cblx0XHRcdGlmIChpdGVtLm4gKyBzZW1hcGhvcmUuY3VycmVudCA+IHNlbWFwaG9yZS5jYXBhY2l0eSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHNlbWFwaG9yZS5xdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c2VtYXBob3JlLmN1cnJlbnQgKz0gaXRlbS5uO1xuXG5cdFx0XHRuZXh0VGljayhpdGVtLnRhc2spO1xuXHRcdH0sXG5cblx0XHRhdmFpbGFibGU6IGZ1bmN0aW9uKG4pIHtcblx0XHRcdG4gPSBuIHx8IDE7XG5cdFx0XHRyZXR1cm4oc2VtYXBob3JlLmN1cnJlbnQgKyBuIDw9IHNlbWFwaG9yZS5jYXBhY2l0eSk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBzZW1hcGhvcmU7XG59O1xuXG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gbm9kZSBleHBvcnRcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHNlbWFwaG9yZTtcbn0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gYW1kIGV4cG9ydFxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZW1hcGhvcmU7XG4gICAgfSk7XG59IGVsc2Uge1xuICAgIC8vIGJyb3dzZXIgZ2xvYmFsXG4gICAgZ2xvYmFsLnNlbWFwaG9yZSA9IHNlbWFwaG9yZTtcbn1cbn0odGhpcykpO1xuIiwiY29uc3QgY3JlYXRlUGF5bG9hZCA9IHJlcXVpcmUoJy4vY3JlYXRlLXBheWxvYWQuanMnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVzdGltYXRlR2FzXG5cbi8qXG5cblRoaXMgaXMgYSB3b3JrIGFyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL2dvLWV0aGVyZXVtL2lzc3Vlcy8yNTc3XG5cbiovXG5cblxuZnVuY3Rpb24gZXN0aW1hdGVHYXMocHJvdmlkZXIsIHR4UGFyYW1zLCBjYikge1xuICBwcm92aWRlci5zZW5kQXN5bmMoY3JlYXRlUGF5bG9hZCh7XG4gICAgbWV0aG9kOiAnZXRoX2VzdGltYXRlR2FzJyxcbiAgICBwYXJhbXM6IFt0eFBhcmFtc11cbiAgfSksIGZ1bmN0aW9uKGVyciwgcmVzKXtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBoYW5kbGUgc2ltcGxlIHZhbHVlIHRyYW5zZmVyIGNhc2VcbiAgICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ25vIGNvbnRyYWN0IGNvZGUgYXQgZ2l2ZW4gYWRkcmVzcycpIHtcbiAgICAgICAgcmV0dXJuIGNiKG51bGwsICcweGNmMDgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNiKGVycikgICAgICAgIFxuICAgICAgfVxuICAgIH1cbiAgICBjYihudWxsLCByZXMucmVzdWx0KVxuICB9KVxufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/mock-sites/cyberway/assets/eosjs-api.js b/mock-sites/cyberway/assets/eosjs-api.js new file mode 100644 index 00000000..35f75f44 --- /dev/null +++ b/mock-sites/cyberway/assets/eosjs-api.js @@ -0,0 +1 @@ +var eosjs_api=function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=53)}({11:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},i=this&&this.__spread||function(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(12).RIPEMD160.hash,s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var c=function(){for(var e=Array(256).fill(-1),t=0;t"9".charCodeAt(0))throw new Error("invalid number");for(var a=i-"0".charCodeAt(0),o=0;o>8}if(a)throw new Error("number is out of range")}return r}function y(e,t){void 0===t&&(t=1);for(var r=Array(t).fill("0".charCodeAt(0)),n=e.length-1;n>=0;--n){for(var a=e[n],o=0;o>8}if(i)throw new Error("base-58 value is out of range")}return r.reverse(),r}function m(e,t){var r,n,o,u;void 0===t&&(t=1);var f=[];try{for(var l=a(e),h=l.next();!h.done;h=l.next()){for(var p=h.value,y=0;y>2,n=3*r;t>0&&"="===e[t-1]&&("="===e[t-2]?n-=2:n-=1);for(var i=new Uint8Array(n),a=0;a>4,3*a+1>2),3*a+2[Math.floor(e/t),e%t])(t,536870912).map((e,t)=>t?8*e:e),o=new Uint8Array(t+r+8);o.set(new Uint8Array(e),0);const s=new DataView(o.buffer);return s.setUint8(t,128),s.setUint32(t+r,a,!0),s.setUint32(t+r+4,i,!0),o.buffer}static f(e,t,r,n){return 0<=e&&e<=15?t^r^n:16<=e&&e<=31?t&r|~t&n:32<=e&&e<=47?(t|~r)^n:48<=e&&e<=63?t&n|r&~n:64<=e&&e<=79?t^(r|~n):void 0}static K(e){return 0<=e&&e<=15?0:16<=e&&e<=31?1518500249:32<=e&&e<=47?1859775393:48<=e&&e<=63?2400959708:64<=e&&e<=79?2840853838:void 0}static KP(e){return 0<=e&&e<=15?1352829926:16<=e&&e<=31?1548603684:32<=e&&e<=47?1836072691:48<=e&&e<=63?2053994217:64<=e&&e<=79?0:void 0}static add_modulo32(){return 0|Array.from(arguments).reduce((e,t)=>e+t,0)}static rol32(e,t){return e<>>32-t}static hash(e){const t=n.pad(e),r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],i=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],a=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],o=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],s=t.byteLength/64,u=new Array(s).fill(void 0).map((e,r)=>e=>new DataView(t,64*r,64).getUint32(4*e,!0));let c=[1732584193,4023233417,2562383102,271733878,3285377520];for(let e=0;el.setUint32(4*t,e,!0)),f}}e.exports={RIPEMD160:n}},53:function(e,t,r){"use strict";var n=this&&this.__assign||Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&i[i.length-1])&&(6===a[0]||2===a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]0)&&!(n=a.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},u=this&&this.__spread||function(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var f=r(54),l=r(55),h=r(56),p=function(){function e(e){this.contracts=new Map,this.cachedAbis=new Map,this.rpc=e.rpc,this.authorityProvider=e.authorityProvider||e.rpc,this.abiProvider=e.abiProvider||e.rpc,this.signatureProvider=e.signatureProvider,this.chainId=e.chainId,this.textEncoder=e.textEncoder,this.textDecoder=e.textDecoder,this.abiTypes=f.getTypesFromAbi(f.createInitialTypes(),l),this.transactionTypes=f.getTypesFromAbi(f.createInitialTypes(),h)}return e.prototype.rawAbiToJson=function(e){var t=new f.SerialBuffer({textEncoder:this.textEncoder,textDecoder:this.textDecoder,array:e});if(!f.supportedAbiVersion(t.getString()))throw new Error("Unsupported abi version");return t.restartRead(),this.abiTypes.get("abi_def").deserialize(t)},e.prototype.getCachedAbi=function(e,t){return void 0===t&&(t=!1),i(this,void 0,void 0,function(){var r,n,i,o;return a(this,function(a){switch(a.label){case 0:if(!t&&this.cachedAbis.get(e))return[2,this.cachedAbis.get(e)];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,this.abiProvider.getRawAbi(e)];case 2:return n=a.sent().abi,i=this.rawAbiToJson(n),r={rawAbi:n,abi:i},[3,4];case 3:throw(o=a.sent()).message="fetching abi for "+e+": "+o.message,o;case 4:if(!r)throw new Error("Missing abi for "+e);return this.cachedAbis.set(e,r),[2,r]}})})},e.prototype.getAbi=function(e,t){return void 0===t&&(t=!1),i(this,void 0,void 0,function(){return a(this,function(r){switch(r.label){case 0:return[4,this.getCachedAbi(e,t)];case 1:return[2,r.sent().abi]}})})},e.prototype.getTransactionAbis=function(e,t){return void 0===t&&(t=!1),i(this,void 0,void 0,function(){var r,n,o,s=this;return a(this,function(c){return r=e.actions.map(function(e){return e.account}),n=new Set(r),o=u(n).map(function(e){return i(s,void 0,void 0,function(){var r;return a(this,function(n){switch(n.label){case 0:return r={accountName:e},[4,this.getCachedAbi(e,t)];case 1:return[2,(r.abi=n.sent().rawAbi,r)]}})})}),[2,Promise.all(o)]})})},e.prototype.getContract=function(e,t){return void 0===t&&(t=!1),i(this,void 0,void 0,function(){var r,n,i,o,s,u,l,h,p,y,d;return a(this,function(a){switch(a.label){case 0:return!t&&this.contracts.get(e)?[2,this.contracts.get(e)]:[4,this.getAbi(e,t)];case 1:i=a.sent(),o=f.getTypesFromAbi(f.createInitialTypes(),i),s=new Map;try{for(u=c(i.actions),l=u.next();!l.done;l=u.next())h=l.value,p=h.name,y=h.type,s.set(p,f.getType(o,y))}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}return d={types:o,actions:s},this.contracts.set(e,d),[2,d]}})})},e.prototype.serialize=function(e,t,r){this.transactionTypes.get(t).serialize(e,r)},e.prototype.deserialize=function(e,t){return this.transactionTypes.get(t).deserialize(e)},e.prototype.serializeTransaction=function(e){var t=new f.SerialBuffer({textEncoder:this.textEncoder,textDecoder:this.textDecoder});return this.serialize(t,"transaction",n({},this.getDefaultTransactionHeader(),e)),t.asUint8Array()},e.prototype.getDefaultTransactionHeader=function(){return{max_net_usage_words:0,max_cpu_usage_ms:0,max_ram_kbytes:0,max_storage_kbytes:0,delay_sec:0,context_free_actions:[],actions:[],transaction_extensions:[]}},e.prototype.deserializeTransaction=function(e){var t=new f.SerialBuffer({textEncoder:this.textEncoder,textDecoder:this.textDecoder});return t.pushArray(e),this.deserialize(t,"transaction")},e.prototype.serializeActions=function(e){return i(this,void 0,void 0,function(){var t=this;return a(this,function(r){switch(r.label){case 0:return[4,Promise.all(e.map(function(e){var r=e.account,n=e.name,o=e.authorization,s=e.data;return i(t,void 0,void 0,function(){var e;return a(this,function(t){switch(t.label){case 0:return[4,this.getContract(r)];case 1:return e=t.sent(),[2,f.serializeAction(e,r,n,o,s,this.textEncoder,this.textDecoder)]}})})}))];case 1:return[2,r.sent()]}})})},e.prototype.deserializeActions=function(e){return i(this,void 0,void 0,function(){var t=this;return a(this,function(r){switch(r.label){case 0:return[4,Promise.all(e.map(function(e){var r=e.account,n=e.name,o=e.authorization,s=e.data;return i(t,void 0,void 0,function(){var e;return a(this,function(t){switch(t.label){case 0:return[4,this.getContract(r)];case 1:return e=t.sent(),[2,f.deserializeAction(e,r,n,o,s,this.textEncoder,this.textDecoder)]}})})}))];case 1:return[2,r.sent()]}})})},e.prototype.deserializeTransactionWithActions=function(e){return i(this,void 0,void 0,function(){var t,r;return a(this,function(i){switch(i.label){case 0:return"string"==typeof e&&(e=f.hexToUint8Array(e)),t=this.deserializeTransaction(e),[4,this.deserializeActions(t.actions)];case 1:return r=i.sent(),[2,n({},t,{actions:r})]}})})},e.prototype.transact=function(e,t){var r=void 0===t?{}:t,o=r.broadcast,s=void 0===o||o,u=r.sign,c=void 0===u||u,l=r.signByActors,h=void 0===l?null:l,p=r.skipSignByActors,y=void 0===p?null:p,d=r.providebw,m=void 0!==d&&d,g=r.blocksBehind,v=r.expireSeconds;return i(this,void 0,void 0,function(){var t,r,i,o,u,l,p,d,b,w;return a(this,function(a){switch(a.label){case 0:return this.chainId?[3,2]:[4,this.rpc.get_info()];case 1:t=a.sent(),this.chainId=t.chain_id,a.label=2;case 2:return"number"==typeof g&&v?t?[3,4]:[4,this.rpc.get_info()]:[3,6];case 3:t=a.sent(),a.label=4;case 4:return[4,this.rpc.get_block(t.head_block_num-g)];case 5:r=a.sent(),e=n({},f.transactionHeader(r,v),e),a.label=6;case 6:if(!this.hasRequiredTaposFields(e))throw new Error("Required configuration or TAPOS fields are not present");return[4,this.getTransactionAbis(e)];case 7:return i=a.sent(),o=[{},e],u={},[4,this.serializeActions(e.actions)];case 8:return e=n.apply(void 0,o.concat([(u.actions=a.sent(),u)])),l=this.serializeTransaction(e),p={serializedTransaction:l,signatures:[]},c?(d=e,[4,this.signatureProvider.getAvailableKeys()]):[3,12];case 9:return b=a.sent(),m&&(d=n({},d,{actions:d.actions.filter(function(e){return"providebw"!==e.name})})),h&&(d=n({},d,{actions:d.actions.map(function(e){return n({},e,{authorization:e.authorization.filter(function(e){return h.includes(e.actor)})})})})),y&&(d=n({},d,{actions:d.actions.map(function(e){return n({},e,{authorization:e.authorization.filter(function(e){return!y.includes(e.actor)})})})})),[4,this.authorityProvider.getRequiredKeys({transaction:d,availableKeys:b})];case 10:return w=a.sent(),[4,this.signatureProvider.sign({chainId:this.chainId,requiredKeys:w,serializedTransaction:l,abis:i})];case 11:p=a.sent(),a.label=12;case 12:return s?[2,this.pushSignedTransaction(p)]:[2,p]}})})},e.prototype.getChainId=function(){return i(this,void 0,void 0,function(){var e;return a(this,function(t){switch(t.label){case 0:return this.chainId?[3,2]:(e=this,[4,this.rpc.get_info()]);case 1:e.chainId=t.sent().chain_id,t.label=2;case 2:return[2,this.chainId]}})})},e.prototype.pushSignedTransaction=function(e){var t=e.signatures,r=e.serializedTransaction;return i(this,void 0,void 0,function(){return a(this,function(e){return[2,this.rpc.push_transaction({signatures:t,serializedTransaction:r})]})})},e.prototype.hasRequiredTaposFields=function(e){var t=e.expiration,r=e.ref_block_num,n=e.ref_block_prefix;o(e,["expiration","ref_block_num","ref_block_prefix"]);return!!(t&&r&&n)},e}();t.default=p},54:function(e,t,r){"use strict";var n=this&&this.__assign||Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=a.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return o},a=this&&this.__spread||function(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var s=r(11),u=function(){return function(e){void 0===e&&(e={}),this.skippedBinaryExtension=!1,this.options=e}}();t.SerializerState=u;var c=function(){function e(e){var t=void 0===e?{}:e,r=t.textEncoder,n=t.textDecoder,i=t.array;this.readPos=0,this.array=i||new Uint8Array(1024),this.length=i?i.length:0,this.textEncoder=r||new TextEncoder,this.textDecoder=n||new TextDecoder("utf-8",{fatal:!0})}return e.prototype.reserve=function(e){if(!(this.length+e<=this.array.length)){for(var t=this.array.length;this.length+e>t;)t=Math.ceil(1.5*t);var r=new Uint8Array(t);r.set(this.array),this.array=r}},e.prototype.haveReadData=function(){return this.readPosthis.length)throw new Error("Read past end of buffer");var t=new Uint8Array(this.array.buffer,this.array.byteOffset+this.readPos,e);return this.readPos+=e,t},e.prototype.pushUint16=function(e){this.push(e>>0&255,e>>8&255)},e.prototype.getUint16=function(){var e=0;return e|=this.get()<<0,e|=this.get()<<8},e.prototype.pushUint32=function(e){this.push(e>>0&255,e>>8&255,e>>16&255,e>>24&255)},e.prototype.getUint32=function(){var e=0;return e|=this.get()<<0,e|=this.get()<<8,e|=this.get()<<16,(e|=this.get()<<24)>>>0},e.prototype.pushNumberAsUint64=function(e){this.pushUint32(e>>>0),this.pushUint32(Math.floor(e/4294967296)>>>0)},e.prototype.getUint64AsNumber=function(){var e=this.getUint32();return 4294967296*(this.getUint32()>>>0)+(e>>>0)},e.prototype.pushVaruint32=function(e){for(;;){if(!(e>>>7)){this.push(e);break}this.push(128|127&e),e>>>=7}},e.prototype.getVaruint32=function(){for(var e=0,t=0;;){var r=this.get();if(e|=(127&r)<>>0},e.prototype.pushVarint32=function(e){this.pushVaruint32(e<<1^e>>31)},e.prototype.getVarint32=function(){var e=this.getVaruint32();return 1&e?~e>>1|2147483648:e>>>1},e.prototype.pushFloat32=function(e){this.pushArray(new Uint8Array(new Float32Array([e]).buffer))},e.prototype.getFloat32=function(){return new Float32Array(this.getUint8Array(4).slice().buffer)[0]},e.prototype.pushFloat64=function(e){this.pushArray(new Uint8Array(new Float64Array([e]).buffer))},e.prototype.getFloat64=function(){return new Float64Array(this.getUint8Array(8).slice().buffer)[0]},e.prototype.pushName=function(e){if("string"!=typeof e)throw new Error("Expected string containing name");function t(e){return e>="a".charCodeAt(0)&&e<="z".charCodeAt(0)?e-"a".charCodeAt(0)+6:e>="1".charCodeAt(0)&&e<="5".charCodeAt(0)?e-"1".charCodeAt(0)+1:0}for(var r=new Uint8Array(8),n=63,i=0;i=0;--o)n>=0&&(r[Math.floor(n/8)]|=(a>>o&1)<=0;){for(var n=0,i=0;i<5;++i)r>=0&&(n=n<<1|e[Math.floor(r/8)]>>r%8&1,--r);t+=n>=6?String.fromCharCode(n+"a".charCodeAt(0)-6):n>=1?String.fromCharCode(n+"1".charCodeAt(0)-1):"."}return t.endsWith(".")&&(t=t.replace(/\.+$/,"")),t},e.prototype.pushBytes=function(e){this.pushVaruint32(e.length),this.pushArray(e)},e.prototype.getBytes=function(){return this.getUint8Array(this.getVaruint32())},e.prototype.pushString=function(e){this.pushBytes(this.textEncoder.encode(e))},e.prototype.getString=function(){return this.textDecoder.decode(this.getBytes())},e.prototype.pushSymbolCode=function(e){if("string"!=typeof e)throw new Error("Expected string containing symbol_code");var t=[];for(t.push.apply(t,a(this.textEncoder.encode(e)));t.length<8;)t.push(0);this.pushArray(t.slice(0,8))},e.prototype.getSymbolCode=function(){var e,t=this.getUint8Array(8);for(e=0;e="0".charCodeAt(0)&&e.charCodeAt(t)<="9".charCodeAt(0);)i=!0,r+=e[t],++t;if(!i)throw new Error("Asset must begin with a number");if("."===e[t])for(++t;t="0".charCodeAt(0)&&e.charCodeAt(t)<="9".charCodeAt(0);)r+=e[t],++n,++t;var a=e.substr(t).trim();this.pushArray(s.signedDecimalToBinary(8,r)),this.pushSymbol({name:a,precision:n})},e.prototype.getAsset=function(){var e=this.getUint8Array(8),t=this.getSymbol(),r=t.name,n=t.precision,i=s.signedBinaryToDecimal(e,n+1);return n&&(i=i.substr(0,i.length-n)+"."+i.substr(i.length-n)),i+" "+r},e.prototype.pushPublicKey=function(e){var t=s.stringToPublicKey(e);this.push(t.type),this.pushArray(t.data)},e.prototype.getPublicKey=function(){var e=this.get(),t=this.getUint8Array(s.publicKeyDataSize);return s.publicKeyToString({type:e,data:t})},e.prototype.pushPrivateKey=function(e){var t=s.stringToPrivateKey(e);this.push(t.type),this.pushArray(t.data)},e.prototype.getPrivateKey=function(){var e=this.get(),t=this.getUint8Array(s.privateKeyDataSize);return s.privateKeyToString({type:e,data:t})},e.prototype.pushSignature=function(e){var t=s.stringToSignature(e);this.push(t.type),this.pushArray(t.data)},e.prototype.getSignature=function(){var e=this.get(),t=this.getUint8Array(s.signatureDataSize);return s.signatureToString({type:e,data:t})},e}();function f(e){var t=Date.parse(e);if(Number.isNaN(t))throw new Error("Invalid time format");return t}function l(e){return Math.round(1e3*f(e+"Z"))}function h(e){var t=new Date(e/1e3).toISOString();return t.substr(0,t.length-1)}function p(e){return Math.round(f(e+"Z")/1e3)}function y(e){var t=new Date(1e3*e).toISOString();return t.substr(0,t.length-1)}function d(e){return Math.round((f(e+"Z")-9466848e5)/500)}function m(e){var t=new Date(500*e+9466848e5).toISOString();return t.substr(0,t.length-1)}function g(e){if("string"!=typeof e)throw new Error("Expected string containing symbol");var t=e.match(/^([0-9]+),([A-Z]+)$/);if(!t)throw new Error("Invalid symbol");return{name:t[2],precision:+t[1]}}function v(e){var t=e.name;return e.precision+","+t}function b(e){var t,r,n="";try{for(var i=o(e),a=i.next();!a.done;a=i.next()){n+=("00"+a.value.toString(16)).slice(-2)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n.toUpperCase()}function w(e){if("string"!=typeof e)throw new Error("Expected string containing hex digits");if(e.length%2)throw new Error("Odd number of hex digits");for(var t=e.length/2,r=new Uint8Array(t),n=0;n=this.fields.length)throw new Error("type index "+n+" is not valid for variant");var i=this.fields[n];return[i.name,i.type.deserialize(e,t,r)]}function T(e,t,r,n){var i,a;e.pushVaruint32(t.length);try{for(var s=o(t),u=s.next();!u.done;u=s.next()){var c=u.value;this.arrayOf.serialize(e,c,r,!1)}}catch(e){i={error:e}}finally{try{u&&!u.done&&(a=s.return)&&a.call(s)}finally{if(i)throw i.error}}}function E(e,t,r){for(var n=e.getVaruint32(),i=[],a=0;a",aliasOfName:"",arrayOf:null,optionalOf:null,extensionOf:null,baseName:"",base:null,fields:[],serialize:_,deserialize:A},e)}function K(e,t){if(Number.isNaN(+e)||Number.isNaN(+t)||"number"!=typeof e&&"string"!=typeof e)throw new Error("Expected number");if(+e!=+t)throw new Error("Number is out of range");return+e}function B(e,t){var r=e.get(t);if(r&&r.aliasOfName)return B(e,r.aliasOfName);if(r)return r;if(t.endsWith("[]"))return O({name:t,arrayOf:B(e,t.substr(0,t.length-2)),serialize:T,deserialize:E});if(t.endsWith("?"))return O({name:t,optionalOf:B(e,t.substr(0,t.length-1)),serialize:D,deserialize:P});if(t.endsWith("$"))return O({name:t,extensionOf:B(e,t.substr(0,t.length-1)),serialize:C,deserialize:k});throw new Error("Unknown type: "+t)}function N(e,t,r,n,i,a){var o=e.actions.get(r);if(!o)throw new Error("Unknown action "+r+" in contract "+t);var s=new c({textEncoder:i,textDecoder:a});return o.serialize(s,n),b(s.asUint8Array())}function I(e,t,r,n,i,a){var o=e.actions.get(r);if("string"==typeof n&&(n=w(n)),!o)throw new Error("Unknown action "+r+" in contract "+t);var s=new c({textDecoder:a,textEncoder:i});return s.pushArray(n),o.deserialize(s)}t.SerialBuffer=c,t.supportedAbiVersion=function(e){return e.startsWith("cyberway::abi/1.")},t.dateToTimePoint=l,t.timePointToDate=h,t.dateToTimePointSec=p,t.timePointSecToDate=y,t.dateToBlockTimestamp=d,t.blockTimestampToDate=m,t.stringToSymbol=g,t.symbolToString=v,t.arrayToHex=b,t.hexToUint8Array=w,t.createInitialTypes=function(){var e=new Map(Object.entries({bool:O({name:"bool",serialize:function(e,t){if("boolean"!=typeof t)throw new Error("Expected true or false");e.push(t?1:0)},deserialize:function(e){return!!e.get()}}),uint8:O({name:"uint8",serialize:function(e,t){e.push(K(t,255&t))},deserialize:function(e){return e.get()}}),int8:O({name:"int8",serialize:function(e,t){e.push(K(t,t<<24>>24))},deserialize:function(e){return e.get()<<24>>24}}),uint16:O({name:"uint16",serialize:function(e,t){e.pushUint16(K(t,65535&t))},deserialize:function(e){return e.getUint16()}}),int16:O({name:"int16",serialize:function(e,t){e.pushUint16(K(t,t<<16>>16))},deserialize:function(e){return e.getUint16()<<16>>16}}),uint32:O({name:"uint32",serialize:function(e,t){e.pushUint32(K(t,t>>>0))},deserialize:function(e){return e.getUint32()}}),uint64:O({name:"uint64",serialize:function(e,t){e.pushArray(s.decimalToBinary(8,""+t))},deserialize:function(e){return s.binaryToDecimal(e.getUint8Array(8))}}),int64:O({name:"int64",serialize:function(e,t){e.pushArray(s.signedDecimalToBinary(8,""+t))},deserialize:function(e){return s.signedBinaryToDecimal(e.getUint8Array(8))}}),int32:O({name:"int32",serialize:function(e,t){e.pushUint32(K(t,0|t))},deserialize:function(e){return 0|e.getUint32()}}),varuint32:O({name:"varuint32",serialize:function(e,t){e.pushVaruint32(K(t,t>>>0))},deserialize:function(e){return e.getVaruint32()}}),varint32:O({name:"varint32",serialize:function(e,t){e.pushVarint32(K(t,0|t))},deserialize:function(e){return e.getVarint32()}}),uint128:O({name:"uint128",serialize:function(e,t){e.pushArray(s.decimalToBinary(16,""+t))},deserialize:function(e){return s.binaryToDecimal(e.getUint8Array(16))}}),int128:O({name:"int128",serialize:function(e,t){e.pushArray(s.signedDecimalToBinary(16,""+t))},deserialize:function(e){return s.signedBinaryToDecimal(e.getUint8Array(16))}}),float32:O({name:"float32",serialize:function(e,t){e.pushFloat32(t)},deserialize:function(e){return e.getFloat32()}}),float64:O({name:"float64",serialize:function(e,t){e.pushFloat64(t)},deserialize:function(e){return e.getFloat64()}}),float128:O({name:"float128",serialize:function(e,t){e.pushUint8ArrayChecked(w(t),16)},deserialize:function(e){return b(e.getUint8Array(16))}}),bytes:O({name:"bytes",serialize:function(e,t){t instanceof Uint8Array||Array.isArray(t)?e.pushBytes(t):e.pushBytes(w(t))},deserialize:function(e,t){return t.options.bytesAsUint8Array?e.getBytes():b(e.getBytes())}}),string:O({name:"string",serialize:function(e,t){e.pushString(t)},deserialize:function(e){return e.getString()}}),name:O({name:"name",serialize:function(e,t){e.pushName(t)},deserialize:function(e){return e.getName()}}),time_point:O({name:"time_point",serialize:function(e,t){e.pushNumberAsUint64(l(t))},deserialize:function(e){return h(e.getUint64AsNumber())}}),time_point_sec:O({name:"time_point_sec",serialize:function(e,t){e.pushUint32(p(t))},deserialize:function(e){return y(e.getUint32())}}),block_timestamp_type:O({name:"block_timestamp_type",serialize:function(e,t){e.pushUint32(d(t))},deserialize:function(e){return m(e.getUint32())}}),symbol_code:O({name:"symbol_code",serialize:function(e,t){e.pushSymbolCode(t)},deserialize:function(e){return e.getSymbolCode()}}),symbol:O({name:"symbol",serialize:function(e,t){e.pushSymbol(g(t))},deserialize:function(e){return v(e.getSymbol())}}),asset:O({name:"asset",serialize:function(e,t){e.pushAsset(t)},deserialize:function(e){return e.getAsset()}}),checksum160:O({name:"checksum160",serialize:function(e,t){e.pushUint8ArrayChecked(w(t),20)},deserialize:function(e){return b(e.getUint8Array(20))}}),checksum256:O({name:"checksum256",serialize:function(e,t){e.pushUint8ArrayChecked(w(t),32)},deserialize:function(e){return b(e.getUint8Array(32))}}),checksum512:O({name:"checksum512",serialize:function(e,t){e.pushUint8ArrayChecked(w(t),64)},deserialize:function(e){return b(e.getUint8Array(64))}}),public_key:O({name:"public_key",serialize:function(e,t){e.pushPublicKey(t)},deserialize:function(e){return e.getPublicKey()}}),private_key:O({name:"private_key",serialize:function(e,t){e.pushPrivateKey(t)},deserialize:function(e){return e.getPrivateKey()}}),signature:O({name:"signature",serialize:function(e,t){e.pushSignature(t)},deserialize:function(e){return e.getSignature()}})}));return e.set("extended_asset",O({name:"extended_asset",baseName:"",fields:[{name:"quantity",typeName:"asset",type:e.get("asset")},{name:"contract",typeName:"name",type:e.get("name")}],serialize:z,deserialize:x})),e},t.getType=B,t.getTypesFromAbi=function(e,t){var r,n,a,s,u,c,f,l,h,p,y=new Map(e);if(t.types)try{for(var d=o(t.types),m=d.next();!m.done;m=d.next()){var g=m.value,v=g.new_type_name,b=g.type;y.set(v,O({name:v,aliasOfName:b}))}}catch(e){r={error:e}}finally{try{m&&!m.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}if(t.structs)try{for(var w=o(t.structs),_=w.next();!_.done;_=w.next()){var A=_.value,T=A.name,E=A.base,D=A.fields;y.set(T,O({name:T,baseName:E,fields:D.map(function(e){return{name:e.name,typeName:e.type,type:null}}),serialize:z,deserialize:x}))}}catch(e){a={error:e}}finally{try{_&&!_.done&&(s=w.return)&&s.call(w)}finally{if(a)throw a.error}}if(t.variants)try{for(var P=o(t.variants),C=P.next();!C.done;C=P.next()){var k=C.value,K=k.name,N=k.types;y.set(K,O({name:K,fields:N.map(function(e){return{name:e,typeName:e,type:null}}),serialize:S,deserialize:U}))}}catch(e){u={error:e}}finally{try{C&&!C.done&&(c=P.return)&&c.call(P)}finally{if(u)throw u.error}}try{for(var I=o(y),R=I.next();!R.done;R=I.next()){var M=i(R.value,2);M[0],(b=M[1]).baseName&&(b.base=B(y,b.baseName));try{for(var V=o(b.fields),j=V.next();!j.done;j=V.next()){var F=j.value;F.type=B(y,F.typeName)}}catch(e){h={error:e}}finally{try{j&&!j.done&&(p=V.return)&&p.call(V)}finally{if(h)throw h.error}}}}catch(e){f={error:e}}finally{try{R&&!R.done&&(l=I.return)&&l.call(I)}finally{if(f)throw f.error}}return y},t.transactionHeader=function(e,t){return{expiration:y(p(e.timestamp)+t),ref_block_num:65535&e.block_num,ref_block_prefix:e.ref_block_prefix}},t.serializeActionData=N,t.serializeAction=function(e,t,r,n,i,a,o){return{account:t,name:r,authorization:n,data:N(e,t,r,i,a,o)}},t.deserializeActionData=I,t.deserializeAction=function(e,t,r,n,i,a,o){return{account:t,name:r,authorization:n,data:I(e,t,r,i,a,o)}}},55:function(e){e.exports={version:"cyberway::abi/1.1",structs:[{name:"extensions_entry",base:"",fields:[{name:"tag",type:"uint16"},{name:"value",type:"bytes"}]},{name:"type_def",base:"",fields:[{name:"new_type_name",type:"string"},{name:"type",type:"string"}]},{name:"field_def",base:"",fields:[{name:"name",type:"string"},{name:"type",type:"string"}]},{name:"struct_def",base:"",fields:[{name:"name",type:"string"},{name:"base",type:"string"},{name:"fields",type:"field_def[]"}]},{name:"action_def",base:"",fields:[{name:"name",type:"name"},{name:"type",type:"string"}]},{name:"order_def",base:"",fields:[{name:"field",type:"string"},{name:"order",type:"string"}]},{name:"index_def",base:"",fields:[{name:"name",type:"name"},{name:"unique",type:"bool"},{name:"orders",type:"order_def[]"}]},{name:"event_def",base:"",fields:[{name:"name",type:"name"},{name:"type",type:"string"}]},{name:"table_def",base:"",fields:[{name:"name",type:"name"},{name:"type",type:"string"},{name:"scope_type",type:"string"},{name:"indexes",type:"index_def[]"}]},{name:"clause_pair",base:"",fields:[{name:"id",type:"string"},{name:"body",type:"string"}]},{name:"error_message",base:"",fields:[{name:"error_code",type:"uint64"},{name:"error_msg",type:"string"}]},{name:"variant_def",base:"",fields:[{name:"name",type:"string"},{name:"types",type:"string[]"}]},{name:"abi_def",base:"",fields:[{name:"version",type:"string"},{name:"types",type:"type_def[]"},{name:"structs",type:"struct_def[]"},{name:"actions",type:"action_def[]"},{name:"events",type:"event_def[]"},{name:"tables",type:"table_def[]"},{name:"error_messages",type:"error_message[]"},{name:"abi_extensions",type:"extensions_entry[]"},{name:"variants",type:"variant_def[]$"}]}]}},56:function(e){e.exports={version:"cyberway::abi/1.0",types:[{new_type_name:"account_name",type:"name"},{new_type_name:"action_name",type:"name"},{new_type_name:"permission_name",type:"name"}],structs:[{name:"permission_level",base:"",fields:[{name:"actor",type:"account_name"},{name:"permission",type:"permission_name"}]},{name:"action",base:"",fields:[{name:"account",type:"account_name"},{name:"name",type:"action_name"},{name:"authorization",type:"permission_level[]"},{name:"data",type:"bytes"}]},{name:"extension",base:"",fields:[{name:"type",type:"uint16"},{name:"data",type:"bytes"}]},{name:"transaction_header",base:"",fields:[{name:"expiration",type:"time_point_sec"},{name:"ref_block_num",type:"uint16"},{name:"ref_block_prefix",type:"uint32"},{name:"max_net_usage_words",type:"varuint32"},{name:"max_cpu_usage_ms",type:"uint8"},{name:"max_ram_kbytes",type:"varuint32"},{name:"max_storage_kbytes",type:"varuint32"},{name:"delay_sec",type:"varuint32"}]},{name:"transaction",base:"transaction_header",fields:[{name:"context_free_actions",type:"action[]"},{name:"actions",type:"action[]"},{name:"transaction_extensions",type:"extension[]"}]}]}}}); \ No newline at end of file diff --git a/mock-sites/cyberway/assets/eosjs-jsonrpc.js b/mock-sites/cyberway/assets/eosjs-jsonrpc.js new file mode 100644 index 00000000..0e81b5d4 --- /dev/null +++ b/mock-sites/cyberway/assets/eosjs-jsonrpc.js @@ -0,0 +1 @@ +var eosjs_jsonrpc=function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=57)}({11:function(t,e,r){"use strict";var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spread||function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0});var a=r(12).RIPEMD160.hash,c="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var s=function(){for(var t=Array(256).fill(-1),e=0;e"9".charCodeAt(0))throw new Error("invalid number");for(var i=o-"0".charCodeAt(0),a=0;a>8}if(i)throw new Error("number is out of range")}return r}function v(t,e){void 0===e&&(e=1);for(var r=Array(e).fill("0".charCodeAt(0)),n=t.length-1;n>=0;--n){for(var i=t[n],a=0;a>8}if(o)throw new Error("base-58 value is out of range")}return r.reverse(),r}function p(t,e){var r,n,a,u;void 0===e&&(e=1);var f=[];try{for(var l=i(t),h=l.next();!h.done;h=l.next()){for(var d=h.value,v=0;v>2,n=3*r;e>0&&"="===t[e-1]&&("="===t[e-2]?n-=2:n-=1);for(var o=new Uint8Array(n),i=0;i>4,3*i+1>2),3*i+2[Math.floor(t/e),t%e])(e,536870912).map((t,e)=>e?8*t:t),a=new Uint8Array(e+r+8);a.set(new Uint8Array(t),0);const c=new DataView(a.buffer);return c.setUint8(e,128),c.setUint32(e+r,i,!0),c.setUint32(e+r+4,o,!0),a.buffer}static f(t,e,r,n){return 0<=t&&t<=15?e^r^n:16<=t&&t<=31?e&r|~e&n:32<=t&&t<=47?(e|~r)^n:48<=t&&t<=63?e&n|r&~n:64<=t&&t<=79?e^(r|~n):void 0}static K(t){return 0<=t&&t<=15?0:16<=t&&t<=31?1518500249:32<=t&&t<=47?1859775393:48<=t&&t<=63?2400959708:64<=t&&t<=79?2840853838:void 0}static KP(t){return 0<=t&&t<=15?1352829926:16<=t&&t<=31?1548603684:32<=t&&t<=47?1836072691:48<=t&&t<=63?2053994217:64<=t&&t<=79?0:void 0}static add_modulo32(){return 0|Array.from(arguments).reduce((t,e)=>t+e,0)}static rol32(t,e){return t<>>32-e}static hash(t){const e=n.pad(t),r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],o=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],i=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],a=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],c=e.byteLength/64,u=new Array(c).fill(void 0).map((t,r)=>t=>new DataView(e,64*r,64).getUint32(4*t,!0));let s=[1732584193,4023233417,2562383102,271733878,3285377520];for(let t=0;tl.setUint32(4*e,t,!0)),f}}t.exports={RIPEMD160:n}},26:function(t,e,r){"use strict";var n=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};return function(e,r){function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(r){var n=this;return n=r.error&&r.error.details&&r.error.details.length&&r.error.details[0].message?t.call(this,r.error.details[0].message)||this:r.processed&&r.processed.except&&r.processed.except.message?t.call(this,r.processed.except.message)||this:t.call(this,r.message)||this,Object.setPrototypeOf(n,e.prototype),n.json=r,n}return n(e,t),e}(Error);e.default=o},3:function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},57:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(58);e.default=n.default;var o=r(26);e.RpcError=o.default},58:function(t,e,r){"use strict";(function(t){var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))(function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){t.done?o(t.value):new r(function(e){e(t.value)}).then(a,c)}u((n=n.apply(t,e||[])).next())})},o=this&&this.__generator||function(t,e){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0});var a=r(11),c=r(26);var u=function(){function e(e,r){void 0===r&&(r={}),this.endpoint=e,r.fetch?this.fetchBuiltin=r.fetch:this.fetchBuiltin=t.fetch}return e.prototype.fetch=function(t,e){return n(this,void 0,void 0,function(){var r,n,i;return o(this,function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,(0,this.fetchBuiltin)(this.endpoint+t,{method:"POST",body:JSON.stringify(e)})];case 1:return[4,(r=o.sent()).json()];case 2:if((n=o.sent()).processed&&n.processed.except)throw new c.default(n);return[3,4];case 3:throw(i=o.sent()).isFetchError=!0,i;case 4:if(!r.ok)throw new c.default(n);return[2,n]}})})},e.prototype.get_abi=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_abi",{account_name:t})];case 1:return[2,e.sent()]}})})},e.prototype.get_account=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_account",{account_name:t})];case 1:return[2,e.sent()]}})})},e.prototype.get_block_header_state=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_block_header_state",{block_num_or_id:t})];case 1:return[2,e.sent()]}})})},e.prototype.get_block=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_block",{block_num_or_id:t})];case 1:return[2,e.sent()]}})})},e.prototype.get_code=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_code",{account_name:t})];case 1:return[2,e.sent()]}})})},e.prototype.get_currency_balance=function(t,e,r){return void 0===r&&(r=null),n(this,void 0,void 0,function(){return o(this,function(n){switch(n.label){case 0:return[4,this.fetch("/v1/chain/get_currency_balance",{code:t,account:e,symbol:r})];case 1:return[2,n.sent()]}})})},e.prototype.get_currency_stats=function(t,e){return n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this.fetch("/v1/chain/get_currency_stats",{code:t,symbol:e})];case 1:return[2,r.sent()]}})})},e.prototype.get_info=function(){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.fetch("/v1/chain/get_info",{})];case 1:return[2,t.sent()]}})})},e.prototype.get_producer_schedule=function(){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.fetch("/v1/chain/get_producer_schedule",{})];case 1:return[2,t.sent()]}})})},e.prototype.get_producers=function(t,e,r){return void 0===t&&(t=!0),void 0===e&&(e=""),void 0===r&&(r=50),n(this,void 0,void 0,function(){return o(this,function(n){switch(n.label){case 0:return[4,this.fetch("/v1/chain/get_producers",{json:t,lower_bound:e,limit:r})];case 1:return[2,n.sent()]}})})},e.prototype.get_raw_code_and_abi=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/chain/get_raw_code_and_abi",{account_name:t})];case 1:return[2,e.sent()]}})})},e.prototype.getRawAbi=function(t){return n(this,void 0,void 0,function(){var e,r;return o(this,function(n){switch(n.label){case 0:return[4,this.get_raw_code_and_abi(t)];case 1:return e=n.sent(),r=a.base64ToBinary(e.abi),[2,{accountName:e.account_name,abi:r}]}})})},e.prototype.get_table_rows=function(t){var e=t.json,r=void 0===e||e,i=t.code,a=t.scope,c=t.table,u=t.table_key,s=void 0===u?"":u,f=t.lower_bound,l=void 0===f?"":f,h=t.upper_bound,d=void 0===h?"":h,v=t.index_position,y=void 0===v?1:v,p=t.key_type,_=void 0===p?"":p,b=t.limit,g=void 0===b?10:b,w=t.reverse,m=void 0!==w&&w,S=t.show_payer,A=void 0!==S&&S,x=t.index,k=void 0===x?"primary":x;return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.fetch("/v1/chain/get_table_rows",{json:r,code:i,scope:a,table:c,table_key:s,lower_bound:l,upper_bound:d,index_position:y,key_type:_,limit:g,reverse:m,show_payer:A,index:k})];case 1:return[2,t.sent()]}})})},e.prototype.getRequiredKeys=function(t){return n(this,void 0,void 0,function(){var e;return o(this,function(r){switch(r.label){case 0:return e=a.convertLegacyPublicKeys,[4,this.fetch("/v1/chain/get_required_keys",{transaction:t.transaction,available_keys:t.availableKeys})];case 1:return[2,e.apply(void 0,[r.sent().required_keys])]}})})},e.prototype.push_transaction=function(t){var e=t.signatures,r=t.serializedTransaction;return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.fetch("/v1/chain/push_transaction",{signatures:e,compression:0,packed_context_free_data:"",packed_trx:function(t){var e,r,n="";try{for(var o=i(t),a=o.next();!a.done;a=o.next())n+=("00"+a.value.toString(16)).slice(-2)}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n}(r)})];case 1:return[2,t.sent()]}})})},e.prototype.db_size_get=function(){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.fetch("/v1/db_size/get",{})];case 1:return[2,t.sent()]}})})},e.prototype.history_get_actions=function(t,e,r){return void 0===e&&(e=null),void 0===r&&(r=null),n(this,void 0,void 0,function(){return o(this,function(n){switch(n.label){case 0:return[4,this.fetch("/v1/history/get_actions",{account_name:t,pos:e,offset:r})];case 1:return[2,n.sent()]}})})},e.prototype.history_get_transaction=function(t,e){return void 0===e&&(e=null),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this.fetch("/v1/history/get_transaction",{id:t,block_num_hint:e})];case 1:return[2,r.sent()]}})})},e.prototype.history_get_key_accounts=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/history/get_key_accounts",{public_key:t})];case 1:return[2,e.sent()]}})})},e.prototype.history_get_controlled_accounts=function(t){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.fetch("/v1/history/get_controlled_accounts",{controlling_account:t})];case 1:return[2,e.sent()]}})})},e}();e.default=u}).call(this,r(3))}}); \ No newline at end of file diff --git a/mock-sites/cyberway/assets/eosjs-jssig.js b/mock-sites/cyberway/assets/eosjs-jssig.js new file mode 100644 index 00000000..37993064 --- /dev/null +++ b/mock-sites/cyberway/assets/eosjs-jssig.js @@ -0,0 +1,26 @@ +var eosjs_jssig=function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,i){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(i,n,function(e){return t[e]}.bind(null,n));return i},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=59)}([function(t,e,r){var i=r(2),n=i.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return n(t,e,r)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=i:(o(i,e),e.Buffer=s),o(n,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=n(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i.SlowBuffer(t)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e,r){"use strict";(function(t){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var i=r(60),n=r(61),o=r(27);function s(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function f(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function p(t,e){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return z(t).length;default:if(i)return q(t).length;e=(""+e).toLowerCase(),i=!0}}function g(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}function y(t,e,r,i,n){if(0===t.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return-1;r=t.length-1}else if(r<0){if(!n)return-1;r=0}if("string"==typeof e&&(e=a.from(e,i)),a.isBuffer(e))return 0===e.length?-1:v(t,e,r,i,n);if("number"==typeof e)return e&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):v(t,[e],r,i,n);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,i,n){var o,s=1,f=t.length,a=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;s=2,f/=2,a/=2,r/=2}function h(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(n){var u=-1;for(o=r;of&&(r=f-a),o=r;o>=0;o--){for(var l=!0,c=0;cn&&(i=n):i=n;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var s=0;s>8,n=r%256,o.push(n),o.push(i);return o}(e,t.length-r),t,r,i)}function S(t,e,r){return 0===e&&r===t.length?i.fromByteArray(t):i.fromByteArray(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var i=[],n=e;n239?4:h>223?3:h>191?2:1;if(n+l<=r)switch(l){case 1:h<128&&(u=h);break;case 2:128==(192&(o=t[n+1]))&&(a=(31&h)<<6|63&o)>127&&(u=a);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(a=(15&h)<<12|(63&o)<<6|63&s)>2047&&(a<55296||a>57343)&&(u=a);break;case 4:o=t[n+1],s=t[n+2],f=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&f)&&(a=(15&h)<<18|(63&o)<<12|(63&s)<<6|63&f)>65535&&a<1114112&&(u=a)}null===u?(u=65533,l=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),n+=l}return function(t){var e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);var r="",i=0;for(;ithis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return U(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return A(this,e,r);case"latin1":case"binary":return k(this,e,r);case"base64":return S(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},a.prototype.compare=function(t,e,r,i,n){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===i&&(i=0),void 0===n&&(n=this.length),e<0||r>t.length||i<0||n>this.length)throw new RangeError("out of range index");if(i>=n&&e>=r)return 0;if(i>=n)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,i>>>=0,n>>>=0,this===t)return 0;for(var o=n-i,s=r-e,f=Math.min(o,s),h=this.slice(i,n),u=t.slice(e,r),l=0;ln)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return b(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return m(this,t,e,r);case"latin1":case"binary":return _(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var I=4096;function A(t,e,r){var i="";r=Math.min(t.length,r);for(var n=e;ni)&&(r=i);for(var n="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,r,i,n,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}function D(t,e,r,i){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-r,2);n>>8*(i?n:1-n)}function O(t,e,r,i){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-r,4);n>>8*(i?n:3-n)&255}function C(t,e,r,i,n,o){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function M(t,e,r,i,o){return o||C(t,0,r,4),n.write(t,e,r,i,23,4),r+4}function N(t,e,r,i,o){return o||C(t,0,r,8),n.write(t,e,r,i,52,8),r+8}a.prototype.slice=function(t,e){var r,i=this.length;if(t=~~t,e=void 0===e?i:~~e,t<0?(t+=i)<0&&(t=0):t>i&&(t=i),e<0?(e+=i)<0&&(e=0):e>i&&(e=i),e0&&(n*=256);)i+=this[t+--e]*n;return i},a.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||L(t,e,this.length);for(var i=this[t],n=1,o=0;++o=(n*=128)&&(i-=Math.pow(2,8*e)),i},a.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||L(t,e,this.length);for(var i=e,n=1,o=this[t+--i];i>0&&(n*=256);)o+=this[t+--i]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),n.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),n.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),n.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),n.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,i){(t=+t,e|=0,r|=0,i)||R(this,t,e,r,Math.pow(2,8*r)-1,0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):O(this,t,e,!0),e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):O(this,t,e,!1),e+4},a.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e|=0,!i){var n=Math.pow(2,8*r-1);R(this,t,e,r,n-1,-n)}var o=0,s=1,f=0;for(this[e]=255&t;++o>0)-f&255;return e+r},a.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e|=0,!i){var n=Math.pow(2,8*r-1);R(this,t,e,r,n-1,-n)}var o=r-1,s=1,f=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===f&&0!==this[e+o+1]&&(f=1),this[e+o]=(t/s>>0)-f&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):O(this,t,e,!0),e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):O(this,t,e,!1),e+4},a.prototype.writeFloatLE=function(t,e,r){return M(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return M(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return N(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return N(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,i){if(r||(r=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-e=0;--n)t[n+e]=this[n+r];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(n=0;n>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),n=r;continue}r=65536+(n-55296<<10|r-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function z(t){return i.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(P,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function j(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n}}).call(this,r(3))},function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function i(t,e){if(t===e)return 0;for(var r=t.length,i=e.length,n=0,o=Math.min(r,i);n=0;h--)if(u[h]!==l[h])return!1;for(h=u.length-1;h>=0;h--)if(a=u[h],!b(t[a],e[a],r,i))return!1;return!0}(t,e,r,s))}return r?t===e:t==e}function w(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function m(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function _(t,e,r,i){var n;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(i=r,r=null),n=function(t){var e;try{t()}catch(t){e=t}return e}(e),i=(r&&r.name?" ("+r.name+").":".")+(i?" "+i:"."),t&&!n&&y(n,r,"Missing expected exception"+i);var s="string"==typeof i,f=!t&&o.isError(n),a=!t&&n&&!r;if((f&&s&&m(n,r)||a)&&y(n,r,"Got unwanted exception"+i),t&&n&&r&&!m(n,r)||!t&&n)throw n}l.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=function(t){return p(g(t.actual),128)+" "+t.operator+" "+p(g(t.expected),128)}(this),this.generatedMessage=!0);var e=t.stackStartFunction||y;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var i=r.stack,n=d(e),o=i.indexOf("\n"+n);if(o>=0){var s=i.indexOf("\n",o+1);i=i.substring(s+1)}this.stack=i}}},o.inherits(l.AssertionError,Error),l.fail=y,l.ok=v,l.equal=function(t,e,r){t!=e&&y(t,e,r,"==",l.equal)},l.notEqual=function(t,e,r){t==e&&y(t,e,r,"!=",l.notEqual)},l.deepEqual=function(t,e,r){b(t,e,!1)||y(t,e,r,"deepEqual",l.deepEqual)},l.deepStrictEqual=function(t,e,r){b(t,e,!0)||y(t,e,r,"deepStrictEqual",l.deepStrictEqual)},l.notDeepEqual=function(t,e,r){b(t,e,!1)&&y(t,e,r,"notDeepEqual",l.notDeepEqual)},l.notDeepStrictEqual=function t(e,r,i){b(e,r,!0)&&y(e,r,i,"notDeepStrictEqual",t)},l.strictEqual=function(t,e,r){t!==e&&y(t,e,r,"===",l.strictEqual)},l.notStrictEqual=function(t,e,r){t===e&&y(t,e,r,"!==",l.notStrictEqual)},l.throws=function(t,e,r){_(!0,t,e,r)},l.doesNotThrow=function(t,e,r){_(!1,t,e,r)},l.ifError=function(t){if(t)throw t};var E=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,r(3))},function(t,e,r){var i=r(44);r(90),t.exports=i},function(t,e,r){var i=r(0).Buffer,n=r(35).Transform,o=r(23).StringDecoder;function s(t){n.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(1)(s,n),s.prototype.update=function(t,e,r){"string"==typeof t&&(t=i.from(t,e));var n=this._update(t);return this.hashMode?this:(r&&(n=this._toString(n,r)),n)},s.prototype.setAutoPadding=function(){},s.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},s.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},s.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},s.prototype._transform=function(t,e,r){var i;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){i=t}finally{r(i)}},s.prototype._flush=function(t){var e;try{this.push(this.__final())}catch(t){e=t}t(e)},s.prototype._finalOrDigest=function(t){var e=this.__final()||i.alloc(0);return t&&(e=this._toString(e,t,!0)),e},s.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new o(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var i=this._decoder.write(t);return r&&(i+=this._decoder.end()),i},t.exports=s},function(t,e,r){"use strict";var i=r(18),n=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=l;var o=r(14);o.inherits=r(1);var s=r(36),f=r(22);o.inherits(l,s);for(var a=n(f.prototype),h=0;h1)for(var r=1;r=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var i=(4294967295&r)>>>0,n=(r-i)/4294967296;this._block.writeUInt32BE(n,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},n.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=n},function(t,e,r){"use strict";var i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var i,n,o=r.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)s.push(i.value)}catch(t){n={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return s},n=this&&this.__spread||function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(12).RIPEMD160.hash,f="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var h=function(){for(var t=Array(256).fill(-1),e=0;e"9".charCodeAt(0))throw new Error("invalid number");for(var o=n-"0".charCodeAt(0),s=0;s>8}if(o)throw new Error("number is out of range")}return r}function p(t,e){void 0===e&&(e=1);for(var r=Array(e).fill("0".charCodeAt(0)),i=t.length-1;i>=0;--i){for(var o=t[i],s=0;s>8}if(n)throw new Error("base-58 value is out of range")}return r.reverse(),r}function y(t,e){var r,i,s,a;void 0===e&&(e=1);var u=[];try{for(var l=o(t),c=l.next();!c.done;c=l.next()){for(var d=c.value,p=0;p>2,i=3*r;e>0&&"="===t[e-1]&&("="===t[e-2]?i-=2:i-=1);for(var n=new Uint8Array(i),o=0;o>4,3*o+1>2),3*o+2[Math.floor(t/e),t%e])(e,536870912).map((t,e)=>e?8*t:t),s=new Uint8Array(e+r+8);s.set(new Uint8Array(t),0);const f=new DataView(s.buffer);return f.setUint8(e,128),f.setUint32(e+r,o,!0),f.setUint32(e+r+4,n,!0),s.buffer}static f(t,e,r,i){return 0<=t&&t<=15?e^r^i:16<=t&&t<=31?e&r|~e&i:32<=t&&t<=47?(e|~r)^i:48<=t&&t<=63?e&i|r&~i:64<=t&&t<=79?e^(r|~i):void 0}static K(t){return 0<=t&&t<=15?0:16<=t&&t<=31?1518500249:32<=t&&t<=47?1859775393:48<=t&&t<=63?2400959708:64<=t&&t<=79?2840853838:void 0}static KP(t){return 0<=t&&t<=15?1352829926:16<=t&&t<=31?1548603684:32<=t&&t<=47?1836072691:48<=t&&t<=63?2053994217:64<=t&&t<=79?0:void 0}static add_modulo32(){return 0|Array.from(arguments).reduce((t,e)=>t+e,0)}static rol32(t,e){return t<>>32-e}static hash(t){const e=i.pad(t),r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],n=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],o=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],s=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],f=e.byteLength/64,a=new Array(f).fill(void 0).map((t,r)=>t=>new DataView(e,64*r,64).getUint32(4*t,!0));let h=[1732584193,4023233417,2562383102,271733878,3285377520];for(let t=0;tl.setUint32(4*e,t,!0)),u}}t.exports={RIPEMD160:i}},function(t,e,r){(function(e){t.exports=function(t,r){for(var i=Math.min(t.length,r.length),n=new e(i),o=0;o1&&void 0!==arguments[1]?arguments[1]:"EOS";if("string"==typeof t){var i=d.fromString(t,r);return o(null!=i,"Invalid public key"),i}if(e.isBuffer(t))return d.fromBuffer(t);if("object"===(void 0===t?"undefined":n(t))&&t.Q)return d(t.Q);function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.compressed;return t.getEncoded(e)}o.equal(void 0===t?"undefined":n(t),"object","Invalid public key"),o.equal(n(t.compressed),"boolean","Invalid public key");return{Q:t,toString:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"EOS")+u.checkEncode(p())},toUncompressed:function(){var e=t.getEncoded(!1),r=s.Point.decodeFrom(a,e);return d.fromPoint(r)},toBuffer:p,child:function(r){console.error("Deprecated warning: PublicKey.child"),o(e.isBuffer(r),"Buffer required: offset"),o.equal(r.length,32,"offset length"),r=e.concat([p(),r]),r=h.sha256(r);var i=f.fromBuffer(r);if(i.compareTo(c)>=0)throw new Error("Child offset went out of bounds, try again");var n=l.multiply(i),s=t.add(n);if(a.isInfinity(s))throw new Error("Child offset derived to an invalid key, try again");return d.fromPoint(s)},toHex:function(){return p().toString("hex")}}}t.exports=d,d.isValid=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"EOS";try{return d(t,e),!0}catch(t){return!1}},d.fromBinary=function(t){return d.fromBuffer(new e(t,"binary"))},d.fromBuffer=function(t){return d(s.Point.decodeFrom(a,t))},d.fromPoint=function(t){return d(t)},d.fromString=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"EOS";try{return d.fromStringOrThrow(t,e)}catch(t){return null}},d.fromStringOrThrow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"EOS";o.equal(void 0===t?"undefined":n(t),"string","public_key");var r=t.match(/^PUB_([A-Za-z0-9]+)_([A-Za-z0-9]+)$/);if(null===r)return new RegExp("^"+e).test(t)&&(t=t.substring(e.length)),d.fromBuffer(u.checkDecode(t));o(3===r.length,"Expecting public key like: PUB_K1_base58pubkey..");var s=i(r,3),f=s[1],a=s[2];return o.equal(f,"K1","K1 private key expected"),d.fromBuffer(u.checkDecode(a,f))},d.fromHex=function(t){return d.fromBuffer(new e(t,"hex"))},d.fromStringHex=function(t){return d.fromString(new e(t,"hex"))}}).call(this,r(2).Buffer)},function(t,e,r){"use strict";(function(e){var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n=r(100),o=r(4),s=r(29),f=r(8);t.exports={random32ByteBuffer:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.cpuEntropyBits,n=void 0===r?0:r,a=t.safe,c=void 0===a||a;o.equal(void 0===n?"undefined":i(n),"number","cpuEntropyBits"),o.equal(void 0===c?"undefined":i(c),"boolean","boolean"),c&&o(h>=128,"Call initialize() to add entropy");var d=[];return d.push(s(32)),d.push(e.from(l(n))),d.push(u),d.push(function(){var t=Array(s(101)).join();try{t+=(new Date).toString()+" "+window.screen.height+" "+window.screen.width+" "+window.screen.colorDepth+" "+window.screen.availHeight+" "+window.screen.availWidth+" "+window.screen.pixelDepth+navigator.language+" "+window.location+" "+window.history.length;for(var r,i=0;i9007199254740991&&(u[d]=0)}}catch(t){n=!0,s=t}finally{try{!i&&l.return&&l.return()}finally{if(n)throw s}}},cpuEntropy:l,entropyCount:function(){return h},checkDecode:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;o(null!=t,"private key expected");var i=new e(n.decode(t)),s=i.slice(-4),a=i.slice(0,-4),h=void 0;if("sha256x2"===r)h=f.sha256(f.sha256(a)).slice(0,4);else{var u=[a];r&&u.push(e.from(r)),h=f.ripemd160(e.concat(u)).slice(0,4)}if(s.toString()!==h.toString())throw new Error("Invalid checksum, "+s.toString("hex")+" != "+h.toString("hex"));return a},checkEncode:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(o(e.isBuffer(t),"expecting keyBuffer"),"sha256x2"===r){var i=f.sha256(f.sha256(t)).slice(0,4);return n.encode(e.concat([t,i]))}var s=[t];r&&s.push(e.from(r));var a=f.ripemd160(e.concat(s)).slice(0,4);return n.encode(e.concat([t,a]))}};var a=0,h=0,u=s(101);function l(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:128,e=[],r=null,i=0;e.length10){var f=Number(i/t*100).toFixed(2);console.warn("WARN: "+f+"% low CPU entropy re-sampled")}return e}function c(){for(var t=Date.now(),e=0,r=0;Date.now()>>24]^u[p>>>16&255]^l[g>>>8&255]^c[255&y]^e[v++],s=h[p>>>24]^u[g>>>16&255]^l[y>>>8&255]^c[255&d]^e[v++],f=h[g>>>24]^u[y>>>16&255]^l[d>>>8&255]^c[255&p]^e[v++],a=h[y>>>24]^u[d>>>16&255]^l[p>>>8&255]^c[255&g]^e[v++],d=o,p=s,g=f,y=a;return o=(i[d>>>24]<<24|i[p>>>16&255]<<16|i[g>>>8&255]<<8|i[255&y])^e[v++],s=(i[p>>>24]<<24|i[g>>>16&255]<<16|i[y>>>8&255]<<8|i[255&d])^e[v++],f=(i[g>>>24]<<24|i[y>>>16&255]<<16|i[d>>>8&255]<<8|i[255&p])^e[v++],a=(i[y>>>24]<<24|i[d>>>16&255]<<16|i[p>>>8&255]<<8|i[255&g])^e[v++],[o>>>=0,s>>>=0,f>>>=0,a>>>=0]}var f=[0,1,2,4,8,16,32,64,128,27,54],a=function(){for(var t=new Array(256),e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=[],i=[],n=[[],[],[],[]],o=[[],[],[],[]],s=0,f=0,a=0;a<256;++a){var h=f^f<<1^f<<2^f<<3^f<<4;h=h>>>8^255&h^99,r[s]=h,i[h]=s;var u=t[s],l=t[u],c=t[l],d=257*t[h]^16843008*h;n[0][s]=d<<24|d>>>8,n[1][s]=d<<16|d>>>16,n[2][s]=d<<8|d>>>24,n[3][s]=d,d=16843009*c^65537*l^257*u^16843008*s,o[0][h]=d<<24|d>>>8,o[1][h]=d<<16|d>>>16,o[2][h]=d<<8|d>>>24,o[3][h]=d,0===s?s=f=1:(s=u^t[t[t[c^u]]],f^=t[t[f]])}return{SBOX:r,INV_SBOX:i,SUB_MIX:n,INV_SUB_MIX:o}}();function h(t){this._key=n(t),this._reset()}h.blockSize=16,h.keySize=32,h.prototype.blockSize=h.blockSize,h.prototype.keySize=h.keySize,h.prototype._reset=function(){for(var t=this._key,e=t.length,r=e+6,i=4*(r+1),n=[],o=0;o>>24,s=a.SBOX[s>>>24]<<24|a.SBOX[s>>>16&255]<<16|a.SBOX[s>>>8&255]<<8|a.SBOX[255&s],s^=f[o/e|0]<<24):e>6&&o%e==4&&(s=a.SBOX[s>>>24]<<24|a.SBOX[s>>>16&255]<<16|a.SBOX[s>>>8&255]<<8|a.SBOX[255&s]),n[o]=n[o-e]^s}for(var h=[],u=0;u>>24]]^a.INV_SUB_MIX[1][a.SBOX[c>>>16&255]]^a.INV_SUB_MIX[2][a.SBOX[c>>>8&255]]^a.INV_SUB_MIX[3][a.SBOX[255&c]]}this._nRounds=r,this._keySchedule=n,this._invKeySchedule=h},h.prototype.encryptBlockRaw=function(t){return s(t=n(t),this._keySchedule,a.SUB_MIX,a.SBOX,this._nRounds)},h.prototype.encryptBlock=function(t){var e=this.encryptBlockRaw(t),r=i.allocUnsafe(16);return r.writeUInt32BE(e[0],0),r.writeUInt32BE(e[1],4),r.writeUInt32BE(e[2],8),r.writeUInt32BE(e[3],12),r},h.prototype.decryptBlock=function(t){var e=(t=n(t))[1];t[1]=t[3],t[3]=e;var r=s(t,this._invKeySchedule,a.INV_SUB_MIX,a.INV_SBOX,this._nRounds),o=i.allocUnsafe(16);return o.writeUInt32BE(r[0],0),o.writeUInt32BE(r[3],4),o.writeUInt32BE(r[2],8),o.writeUInt32BE(r[1],12),o},h.prototype.scrub=function(){o(this._keySchedule),o(this._invKeySchedule),o(this._key)},t.exports.AES=h},function(t,e,r){"use strict";(function(e){!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports={nextTick:function(t,r,i,n){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,s,f=arguments.length;switch(f){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,i)});case 4:return e.nextTick(function(){t.call(null,r,i,n)});default:for(o=new Array(f-1),s=0;s0&&void 0!==arguments[0]?arguments[0]:0;return g.initialize().then(function(){return g.fromBuffer(c.random32ByteBuffer({cpuEntropyBits:t}))})},g.unsafeRandomKey=function(){return Promise.resolve(g.fromBuffer(c.random32ByteBuffer({safe:!1})))};var v=!1;g.initialize=p(function(){v||(function(){var t=g(u.sha256("")),e="key comparison test failed on a known private key";h.equal(t.toWif(),"5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss",e),h.equal(t.toString(),"5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss",e);var r=t.toPublic();h.equal(r.toString(),"EOS859gxfnXyUriMgUeThh1fWv3oqcpLFyHa3TfFYC4PK2HqhToVM","pubkey string comparison test failed on a known public key"),b(function(){return g.fromString(t.toWif())},"converting known wif from string"),b(function(){return g.fromString(t.toString())},"converting known pvt from string"),b(function(){return l.fromString(r.toString())},"converting known public key from string"),!0}(),c.addEntropy.apply(c,function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e=128,"insufficient entropy"),v=!0)});var b=function(t,e){try{t()}catch(t){throw t.message=e+" ==> "+t.message,t}}}).call(this,r(2).Buffer)},function(t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function i(t){return"function"==typeof t}function n(t){return"object"==typeof t&&null!==t}function o(t){return void 0===t}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(t){if(!function(t){return"number"==typeof t}(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},r.prototype.emit=function(t){var e,r,s,f,a,h;if(this._events||(this._events={}),"error"===t&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var u=new Error('Uncaught, unspecified "error" event. ('+e+")");throw u.context=e,u}if(o(r=this._events[t]))return!1;if(i(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),r.apply(this,f)}else if(n(r))for(f=Array.prototype.slice.call(arguments,1),s=(h=r.slice()).length,a=0;a0&&this._events[t].length>s&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){if(!i(e))throw TypeError("listener must be a function");var r=!1;function n(){this.removeListener(t,n),r||(r=!0,e.apply(this,arguments))}return n.listener=e,this.on(t,n),this},r.prototype.removeListener=function(t,e){var r,o,s,f;if(!i(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(s=(r=this._events[t]).length,o=-1,r===e||i(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(n(r)){for(f=s;f-- >0;)if(r[f]===e||r[f].listener&&r[f].listener===e){o=f;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(i(r=this._events[t]))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){return this._events&&this._events[t]?i(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(i(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,r){(e=t.exports=r(36)).Stream=e,e.Readable=e,e.Writable=r(22),e.Duplex=r(7),e.Transform=r(39),e.PassThrough=r(80)},function(t,e,r){"use strict";(function(e,i,n){var o=r(18);function s(t){var e=this;this.next=null,this.entry=null,this.finish=function(){!function(t,e,r){var i=t.entry;t.entry=null;for(;i;){var n=i.callback;e.pendingcb--,n(r),i=i.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}(e,t)}}t.exports=b;var f,a=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?i:o.nextTick;b.WritableState=v;var h=r(14);h.inherits=r(1);var u={deprecate:r(79)},l=r(37),c=r(0).Buffer,d=n.Uint8Array||function(){};var p,g=r(38);function y(){}function v(t,e){f=f||r(7),t=t||{};var i=e instanceof f;this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var n=t.highWaterMark,h=t.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i&&(h||0===h)?h:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var l=!1===t.decodeStrings;this.decodeStrings=!l,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){!function(t,e){var r=t._writableState,i=r.sync,n=r.writecb;if(function(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}(r),e)!function(t,e,r,i,n){--e.pendingcb,r?(o.nextTick(n,i),o.nextTick(S,t,e),t._writableState.errorEmitted=!0,t.emit("error",i)):(n(i),t._writableState.errorEmitted=!0,t.emit("error",i),S(t,e))}(t,r,i,e,n);else{var s=E(r);s||r.corked||r.bufferProcessing||!r.bufferedRequest||_(t,r),i?a(m,t,r,s,n):m(t,r,s,n)}}(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function b(t){if(f=f||r(7),!(p.call(b,this)||this instanceof f))return new b(t);this._writableState=new v(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),l.call(this)}function w(t,e,r,i,n,o,s){e.writelen=i,e.writecb=s,e.writing=!0,e.sync=!0,r?t._writev(n,e.onwrite):t._write(n,o,e.onwrite),e.sync=!1}function m(t,e,r,i){r||function(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}(t,e),e.pendingcb--,i(),S(t,e)}function _(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var i=e.bufferedRequestCount,n=new Array(i),o=e.corkedRequestsFree;o.entry=r;for(var f=0,a=!0;r;)n[f]=r,r.isBuf||(a=!1),r=r.next,f+=1;n.allBuffers=a,w(t,e,!0,e.length,n,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new s(e),e.bufferedRequestCount=0}else{for(;r;){var h=r.chunk,u=r.encoding,l=r.callback;if(w(t,e,!1,e.objectMode?1:h.length,h,u,l),r=r.next,e.bufferedRequestCount--,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequest=r,e.bufferProcessing=!1}function E(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function T(t,e){t._final(function(r){e.pendingcb--,r&&t.emit("error",r),e.prefinished=!0,t.emit("prefinish"),S(t,e)})}function S(t,e){var r=E(e);return r&&(!function(t,e){e.prefinished||e.finalCalled||("function"==typeof t._final?(e.pendingcb++,e.finalCalled=!0,o.nextTick(T,t,e)):(e.prefinished=!0,t.emit("prefinish")))}(t,e),0===e.pendingcb&&(e.finished=!0,t.emit("finish"))),r}h.inherits(b,l),v.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(v.prototype,"buffer",{get:u.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(b,Symbol.hasInstance,{value:function(t){return!!p.call(this,t)||this===b&&(t&&t._writableState instanceof v)}})):p=function(t){return t instanceof this},b.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},b.prototype.write=function(t,e,r){var i=this._writableState,n=!1,s=!i.objectMode&&function(t){return c.isBuffer(t)||t instanceof d}(t);return s&&!c.isBuffer(t)&&(t=function(t){return c.from(t)}(t)),"function"==typeof e&&(r=e,e=null),s?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof r&&(r=y),i.ended?function(t,e){var r=new Error("write after end");t.emit("error",r),o.nextTick(e,r)}(this,r):(s||function(t,e,r,i){var n=!0,s=!1;return null===r?s=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||e.objectMode||(s=new TypeError("Invalid non-string/buffer chunk")),s&&(t.emit("error",s),o.nextTick(i,s),n=!1),n}(this,i,t,r))&&(i.pendingcb++,n=function(t,e,r,i,n,o){if(!r){var s=function(t,e,r){t.objectMode||!1===t.decodeStrings||"string"!=typeof e||(e=c.from(e,r));return e}(e,i,n);i!==s&&(r=!0,n="buffer",i=s)}var f=e.objectMode?1:i.length;e.length+=f;var a=e.length-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(t,e,r){r(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(t,e,r){var i=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!==t&&void 0!==t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||function(t,e,r){e.ending=!0,S(t,e),r&&(e.finished?o.nextTick(r):t.once("finish",r));e.ended=!0,t.writable=!1}(this,i,r)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(t){this._writableState&&(this._writableState.destroyed=t)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(t,e){this.end(),e(t)}}).call(this,r(9),r(77).setImmediate,r(3))},function(t,e,r){"use strict";var i=r(0).Buffer,n=i.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(i.isEncoding===n||!n(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=a,this.end=h,e=4;break;case"utf8":this.fillLast=f,e=4;break;case"base64":this.text=u,this.end=l,e=3;break;default:return this.write=c,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=i.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function f(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function a(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function h(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function u(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function l(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function c(t){return t.toString(this.encoding)}function d(t){return t&&t.length?this.write(t):""}e.StringDecoder=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return n>0&&(t.lastNeed=n-1),n;if(--i=0)return n>0&&(t.lastNeed=n-2),n;if(--i=0)return n>0&&(2===n?n=0:t.lastNeed=n-3),n;return 0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},function(t,e,r){"use strict";(function(e){var i=r(1),n=r(42),o=new Array(16);function s(){n.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(t,e){return t<>>32-e}function a(t,e,r,i,n,o,s){return f(t+(e&r|~e&i)+n+o|0,s)+e|0}function h(t,e,r,i,n,o,s){return f(t+(e&i|r&~i)+n+o|0,s)+e|0}function u(t,e,r,i,n,o,s){return f(t+(e^r^i)+n+o|0,s)+e|0}function l(t,e,r,i,n,o,s){return f(t+(r^(e|~i))+n+o|0,s)+e|0}i(s,n),s.prototype._update=function(){for(var t=o,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);var r=this._a,i=this._b,n=this._c,s=this._d;i=l(i=l(i=l(i=l(i=u(i=u(i=u(i=u(i=h(i=h(i=h(i=h(i=a(i=a(i=a(i=a(i,n=a(n,s=a(s,r=a(r,i,n,s,t[0],3614090360,7),i,n,t[1],3905402710,12),r,i,t[2],606105819,17),s,r,t[3],3250441966,22),n=a(n,s=a(s,r=a(r,i,n,s,t[4],4118548399,7),i,n,t[5],1200080426,12),r,i,t[6],2821735955,17),s,r,t[7],4249261313,22),n=a(n,s=a(s,r=a(r,i,n,s,t[8],1770035416,7),i,n,t[9],2336552879,12),r,i,t[10],4294925233,17),s,r,t[11],2304563134,22),n=a(n,s=a(s,r=a(r,i,n,s,t[12],1804603682,7),i,n,t[13],4254626195,12),r,i,t[14],2792965006,17),s,r,t[15],1236535329,22),n=h(n,s=h(s,r=h(r,i,n,s,t[1],4129170786,5),i,n,t[6],3225465664,9),r,i,t[11],643717713,14),s,r,t[0],3921069994,20),n=h(n,s=h(s,r=h(r,i,n,s,t[5],3593408605,5),i,n,t[10],38016083,9),r,i,t[15],3634488961,14),s,r,t[4],3889429448,20),n=h(n,s=h(s,r=h(r,i,n,s,t[9],568446438,5),i,n,t[14],3275163606,9),r,i,t[3],4107603335,14),s,r,t[8],1163531501,20),n=h(n,s=h(s,r=h(r,i,n,s,t[13],2850285829,5),i,n,t[2],4243563512,9),r,i,t[7],1735328473,14),s,r,t[12],2368359562,20),n=u(n,s=u(s,r=u(r,i,n,s,t[5],4294588738,4),i,n,t[8],2272392833,11),r,i,t[11],1839030562,16),s,r,t[14],4259657740,23),n=u(n,s=u(s,r=u(r,i,n,s,t[1],2763975236,4),i,n,t[4],1272893353,11),r,i,t[7],4139469664,16),s,r,t[10],3200236656,23),n=u(n,s=u(s,r=u(r,i,n,s,t[13],681279174,4),i,n,t[0],3936430074,11),r,i,t[3],3572445317,16),s,r,t[6],76029189,23),n=u(n,s=u(s,r=u(r,i,n,s,t[9],3654602809,4),i,n,t[12],3873151461,11),r,i,t[15],530742520,16),s,r,t[2],3299628645,23),n=l(n,s=l(s,r=l(r,i,n,s,t[0],4096336452,6),i,n,t[7],1126891415,10),r,i,t[14],2878612391,15),s,r,t[5],4237533241,21),n=l(n,s=l(s,r=l(r,i,n,s,t[12],1700485571,6),i,n,t[3],2399980690,10),r,i,t[10],4293915773,15),s,r,t[1],2240044497,21),n=l(n,s=l(s,r=l(r,i,n,s,t[8],1873313359,6),i,n,t[15],4264355552,10),r,i,t[6],2734768916,15),s,r,t[13],1309151649,21),n=l(n,s=l(s,r=l(r,i,n,s,t[4],4149444226,6),i,n,t[11],3174756917,10),r,i,t[2],718787259,15),s,r,t[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+i|0,this._c=this._c+n|0,this._d=this._d+s|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=new e(16);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t},t.exports=s}).call(this,r(2).Buffer)},function(t,e,r){var i=r(43),n=r(45),o=r(91);t.exports={Curve:n,Point:i,getCurveByName:o}},,function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){"use strict";(function(e){var i=r(29),n=r(64),o=r(66),s=r(4),f=r(15),a=r(19),h=r(8),u=n.Long;function l(t,r,i,u,l){if(!(t=a(t)))throw new TypeError("private_key is required");if(!(r=f(r)))throw new TypeError("public_key is required");if(!(i=d(i)))throw new TypeError("nonce is required");if(!e.isBuffer(u)){if("string"!=typeof u)throw new TypeError("message should be buffer or string");u=new e(u,"binary")}if(l&&"number"!=typeof l)throw new TypeError("checksum should be a number");var c=t.getSharedSecret(r),g=new n(n.DEFAULT_CAPACITY,n.LITTLE_ENDIAN);g.writeUint64(i),g.append(c.toString("binary"),"binary"),g=new e(g.copy(0,g.offset).toBinary(),"binary");var y=h.sha512(g),v=y.slice(32,48),b=y.slice(0,32),w=h.sha256(y);if(w=w.slice(0,4),w=n.fromBinary(w.toString("binary"),n.DEFAULT_CAPACITY,n.LITTLE_ENDIAN).readUint32(),l){if(w!==l)throw new Error("Invalid key");u=function(t,r,i){s(t,"Missing cipher text"),t=p(t);var n=o.createDecipheriv("aes-256-cbc",r,i);return t=e.concat([n.update(t),n.final()])}(u,b,v)}else u=function(t,r,i){s(t,"Missing plain text"),t=p(t);var n=o.createCipheriv("aes-256-cbc",r,i);return t=e.concat([n.update(t),n.final()])}(u,b,v);return{nonce:i,message:u,checksum:w}}t.exports={encrypt:function(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){if(null===c){var t=new Uint8Array(i(2));c=parseInt(t[0]<<8|t[1],10)}var e=u.fromNumber(Date.now()),r=++c%65535;return(e=e.shiftLeft(16).or(u.fromNumber(r))).toString()}();return l(t,e,n,r)},decrypt:function(t,e,r,i,n){return l(t,e,r,i,n).message}};var c=null,d=function(t){return t?u.isLong(t)?t:u.fromString(t):t},p=function(t){return t?e.isBuffer(t)?t:new e(t,"binary"):t}}).call(this,r(2).Buffer)},function(t,e,r){"use strict";(function(e,i){var n=r(0).Buffer,o=e.crypto||e.msCrypto;o&&o.getRandomValues?t.exports=function(t,r){if(t>65536)throw new Error("requested too many random bytes");var s=new e.Uint8Array(t);t>0&&o.getRandomValues(s);var f=n.from(s.buffer);if("function"==typeof r)return i.nextTick(function(){r(null,f)});return f}:t.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}).call(this,r(3),r(9))},function(t,e,r){var i={ECB:r(68),CBC:r(69),CFB:r(70),CFB8:r(71),CFB1:r(72),OFB:r(73),CTR:r(31),GCM:r(31)},n=r(33);for(var o in n)n[o].module=i[n[o].mode];t.exports=n},function(t,e,r){var i=r(13),n=r(0).Buffer,o=r(32);function s(t){var e=t._cipher.encryptBlockRaw(t._prev);return o(t._prev),e}e.encrypt=function(t,e){var r=Math.ceil(e.length/16),o=t._cache.length;t._cache=n.concat([t._cache,n.allocUnsafe(16*r)]);for(var f=0;f0?("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===h.prototype||(e=function(t){return h.from(t)}(e)),i?s.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):_(t,s,e,!0):s.ended?t.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?_(t,s,e,!1):I(t,s)):_(t,s,e,!1))):i||(s.reading=!1));return function(t){return!t.ended&&(t.needReadable||t.lengthe.highWaterMark&&(e.highWaterMark=function(t){return t>=E?t=E:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function S(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(d("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?n.nextTick(B,t):B(t))}function B(t){d("emit readable"),t.emit("readable"),x(t)}function I(t,e){e.readingMore||(e.readingMore=!0,n.nextTick(A,t,e))}function A(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=function(t,e,r){var i;to.length?o.length:t;if(s===o.length?n+=o:n+=o.slice(0,t),0===(t-=s)){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}(t,e):function(t,e){var r=h.allocUnsafe(t),i=e.head,n=1;i.data.copy(r),t-=i.data.length;for(;i=i.next;){var o=i.data,s=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,s),0===(t-=s)){s===o.length?(++n,i.next?e.head=i.next:e.head=e.tail=null):(e.head=i,i.data=o.slice(s));break}++n}return e.length-=n,r}(t,e);return i}(t,e.buffer,e.decoder),r);var r}function R(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,n.nextTick(D,e,t))}function D(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function O(t,e){for(var r=0,i=t.length;r=e.highWaterMark||e.ended))return d("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?R(this):S(this),null;if(0===(t=T(t,e))&&e.ended)return 0===e.length&&R(this),null;var i,n=e.needReadable;return d("need readable",n),(0===e.length||e.length-t0?L(t,e):null)?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&R(this)),null!==i&&this.emit("data",i),i},w.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"))},w.prototype.pipe=function(t,e){var r=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=t;break;case 1:o.pipes=[o.pipes,t];break;default:o.pipes.push(t)}o.pipesCount+=1,d("pipe count=%d opts=%j",o.pipesCount,e);var a=(!e||!1!==e.end)&&t!==i.stdout&&t!==i.stderr?u:w;function h(e,i){d("onunpipe"),e===r&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,d("cleanup"),t.removeListener("close",v),t.removeListener("finish",b),t.removeListener("drain",l),t.removeListener("error",y),t.removeListener("unpipe",h),r.removeListener("end",u),r.removeListener("end",w),r.removeListener("data",g),c=!0,!o.awaitDrain||t._writableState&&!t._writableState.needDrain||l())}function u(){d("onend"),t.end()}o.endEmitted?n.nextTick(a):r.once("end",a),t.on("unpipe",h);var l=function(t){return function(){var e=t._readableState;d("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&f(t,"data")&&(e.flowing=!0,x(t))}}(r);t.on("drain",l);var c=!1;var p=!1;function g(e){d("ondata"),p=!1,!1!==t.write(e)||p||((1===o.pipesCount&&o.pipes===t||o.pipesCount>1&&-1!==O(o.pipes,t))&&!c&&(d("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function y(e){d("onerror",e),w(),t.removeListener("error",y),0===f(t,"error")&&t.emit("error",e)}function v(){t.removeListener("finish",b),w()}function b(){d("onfinish"),t.removeListener("close",v),w()}function w(){d("unpipe"),r.unpipe(t)}return r.on("data",g),function(t,e,r){if("function"==typeof t.prependListener)return t.prependListener(e,r);t._events&&t._events[e]?s(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r)}(t,"error",y),t.once("close",v),t.once("finish",b),t.emit("pipe",r),o.flowing||(d("pipe resume"),r.resume()),t},w.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var o=0;o0||o>0;){var u=new n;u.update(h),u.update(t),e&&u.update(e),h=u.digest();var l=0;if(s>0){var c=f.length-s;l=Math.min(s,h.length),h.copy(f,c,0,l),s-=l}if(l0){var d=a.length-o,p=Math.min(o,h.length-l);h.copy(a,d,l,l+p),o-=p}}return h.fill(0),{key:f,iv:a}}},function(t,e,r){"use strict";var i=r(0).Buffer,n=r(35).Transform;function o(t){n.call(this),this._block=i.allocUnsafe(t),this._blockSize=t,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}r(1)(o,n),o.prototype._transform=function(t,e,r){var i=null;try{this.update(t,e)}catch(t){i=t}r(i)},o.prototype._flush=function(t){var e=null;try{this.push(this.digest())}catch(t){e=t}t(e)},o.prototype.update=function(t,e){if(function(t,e){if(!i.isBuffer(t)&&"string"!=typeof t)throw new TypeError(e+" must be a string or a buffer")}(t,"Data"),this._finalized)throw new Error("Digest already called");i.isBuffer(t)||(t=i.from(t,e));for(var r=this._block,n=0;this._blockOffset+t.length-n>=this._blockSize;){for(var o=this._blockOffset;o0;++s)this._length[s]+=f,(f=this._length[s]/4294967296|0)>0&&(this._length[s]-=4294967296*f);return this},o.prototype._update=function(){throw new Error("_update is not implemented")},o.prototype.digest=function(t){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var e=this._digest();void 0!==t&&(e=e.toString(t)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return e},o.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=o},function(t,e,r){var i=r(4),n=r(0).Buffer,o=r(5),s=o.valueOf(3);function f(t,e,r,n){i.notStrictEqual(n,void 0,"Missing Z coordinate"),this.curve=t,this.x=e,this.y=r,this.z=n,this._zInv=null,this.compressed=!0}Object.defineProperty(f.prototype,"zInv",{get:function(){return null===this._zInv&&(this._zInv=this.z.modInverse(this.curve.p)),this._zInv}}),Object.defineProperty(f.prototype,"affineX",{get:function(){return this.x.multiply(this.zInv).mod(this.curve.p)}}),Object.defineProperty(f.prototype,"affineY",{get:function(){return this.y.multiply(this.zInv).mod(this.curve.p)}}),f.fromAffine=function(t,e,r){return new f(t,e,r,o.ONE)},f.prototype.equals=function(t){return t===this||(this.curve.isInfinity(this)?this.curve.isInfinity(t):this.curve.isInfinity(t)?this.curve.isInfinity(this):0===t.y.multiply(this.z).subtract(this.y.multiply(t.z)).mod(this.curve.p).signum()&&0===t.x.multiply(this.z).subtract(this.x.multiply(t.z)).mod(this.curve.p).signum())},f.prototype.negate=function(){var t=this.curve.p.subtract(this.y);return new f(this.curve,this.x,t,this.z)},f.prototype.add=function(t){if(this.curve.isInfinity(this))return t;if(this.curve.isInfinity(t))return this;var e=this.x,r=this.y,i=t.x,n=t.y.multiply(this.z).subtract(r.multiply(t.z)).mod(this.curve.p),o=i.multiply(this.z).subtract(e.multiply(t.z)).mod(this.curve.p);if(0===o.signum())return 0===n.signum()?this.twice():this.curve.infinity;var a=o.square(),h=a.multiply(o),u=e.multiply(a),l=n.square().multiply(this.z),c=l.subtract(u.shiftLeft(1)).multiply(t.z).subtract(h).multiply(o).mod(this.curve.p),d=u.multiply(s).multiply(n).subtract(r.multiply(h)).subtract(l.multiply(n)).multiply(t.z).add(n.multiply(h)).mod(this.curve.p),p=h.multiply(this.z).multiply(t.z).mod(this.curve.p);return new f(this.curve,c,d,p)},f.prototype.twice=function(){if(this.curve.isInfinity(this))return this;if(0===this.y.signum())return this.curve.infinity;var t=this.x,e=this.y,r=e.multiply(this.z).mod(this.curve.p),i=r.multiply(e).mod(this.curve.p),n=this.curve.a,o=t.square().multiply(s);0!==n.signum()&&(o=o.add(this.z.square().multiply(n)));var a=(o=o.mod(this.curve.p)).square().subtract(t.shiftLeft(3).multiply(i)).shiftLeft(1).multiply(r).mod(this.curve.p),h=o.multiply(s).multiply(t).subtract(i.shiftLeft(1)).shiftLeft(2).multiply(i).subtract(o.pow(3)).mod(this.curve.p),u=r.pow(3).shiftLeft(3).mod(this.curve.p);return new f(this.curve,a,h,u)},f.prototype.multiply=function(t){if(this.curve.isInfinity(this))return this;if(0===t.signum())return this.curve.infinity;for(var e=t,r=e.multiply(s),i=this.negate(),n=this,o=r.bitLength()-2;o>0;--o){var f=r.testBit(o),a=e.testBit(o);n=n.twice(),f!==a&&(n=n.add(f?this:i))}return n},f.prototype.multiplyTwo=function(t,e,r){for(var i=Math.max(t.bitLength(),r.bitLength())-1,n=this.curve.infinity,o=this.add(e);i>=0;){var s=t.testBit(i),f=r.testBit(i);n=n.twice(),s?n=f?n.add(o):n.add(this):f&&(n=n.add(e)),--i}return n},f.prototype.getEncoded=function(t){if(null==t&&(t=this.compressed),this.curve.isInfinity(this))return n.alloc(1,0);var e,r=this.affineX,i=this.affineY,o=this.curve.pLength;return t?(e=n.allocUnsafe(1+o)).writeUInt8(i.isEven()?2:3,0):((e=n.allocUnsafe(1+o+o)).writeUInt8(4,0),i.toBuffer(o).copy(e,1+o)),r.toBuffer(o).copy(e,1),e},f.decodeFrom=function(t,e){var r,n=e.readUInt8(0),s=4!==n,a=Math.floor((t.p.bitLength()+7)/8),h=o.fromBuffer(e.slice(1,1+a));if(s){i.equal(e.length,a+1,"Invalid sequence length"),i(2===n||3===n,"Invalid sequence tag");var u=3===n;r=t.pointFromX(u,h)}else{i.equal(e.length,1+a+a,"Invalid sequence length");var l=o.fromBuffer(e.slice(1+a));r=f.fromAffine(t,h,l)}return r.compressed=s,r},f.prototype.toString=function(){return this.curve.isInfinity(this)?"(INFINITY)":"("+this.affineX.toString()+","+this.affineY.toString()+")"},t.exports=f},function(t,e,r){function i(t,e,r){if(!(this instanceof i))return new i(t,e,r);null!=t&&("number"==typeof t?this.fromNumber(t,e,r):null==e&&"string"!=typeof t?this.fromString(t,256):this.fromString(t,e))}var n=i.prototype;n.__bigi=r(89).version,i.isBigInteger=function(t,e){return t&&t.__bigi&&(!e||t.__bigi===n.__bigi)},i.prototype.am=function(t,e,r,i,n,o){for(;--o>=0;){var s=e*this[t++]+r[i]+n;n=Math.floor(s/67108864),r[i++]=67108863&s}return n},i.prototype.DB=26,i.prototype.DM=67108863;var o=i.prototype.DV=1<<26;i.prototype.FV=Math.pow(2,52),i.prototype.F1=26,i.prototype.F2=0;var s,f,a="0123456789abcdefghijklmnopqrstuvwxyz",h=new Array;for(s="0".charCodeAt(0),f=0;f<=9;++f)h[s++]=f;for(s="a".charCodeAt(0),f=10;f<36;++f)h[s++]=f;for(s="A".charCodeAt(0),f=10;f<36;++f)h[s++]=f;function u(t){return a.charAt(t)}function l(t,e){var r=h[t.charCodeAt(e)];return null==r?-1:r}function c(t){var e=new i;return e.fromInt(t),e}function d(t){var e,r=1;return 0!=(e=t>>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function p(t){this.m=t}function g(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),0==(255&t)&&(t>>=8,e+=8),0==(15&t)&&(t>>=4,e+=4),0==(3&t)&&(t>>=2,e+=2),0==(1&t)&&++e,e}function _(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function E(){}function T(t){return t}function S(t){this.r2=new i,this.q3=new i,i.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}p.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},p.prototype.revert=function(t){return t},p.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},p.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},p.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},g.prototype.convert=function(t){var e=new i;return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(i.ZERO)>0&&this.m.subTo(e,e),e},g.prototype.revert=function(t){var e=new i;return t.copyTo(e),this.reduce(e),e},g.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,i,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},g.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},g.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},n.copyTo=function(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},n.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+o:this.t=0},n.fromString=function(t,e){var r;if(16==e)r=4;else if(8==e)r=3;else if(256==e)r=8;else if(2==e)r=1;else if(32==e)r=5;else{if(4!=e)return void this.fromRadix(t,e);r=2}this.t=0,this.s=0;for(var n=t.length,o=!1,s=0;--n>=0;){var f=8==r?255&t[n]:l(t,n);f<0?"-"==t.charAt(n)&&(o=!0):(o=!1,0==s?this[this.t++]=f:s+r>this.DB?(this[this.t-1]|=(f&(1<>this.DB-s):this[this.t-1]|=f<=this.DB&&(s-=this.DB))}8==r&&0!=(128&t[0])&&(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},n.dlShiftTo=function(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},n.drShiftTo=function(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>n|f,f=(this[r]&o)<=0;--r)e[r]=0;e[s]=f,e.t=this.t+s+1,e.s=this.s,e.clamp()},n.rShiftTo=function(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var i=t%this.DB,n=this.DB-i,o=(1<>i;for(var s=r+1;s>i;i>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i-=t.s}e.s=i<0?-1:0,i<-1?e[r++]=this.DV+i:i>0&&(e[r++]=i),e.t=r,e.clamp()},n.multiplyTo=function(t,e){var r=this.abs(),n=t.abs(),o=r.t;for(e.t=o+n.t;--o>=0;)e[o]=0;for(o=0;o=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},n.divRemTo=function(t,e,r){var n=t.abs();if(!(n.t<=0)){var o=this.abs();if(o.t0?(n.lShiftTo(h,s),o.lShiftTo(h,r)):(n.copyTo(s),o.copyTo(r));var u=s.t,l=s[u-1];if(0!=l){var c=l*(1<1?s[u-2]>>this.F2:0),p=this.FV/c,g=(1<=0&&(r[r.t++]=1,r.subTo(w,r)),i.ONE.dlShiftTo(u,w),w.subTo(s,s);s.t=0;){var m=r[--v]==l?this.DM:Math.floor(r[v]*p+(r[v-1]+y)*g);if((r[v]+=s.am(0,m,r,b,0,u))0&&r.rShiftTo(h,r),f<0&&i.ZERO.subTo(r,r)}}},n.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},n.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},n.exp=function(t,e){if(t>4294967295||t<1)return i.ONE;var r=new i,n=new i,o=e.convert(this),s=d(t)-1;for(o.copyTo(r);--s>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,o,r);else{var f=r;r=n,n=f}return e.revert(r)},n.toString=function(t){var e;if(this.s<0)return"-"+this.negate().toString(t);if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return this.toRadix(t);e=2}var r,i=(1<0)for(f>f)>0&&(n=!0,o=u(r));s>=0;)f>(f+=this.DB-e)):(r=this[s]>>(f-=e)&i,f<=0&&(f+=this.DB,--s)),r>0&&(n=!0),n&&(o+=u(r));return n?o:"0"},n.negate=function(){var t=new i;return i.ZERO.subTo(this,t),t},n.abs=function(){return this.s<0?this.negate():this},n.compareTo=function(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},n.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+d(this[this.t-1]^this.s&this.DM)},n.byteLength=function(){return this.bitLength()>>3},n.mod=function(t){var e=new i;return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(i.ZERO)>0&&t.subTo(e,e),e},n.modPowInt=function(t,e){var r;return r=t<256||e.isEven()?new p(e):new g(e),this.exp(t,r)},E.prototype.convert=T,E.prototype.revert=T,E.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r)},E.prototype.sqrTo=function(t,e){t.squareTo(e)},S.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=new i;return t.copyTo(e),this.reduce(e),e},S.prototype.revert=function(t){return t},S.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},S.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},S.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)};var B=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],I=(1<<26)/B[B.length-1];n.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},n.toRadix=function(t){if(null==t&&(t=10),0==this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),r=Math.pow(t,e),n=c(r),o=new i,s=new i,f="";for(this.divRemTo(n,o,s);o.signum()>0;)f=(r+s.intValue()).toString(t).substr(1)+f,o.divRemTo(n,o,s);return s.intValue().toString(t)+f},n.fromRadix=function(t,e){this.fromInt(0),null==e&&(e=10);for(var r=this.chunkSize(e),n=Math.pow(e,r),o=!1,s=0,f=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(f,0),s=0,f=0))}s>0&&(this.dMultiply(Math.pow(e,s)),this.dAddOffset(f,0)),o&&i.ZERO.subTo(this,this)},n.fromNumber=function(t,e,r){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t,r),this.testBit(t-1)||this.bitwiseTo(i.ONE.shiftLeft(t-1),v,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(i.ONE.shiftLeft(t-1),this);else{var n=new Array,o=7&t;n.length=1+(t>>3),e.nextBytes(n),o>0?n[0]&=(1<>=this.DB;if(t.t>=this.DB;i+=this.s}else{for(i+=this.s;r>=this.DB;i+=t.s}e.s=i<0?-1:0,i>0?e[r++]=i:i<-1&&(e[r++]=this.DV+i),e.t=r,e.clamp()},n.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},n.dAddOffset=function(t,e){if(0!=t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},n.multiplyLowerTo=function(t,e,r){var i,n=Math.min(this.t+t.t,e);for(r.s=0,r.t=n;n>0;)r[--n]=0;for(i=r.t-this.t;n=0;)r[i]=0;for(i=Math.max(e-this.t,0);i0)if(0==e)r=this[0]%t;else for(var i=this.t-1;i>=0;--i)r=(e*r+this[i])%t;return r},n.millerRabin=function(t){var e=this.subtract(i.ONE),r=e.getLowestSetBit();if(r<=0)return!1;var n=e.shiftRight(r);(t=t+1>>1)>B.length&&(t=B.length);for(var o=new i(null),s=[],f=0;f>24},n.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},n.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},n.toByteArray=function(){var t=this.t,e=new Array;e[0]=this.s;var r,i=this.DB-t*this.DB%8,n=0;if(t-- >0)for(i>i)!=(this.s&this.DM)>>i&&(e[n++]=r|this.s<=0;)i<8?(r=(this[t]&(1<>(i+=this.DB-8)):(r=this[t]>>(i-=8)&255,i<=0&&(i+=this.DB,--t)),0!=(128&r)&&(r|=-256),0===n&&(128&this.s)!=(128&r)&&++n,(n>0||r!=this.s)&&(e[n++]=r);return e},n.equals=function(t){return 0==this.compareTo(t)},n.min=function(t){return this.compareTo(t)<0?this:t},n.max=function(t){return this.compareTo(t)>0?this:t},n.and=function(t){var e=new i;return this.bitwiseTo(t,y,e),e},n.or=function(t){var e=new i;return this.bitwiseTo(t,v,e),e},n.xor=function(t){var e=new i;return this.bitwiseTo(t,b,e),e},n.andNot=function(t){var e=new i;return this.bitwiseTo(t,w,e),e},n.not=function(){for(var t=new i,e=0;e=this.t?0!=this.s:0!=(this[e]&1<1){var l=new i;for(n.sqrTo(f[1],l);a<=u;)f[a]=new i,n.mulTo(l,f[a-2],f[a]),a+=2}var y,v,b=t.t-1,w=!0,m=new i;for(o=d(t[b])-1;b>=0;){for(o>=h?y=t[b]>>o-h&u:(y=(t[b]&(1<0&&(y|=t[b-1]>>this.DB+o-h)),a=r;0==(1&y);)y>>=1,--a;if((o-=a)<0&&(o+=this.DB,--b),w)f[y].copyTo(s),w=!1;else{for(;a>1;)n.sqrTo(s,m),n.sqrTo(m,s),a-=2;a>0?n.sqrTo(s,m):(v=s,s=m,m=v),n.mulTo(m,f[y],s)}for(;b>=0&&0==(t[b]&1<=0?(r.subTo(n,r),e&&o.subTo(f,o),s.subTo(a,s)):(n.subTo(r,n),e&&f.subTo(o,f),a.subTo(s,a))}if(0!=n.compareTo(i.ONE))return i.ZERO;for(;a.compareTo(t)>=0;)a.subTo(t,a);for(;a.signum()<0;)a.addTo(t,a);return a},n.pow=function(t){return this.exp(t,new E)},n.gcd=function(t){var e=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(e.compareTo(r)<0){var i=e;e=r,r=i}var n=e.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return e;for(n0&&(e.rShiftTo(o,e),r.rShiftTo(o,r));e.signum()>0;)(n=e.getLowestSetBit())>0&&e.rShiftTo(n,e),(n=r.getLowestSetBit())>0&&r.rShiftTo(n,r),e.compareTo(r)>=0?(e.subTo(r,e),e.rShiftTo(1,e)):(r.subTo(e,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},n.isProbablePrime=function(t){var e,r=this.abs();if(1==r.t&&r[0]<=B[B.length-1]){for(e=0;e=0)return!1;if(r.signum()<0||r.compareTo(o)>=0)return!1;var s=r.square().mod(o),f=e.pow(3).add(i.multiply(e)).add(n).mod(o);return s.equals(f)},s.prototype.validate=function(t){i(!this.isInfinity(t),"Point is at infinity"),i(this.isOnCurve(t),"Point is not on the curve");var e=t.multiply(this.n);return i(this.isInfinity(e),"Point is not a scalar multiple of G"),!0},t.exports=s},function(t,e,r){"use strict";var i=r(1),n=r(24),o=r(47),s=r(48),f=r(6);function a(t){f.call(this,"digest"),this._hash=t}i(a,f),a.prototype._update=function(t){this._hash.update(t)},a.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return"md5"===(t=t.toLowerCase())?new n:"rmd160"===t||"ripemd160"===t?new o:new a(s(t))}},function(t,e,r){"use strict";var i=r(2).Buffer,n=r(1),o=r(42),s=new Array(16),f=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],a=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],h=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],u=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],l=[0,1518500249,1859775393,2400959708,2840853838],c=[1352829926,1548603684,1836072691,2053994217,0];function d(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(t,e){return t<>>32-e}function g(t,e,r,i,n,o,s,f){return p(t+(e^r^i)+o+s|0,f)+n|0}function y(t,e,r,i,n,o,s,f){return p(t+(e&r|~e&i)+o+s|0,f)+n|0}function v(t,e,r,i,n,o,s,f){return p(t+((e|~r)^i)+o+s|0,f)+n|0}function b(t,e,r,i,n,o,s,f){return p(t+(e&i|r&~i)+o+s|0,f)+n|0}function w(t,e,r,i,n,o,s,f){return p(t+(e^(r|~i))+o+s|0,f)+n|0}n(d,o),d.prototype._update=function(){for(var t=s,e=0;e<16;++e)t[e]=this._block.readInt32LE(4*e);for(var r=0|this._a,i=0|this._b,n=0|this._c,o=0|this._d,d=0|this._e,m=0|this._a,_=0|this._b,E=0|this._c,T=0|this._d,S=0|this._e,B=0;B<80;B+=1){var I,A;B<16?(I=g(r,i,n,o,d,t[f[B]],l[0],h[B]),A=w(m,_,E,T,S,t[a[B]],c[0],u[B])):B<32?(I=y(r,i,n,o,d,t[f[B]],l[1],h[B]),A=b(m,_,E,T,S,t[a[B]],c[1],u[B])):B<48?(I=v(r,i,n,o,d,t[f[B]],l[2],h[B]),A=v(m,_,E,T,S,t[a[B]],c[2],u[B])):B<64?(I=b(r,i,n,o,d,t[f[B]],l[3],h[B]),A=y(m,_,E,T,S,t[a[B]],c[3],u[B])):(I=w(r,i,n,o,d,t[f[B]],l[4],h[B]),A=g(m,_,E,T,S,t[a[B]],c[4],u[B])),r=d,d=o,o=p(n,10),n=i,i=I,m=S,S=T,T=p(E,10),E=_,_=A}var k=this._b+n+T|0;this._b=this._c+o+S|0,this._c=this._d+d+m|0,this._d=this._e+r+_|0,this._e=this._a+i+E|0,this._a=k},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var t=i.alloc?i.alloc(20):new i(20);return t.writeInt32LE(this._a,0),t.writeInt32LE(this._b,4),t.writeInt32LE(this._c,8),t.writeInt32LE(this._d,12),t.writeInt32LE(this._e,16),t},t.exports=d},function(t,e,r){(e=t.exports=function(t){t=t.toLowerCase();var r=e[t];if(!r)throw new Error(t+" is not supported (we accept pull requests)");return new r}).sha=r(93),e.sha1=r(94),e.sha224=r(95),e.sha256=r(49),e.sha384=r(96),e.sha512=r(50)},function(t,e,r){var i=r(1),n=r(10),o=r(0).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],f=new Array(64);function a(){this.init(),this._w=f,n.call(this,64,56)}function h(t,e,r){return r^t&(e^r)}function u(t,e,r){return t&e|r&(t|e)}function l(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function c(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function d(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}function p(t){return(t>>>17|t<<15)^(t>>>19|t<<13)^t>>>10}i(a,n),a.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},a.prototype._update=function(t){for(var e=this._w,r=0|this._a,i=0|this._b,n=0|this._c,o=0|this._d,f=0|this._e,a=0|this._f,g=0|this._g,y=0|this._h,v=0;v<16;++v)e[v]=t.readInt32BE(4*v);for(;v<64;++v)e[v]=p(e[v-2])+e[v-7]+d(e[v-15])+e[v-16]|0;for(var b=0;b<64;++b){var w=y+c(f)+h(f,a,g)+s[b]+e[b]|0,m=l(r)+u(r,i,n)|0;y=g,g=a,a=f,f=o+w|0,o=n,n=i,i=r,r=w+m|0}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=o+this._d|0,this._e=f+this._e|0,this._f=a+this._f|0,this._g=g+this._g|0,this._h=y+this._h|0},a.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=a},function(t,e,r){var i=r(1),n=r(10),o=r(0).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],f=new Array(160);function a(){this.init(),this._w=f,n.call(this,128,112)}function h(t,e,r){return r^t&(e^r)}function u(t,e,r){return t&e|r&(t|e)}function l(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function c(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function d(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function g(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function y(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function v(t,e){return t>>>0>>0?1:0}i(a,n),a.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},a.prototype._update=function(t){for(var e=this._w,r=0|this._ah,i=0|this._bh,n=0|this._ch,o=0|this._dh,f=0|this._eh,a=0|this._fh,b=0|this._gh,w=0|this._hh,m=0|this._al,_=0|this._bl,E=0|this._cl,T=0|this._dl,S=0|this._el,B=0|this._fl,I=0|this._gl,A=0|this._hl,k=0;k<32;k+=2)e[k]=t.readInt32BE(4*k),e[k+1]=t.readInt32BE(4*k+4);for(;k<160;k+=2){var U=e[k-30],x=e[k-30+1],L=d(U,x),R=p(x,U),D=g(U=e[k-4],x=e[k-4+1]),O=y(x,U),C=e[k-14],M=e[k-14+1],N=e[k-32],P=e[k-32+1],F=R+M|0,q=L+C+v(F,R)|0;q=(q=q+D+v(F=F+O|0,O)|0)+N+v(F=F+P|0,P)|0,e[k]=q,e[k+1]=F}for(var z=0;z<160;z+=2){q=e[z],F=e[z+1];var j=u(r,i,n),V=u(m,_,E),K=l(r,m),H=l(m,r),Y=c(f,S),Z=c(S,f),G=s[z],W=s[z+1],X=h(f,a,b),$=h(S,B,I),J=A+Z|0,Q=w+Y+v(J,A)|0;Q=(Q=(Q=Q+X+v(J=J+$|0,$)|0)+G+v(J=J+W|0,W)|0)+q+v(J=J+F|0,F)|0;var tt=H+V|0,et=K+j+v(tt,H)|0;w=b,A=I,b=a,I=B,a=f,B=S,f=o+Q+v(S=T+J|0,T)|0,o=n,T=E,n=i,E=_,i=r,_=m,r=Q+et+v(m=J+tt|0,J)|0}this._al=this._al+m|0,this._bl=this._bl+_|0,this._cl=this._cl+E|0,this._dl=this._dl+T|0,this._el=this._el+S|0,this._fl=this._fl+B|0,this._gl=this._gl+I|0,this._hl=this._hl+A|0,this._ah=this._ah+r+v(this._al,m)|0,this._bh=this._bh+i+v(this._bl,_)|0,this._ch=this._ch+n+v(this._cl,E)|0,this._dh=this._dh+o+v(this._dl,T)|0,this._eh=this._eh+f+v(this._el,S)|0,this._fh=this._fh+a+v(this._fl,B)|0,this._gh=this._gh+b+v(this._gl,I)|0,this._hh=this._hh+w+v(this._hl,A)|0},a.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,r,i){t.writeInt32BE(e,i),t.writeInt32BE(r,i+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=a},function(t,e,r){"use strict";(function(e){var i=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],i=!0,n=!1,o=void 0;try{for(var s,f=t[Symbol.iterator]();!(i=(s=f.next()).done)&&(r.push(s.value),!e||r.length!==e);i=!0);}catch(t){n=!0,o=t}finally{try{!i&&f.return&&f.return()}finally{if(n)throw o}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=r(103),s=r(8),f=r(25).getCurveByName("secp256k1"),a=r(4),h=r(5),u=r(16),l=r(15),c=r(19);function d(t,r,i){function n(t,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"utf8";return"string"==typeof t&&(t=e.from(t,i)),a(e.isBuffer(t),"data is a required String or Buffer"),c(t=s.sha256(t),r)}function c(i,n){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"hex";if("string"==typeof i&&(i=e.from(i,s)),32!==i.length||!e.isBuffer(i))throw new Error("dataSha256: 32 bytes required");var h=l(n);return a(h,"pubkey required"),o.verify(f,i,{r:t,s:r},h.Q)}function d(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"utf8";return"string"==typeof t&&(t=e.from(t,r)),a(e.isBuffer(t),"data is a required String or Buffer"),p(t=s.sha256(t))}function p(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"hex";if("string"==typeof n&&(n=e.from(n,s)),32!==n.length||!e.isBuffer(n))throw new Error("dataSha256: 32 byte String or buffer requred");var a=h.fromBuffer(n),u=i;u-=27,u&=3;var c=o.recoverPubKey(f,a,{r:t,s:r,i:i},u);return l.fromPoint(c)}function g(){var n;return(n=new e(65)).writeUInt8(i,0),t.toBuffer(32).copy(n,1),r.toBuffer(32).copy(n,33),n}a.equal(null!=t,!0,"Missing parameter"),a.equal(null!=r,!0,"Missing parameter"),a.equal(null!=i,!0,"Missing parameter");var y=void 0;return{r:t,s:r,i:i,toBuffer:g,verify:n,verifyHash:c,verifyHex:function(t,r){return console.log('Deprecated: use verify(data, pubkey, "hex")'),n(e.from(t,"hex"),r)},recover:d,recoverHash:p,toHex:function(){return g().toString("hex")},toString:function(){return y||(y="SIG_K1_"+u.checkEncode(g(),"K1"))},verifyBuffer:function(){return console.log("Deprecated: use signature.verify instead (same arguments)"),n.apply(void 0,arguments)},recoverPublicKey:function(){return console.log("Deprecated: use signature.recover instead (same arguments)"),d.apply(void 0,arguments)},recoverPublicKeyFromBuffer:function(){return console.log("Deprecated: use signature.recoverHash instead (same arguments)"),p.apply(void 0,arguments)}}}t.exports=d,d.sign=function(t,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"utf8";return"string"==typeof t&&(t=e.from(t,i)),a(e.isBuffer(t),"data is a required String or Buffer"),t=s.sha256(t),d.signHash(t,r)},d.signHash=function(t,r){var i,n,s,u,l,p,g,y=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"hex";if("string"==typeof t&&(t=e.from(t,y)),32!==t.length||!e.isBuffer(t))throw new Error("dataSha256: 32 byte buffer requred");for(r=c(r),a(r,"privateKey required"),u=null,g=0,n=h.fromBuffer(t);;){if(p=(i=(s=o.sign(f,t,r.d,g++)).toDER())[5+(l=i[3])],32===l&&32===p){u=o.calcPubKeyRecoveryParam(f,n,s,r.toPublic().Q),u+=4,u+=27;break}g%10==0&&console.log("WARN: "+g+" attempts to find canonical signature")}return d(s.r,s.s,u)},d.fromBuffer=function(t){var r;return a(e.isBuffer(t),"Buffer is required"),a.equal(t.length,65,"Invalid signature length"),r=t.readUInt8(0),a.equal(r-27,r-27&7,"Invalid signature parameter"),d(h.fromBuffer(t.slice(1,33)),h.fromBuffer(t.slice(33)),r)},d.fromHex=function(t){return d.fromBuffer(e.from(t,"hex"))},d.fromString=function(t){try{return d.fromStringOrThrow(t)}catch(t){return null}},d.fromStringOrThrow=function(t){a.equal(void 0===t?"undefined":n(t),"string","signature");var e=t.match(/^SIG_([A-Za-z0-9]+)_([A-Za-z0-9]+)$/);a(null!=e&&3===e.length,"Expecting signature like: SIG_K1_base58signature..");var r=i(e,3),o=r[1],s=r[2];return a.equal(o,"K1","K1 signature expected"),d.fromBuffer(u.checkDecode(s,o))},d.from=function(t){var r=t?t.r&&t.s&&t.i?t:"string"==typeof t&&130===t.length?d.fromHex(t):"string"==typeof t&&130!==t.length?d.fromStringOrThrow(t):e.isBuffer(t)?d.fromBuffer(t):null:t;if(!r)throw new TypeError("signature should be a hex string or buffer");return r}}).call(this,r(2).Buffer)},function(t,e,r){"use strict";(function(e){function r(t){var e=t.toString().match(/function (.*?)\(/);return e?e[1]:null}t.exports=function(t,i){switch(t){case"Array":if(Array.isArray(i))return;break;case"Boolean":if("boolean"==typeof i)return;break;case"Buffer":if(e.isBuffer(i))return;break;case"Number":if("number"==typeof i)return;break;case"String":if("string"==typeof i)return;break;default:if(r(i.constructor)===r(t))return}throw new TypeError("Expected "+(r(t)||t)+", got "+i)}}).call(this,r(2).Buffer)},,,,,,,function(t,e,r){"use strict";(function(t){var i=this&&this.__awaiter||function(t,e,r,i){return new(r||(r=Promise))(function(n,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function f(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){t.done?n(t.value):new r(function(e){e(t.value)}).then(s,f)}a((i=i.apply(t,e||[])).next())})},n=this&&this.__generator||function(t,e){var r,i,n,o,s={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:f(0),throw:f(1),return:f(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function f(o){return function(f){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,i&&(n=2&o[0]?i.return:o[0]?i.throw||((n=i.return)&&n.call(i),0):i.next)&&!(n=n.call(i,o[1])).done)return n;switch(i=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,i=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(n=(n=s.trys).length>0&&n[n.length-1])&&(6===o[0]||2===o[0])){s=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(62),f=r(11),a=function(){function e(t){var e,r;this.keys=new Map,this.availableKeys=[];try{for(var i=o(t),n=i.next();!n.done;n=i.next()){var a=n.value,h=f.convertLegacyPublicKey(s.PrivateKey.fromString(a).toPublic().toString("GLS"));this.keys.set(h,a),this.availableKeys.push(h)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}}return e.prototype.getAvailableKeys=function(){return i(this,void 0,void 0,function(){return n(this,function(t){return[2,this.availableKeys]})})},e.prototype.sign=function(e){var r=e.chainId,o=e.requiredKeys,a=e.serializedTransaction;return i(this,void 0,void 0,function(){var e,i=this;return n(this,function(n){return e=t.concat([new t(r,"hex"),new t(a),new t(new Uint8Array(32))]),[2,{signatures:o.map(function(t){return s.Signature.sign(e,i.keys.get(f.convertLegacyPublicKey(t))).toString("GLS")}),serializedTransaction:a}]})})},e}();e.default=a}).call(this,r(2).Buffer)},function(t,e,r){"use strict";e.byteLength=function(t){var e=h(t),r=e[0],i=e[1];return 3*(r+i)/4-i},e.toByteArray=function(t){for(var e,r=h(t),i=r[0],s=r[1],f=new o(function(t,e,r){return 3*(e+r)/4-r}(0,i,s)),a=0,u=s>0?i-4:i,l=0;l>16&255,f[a++]=e>>8&255,f[a++]=255&e;2===s&&(e=n[t.charCodeAt(l)]<<2|n[t.charCodeAt(l+1)]>>4,f[a++]=255&e);1===s&&(e=n[t.charCodeAt(l)]<<10|n[t.charCodeAt(l+1)]<<4|n[t.charCodeAt(l+2)]>>2,f[a++]=e>>8&255,f[a++]=255&e);return f},e.fromByteArray=function(t){for(var e,r=t.length,n=r%3,o=[],s=0,f=r-n;sf?f:s+16383));1===n?(e=t[r-1],o.push(i[e>>2]+i[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],o.push(i[e>>10]+i[e>>4&63]+i[e<<2&63]+"="));return o.join("")};for(var i=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,a=s.length;f0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t){return i[t>>18&63]+i[t>>12&63]+i[t>>6&63]+i[63&t]}function l(t,e,r){for(var i,n=[],o=e;o>1,u=-7,l=r?n-1:0,c=r?-1:1,d=t[e+l];for(l+=c,o=d&(1<<-u)-1,d>>=-u,u+=f;u>0;o=256*o+t[e+l],l+=c,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=i;u>0;s=256*s+t[e+l],l+=c,u-=8);if(0===o)o=1-h;else{if(o===a)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=h}return(d?-1:1)*s*Math.pow(2,o-i)},e.write=function(t,e,r,i,n,o){var s,f,a,h=8*o-n-1,u=(1<>1,c=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-s))<1&&(s--,a*=2),(e+=s+l>=1?c/a:c*Math.pow(2,1-l))*a>=2&&(s++,a/=2),s+l>=u?(f=0,s=u):s+l>=1?(f=(e*a-1)*Math.pow(2,n),s+=l):(f=e*Math.pow(2,l-1)*Math.pow(2,n),s=0));n>=8;t[r+d]=255&f,d+=p,f/=256,n-=8);for(s=s<0;t[r+d]=255&s,d+=p,s/=256,h-=8);t[r+d-p]|=128*g}},function(t,e,r){"use strict";var i=r(63),n=r(105),o=Object.assign({},i,n);t.exports=o},function(t,e,r){"use strict";r(28);var i=r(19),n=r(15),o=r(51),s=(r(16),r(8)),f={initialize:i.initialize,unsafeRandomKey:function(){return i.unsafeRandomKey().then(function(t){return t.toString()})},randomKey:function(t){return i.randomKey(t).then(function(t){return t.toString()})},seedPrivate:function(t){return i.fromSeed(t).toString()},privateToPublic:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"EOS";return i(t).toPublic().toString(e)},isValidPublic:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"EOS";return n.isValid(t,e)},isValidPrivate:function(t){return i.isValid(t)},sign:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"utf8";if(!0===r)throw new TypeError("API changed, use signHash(..) instead");return!1===r&&console.log("Warning: ecc.sign hashData parameter was removed"),o.sign(t,e,r).toString()},signHash:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"hex";return o.signHash(t,e,r).toString()},verify:function(t,e,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"utf8";if(!0===i)throw new TypeError("API changed, use verifyHash(..) instead");return!1===i&&console.log("Warning: ecc.verify hashData parameter was removed"),(t=o.from(t)).verify(e,r,i)},verifyHash:function(t,e,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hex";return(t=o.from(t)).verifyHash(e,r,i)},recover:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"utf8";if(!0===r)throw new TypeError("API changed, use recoverHash(signature, data) instead");return!1===r&&console.log("Warning: ecc.recover hashData parameter was removed"),(t=o.from(t)).recover(e,r).toString()},recoverHash:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"hex";return(t=o.from(t)).recoverHash(e,r).toString()},sha256:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"hex";return s.sha256(t,e)}};t.exports=f},function(t,e,r){var i,n,o; +/** + * @license bytebuffer.js (c) 2015 Daniel Wirtz + * Backing buffer: ArrayBuffer, Accessor: Uint8Array + * Released under the Apache License, Version 2.0 + * see: https://github.com/dcodeIO/bytebuffer.js for details + */n=[r(65)],void 0===(o="function"==typeof(i=function(t){"use strict";var e=function(t,r,n){if(void 0===t&&(t=e.DEFAULT_CAPACITY),void 0===r&&(r=e.DEFAULT_ENDIAN),void 0===n&&(n=e.DEFAULT_NOASSERT),!n){if((t|=0)<0)throw RangeError("Illegal capacity");r=!!r,n=!!n}this.buffer=0===t?i:new ArrayBuffer(t),this.view=0===t?null:new Uint8Array(this.buffer),this.offset=0,this.markedOffset=-1,this.limit=t,this.littleEndian=r,this.noAssert=n};e.VERSION="5.0.1",e.LITTLE_ENDIAN=!0,e.BIG_ENDIAN=!1,e.DEFAULT_CAPACITY=16,e.DEFAULT_ENDIAN=e.BIG_ENDIAN,e.DEFAULT_NOASSERT=!1,e.Long=t||null;var r=e.prototype;r.__isByteBuffer__,Object.defineProperty(r,"__isByteBuffer__",{value:!0,enumerable:!1,configurable:!1});var i=new ArrayBuffer(0),n=String.fromCharCode;function o(t){var e=0;return function(){return e1024&&(e.push(n.apply(String,t)),t.length=0),Array.prototype.push.apply(t,arguments)}}function f(t,e,r,i,n){var o,s,f=8*n-i-1,a=(1<>1,u=-7,l=r?n-1:0,c=r?-1:1,d=t[e+l];for(l+=c,o=d&(1<<-u)-1,d>>=-u,u+=f;u>0;o=256*o+t[e+l],l+=c,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=i;u>0;s=256*s+t[e+l],l+=c,u-=8);if(0===o)o=1-h;else{if(o===a)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=h}return(d?-1:1)*s*Math.pow(2,o-i)}function a(t,e,r,i,n,o){var s,f,a,h=8*o-n-1,u=(1<>1,c=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-s))<1&&(s--,a*=2),(e+=s+l>=1?c/a:c*Math.pow(2,1-l))*a>=2&&(s++,a/=2),s+l>=u?(f=0,s=u):s+l>=1?(f=(e*a-1)*Math.pow(2,n),s+=l):(f=e*Math.pow(2,l-1)*Math.pow(2,n),s=0));n>=8;t[r+d]=255&f,d+=p,f/=256,n-=8);for(s=s<0;t[r+d]=255&s,d+=p,s/=256,h-=8);t[r+d-p]|=128*g}e.accessor=function(){return Uint8Array},e.allocate=function(t,r,i){return new e(t,r,i)},e.concat=function(t,r,i,n){"boolean"!=typeof r&&"string"==typeof r||(n=i,i=r,r=void 0);for(var o,s=0,f=0,a=t.length;f0&&(s+=o);if(0===s)return new e(0,i,n);var h,u=new e(s,i,n);for(f=0;f0&&(s.buffer=t.buffer,s.offset=t.byteOffset,s.limit=t.byteOffset+t.byteLength,s.view=new Uint8Array(t.buffer));else if(t instanceof ArrayBuffer)s=new e(0,n,o),t.byteLength>0&&(s.buffer=t,s.offset=0,s.limit=t.byteLength,s.view=t.byteLength>0?new Uint8Array(t):null);else{if("[object Array]"!==Object.prototype.toString.call(t))throw TypeError("Illegal buffer");(s=new e(t.length,n,o)).limit=t.length;for(var f=0;f>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}var i,n=e,o=t.length,s=o>>3,f=0;for(e+=this.writeVarint32(o,e);s--;)i=1&!!t[f++]|(1&!!t[f++])<<1|(1&!!t[f++])<<2|(1&!!t[f++])<<3|(1&!!t[f++])<<4|(1&!!t[f++])<<5|(1&!!t[f++])<<6|(1&!!t[f++])<<7,this.writeByte(i,e++);if(f>3,s=0,f=[];for(t+=i.length;o--;)r=this.readByte(t++),f[s++]=!!(1&r),f[s++]=!!(2&r),f[s++]=!!(4&r),f[s++]=!!(8&r),f[s++]=!!(16&r),f[s++]=!!(32&r),f[s++]=!!(64&r),f[s++]=!!(128&r);if(s>a++&1)}return e&&(this.offset=t),f},r.readBytes=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+t>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+"+t+") <= "+this.buffer.byteLength)}var i=this.slice(e,e+t);return r&&(this.offset+=t),i},r.writeBytes=r.append,r.writeInt8=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t|=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=1;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=1,this.view[e]=t,r&&(this.offset+=1),this},r.writeByte=r.writeInt8,r.readInt8=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+1) <= "+this.buffer.byteLength)}var r=this.view[t];return 128==(128&r)&&(r=-(255-r+1)),e&&(this.offset+=1),r},r.readByte=r.readInt8,r.writeUint8=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=1;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=1,this.view[e]=t,r&&(this.offset+=1),this},r.writeUInt8=r.writeUint8,r.readUint8=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+1) <= "+this.buffer.byteLength)}var r=this.view[t];return e&&(this.offset+=1),r},r.readUInt8=r.readUint8,r.writeInt16=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t|=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=2;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=2,this.littleEndian?(this.view[e+1]=(65280&t)>>>8,this.view[e]=255&t):(this.view[e]=(65280&t)>>>8,this.view[e+1]=255&t),r&&(this.offset+=2),this},r.writeShort=r.writeInt16,r.readInt16=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+2) <= "+this.buffer.byteLength)}var r=0;return this.littleEndian?(r=this.view[t],r|=this.view[t+1]<<8):(r=this.view[t]<<8,r|=this.view[t+1]),32768==(32768&r)&&(r=-(65535-r+1)),e&&(this.offset+=2),r},r.readShort=r.readInt16,r.writeUint16=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=2;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=2,this.littleEndian?(this.view[e+1]=(65280&t)>>>8,this.view[e]=255&t):(this.view[e]=(65280&t)>>>8,this.view[e+1]=255&t),r&&(this.offset+=2),this},r.writeUInt16=r.writeUint16,r.readUint16=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+2) <= "+this.buffer.byteLength)}var r=0;return this.littleEndian?(r=this.view[t],r|=this.view[t+1]<<8):(r=this.view[t]<<8,r|=this.view[t+1]),e&&(this.offset+=2),r},r.readUInt16=r.readUint16,r.writeInt32=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t|=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=4;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=4,this.littleEndian?(this.view[e+3]=t>>>24&255,this.view[e+2]=t>>>16&255,this.view[e+1]=t>>>8&255,this.view[e]=255&t):(this.view[e]=t>>>24&255,this.view[e+1]=t>>>16&255,this.view[e+2]=t>>>8&255,this.view[e+3]=255&t),r&&(this.offset+=4),this},r.writeInt=r.writeInt32,r.readInt32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+4) <= "+this.buffer.byteLength)}var r=0;return this.littleEndian?(r=this.view[t+2]<<16,r|=this.view[t+1]<<8,r|=this.view[t],r+=this.view[t+3]<<24>>>0):(r=this.view[t+1]<<16,r|=this.view[t+2]<<8,r|=this.view[t+3],r+=this.view[t]<<24>>>0),r|=0,e&&(this.offset+=4),r},r.readInt=r.readInt32,r.writeUint32=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=4;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=4,this.littleEndian?(this.view[e+3]=t>>>24&255,this.view[e+2]=t>>>16&255,this.view[e+1]=t>>>8&255,this.view[e]=255&t):(this.view[e]=t>>>24&255,this.view[e+1]=t>>>16&255,this.view[e+2]=t>>>8&255,this.view[e+3]=255&t),r&&(this.offset+=4),this},r.writeUInt32=r.writeUint32,r.readUint32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+4) <= "+this.buffer.byteLength)}var r=0;return this.littleEndian?(r=this.view[t+2]<<16,r|=this.view[t+1]<<8,r|=this.view[t],r+=this.view[t+3]<<24>>>0):(r=this.view[t+1]<<16,r|=this.view[t+2]<<8,r|=this.view[t+3],r+=this.view[t]<<24>>>0),e&&(this.offset+=4),r},r.readUInt32=r.readUint32,t&&(r.writeInt64=function(e,r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"==typeof e)e=t.fromNumber(e);else if("string"==typeof e)e=t.fromString(e);else if(!(e&&e instanceof t))throw TypeError("Illegal value: "+e+" (not an integer or Long)");if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}"number"==typeof e?e=t.fromNumber(e):"string"==typeof e&&(e=t.fromString(e)),r+=8;var n=this.buffer.byteLength;r>n&&this.resize((n*=2)>r?n:r),r-=8;var o=e.low,s=e.high;return this.littleEndian?(this.view[r+3]=o>>>24&255,this.view[r+2]=o>>>16&255,this.view[r+1]=o>>>8&255,this.view[r]=255&o,r+=4,this.view[r+3]=s>>>24&255,this.view[r+2]=s>>>16&255,this.view[r+1]=s>>>8&255,this.view[r]=255&s):(this.view[r]=s>>>24&255,this.view[r+1]=s>>>16&255,this.view[r+2]=s>>>8&255,this.view[r+3]=255&s,r+=4,this.view[r]=o>>>24&255,this.view[r+1]=o>>>16&255,this.view[r+2]=o>>>8&255,this.view[r+3]=255&o),i&&(this.offset+=8),this},r.writeLong=r.writeInt64,r.readInt64=function(e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+8) <= "+this.buffer.byteLength)}var i=0,n=0;this.littleEndian?(i=this.view[e+2]<<16,i|=this.view[e+1]<<8,i|=this.view[e],i+=this.view[e+3]<<24>>>0,e+=4,n=this.view[e+2]<<16,n|=this.view[e+1]<<8,n|=this.view[e],n+=this.view[e+3]<<24>>>0):(n=this.view[e+1]<<16,n|=this.view[e+2]<<8,n|=this.view[e+3],n+=this.view[e]<<24>>>0,e+=4,i=this.view[e+1]<<16,i|=this.view[e+2]<<8,i|=this.view[e+3],i+=this.view[e]<<24>>>0);var o=new t(i,n,!1);return r&&(this.offset+=8),o},r.readLong=r.readInt64,r.writeUint64=function(e,r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"==typeof e)e=t.fromNumber(e);else if("string"==typeof e)e=t.fromString(e);else if(!(e&&e instanceof t))throw TypeError("Illegal value: "+e+" (not an integer or Long)");if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}"number"==typeof e?e=t.fromNumber(e):"string"==typeof e&&(e=t.fromString(e)),r+=8;var n=this.buffer.byteLength;r>n&&this.resize((n*=2)>r?n:r),r-=8;var o=e.low,s=e.high;return this.littleEndian?(this.view[r+3]=o>>>24&255,this.view[r+2]=o>>>16&255,this.view[r+1]=o>>>8&255,this.view[r]=255&o,r+=4,this.view[r+3]=s>>>24&255,this.view[r+2]=s>>>16&255,this.view[r+1]=s>>>8&255,this.view[r]=255&s):(this.view[r]=s>>>24&255,this.view[r+1]=s>>>16&255,this.view[r+2]=s>>>8&255,this.view[r+3]=255&s,r+=4,this.view[r]=o>>>24&255,this.view[r+1]=o>>>16&255,this.view[r+2]=o>>>8&255,this.view[r+3]=255&o),i&&(this.offset+=8),this},r.writeUInt64=r.writeUint64,r.readUint64=function(e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+8) <= "+this.buffer.byteLength)}var i=0,n=0;this.littleEndian?(i=this.view[e+2]<<16,i|=this.view[e+1]<<8,i|=this.view[e],i+=this.view[e+3]<<24>>>0,e+=4,n=this.view[e+2]<<16,n|=this.view[e+1]<<8,n|=this.view[e],n+=this.view[e+3]<<24>>>0):(n=this.view[e+1]<<16,n|=this.view[e+2]<<8,n|=this.view[e+3],n+=this.view[e]<<24>>>0,e+=4,i=this.view[e+1]<<16,i|=this.view[e+2]<<8,i|=this.view[e+3],i+=this.view[e]<<24>>>0);var o=new t(i,n,!0);return r&&(this.offset+=8),o},r.readUInt64=r.readUint64),r.writeFloat32=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t)throw TypeError("Illegal value: "+t+" (not a number)");if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=4;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=4,a(this.view,t,e,this.littleEndian,23,4),r&&(this.offset+=4),this},r.writeFloat=r.writeFloat32,r.readFloat32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+4) <= "+this.buffer.byteLength)}var r=f(this.view,t,this.littleEndian,23,4);return e&&(this.offset+=4),r},r.readFloat=r.readFloat32,r.writeFloat64=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof t)throw TypeError("Illegal value: "+t+" (not a number)");if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}e+=8;var i=this.buffer.byteLength;return e>i&&this.resize((i*=2)>e?i:e),e-=8,a(this.view,t,e,this.littleEndian,52,8),r&&(this.offset+=8),this},r.writeDouble=r.writeFloat64,r.readFloat64=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+8) <= "+this.buffer.byteLength)}var r=f(this.view,t,this.littleEndian,52,8);return e&&(this.offset+=8),r},r.readDouble=r.readFloat64,e.MAX_VARINT32_BYTES=5,e.calculateVarint32=function(t){return(t>>>=0)<128?1:t<16384?2:t<1<<21?3:t<1<<28?4:5},e.zigZagEncode32=function(t){return((t|=0)<<1^t>>31)>>>0},e.zigZagDecode32=function(t){return t>>>1^-(1&t)|0},r.writeVarint32=function(t,r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t|=0,"number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}var n,o=e.calculateVarint32(t);r+=o;var s=this.buffer.byteLength;for(r>s&&this.resize((s*=2)>r?s:r),r-=o,t>>>=0;t>=128;)n=127&t|128,this.view[r++]=n,t>>>=7;return this.view[r++]=t,i?(this.offset=r,this):o},r.writeVarint32ZigZag=function(t,r){return this.writeVarint32(e.zigZagEncode32(t),r)},r.readVarint32=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+1) <= "+this.buffer.byteLength)}var r,i=0,n=0;do{if(!this.noAssert&&t>this.limit){var o=Error("Truncated");throw o.truncated=!0,o}r=this.view[t++],i<5&&(n|=(127&r)<<7*i),++i}while(0!=(128&r));return n|=0,e?(this.offset=t,n):{value:n,length:i}},r.readVarint32ZigZag=function(t){var r=this.readVarint32(t);return"object"==typeof r?r.value=e.zigZagDecode32(r.value):r=e.zigZagDecode32(r),r},t&&(e.MAX_VARINT64_BYTES=10,e.calculateVarint64=function(e){"number"==typeof e?e=t.fromNumber(e):"string"==typeof e&&(e=t.fromString(e));var r=e.toInt()>>>0,i=e.shiftRightUnsigned(28).toInt()>>>0,n=e.shiftRightUnsigned(56).toInt()>>>0;return 0==n?0==i?r<16384?r<128?1:2:r<1<<21?3:4:i<16384?i<128?5:6:i<1<<21?7:8:n<128?9:10},e.zigZagEncode64=function(e){return"number"==typeof e?e=t.fromNumber(e,!1):"string"==typeof e?e=t.fromString(e,!1):!1!==e.unsigned&&(e=e.toSigned()),e.shiftLeft(1).xor(e.shiftRight(63)).toUnsigned()},e.zigZagDecode64=function(e){return"number"==typeof e?e=t.fromNumber(e,!1):"string"==typeof e?e=t.fromString(e,!1):!1!==e.unsigned&&(e=e.toSigned()),e.shiftRightUnsigned(1).xor(e.and(t.ONE).toSigned().negate()).toSigned()},r.writeVarint64=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"==typeof r)r=t.fromNumber(r);else if("string"==typeof r)r=t.fromString(r);else if(!(r&&r instanceof t))throw TypeError("Illegal value: "+r+" (not an integer or Long)");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}"number"==typeof r?r=t.fromNumber(r,!1):"string"==typeof r?r=t.fromString(r,!1):!1!==r.unsigned&&(r=r.toSigned());var o=e.calculateVarint64(r),s=r.toInt()>>>0,f=r.shiftRightUnsigned(28).toInt()>>>0,a=r.shiftRightUnsigned(56).toInt()>>>0;i+=o;var h=this.buffer.byteLength;switch(i>h&&this.resize((h*=2)>i?h:i),i-=o,o){case 10:this.view[i+9]=a>>>7&1;case 9:this.view[i+8]=9!==o?128|a:127&a;case 8:this.view[i+7]=8!==o?f>>>21|128:f>>>21&127;case 7:this.view[i+6]=7!==o?f>>>14|128:f>>>14&127;case 6:this.view[i+5]=6!==o?f>>>7|128:f>>>7&127;case 5:this.view[i+4]=5!==o?128|f:127&f;case 4:this.view[i+3]=4!==o?s>>>21|128:s>>>21&127;case 3:this.view[i+2]=3!==o?s>>>14|128:s>>>14&127;case 2:this.view[i+1]=2!==o?s>>>7|128:s>>>7&127;case 1:this.view[i]=1!==o?128|s:127&s}return n?(this.offset+=o,this):o},r.writeVarint64ZigZag=function(t,r){return this.writeVarint64(e.zigZagEncode64(t),r)},r.readVarint64=function(e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+1) <= "+this.buffer.byteLength)}var i=e,n=0,o=0,s=0,f=0;if(f=this.view[e++],n=127&f,128&f&&(f=this.view[e++],n|=(127&f)<<7,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],n|=(127&f)<<14,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],n|=(127&f)<<21,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],o=127&f,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],o|=(127&f)<<7,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],o|=(127&f)<<14,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],o|=(127&f)<<21,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],s=127&f,(128&f||this.noAssert&&void 0===f)&&(f=this.view[e++],s|=(127&f)<<7,128&f||this.noAssert&&void 0===f))))))))))throw Error("Buffer overrun");var a=t.fromBits(n|o<<28,o>>>4|s<<24,!1);return r?(this.offset=e,a):{value:a,length:e-i}},r.readVarint64ZigZag=function(r){var i=this.readVarint64(r);return i&&i.value instanceof t?i.value=e.zigZagDecode64(i.value):i=e.zigZagDecode64(i),i}),r.writeCString=function(t,e){var r=void 0===e;r&&(e=this.offset);var i,n=t.length;if(!this.noAssert){if("string"!=typeof t)throw TypeError("Illegal str: Not a string");for(i=0;i>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}n=u.calculateUTF16asUTF8(o(t))[1],e+=n+1;var s=this.buffer.byteLength;return e>s&&this.resize((s*=2)>e?s:e),e-=n+1,u.encodeUTF16toUTF8(o(t),function(t){this.view[e++]=t}.bind(this)),this.view[e++]=0,r?(this.offset=e,this):n},r.readCString=function(t){var e=void 0===t;if(e&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+1) <= "+this.buffer.byteLength)}var r,i=t,n=-1;return u.decodeUTF8toUTF16(function(){if(0===n)return null;if(t>=this.limit)throw RangeError("Illegal range: Truncated data, "+t+" < "+this.limit);return 0===(n=this.view[t++])?null:n}.bind(this),r=s(),!0),e?(this.offset=t,r()):{string:r(),length:t-i}},r.writeIString=function(t,e){var r=void 0===e;if(r&&(e=this.offset),!this.noAssert){if("string"!=typeof t)throw TypeError("Illegal str: Not a string");if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}var i,n=e;i=u.calculateUTF16asUTF8(o(t),this.noAssert)[1],e+=4+i;var s=this.buffer.byteLength;if(e>s&&this.resize((s*=2)>e?s:e),e-=4+i,this.littleEndian?(this.view[e+3]=i>>>24&255,this.view[e+2]=i>>>16&255,this.view[e+1]=i>>>8&255,this.view[e]=255&i):(this.view[e]=i>>>24&255,this.view[e+1]=i>>>16&255,this.view[e+2]=i>>>8&255,this.view[e+3]=255&i),e+=4,u.encodeUTF16toUTF8(o(t),function(t){this.view[e++]=t}.bind(this)),e!==n+4+i)throw RangeError("Illegal range: Truncated data, "+e+" == "+(e+4+i));return r?(this.offset=e,this):e-n},r.readIString=function(t){var r=void 0===t;if(r&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+4) <= "+this.buffer.byteLength)}var i=t,n=this.readUint32(t),o=this.readUTF8String(n,e.METRICS_BYTES,t+=4);return t+=o.length,r?(this.offset=t,o.string):{string:o.string,length:t-i}},e.METRICS_CHARS="c",e.METRICS_BYTES="b",r.writeUTF8String=function(t,e){var r,i=void 0===e;if(i&&(e=this.offset),!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: "+e+" (not an integer)");if((e>>>=0)<0||e+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+e+" (+0) <= "+this.buffer.byteLength)}var n=e;r=u.calculateUTF16asUTF8(o(t))[1],e+=r;var s=this.buffer.byteLength;return e>s&&this.resize((s*=2)>e?s:e),e-=r,u.encodeUTF16toUTF8(o(t),function(t){this.view[e++]=t}.bind(this)),i?(this.offset=e,this):e-n},r.writeString=r.writeUTF8String,e.calculateUTF8Chars=function(t){return u.calculateUTF16asUTF8(o(t))[0]},e.calculateUTF8Bytes=function(t){return u.calculateUTF16asUTF8(o(t))[1]},e.calculateString=e.calculateUTF8Bytes,r.readUTF8String=function(t,r,i){"number"==typeof r&&(i=r,r=void 0);var n=void 0===i;if(n&&(i=this.offset),void 0===r&&(r=e.METRICS_CHARS),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal length: "+t+" (not an integer)");if(t|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var o,f=0,a=i;if(r===e.METRICS_CHARS){if(o=s(),u.decodeUTF8(function(){return f>>=0)<0||i+t>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+"+t+") <= "+this.buffer.byteLength)}var h=i+t;if(u.decodeUTF8toUTF16(function(){return i>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}var n,s,f=r;n=u.calculateUTF16asUTF8(o(t),this.noAssert)[1],s=e.calculateVarint32(n),r+=s+n;var a=this.buffer.byteLength;if(r>a&&this.resize((a*=2)>r?a:r),r-=s+n,r+=this.writeVarint32(n,r),u.encodeUTF16toUTF8(o(t),function(t){this.view[r++]=t}.bind(this)),r!==f+n+s)throw RangeError("Illegal range: Truncated data, "+r+" == "+(r+n+s));return i?(this.offset=r,this):r-f},r.readVString=function(t){var r=void 0===t;if(r&&(t=this.offset),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal offset: "+t+" (not an integer)");if((t>>>=0)<0||t+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+1) <= "+this.buffer.byteLength)}var i=t,n=this.readVarint32(t),o=this.readUTF8String(n.value,e.METRICS_BYTES,t+=n.length);return t+=o.length,r?(this.offset=t,o.string):{string:o.string,length:t-i}},r.append=function(t,r,i){"number"!=typeof r&&"string"==typeof r||(i=r,r=void 0);var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}t instanceof e||(t=e.wrap(t,r));var o=t.limit-t.offset;if(o<=0)return this;i+=o;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=o,this.view.set(t.view.subarray(t.offset,t.limit),i),t.offset+=o,n&&(this.offset+=o),this},r.appendTo=function(t,e){return t.append(this,e),this},r.assert=function(t){return this.noAssert=!t,this},r.capacity=function(){return this.buffer.byteLength},r.clear=function(){return this.offset=0,this.limit=this.buffer.byteLength,this.markedOffset=-1,this},r.clone=function(t){var r=new e(0,this.littleEndian,this.noAssert);return t?(r.buffer=new ArrayBuffer(this.buffer.byteLength),r.view=new Uint8Array(r.buffer)):(r.buffer=this.buffer,r.view=this.view),r.offset=this.offset,r.markedOffset=this.markedOffset,r.limit=this.limit,r},r.compact=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal begin: Not an integer");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal end: Not an integer");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+e+" <= "+this.buffer.byteLength)}if(0===t&&e===this.buffer.byteLength)return this;var r=e-t;if(0===r)return this.buffer=i,this.view=null,this.markedOffset>=0&&(this.markedOffset-=t),this.offset=0,this.limit=0,this;var n=new ArrayBuffer(r),o=new Uint8Array(n);return o.set(this.view.subarray(t,e)),this.buffer=n,this.view=o,this.markedOffset>=0&&(this.markedOffset-=t),this.offset=0,this.limit=r,this},r.copy=function(t,r){if(void 0===t&&(t=this.offset),void 0===r&&(r=this.limit),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal begin: Not an integer");if(t>>>=0,"number"!=typeof r||r%1!=0)throw TypeError("Illegal end: Not an integer");if(r>>>=0,t<0||t>r||r>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+r+" <= "+this.buffer.byteLength)}if(t===r)return new e(0,this.littleEndian,this.noAssert);var i=r-t,n=new e(i,this.littleEndian,this.noAssert);return n.offset=0,n.limit=i,n.markedOffset>=0&&(n.markedOffset-=t),this.copyTo(n,0,t,r),n},r.copyTo=function(t,r,i,n){var o,s;if(!this.noAssert&&!e.isByteBuffer(t))throw TypeError("Illegal target: Not a ByteBuffer");if(r=(s=void 0===r)?t.offset:0|r,i=(o=void 0===i)?this.offset:0|i,n=void 0===n?this.limit:0|n,r<0||r>t.buffer.byteLength)throw RangeError("Illegal target range: 0 <= "+r+" <= "+t.buffer.byteLength);if(i<0||n>this.buffer.byteLength)throw RangeError("Illegal source range: 0 <= "+i+" <= "+this.buffer.byteLength);var f=n-i;return 0===f?t:(t.ensureCapacity(r+f),t.view.set(this.view.subarray(i,n),r),o&&(this.offset+=f),s&&(t.offset+=f),this)},r.ensureCapacity=function(t){var e=this.buffer.byteLength;return et?e:t):this},r.fill=function(t,e,r){var i=void 0===e;if(i&&(e=this.offset),"string"==typeof t&&t.length>0&&(t=t.charCodeAt(0)),void 0===e&&(e=this.offset),void 0===r&&(r=this.limit),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal value: "+t+" (not an integer)");if(t|=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal begin: Not an integer");if(e>>>=0,"number"!=typeof r||r%1!=0)throw TypeError("Illegal end: Not an integer");if(r>>>=0,e<0||e>r||r>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+e+" <= "+r+" <= "+this.buffer.byteLength)}if(e>=r)return this;for(;e>>=0)<0||t+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+t+" (+0) <= "+this.buffer.byteLength)}return this.markedOffset=t,this},r.order=function(t){if(!this.noAssert&&"boolean"!=typeof t)throw TypeError("Illegal littleEndian: Not a boolean");return this.littleEndian=!!t,this},r.LE=function(t){return this.littleEndian=void 0===t||!!t,this},r.BE=function(t){return this.littleEndian=void 0!==t&&!t,this},r.prepend=function(t,r,i){"number"!=typeof r&&"string"==typeof r||(i=r,r=void 0);var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}t instanceof e||(t=e.wrap(t,r));var o=t.limit-t.offset;if(o<=0)return this;var s=o-i;if(s>0){var f=new ArrayBuffer(this.buffer.byteLength+s),a=new Uint8Array(f);a.set(this.view.subarray(i,this.buffer.byteLength),o),this.buffer=f,this.view=a,this.offset+=s,this.markedOffset>=0&&(this.markedOffset+=s),this.limit+=s,i+=s}else new Uint8Array(this.buffer);return this.view.set(t.view.subarray(t.offset,t.limit),i-o),t.offset=t.limit,n&&(this.offset-=o),this},r.prependTo=function(t,e){return t.prepend(this,e),this},r.printDebug=function(t){"function"!=typeof t&&(t=console.log.bind(console)),t(this.toString()+"\n-------------------------------------------------------------------\n"+this.toDebug(!0))},r.remaining=function(){return this.limit-this.offset},r.reset=function(){return this.markedOffset>=0?(this.offset=this.markedOffset,this.markedOffset=-1):this.offset=0,this},r.resize=function(t){if(!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal capacity: "+t+" (not an integer)");if((t|=0)<0)throw RangeError("Illegal capacity: 0 <= "+t)}if(this.buffer.byteLength>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal end: Not an integer");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+e+" <= "+this.buffer.byteLength)}return t===e?this:(Array.prototype.reverse.call(this.view.subarray(t,e)),this)},r.skip=function(t){if(!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal length: "+t+" (not an integer)");t|=0}var e=this.offset+t;if(!this.noAssert&&(e<0||e>this.buffer.byteLength))throw RangeError("Illegal length: 0 <= "+this.offset+" + "+t+" <= "+this.buffer.byteLength);return this.offset=e,this},r.slice=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal begin: Not an integer");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal end: Not an integer");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+e+" <= "+this.buffer.byteLength)}var r=this.clone();return r.offset=t,r.limit=e,r},r.toBuffer=function(t){var e=this.offset,r=this.limit;if(!this.noAssert){if("number"!=typeof e||e%1!=0)throw TypeError("Illegal offset: Not an integer");if(e>>>=0,"number"!=typeof r||r%1!=0)throw TypeError("Illegal limit: Not an integer");if(r>>>=0,e<0||e>r||r>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+e+" <= "+r+" <= "+this.buffer.byteLength)}if(!t&&0===e&&r===this.buffer.byteLength)return this.buffer;if(e===r)return i;var n=new ArrayBuffer(r-e);return new Uint8Array(n).set(new Uint8Array(this.buffer).subarray(e,r),0),n},r.toArrayBuffer=r.toBuffer,r.toString=function(t,e,r){if(void 0===t)return"ByteBufferAB(offset="+this.offset+",markedOffset="+this.markedOffset+",limit="+this.limit+",capacity="+this.capacity()+")";switch("number"==typeof t&&(r=e=t="utf8"),t){case"utf8":return this.toUTF8(e,r);case"base64":return this.toBase64(e,r);case"hex":return this.toHex(e,r);case"binary":return this.toBinary(e,r);case"debug":return this.toDebug();case"columns":return this.toColumns();default:throw Error("Unsupported encoding: "+t)}};var h=function(){for(var t={},e=[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47],r=[],i=0,n=e.length;i>2&63]),n=(3&i)<<4,null!==(i=t())?(r(e[63&((n|=i>>4&15)|i>>4&15)]),n=(15&i)<<2,null!==(i=t())?(r(e[63&(n|i>>6&3)]),r(e[63&i])):(r(e[63&n]),r(61))):(r(e[63&n]),r(61),r(61))},t.decode=function(t,e){var i,n,o;function s(t){throw Error("Illegal character code: "+t)}for(;null!==(i=t());)if(void 0===(n=r[i])&&s(i),null!==(i=t())&&(void 0===(o=r[i])&&s(i),e(n<<2>>>0|(48&o)>>4),null!==(i=t()))){if(void 0===(n=r[i])){if(61===i)break;s(i)}if(e((15&o)<<4>>>0|(60&n)>>2),null!==(i=t())){if(void 0===(o=r[i])){if(61===i)break;s(i)}e((3&n)<<6>>>0|o)}}},t.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)},t}();r.toBase64=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),e|=0,(t|=0)<0||e>this.capacity||t>e)throw RangeError("begin, end");var r;return h.encode(function(){return tthis.capacity()||t>e)throw RangeError("begin, end");if(t===e)return"";for(var r=[],i=[];t=1024&&(i.push(String.fromCharCode.apply(String,r)),r=[]);return i.join("")+String.fromCharCode.apply(String,r)},e.fromBinary=function(t,r){if("string"!=typeof t)throw TypeError("str");for(var i,n=0,o=t.length,s=new e(o,r);n255)throw RangeError("illegal char code: "+i);s.view[n++]=i}return s.limit=o,s},r.toDebug=function(t){for(var e,r=-1,i=this.buffer.byteLength,n="",o="",s="";r32&&e<127?String.fromCharCode(e):".")),++r,t&&r>0&&r%16==0&&r!==i){for(;n.length<51;)n+=" ";s+=n+o+"\n",n=o=""}r===this.offset&&r===this.limit?n+=r===this.markedOffset?"!":"|":r===this.offset?n+=r===this.markedOffset?"[":"<":r===this.limit?n+=r===this.markedOffset?"]":">":n+=r===this.markedOffset?"'":t||0!==r&&r!==i?" ":""}if(t&&" "!==n){for(;n.length<51;)n+=" ";s+=n+o+"\n"}return t?s:n},e.fromDebug=function(t,r,i){for(var n,o,s=t.length,f=new e((s+1)/3|0,r,i),a=0,h=0,u=!1,l=!1,c=!1,d=!1,p=!1;a":if(!i){if(d){p=!0;break}d=!0}f.limit=h,u=!1;break;case"'":if(!i){if(c){p=!0;break}c=!0}f.markedOffset=h,u=!1;break;case" ":u=!1;break;default:if(!i&&u){p=!0;break}if(o=parseInt(n+t.charAt(a++),16),!i&&(isNaN(o)||o<0||o>255))throw TypeError("Illegal str: Not a debug encoded string");f.view[h++]=o,u=!0}if(p)throw TypeError("Illegal str: Invalid symbol at "+a)}if(!i){if(!l||!d)throw TypeError("Illegal str: Missing offset or limit");if(h>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal end: Not an integer");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+e+" <= "+this.buffer.byteLength)}for(var r,i=new Array(e-t);t255))throw TypeError("Illegal str: Contains non-hex characters");s.view[a++]=n}return s.limit=a,s};var u=function(){var t={MAX_CODEPOINT:1114111,encodeUTF8:function(t,e){var r=null;for("number"==typeof t&&(r=t,t=function(){return null});null!==r||null!==(r=t());)r<128?e(127&r):r<2048?(e(r>>6&31|192),e(63&r|128)):r<65536?(e(r>>12&15|224),e(r>>6&63|128),e(63&r|128)):(e(r>>18&7|240),e(r>>12&63|128),e(r>>6&63|128),e(63&r|128)),r=null},decodeUTF8:function(t,e){for(var r,i,n,o,s=function(t){t=t.slice(0,t.indexOf(null));var e=Error(t.toString());throw e.name="TruncatedError",e.bytes=t,e};null!==(r=t());)if(0==(128&r))e(r);else if(192==(224&r))null===(i=t())&&s([r,i]),e((31&r)<<6|63&i);else if(224==(240&r))(null===(i=t())||null===(n=t()))&&s([r,i,n]),e((15&r)<<12|(63&i)<<6|63&n);else{if(240!=(248&r))throw RangeError("Illegal starting byte: "+r);(null===(i=t())||null===(n=t())||null===(o=t()))&&s([r,i,n,o]),e((7&r)<<18|(63&i)<<12|(63&n)<<6|63&o)}},UTF16toUTF8:function(t,e){for(var r,i=null;null!==(r=null!==i?i:t());)r>=55296&&r<=57343&&null!==(i=t())&&i>=56320&&i<=57343?(e(1024*(r-55296)+i-56320+65536),i=null):e(r);null!==i&&e(i)},UTF8toUTF16:function(t,e){var r=null;for("number"==typeof t&&(r=t,t=function(){return null});null!==r||null!==(r=t());)r<=65535?e(r):(e(55296+((r-=65536)>>10)),e(r%1024+56320)),r=null},encodeUTF16toUTF8:function(e,r){t.UTF16toUTF8(e,function(e){t.encodeUTF8(e,r)})},decodeUTF8toUTF16:function(e,r){t.decodeUTF8(e,function(e){t.UTF8toUTF16(e,r)})},calculateCodePoint:function(t){return t<128?1:t<2048?2:t<65536?3:4},calculateUTF8:function(t){for(var e,r=0;null!==(e=t());)r+=e<128?1:e<2048?2:e<65536?3:4;return r},calculateUTF16asUTF8:function(e){var r=0,i=0;return t.UTF16toUTF8(e,function(t){++r,i+=t<128?1:t<2048?2:t<65536?3:4}),[r,i]}};return t}();return r.toUTF8=function(t,e){if(void 0===t&&(t=this.offset),void 0===e&&(e=this.limit),!this.noAssert){if("number"!=typeof t||t%1!=0)throw TypeError("Illegal begin: Not an integer");if(t>>>=0,"number"!=typeof e||e%1!=0)throw TypeError("Illegal end: Not an integer");if(e>>>=0,t<0||t>e||e>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+t+" <= "+e+" <= "+this.buffer.byteLength)}var r;try{u.decodeUTF8toUTF16(function(){return t + * Released under the Apache License, Version 2.0 + * see: https://github.com/dcodeIO/long.js for details + */n=[],void 0===(o="function"==typeof(i=function(){"use strict";function t(t,e,r){this.low=0|t,this.high=0|e,this.unsigned=!!r}function e(t){return!0===(t&&t.__isLong__)}t.prototype.__isLong__,Object.defineProperty(t.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1}),t.isLong=e;var r={},i={};function n(t,e){var n,o,f;return e?(f=0<=(t>>>=0)&&t<256)&&(o=i[t])?o:(n=s(t,(0|t)<0?-1:0,!0),f&&(i[t]=n),n):(f=-128<=(t|=0)&&t<128)&&(o=r[t])?o:(n=s(t,t<0?-1:0,!1),f&&(r[t]=n),n)}function o(t,e){if(isNaN(t)||!isFinite(t))return e?g:p;if(e){if(t<0)return g;if(t>=l)return m}else{if(t<=-c)return _;if(t+1>=c)return w}return t<0?o(-t,e).neg():s(t%u|0,t/u|0,e)}function s(e,r,i){return new t(e,r,i)}t.fromInt=n,t.fromNumber=o,t.fromBits=s;var f=Math.pow;function a(t,e,r){if(0===t.length)throw Error("empty string");if("NaN"===t||"Infinity"===t||"+Infinity"===t||"-Infinity"===t)return p;if("number"==typeof e?(r=e,e=!1):e=!!e,(r=r||10)<2||360)throw Error("interior hyphen");if(0===i)return a(t.substring(1),e,r).neg();for(var n=o(f(r,8)),s=p,h=0;h>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*u+(this.low>>>0):this.high*u+(this.low>>>0)},E.toString=function(t){if((t=t||10)<2||36>>0).toString(t);if((s=h).isZero())return u+a;for(;u.length<6;)u="0"+u;a=""+u+a}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq(_)?64:this.neg().getNumBitsAbs();for(var t=0!=this.high?this.high:this.low,e=31;e>0&&0==(t&1<=0},E.isOdd=function(){return 1==(1&this.low)},E.isEven=function(){return 0==(1&this.low)},E.equals=function(t){return e(t)||(t=h(t)),(this.unsigned===t.unsigned||this.high>>>31!=1||t.high>>>31!=1)&&this.high===t.high&&this.low===t.low},E.eq=E.equals,E.notEquals=function(t){return!this.eq(t)},E.neq=E.notEquals,E.lessThan=function(t){return this.comp(t)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(t){return this.comp(t)<=0},E.lte=E.lessThanOrEqual,E.greaterThan=function(t){return this.comp(t)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(t){return this.comp(t)>=0},E.gte=E.greaterThanOrEqual,E.compare=function(t){if(e(t)||(t=h(t)),this.eq(t))return 0;var r=this.isNegative(),i=t.isNegative();return r&&!i?-1:!r&&i?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq(_)?_:this.not().add(y)},E.neg=E.negate,E.add=function(t){e(t)||(t=h(t));var r=this.high>>>16,i=65535&this.high,n=this.low>>>16,o=65535&this.low,f=t.high>>>16,a=65535&t.high,u=t.low>>>16,l=0,c=0,d=0,p=0;return d+=(p+=o+(65535&t.low))>>>16,c+=(d+=n+u)>>>16,l+=(c+=i+a)>>>16,l+=r+f,s((d&=65535)<<16|(p&=65535),(l&=65535)<<16|(c&=65535),this.unsigned)},E.subtract=function(t){return e(t)||(t=h(t)),this.add(t.neg())},E.sub=E.subtract,E.multiply=function(t){if(this.isZero())return p;if(e(t)||(t=h(t)),t.isZero())return p;if(this.eq(_))return t.isOdd()?_:p;if(t.eq(_))return this.isOdd()?_:p;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(d)&&t.lt(d))return o(this.toNumber()*t.toNumber(),this.unsigned);var r=this.high>>>16,i=65535&this.high,n=this.low>>>16,f=65535&this.low,a=t.high>>>16,u=65535&t.high,l=t.low>>>16,c=65535&t.low,g=0,y=0,v=0,b=0;return v+=(b+=f*c)>>>16,y+=(v+=n*c)>>>16,v&=65535,y+=(v+=f*l)>>>16,g+=(y+=i*c)>>>16,y&=65535,g+=(y+=n*l)>>>16,y&=65535,g+=(y+=f*u)>>>16,g+=r*c+i*l+n*u+f*a,s((v&=65535)<<16|(b&=65535),(g&=65535)<<16|(y&=65535),this.unsigned)},E.mul=E.multiply,E.divide=function(t){if(e(t)||(t=h(t)),t.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?g:p;var r,i,n;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return g;if(t.gt(this.shru(1)))return v;n=g}else{if(this.eq(_))return t.eq(y)||t.eq(b)?_:t.eq(_)?y:(r=this.shr(1).div(t).shl(1)).eq(p)?t.isNegative()?y:b:(i=this.sub(t.mul(r)),n=r.add(i.div(t)));if(t.eq(_))return this.unsigned?g:p;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();n=p}for(i=this;i.gte(t);){r=Math.max(1,Math.floor(i.toNumber()/t.toNumber()));for(var s=Math.ceil(Math.log(r)/Math.LN2),a=s<=48?1:f(2,s-48),u=o(r),l=u.mul(t);l.isNegative()||l.gt(i);)l=(u=o(r-=a,this.unsigned)).mul(t);u.isZero()&&(u=y),n=n.add(u),i=i.sub(l)}return n},E.div=E.divide,E.modulo=function(t){return e(t)||(t=h(t)),this.sub(this.div(t).mul(t))},E.mod=E.modulo,E.not=function(){return s(~this.low,~this.high,this.unsigned)},E.and=function(t){return e(t)||(t=h(t)),s(this.low&t.low,this.high&t.high,this.unsigned)},E.or=function(t){return e(t)||(t=h(t)),s(this.low|t.low,this.high|t.high,this.unsigned)},E.xor=function(t){return e(t)||(t=h(t)),s(this.low^t.low,this.high^t.high,this.unsigned)},E.shiftLeft=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?s(this.low<>>32-t,this.unsigned):s(0,this.low<>>t|this.high<<32-t,this.high>>t,this.unsigned):s(this.high>>t-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(t){if(e(t)&&(t=t.toInt()),0==(t&=63))return this;var r=this.high;return t<32?s(this.low>>>t|r<<32-t,r>>>t,this.unsigned):s(32===t?r:r>>>t-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?s(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:s(this.low,this.high,!0)},E.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var t=this.high,e=this.low;return[255&e,e>>>8&255,e>>>16&255,e>>>24&255,255&t,t>>>8&255,t>>>16&255,t>>>24&255]},E.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e]},t})?i.apply(e,n):i)||(t.exports=o)},function(t,e,r){var i=r(67),n=r(86),o=r(33);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv,e.createDecipher=e.Decipher=n.createDecipher,e.createDecipheriv=e.Decipheriv=n.createDecipheriv,e.listCiphers=e.getCiphers=function(){return Object.keys(o)}},function(t,e,r){var i=r(30),n=r(34),o=r(0).Buffer,s=r(40),f=r(6),a=r(17),h=r(41);function u(t,e,r){f.call(this),this._cache=new c,this._cipher=new a.AES(e),this._prev=o.from(r),this._mode=t,this._autopadding=!0}r(1)(u,f),u.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get();)r=this._mode.encrypt(this,e),i.push(r);return o.concat(i)};var l=o.alloc(16,16);function c(){this.cache=o.allocUnsafe(0)}function d(t,e,r){var f=i[t.toLowerCase()];if(!f)throw new TypeError("invalid suite type");if("string"==typeof e&&(e=o.from(e)),e.length!==f.key/8)throw new TypeError("invalid key length "+e.length);if("string"==typeof r&&(r=o.from(r)),"GCM"!==f.mode&&r.length!==f.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===f.type?new s(f.module,e,r):"auth"===f.type?new n(f.module,e,r):new u(f.module,e,r)}u.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if(!t.equals(l))throw this._cipher.scrub(),new Error("data not multiple of block length")},u.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},c.prototype.add=function(t){this.cache=o.concat([this.cache,t])},c.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},c.prototype.flush=function(){for(var t=16-this.cache.length,e=o.allocUnsafe(t),r=-1;++r>f%8,t._prev=o(t._prev,r?n:s);return a}function o(t,e){var r=t.length,n=-1,o=i.allocUnsafe(t.length);for(t=i.concat([t,i.from([e])]);++n>7;return o}e.encrypt=function(t,e,r){for(var o=e.length,s=i.allocUnsafe(o),f=-1;++f0?this.tail.next=e:this.head=e,this.tail=e,++this.length},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},t.prototype.concat=function(t){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var e=i.allocUnsafe(t>>>0),r=this.head,n=0;r;)o(r.data,e,n),n+=r.data.length,r=r.next;return e},t}(),n&&n.inspect&&n.inspect.custom&&(t.exports.prototype[n.inspect.custom]=function(){var t=n.inspect({length:this.length});return this.constructor.name+" "+t})},function(t,e){},function(t,e,r){(function(t){var i=void 0!==t&&t||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function o(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new o(n.call(setTimeout,i,arguments),clearTimeout)},e.setInterval=function(){return new o(n.call(setInterval,i,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(i,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},r(78),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,r(3))},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var i,n=1,o={},s=!1,f=t.document,a=Object.getPrototypeOf&&Object.getPrototypeOf(t);a=a&&a.setTimeout?a:t,"[object process]"==={}.toString.call(t.process)?i=function(t){e.nextTick(function(){u(t)})}:function(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?function(){var e="setImmediate$"+Math.random()+"$",r=function(r){r.source===t&&"string"==typeof r.data&&0===r.data.indexOf(e)&&u(+r.data.slice(e.length))};t.addEventListener?t.addEventListener("message",r,!1):t.attachEvent("onmessage",r),i=function(r){t.postMessage(e+r,"*")}}():t.MessageChannel?function(){var t=new MessageChannel;t.port1.onmessage=function(t){u(t.data)},i=function(e){t.port2.postMessage(e)}}():f&&"onreadystatechange"in f.createElement("script")?function(){var t=f.documentElement;i=function(e){var r=f.createElement("script");r.onreadystatechange=function(){u(e),r.onreadystatechange=null,t.removeChild(r),r=null},t.appendChild(r)}}():i=function(t){setTimeout(u,0,t)},a.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;r>>0,0),e.writeUInt32BE(t[1]>>>0,4),e.writeUInt32BE(t[2]>>>0,8),e.writeUInt32BE(t[3]>>>0,12),e}function s(t){this.h=t,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}s.prototype.ghash=function(t){for(var e=-1;++e0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,e&&(r[0]=r[0]^225<<24)}this.state=o(i)},s.prototype.update=function(t){var e;for(this.cache=i.concat([this.cache,t]);this.cache.length>=16;)e=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(e)},s.prototype.final=function(t,e){return this.cache.length&&this.ghash(i.concat([this.cache,n],16)),this.ghash(o([0,t,0,e])),this.state},t.exports=s},function(t,e,r){var i=r(34),n=r(0).Buffer,o=r(30),s=r(40),f=r(6),a=r(17),h=r(41);function u(t,e,r){f.call(this),this._cache=new l,this._last=void 0,this._cipher=new a.AES(e),this._prev=n.from(r),this._mode=t,this._autopadding=!0}function l(){this.cache=n.allocUnsafe(0)}function c(t,e,r){var f=o[t.toLowerCase()];if(!f)throw new TypeError("invalid suite type");if("string"==typeof r&&(r=n.from(r)),"GCM"!==f.mode&&r.length!==f.iv)throw new TypeError("invalid iv length "+r.length);if("string"==typeof e&&(e=n.from(e)),e.length!==f.key/8)throw new TypeError("invalid key length "+e.length);return"stream"===f.type?new s(f.module,e,r,!0):"auth"===f.type?new i(f.module,e,r,!0):new u(f.module,e,r)}r(1)(u,f),u.prototype._update=function(t){var e,r;this._cache.add(t);for(var i=[];e=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,e),i.push(r);return n.concat(i)},u.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return function(t){var e=t[15];if(e<1||e>16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache},e.createDecipher=function(t,e){var r=o[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=h(e,!1,r.key,r.iv);return c(t,i.key,i.iv)},e.createDecipheriv=c},function(t,e,r){(function(t,i){var n=/%[sdj%]/g;e.format=function(t){if(!v(t)){for(var e=[],r=0;r=o)return t;switch(t){case"%s":return String(i[r++]);case"%d":return Number(i[r++]);case"%j":try{return JSON.stringify(i[r++])}catch(t){return"[Circular]"}default:return t}}),a=i[r];r=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),p(r)?i.showHidden=r:r&&e._extend(i,r),b(i.showHidden)&&(i.showHidden=!1),b(i.depth)&&(i.depth=2),b(i.colors)&&(i.colors=!1),b(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),u(i,t,i.depth)}function a(t,e){var r=f.styles[e];return r?"["+f.colors[r][0]+"m"+t+"["+f.colors[r][1]+"m":t}function h(t,e){return t}function u(t,r,i){if(t.customInspect&&r&&T(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var n=r.inspect(i,t);return v(n)||(n=u(t,n,i)),n}var o=function(t,e){if(b(e))return t.stylize("undefined","undefined");if(v(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(y(e))return t.stylize(""+e,"number");if(p(e))return t.stylize(""+e,"boolean");if(g(e))return t.stylize("null","null")}(t,r);if(o)return o;var s=Object.keys(r),f=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(s);if(t.showHidden&&(s=Object.getOwnPropertyNames(r)),E(r)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return l(r);if(0===s.length){if(T(r)){var a=r.name?": "+r.name:"";return t.stylize("[Function"+a+"]","special")}if(w(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(_(r))return t.stylize(Date.prototype.toString.call(r),"date");if(E(r))return l(r)}var h,m="",S=!1,B=["{","}"];(d(r)&&(S=!0,B=["[","]"]),T(r))&&(m=" [Function"+(r.name?": "+r.name:"")+"]");return w(r)&&(m=" "+RegExp.prototype.toString.call(r)),_(r)&&(m=" "+Date.prototype.toUTCString.call(r)),E(r)&&(m=" "+l(r)),0!==s.length||S&&0!=r.length?i<0?w(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),h=S?function(t,e,r,i,n){for(var o=[],s=0,f=e.length;s=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(h,m,B)):B[0]+m+B[1]}function l(t){return"["+Error.prototype.toString.call(t)+"]"}function c(t,e,r,i,n,o){var s,f,a;if((a=Object.getOwnPropertyDescriptor(e,n)||{value:e[n]}).get?f=a.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):a.set&&(f=t.stylize("[Setter]","special")),A(i,n)||(s="["+n+"]"),f||(t.seen.indexOf(a.value)<0?(f=g(r)?u(t,a.value,null):u(t,a.value,r-1)).indexOf("\n")>-1&&(f=o?f.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+f.split("\n").map(function(t){return" "+t}).join("\n")):f=t.stylize("[Circular]","special")),b(s)){if(o&&n.match(/^\d+$/))return f;(s=JSON.stringify(""+n)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=t.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=t.stylize(s,"string"))}return s+": "+f}function d(t){return Array.isArray(t)}function p(t){return"boolean"==typeof t}function g(t){return null===t}function y(t){return"number"==typeof t}function v(t){return"string"==typeof t}function b(t){return void 0===t}function w(t){return m(t)&&"[object RegExp]"===S(t)}function m(t){return"object"==typeof t&&null!==t}function _(t){return m(t)&&"[object Date]"===S(t)}function E(t){return m(t)&&("[object Error]"===S(t)||t instanceof Error)}function T(t){return"function"==typeof t}function S(t){return Object.prototype.toString.call(t)}function B(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(b(o)&&(o=i.env.NODE_DEBUG||""),t=t.toUpperCase(),!s[t])if(new RegExp("\\b"+t+"\\b","i").test(o)){var r=i.pid;s[t]=function(){var i=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,i)}}else s[t]=function(){};return s[t]},e.inspect=f,f.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},f.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=d,e.isBoolean=p,e.isNull=g,e.isNullOrUndefined=function(t){return null==t},e.isNumber=y,e.isString=v,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=b,e.isRegExp=w,e.isObject=m,e.isDate=_,e.isError=E,e.isFunction=T,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(88);var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function A(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){console.log("%s - %s",function(){var t=new Date,e=[B(t.getHours()),B(t.getMinutes()),B(t.getSeconds())].join(":");return[t.getDate(),I[t.getMonth()],e].join(" ")}(),e.format.apply(e,arguments))},e.inherits=r(1),e._extend=function(t,e){if(!e||!m(e))return t;for(var r=Object.keys(e),i=r.length;i--;)t[r[i]]=e[r[i]];return t}}).call(this,r(3),r(9))},function(t,e){t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},function(t){t.exports={name:"bigi",version:"1.4.2",description:"Big integers.",keywords:["cryptography","math","bitcoin","arbitrary","precision","arithmetic","big","integer","int","number","biginteger","bigint","bignumber","decimal","float"],devDependencies:{coveralls:"^2.11.2",istanbul:"^0.3.5",jshint:"^2.5.1",mocha:"^2.1.0",mochify:"^2.1.0"},repository:{url:"https://github.com/cryptocoinjs/bigi",type:"git"},main:"./lib/index.js",scripts:{"browser-test":"./node_modules/.bin/mochify --wd -R spec",test:"./node_modules/.bin/_mocha -- test/*.js",jshint:"./node_modules/.bin/jshint --config jshint.json lib/*.js ; true",unit:"./node_modules/.bin/mocha",coverage:"./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",coveralls:"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"},dependencies:{},testling:{files:"test/*.js",harness:"mocha",browsers:["ie/9..latest","firefox/latest","chrome/latest","safari/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]}}},function(t,e,r){(function(t){var e=r(4),i=r(44);i.fromByteArrayUnsigned=function(t){return 128&t[0]?new i([0].concat(t)):new i(t)},i.prototype.toByteArrayUnsigned=function(){var t=this.toByteArray();return 0===t[0]?t.slice(1):t},i.fromDERInteger=function(t){return new i(t)},i.prototype.toDERInteger=i.prototype.toByteArray,i.fromBuffer=function(t){if(128&t[0]){var e=Array.prototype.slice.call(t);return new i([0].concat(e))}return new i(t)},i.fromHex=function(t){return""===t?i.ZERO:(e.equal(t,t.match(/^[A-Fa-f0-9]+/),"Invalid hex string"),e.equal(t.length%2,0,"Incomplete hex"),new i(t,16))},i.prototype.toBuffer=function(e){for(var r=this.toByteArrayUnsigned(),i=[],n=e-r.length;i.length>>27}function u(t){return t<<30|t>>>2}function l(t,e,r,i){return 0===t?e&r|~e&i:2===t?e&r|e&i|r&i:e^r^i}i(a,n),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(t){for(var e=this._w,r=0|this._a,i=0|this._b,n=0|this._c,o=0|this._d,f=0|this._e,a=0;a<16;++a)e[a]=t.readInt32BE(4*a);for(;a<80;++a)e[a]=e[a-3]^e[a-8]^e[a-14]^e[a-16];for(var c=0;c<80;++c){var d=~~(c/20),p=h(r)+l(d,i,n,o)+f+e[c]+s[d]|0;f=o,o=n,n=u(i),i=r,r=p}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=o+this._d|0,this._e=f+this._e|0},a.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=a},function(t,e,r){var i=r(1),n=r(10),o=r(0).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],f=new Array(80);function a(){this.init(),this._w=f,n.call(this,64,56)}function h(t){return t<<1|t>>>31}function u(t){return t<<5|t>>>27}function l(t){return t<<30|t>>>2}function c(t,e,r,i){return 0===t?e&r|~e&i:2===t?e&r|e&i|r&i:e^r^i}i(a,n),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(t){for(var e=this._w,r=0|this._a,i=0|this._b,n=0|this._c,o=0|this._d,f=0|this._e,a=0;a<16;++a)e[a]=t.readInt32BE(4*a);for(;a<80;++a)e[a]=h(e[a-3]^e[a-8]^e[a-14]^e[a-16]);for(var d=0;d<80;++d){var p=~~(d/20),g=u(r)+c(p,i,n,o)+f+e[d]+s[p]|0;f=o,o=n,n=l(i),i=r,r=g}this._a=r+this._a|0,this._b=i+this._b|0,this._c=n+this._c|0,this._d=o+this._d|0,this._e=f+this._e|0},a.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=a},function(t,e,r){var i=r(1),n=r(49),o=r(10),s=r(0).Buffer,f=new Array(64);function a(){this.init(),this._w=f,o.call(this,64,56)}i(a,n),a.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},a.prototype._hash=function(){var t=s.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=a},function(t,e,r){var i=r(1),n=r(50),o=r(10),s=r(0).Buffer,f=new Array(160);function a(){this.init(),this._w=f,o.call(this,128,112)}i(a,n),a.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},a.prototype._hash=function(){var t=s.allocUnsafe(48);function e(e,r,i){t.writeInt32BE(e,i),t.writeInt32BE(r,i+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=a},function(t,e,r){"use strict";var i=r(1),n=r(98),o=r(6),s=r(0).Buffer,f=r(99),a=r(47),h=r(48),u=s.alloc(128);function l(t,e){o.call(this,"digest"),"string"==typeof e&&(e=s.from(e));var r="sha512"===t||"sha384"===t?128:64;(this._alg=t,this._key=e,e.length>r)?e=("rmd160"===t?new a:h(t)).update(e).digest():e.lengthf?e=t(e):e.length>=8;for(;h>0;)o.push(255&h),h>>=8}for(var u=0;t[u]===n&&u0;)i.push(f%r),f=f/r|0}for(var a="",h=0;0===e[h]&&h=0;--u)a+=t[i[u]];return a},decodeUnsafe:f,decode:function(t){var e=f(t);if(e)return e;throw new Error("Non-base"+r+" character")}}}},function(t,e,r){"use strict";t.exports=function(t){return function(){for(var e=arguments.length,r=Array(e),i=0;i=0||!a(d);)l=n.HmacSHA256(e.concat([c,new e([0])]),l),c=n.HmacSHA256(c,l),c=n.HmacSHA256(c,l),d=s.fromBuffer(c);return d}function h(t,e,r,i){var n=t.n,o=t.G,s=r.r,f=r.s;if(s.signum()<=0||s.compareTo(n)>=0)return!1;if(f.signum()<=0||f.compareTo(n)>=0)return!1;var a=f.modInverse(n),h=e.multiply(a).mod(n),u=s.multiply(a).mod(n),l=o.multiplyTwo(h,i,u);return!t.isInfinity(l)&&l.affineX.mod(n).equals(s)}function u(t,e,r,n){i.strictEqual(3&n,n,"Recovery param is more than two bits");var o=t.n,s=t.G,f=r.r,a=r.s;i(f.signum()>0&&f.compareTo(o)<0,"Invalid r value"),i(a.signum()>0&&a.compareTo(o)<0,"Invalid s value");var h=1&n,u=n>>1?f.add(o):f,l=t.pointFromX(h,u),c=l.multiply(o);i(t.isInfinity(c),"nR is not a valid curve point");var d=e.negate().mod(o),p=f.modInverse(o),g=l.multiplyTwo(a,s,d).multiply(p);return t.validate(g),g}t.exports={calcPubKeyRecoveryParam:function(t,e,r,i){for(var n=0;n<4;n++)if(u(t,e,r,n).equals(i))return n;throw new Error("Unable to find valid recovery factor")},deterministicGenerateK:a,recoverPubKey:u,sign:function(t,e,r,i){var n,o,h=s.fromBuffer(e),u=t.n,l=t.G,c=(a(t,e,r,function(e){var i=l.multiply(e);return!t.isInfinity(i)&&0!==(n=i.affineX.mod(u)).signum()&&0!==(o=e.modInverse(u).multiply(h.add(r.multiply(n))).mod(u)).signum()},i),u.shiftRight(1));return o.compareTo(c)>0&&(o=u.subtract(o)),f(n,o)},verify:function(t,e,r,i){return h(t,s.fromBuffer(e),r,i)},verifyRaw:h}}).call(this,r(2).Buffer)},function(t,e,r){"use strict";(function(e){var i=r(4),n=r(52),o=r(5);function s(t,r){function i(){var i=t.toDERInteger(),n=r.toDERInteger(),o=[];return o.push(2,i.length),(o=o.concat(i)).push(2,n.length),(o=o.concat(n)).unshift(48,o.length),new e(o)}return n(o,t),n(o,r),{r:t,s:r,toCompact:function(i,n){n&&(i+=4),i+=27;var o=new e(65);return o.writeUInt8(i,0),t.toBuffer(32).copy(o,1),r.toBuffer(32).copy(o,33),o},toDER:i,toScriptSignature:function(t){var r=new e(1);return r.writeUInt8(t,0),e.concat([i(),r])}}}s.parseCompact=function(t){i.equal(t.length,65,"Invalid signature length");var e=t.readUInt8(0)-27;return i.equal(e,7&e,"Invalid signature parameter"),{compressed:!!(4&e),i:e&=3,signature:s(o.fromBuffer(t.slice(1,33)),o.fromBuffer(t.slice(33)))}},s.fromDER=function(t){i.equal(t.readUInt8(0),48,"Not a DER sequence"),i.equal(t.readUInt8(1),t.length-2,"Invalid sequence length"),i.equal(t.readUInt8(2),2,"Expected a DER integer");var e=t.readUInt8(3);i(e>0,"R length is zero");var r=4+e;i.equal(t.readUInt8(r),2,"Expected a DER integer (2)");var n=t.readUInt8(r+1);i(n>0,"S length is zero");var f=t.slice(4,r),a=t.slice(r+2);r+=2+n,e>1&&0===f.readUInt8(0)&&i(128&f.readUInt8(1),"R value excessively padded"),n>1&&0===a.readUInt8(0)&&i(128&a.readUInt8(1),"S value excessively padded"),i.equal(r,t.length,"Invalid DER encoding");var h=o.fromDERInteger(f),u=o.fromDERInteger(a);return i(h.signum()>=0,"R value is negative"),i(u.signum()>=0,"S value is negative"),s(h,u)},s.parseScriptSignature=function(t){var e=t.readUInt8(t.length-1),r=-129&e;return i(r>0&&r<4,"Invalid hashType"),{signature:s.fromDER(t.slice(0,-1)),hashType:e}},t.exports=s}).call(this,r(2).Buffer)},function(t,e,r){"use strict";var i=r(28),n=r(19),o=r(15),s=r(51),f=r(16);t.exports={Aes:i,PrivateKey:n,PublicKey:o,Signature:s,key_utils:f}}]); \ No newline at end of file diff --git a/mock-sites/cyberway/index.html b/mock-sites/cyberway/index.html new file mode 100644 index 00000000..bad940e6 --- /dev/null +++ b/mock-sites/cyberway/index.html @@ -0,0 +1,279 @@ + + + + + Web Tester + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/packages/core/dist/models/Blockchains.js b/packages/core/dist/models/Blockchains.js index f9691acb..49f50f15 100644 --- a/packages/core/dist/models/Blockchains.js +++ b/packages/core/dist/models/Blockchains.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BlockchainsArray=exports.Blockchains=void 0;var Blockchains={EOS:"eos",ETH:"eth",TRX:"trx"};exports.Blockchains=Blockchains;var BlockchainsArray=Object.keys(Blockchains).map(function(a){return{key:a,value:Blockchains[a]}});exports.BlockchainsArray=BlockchainsArray; \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BlockchainsArray=exports.Blockchains=void 0;var Blockchains={EOS:"eos",ETH:"eth",TRX:"trx",CYBER:"cyber"};exports.Blockchains=Blockchains;var BlockchainsArray=Object.keys(Blockchains).map(function(a){return{key:a,value:Blockchains[a]}});exports.BlockchainsArray=BlockchainsArray; \ No newline at end of file diff --git a/packages/core/src/models/Blockchains.js b/packages/core/src/models/Blockchains.js index 4447dd3b..1cd8ee09 100644 --- a/packages/core/src/models/Blockchains.js +++ b/packages/core/src/models/Blockchains.js @@ -2,7 +2,8 @@ export const Blockchains = { EOS:'eos', ETH:'eth', - TRX:'trx' + TRX:'trx', + CYBER:'cyber', }; export const BlockchainsArray = diff --git a/packages/plugin-cyberway/README.md b/packages/plugin-cyberway/README.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/plugin-cyberway/package.json b/packages/plugin-cyberway/package.json new file mode 100644 index 00000000..53d2fa06 --- /dev/null +++ b/packages/plugin-cyberway/package.json @@ -0,0 +1,16 @@ +{ + "name": "@scatterjs/cyberway", + "version": "1.0.0", + "main": "dist/index.js", + "license": "MIT", + "gitHead": "dadb46787c05b190765b3a112b85d9d26c451c08", + "publishConfig": { + "access": "public" + }, + "files": [ + "dist" + ], + "dependencies": { + "@scatterjs/core": "^2.7.53" + } +} diff --git a/packages/plugin-cyberway/src/index.js b/packages/plugin-cyberway/src/index.js new file mode 100644 index 00000000..ef3d87f5 --- /dev/null +++ b/packages/plugin-cyberway/src/index.js @@ -0,0 +1,148 @@ +import { + Plugin, + PluginTypes, + Blockchains, + Network, + SocketService +} from '@scatterjs/core'; + +let socketService = SocketService; +const proxy = (dummy, handler) => new Proxy(dummy, handler); + +export default class ScatterCyberWay extends Plugin { + + constructor(){ + super(Blockchains.CYBER, PluginTypes.BLOCKCHAIN_SUPPORT); + } + + setSocketService(_s){ + socketService = _s; + } + + hookProvider(network, fieldsFetcher = null){ + network = Network.fromJson(network); + + return { + requiredFields:{}, + getAvailableKeys:async () => { + return await socketService.sendApiRequest({ + type:'identityFromPermissions', + payload:{} + }).then(id => { + if(!id) return []; + return id.accounts.filter(x => x.blockchain === Blockchains.CYBER).map(x => x.publicKey) + }); + }, + + sign:async (signargs) => { + const requiredFields = fieldsFetcher ? fieldsFetcher() : {}; + signargs.serializedTransaction = Buffer.from(signargs.serializedTransaction).toString('hex'); + + return new Promise(async (resolve, reject) => { + socketService.sendApiRequest({ + type:'requestSignature', + payload:{ transaction:signargs, blockchain:Blockchains.CYBER, network, requiredFields } + }).then(x => { + resolve({ + signatures:x.signatures, + serializedTransaction:Buffer.from(signargs.serializedTransaction, 'hex') + }) + }).catch(reject) + }) + } + } + } + + multiHook(network, signers){ + const scatterSigner = this.cyberHook(network); + if(!Array.isArray(signers)) signers = [signers]; + + return { + getAvailableKeys:async () => { + try { + const scatterKeys = await scatterSigner.getAvailableKeys(); + let otherKeys = []; + await Promise.all(signers.map(async signer => { + await signer.getAvailableKeys().then(keys => { + keys.map(key => otherKeys.push(key)); + }); + return true; + })); + return scatterKeys.concat(otherKeys) + } catch(e){ + throw new Error(e); + } + }, + + sign:async (signargs) => { + try { + const serializedTransaction = Buffer.from(signargs.serializedTransaction, 'hex'); + + const individualSignArgs = async provider => ({ + abis: signargs.abis, + chainId: network.chainId, + requiredKeys: await provider.getAvailableKeys(), + serializedTransaction + }); + + const pullOutSignatures = result => { + if(typeof result === 'object' && result.hasOwnProperty('signatures')) return result.signatures; + return result; + }; + + const scatterSigs = await scatterSigner + .sign(await individualSignArgs(scatterSigner)) + .then(pullOutSignatures); + + let otherSigs = []; + await Promise.all(signers.map(async signer => { + await signer.sign(await individualSignArgs(signer)).then(result => { + pullOutSignatures(result).map(sig => otherSigs.push(sig)); + }); + return true; + })); + + return { + signatures: scatterSigs.concat(otherSigs), + serializedTransaction + } + } catch(e){ + throw new Error(e); + } + } + } + } + + signatureProvider(...args){ + // const throwIfNoIdentity = args[0]; + + // Protocol will be deprecated. + return (network, _api, _options = {}) => { + network = Network.fromJson(network); + + let requiredFields = {}; + const fieldsFetcher = () => requiredFields; + const signatureProvider = this.hookProvider(network, fieldsFetcher); + + // The proxy stands between the cyberwayjs object and scatter. + // This is used to add special functionality like adding `requiredFields` arrays to transactions + return proxy(new _api(Object.assign(_options, {signatureProvider})), { + get(cwInstance, method) { + return (...args) => { + if(typeof cwInstance[method] === 'undefined'){ + throw new Error(`${method} does not exist on the cyberwayjs.Api() object.`) + } + const rqf = args.find(arg => arg.hasOwnProperty('requiredFields')); + requiredFields = rqf ? rqf.requiredFields : {}; + return cwInstance[method](...args) + } + } + }); // Proxy + + } + } +} + +if(typeof window !== 'undefined') { + window.ScatterCyberWay = ScatterCyberWay; +} diff --git a/webpack.config.js b/webpack.config.js index 398b7549..6f362eb5 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,6 +13,7 @@ const packageFiles = [ 'plugin-web3', 'plugin-tron', 'plugin-lynx', + 'plugin-cyberway', ]; const entry = packageFiles.reduce((o, file) => Object.assign(o, {[`${file}.min.js`]: getPackagePath(file)}), {});